一位旧的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建议上的时间并没有教我正确的方法。你能吗?
答案 0 :(得分:3)
DTD在早期和早期的SGML中很好地提供了XML,但是不建议尝试将XML的现代模式要求(特别是涉及相对较新的命名空间)强加于DTD中。
在XML的演变中,XSD和RelaxNG在表达XML词汇和语法约束方面会更好,特别是在涉及名称空间的情况下。
我建议您使用RelaxNG或XSD来满足命名空间的XML架构需求。
[个人意见:RelaxNG更优雅。 XSD使用得更广泛。我最终只是在内部使用RelaxNG,或者当我确定我的团队与我一起欣赏RelaxNG时。在政治上,XSD是W3C支持的一个更安全的赌注。许多团体将选择XSD,但避免使用更深奥的元素。]