内部和外部DTD子集,每个都在其自己的XML命名空间中 一个旧的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>

内部和外部DTD子集,每个都在其自己的XML命名空间中 一个旧的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>,xml,xml-namespaces,Xml,Xml Namespaces,即使是我也能看出我的方法是幼稚的,我也不认为它会起作用,但花在阅读XML和XMLNS建议上的时间并没有教会我正确的方法。您可以吗?DTD在早期很好地服务于XML,而SGML在早期很好地服务于XML,但是不建议尝试将XML的现代模式需求(特别是涉及相对较新的名称空间)硬塞进DTD中 XSD和RelaxNG在XML发展的这一点上更适合表达XML词汇表和语法约束,特别是在涉及名称空间的情况下 我建议您使用RelaxNG或XSD满足您的名称空间XML模式需求。 [个人观点:RelaxNG更优雅。XSD的

即使是我也能看出我的方法是幼稚的,我也不认为它会起作用,但花在阅读XML和XMLNS建议上的时间并没有教会我正确的方法。您可以吗?

DTD在早期很好地服务于XML,而SGML在早期很好地服务于XML,但是不建议尝试将XML的现代模式需求(特别是涉及相对较新的名称空间)硬塞进DTD中

XSD和RelaxNG在XML发展的这一点上更适合表达XML词汇表和语法约束,特别是在涉及名称空间的情况下

我建议您使用RelaxNG或XSD满足您的名称空间XML模式需求。


[个人观点:RelaxNG更优雅。XSD的应用更广泛。我只会在内部使用RelaxNG,或者当我确信我的团队支持我欣赏RelaxNG时才使用。从政治上讲,有W3C支持,XSD是一种更安全的赌注。许多团队会选择XSD,但会避免其更深奥的元素。]

名称空间实际上并不定义模式或DTD,它们只是标识文档是单独定义的格式的混合体;命名空间只是用作全局标识符的任意URI。事实上,根据我的经验,很少有XML格式有DTD,通常使用XSD或RelaxNG格式的模式定义。如果您需要使用DTD对生成的文件进行验证,那么我不确定它是如何工作的。我同意@IMSoP。你真的应该使用XSD或RelaxNG而不是DTD,特别是如果你使用的是名称空间,它只能通过非自然的扭曲来使用DTD。我明白了。我必须学习XSD或RelaxNG,这两个我都不知道。这确实可以解释为什么我在为DTD提供名称空间时遇到了如此大的困难。放松更优雅;XSD,使用更广泛。在XML发展的这一点上,两者都比DTD好,特别是在涉及名称空间的情况下。@kjhughes:如果您将您的评论作为答案发布,我自然会很高兴对其进行投票。关于RelaxNG或XSD的选择,有一些工具可以自动将其中一个转换为另一个,因此,可以使用RelaxNG进行创作,但仍然可以为那些希望验证它的人发布XSD。