加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:48:45 所属栏目:百科 来源:网络整理
导读:我生成如下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命名空
我生成如下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的快速响应证明了这一点(这会导致其他警告我).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读