本质上来说,DTDs和schemas的作用是一样的。它们各自使用不同的方法来帮助XML的开发者描述XML文档的结构和数据。如果没有它们,那么在遇到某一结构或数据类型标准时,你就很难判断XML文档的有效性。
DTDs和schemas提供了XML解析器,描述了XML文档的结构。例如,<City>元素是否可以嵌套在<Address>元素内;解析器期待在<Address>元素中有多少个<City>元素;以及元素内的数据类型。
DTDs描述你正在处理的文档类型,比XML稍为长一点。当你使用XML来描述的时候,需要注意些概念以防出错。其中一个问题是校验,这个过程用于比较XML文档和它的DTD。
正面观点DTD的主要优点是提供校验解析器,该解析器是用来检验XML文档的一个映射。该映射描述了在文档中元素如何与其他元素相关联。它描述了元素如何互相嵌套,以及可嵌套的次数。同时,它也松散地定义了数据类型。
同时,DTDs是跟XML一起出现的,他们已成为描述XML文档的事实上的标准。
反面观点尽管DTDs很有用,但是它们并非专为处理XML域而设计。对于开发者而言,DTDs的主要缺点是类型检查的功能比较差。同时,DTDs的创建格式奇怪且古老。DTDs在描述文档结构上能力有限,比如元素可以嵌套的个数。
schemas针对DTDs的弱点应运而生,且跟XML要实现的目标更为紧密。几乎自XML诞生以来,就有许多呼声要求扩展DTDs,且给出了其他解决方案。许多方案就是以schemas的形式出现的。最近,W3C组织已经公布了一个schema的说明书,将现存的多个schema方案统一成一个。
正面观点schemas的主要优点是有着更为强大的定义数据类型的能力。Schemas正在逐步取代古老的DTDs方式。同时,schemas还能够提供更为丰富的方式以描述复杂的XML类型。
使用schemas可以更为精确的说明文档的结构。例如,使用minOccurs和maxOccurs就可以说明在一个特定环境下,一个元素可以出现的次数。
反面观点schemas的主要问题是它还需要时间。DTDs已经出现很长时间了,尽管DTDs有弱点,但是它仍然是描述XML文档的标准方案。