如何在DTD和XSD之间进行select

我想要使​​用DTD或XSD来描述我的XML文档。 我读过XSD比DTD更好,因为它们支持命名空间和数据types,而且DTD比较老。

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

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

学习DTD作为一个单独的练习可能很重要,只是为了知道如何在别处遇到它们时如何工作,以便您能够欣赏XSD试图解决的一些问题。

但是,对于描述XML文档的当前目的,实际上应该坚持使用XSD。

除了具有更丰富的function集(就像您提到的,包括数据types和名称空间),它们本身也是XML文档,这可能非常有用。 因为它们是XML,所以可以更容易地检查它们的格式和有效性,并且可以像编写常规的XML文件一样编写与它们一起工作的代码(例如,如果要从模式中自动生成代码类)

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

如果你需要像命名空间和数据types的东西,绝对要用XSD。 如果你只是需要一个快速的模式来检查,DTD会给你更快的性能,因为没有涉及XMLparsing。

据我了解,XSD是从DTD派生的,所以理解DTD将为学习XSD提供坚实的基础,并指出DTD的一些缺点。

理解一个DTD的结构(这将帮助你更好地理解一个XSD),但是你应该使用向前移动的XSD。

学习DTD没有什么坏处,但一定要用XSD,因为XSD比较有实力,

使用XSD,您不仅可以validationXML标签的结构/层次结构,

  1. 您可以定义节点值的数据types。 [date,数字,string等]
  2. 你也可以定义自定义的data_types,[例如,对于节点,可能的数据可以是12个月中的一个..所以你需要定义一个新的数据types的所有12个月的所有12个月名称作为枚举值..如果inputXML包含除这12个值之外的任何其他值,validation将显示错误..]
  3. 你可以在元素的出现上加上限制,使用minOccurs和maxOccurs,默认值是1和1。

.. 还有很多 …

有一些限制:像,

  1. XSD文件中定义的元素(名称)必须仅使用一种数据types定义。
  2. 您无法使用其他节点/属性的值validation节点/属性。

有一个恕我直言,非常重要的问题,使用DTD(如果您需要深入validation可能与XSD一起):

在DTD中,您可以定义自己的实体,例如:

<!ENTITY MyName "DrDr.Hannibal Xerxes Utah,MBA and CEO"> 

在你的文档中,你可以在需要的地方简单的编码和MyName; 而是input所有这些东西。

此外,假设您有一个类似XML的文件(可能由其他应用程序生成),其中包含许多类似的标记,但没有根标记,例如:

 <?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' --> <Book Author="Author1"> <Titel>Erstes Buch</Titel> </Book> ... <Book Author="Author5"> <Titel>Fünftes Buch</Titel> </Book> 

假设这个文件被命名为“Booklist.TXT”,

现在你可以编写你的master-xml了:

 <?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' --> <DOCTYPE MyRoot [ <ENTITY AllBooks SYSTEM "Booklist.TXT"> ] <MyRoot> ... some prefix-stuff as needed ... &AllBooks; <!-- here are all the Books --> ... some post stuff es needed ... </MyBook> 

并且只要您需要另一个环境中的书籍,您只需编码周围的xml,而不要触摸或复制书本本身,而且您可以将其维护在一个地方,并在任何文档中进行全部更改。

这是一个旧的string,但是如果有其他人遇到它…从我可以告诉DTD仍然有两个好处,即XSD没有,即包含在XSD中不存在的ENTITY函数。 这是一个非常棒的function,告诉编译器如何处理可能不熟悉的文件types,方法是确定打开哪些程序来处理它们。

此外,DTD被写入XML规范,以便它们可以直接写入XML文档,而XSD必须作为外部文件存在并连接。 没有什么大不了的,尤其是在使用大文件的时候。

我觉得XSD还是更好,更自然,因为它使用XML语法,只是想扮演恶魔的主张:)

XML Schema可以执行更复杂的validation。 例如,如果DTD检查XML元素的数据types是整数还是string,则XML模式可以执行更复杂的validation,如xml元素是以大写字母还是正整数开头的string。 最后,XML模式使用XML语法,是Web服务开发的自然select。