根据 DTD 使用自定义命名空间验证 SVG
Validate SVG with custom namespace against 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
的元素。我的声明有误吗?使用自定义 namespaces/attributes 时甚至可以针对 DTD 进行验证吗?
假设您要根据 SVG 1.1 第 2 版进行验证。 DTD 的官方 URL 如下所示,您可以通过重新定义 ("preempting") 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
的替换文本。根据您的目的,customize/overwrite 可能有更合适的参数实体,例如 SVG.Core.extra.attrib
.
请注意文档,当 运行 到 xmllint --valid --loaddtd
时,会在我的 Ubuntu 机器上产生不相关的警告,其中 SVG DTD 被本地缓存,xmllint
'与通过 http 获取 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
的元素。我的声明有误吗?使用自定义 namespaces/attributes 时甚至可以针对 DTD 进行验证吗?
假设您要根据 SVG 1.1 第 2 版进行验证。 DTD 的官方 URL 如下所示,您可以通过重新定义 ("preempting") 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
的替换文本。根据您的目的,customize/overwrite 可能有更合适的参数实体,例如 SVG.Core.extra.attrib
.
请注意文档,当 运行 到 xmllint --valid --loaddtd
时,会在我的 Ubuntu 机器上产生不相关的警告,其中 SVG DTD 被本地缓存,xmllint
'与通过 http 获取 DTD(这会给我带来其他警告)相比,它的响应速度更快。