任何一种技术都会出现一些争议,XML也不例外,尤其当人们谈到与它相关的两种技术文档对象模型(DTD)和Schema时,更是如此。这两种技术有着相似的功能,但是人们总是喋喋不休的争论着应该使用哪一种更好些。好了,现在让我们来详细的讨论他们,看看它们到底都有什么优点和缺点。
从本质上讲,DTD和Schema有着同样的目的:帮助XML开发人员描述在他们的XML文档中的结构和数据。如果不使用DTD和Schema,要想判断一个XML文档中的元素是否符合某个特定的结构和数据类型是很困难的。
DTD和Schema都提供给XML分析器关于XML文档结构的信息,当XML分析器分析一个XML文档时,它能利用这些信息来判断该文档是否合法。例如,DTD和Schema告之<City>元素能否在出现在<Address>元素中,应该出现多少次,它的数据类型是什么等,XML分析器就可以利用这些信息进行文档合法性验证了。
DTD比XML出现得早些,用来描述文档的类型。当XML被定义为一种规范时,人们觉得有必要用一些方法来保证XML文档的合法性,所以DTD被提上议程,通过比较一个XML文档和它对应的DTD就可以判断该文档是否合法了。
优点
DTD的主要优点是它能告诉XML分析器该如何去验证XML文档,文档中各个元素之间有何关系。除此以外,它还能描述了元素之间的嵌套关系,子元素应该在它的父元素中出现多少次,大概性的定义各元素的数据类型。
由于XML从其发布之日就利用DTD来验证文档的合法性,所以事实上它是一种描述XML文档的标准协议。几乎所有的XML文档都能用DTD来进行验证。
缺点
从DTD的用途来看,它并不是专门为XML领域设计的。很多开发者所关心的主要问题是DTD没有严格的类型定义和好的类型检查能力。同时,DTD的格式也比较古怪和老式化,它对描述文档中元素的嵌套关系的能力很有限。
更多关于XML的文章
《利用XML配置文档动态的创建DataSet对象》讲解如何使用Singleton工厂模式来构造DataSet对象和利用XML配置文档来动态的创建DataSet对象。
《XML基本语法》保证XML文档中的内容的一致性是很重要的,但做到这点并不容易。文中的例子告诉你如何为XML文档创建文档类型定义(DTD)。