内部和外部DTD子集,每个子​​集都在其自己的XML命名空间中

时间:2013-12-01 17:43:02

标签: xml xml-namespaces

一位旧的C ++程序员,但不熟悉XML,我希望在现有的SVG DVD上对我自己的内部定义的DTD进行分层。不知道更好,我会这样做:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
  xmlns="http://www.w3.org/2000/svg"
  xmlns:svg="http://www.w3.org/2000/svg"
  xmlns:foo=[ <!-- My DTD here. --> ]>
    <!-- Mixed SVG and FOO markup here. -->
</svg>

即使我可以看到我的方法很幼稚,我也没想到它会起作用,但是花在阅读W3C's XML和XMLNS建议上的时间并没有教我正确的方法。你能吗?

1 个答案:

答案 0 :(得分:3)

DTD在早期和早期的SGML中很好地提供了XML,但是不建议尝试将XML的现代模式要求(特别是涉及相对较新的命名空间)强加于DTD中。

在XML的演变中,XSD和RelaxNG在表达XML词汇和语法约束方面会更好,特别是在涉及名称空间的情况下。

我建议您使用RelaxNG或XSD来满足命名空间的XML架构需求。

[个人意见:RelaxNG更优雅。 XSD使用得更广泛。我最终只是在内部使用RelaxNG,或者当我确定我的团队与我一起欣赏RelaxNG时。在政治上,XSD是W3C支持的一个更安全的赌注。许多团体将选择XSD,但避免使用更深奥的元素。]