如何在DTD和XSD之间进行选择

ajs*_*sie 49 xml xsd dtd

我想使用DTD或XSD来描述我的XML文档.我已经读过XSD比DTD更好,因为它们支持命名空间和数据类型,并且DTD更老.

这是否意味着我应该只将XSD用于未来的所有需求并完全忽略DTD作为选项?我是否应该费心学习DTD的结构?

在XSD和DTD之间进行选择时,我应该考虑哪些因素?

Mik*_*ney 46

学习DTD作为一项单独的练习可能很重要,只是为了了解它们在其他地方遇到它们时的工作原理,以便您可以欣赏XSD试图解决的一些问题.

但是,对于您当前描述XML文档的目的,确实坚持使用XSD.

除了拥有更丰富的功能集(就像你提到的那样,包括数据类型和名称空间),它们本身也是XML文档,它们非常有用.因为它们是XML,所以您可以更轻松地检查它们的格式和有效性,并且您可以编写与常规XML文件一样的代码(例如,如果您想从模式自动生成代码类)

  • 我的意思是XSD本身是一个有效的XML文档,因此您可以在XmlDocument或其他任何内容中打开它并解析信息.DTD不是有效的XML,因此如果要编写读取DTD内容的代码(如构建XML类的代码生成器),则需要自己解析该格式.我确信有用于读取DTD文件的组件/实用程序,但XSD可以免费提供(相对)易于解析的XML. (2认同)
  • @monoJohnny - 你对XSD架构文档有一个DTD是完全正确的,但是说模式文档的验证必然依赖于DTD是不对的.架构文档还有一个XSD架构.DTD部分用于引导(当XSD的初始草案出来时,DTD已被广泛支持),部分用于比较目的(以帮助DTD精明的读者理解模式文档的模式). (2认同)

Bra*_*ant 8

这实际上取决于您需要设置的结构有多复杂.

如果你需要命名空间和数据类型之类的东西,一定要使用XSD.如果您只需要一个快速的小模式来检查,DTD将为您提供更快的性能,因为不涉及XML解析.

据我了解,XSD源自DTD,因此理解DTD将为学习XSD奠定坚实的基础,并指出DTD的一些缺点.


Jus*_*ner 6

理解DTD的结构并没有什么坏处(从长远来看它会帮助你更好地理解XSD)......但你应该使用XSD向前发展.


Inf*_*nd' 5

学习DTD没有坏处,但一定要使用XSD,因为XSD有更强的力量,

使用XSD,您不仅可以验证XML标记的结构/层次结构,还可以

  1. 您可以定义节点值的数据类型.[日期,数字,字符串等]
  2. 您还可以定义自定义data_types,[例如,对于节点,可能的数据可以是12个月之一..因此您需要在新数据类型中定义所有12个月,将所有12个月的名称写为枚举值.如果输入XML包含除这12个值之外的任何其他值,则验证显示错误.]
  3. 您可以使用minOccurs和maxOccurs限制元素的出现,默认值为1和1.

.. 还有很多 ...

有一些限制:像,

  1. 必须使用一种数据类型定义XSD文件中定义的元素(名称).
  2. 您无法使用另一个节点/属性的值验证节点/属性.