gpt4 book ai didi

xml - 根据 DTD 使用自定义命名空间验证 SVG

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:48 26 4
gpt4 key购买 nike

我生成的 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 第 2 版进行验证。 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 被本地缓存,如 xmllint 所证明> 与通过 http 获取 DTD 相比,它的响应速度更快(这会给我带来其他警告)。

关于xml - 根据 DTD 使用自定义命名空间验证 SVG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52095894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com