当前位置 : 主页 > 网页制作 > xml >

xml – 使用针对DTD的自定义命名空间验证SVG

来源:互联网 收集:自由互联 发布时间:2021-06-13
我生成如下SVG svg xmlns="http://www.w3.org/2000/svg" xmlns:foobar="http://foobar.com"path d="..." foobar:foo="bar"//svg 如果没有自定义属性foo(以及命名空间foobar),整个SVG将对DTD进行验证.显然,我使用自定义命名
我生成如下SVG

<svg xmlns="http://www.w3.org/2000/svg" xmlns:foobar="http://foobar.com">
<path d="..." foobar:foo="bar"/>
</svg>

如果没有自定义属性foo(以及命名空间foobar),整个SVG将对DTD进行验证.显然,我使用自定义命名空间是错误的,因为添加foobar命名空间和相关属性会导致xmllint失败验证,从xmlns:foobar = …的声明开始,它本身不是svg的元素.我的声明有误吗?甚至可以在使用自定义命名空间/属性时验证DTD吗?

假设您正在验证SVG 1.1第二版. DTD在其官方URL下面显示,您可以通过重新定义(“抢占”)SVG.External.attrib参数实体的默认空字符串值来使用SVG DTD的广泛自定义功能,使其包含属性列表自定义属性的声明片段(加上xmlns:foobar声明):

<!DOCTYPE svg
  SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
  <!ENTITY % SVG.External.attrib
    "xmlns:foobar CDATA #IMPLIED
     foobar:foo CDATA #IMPLIED">
]>
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:foobar="http://foobar.com">
  <path d="M 0 0 z" foobar:foo="bar"/>
</svg>

SVG DTD最终在SVG元素的单个声明中扩展SVG.External.attrib的替换文本.根据您的目的,可能有更合适的参数实体来自定义/覆盖,例如SVG.Core.extra.attrib.

请注意,当通过xmllint –valid –loaddtd运行时,该文档会在我的Ubuntu机器上生成无关警告,其中SVG DTD在本地缓存,与通过http获取DTD相比,xmllint的快速响应证明了这一点(这会导致其他警告我).

网友评论