对于API的支持
在掌握和使用XML技术时,DOM和SAX可能是技术人员最常使用到的XML API。DOM和SAX只对XML实例文档有效,虽然可以通过它们实现以XML DTD来验证XML文档,但是DOM和SAX却没有提供解析XML DTD文档内容的功能,也就是说我们无法通过DOM或SAX来得到DTD中元素、属性的声明和约束的描述。但是在基于XML+DTD的数据交换过程中,一些应用程序需要得到DTD本身的描述内容和结构,以方便对XML文档中数据的处理,例如在使用关系数据库存储XML 文档的过程中就涉及到如何将XML DTD映射为关系模式描述的问题。为了实现对XML DTD的解读,研究人员必须为XML DTD开发新的接口或者专用工具,带来了很大的不便。
由于XML Schema本身就是一个XML 文档,所以我们可以通过使用DOM、SAX或JDOM等XML API很容易的解析XML Schema,这就实现了XML文档与其描述模式处理方式的一致性,利于数据的传输和交换。
更加清晰的属性出现情况的限制、以及缺省值和枚举
XML DTD以关键字#IMPlIED、#FIXED和#REQUIRED来指定属性是否出现,并支持属性缺省值的定义。XML Schema则提供了更明确的标记来实现清晰易懂的表示。XML Schema废弃了XML DTD的#IMPlIED,不再支持属性的隐含状态,而要求必须给出明确的状态,并以prohibited来表示属性的禁用。对于缺省值的表达则更为直观,用default来直接给出。
源码9 XML DTD 、XML Schema对属性出现情况的限制
<!ATTLIST TestDTD testAr1 CDATA #IMPLIED>
<!ATTLIST TestDTD testAr2 CDATA #REQUIRED>
<!ATTLIST TestDTD testAr3 CDATA #FIXED "3">
<!ATTLIST TestDTD testAr4 CDATA "3">
<xsd:attribute name="TestAr1" type="xsd:string" use="optional" default="3"/>
<xsd:attribute name="TestAr2" type="xsd:string" use="prohibited"/>
<xsd:attribute name="TestAr3" type="xsd:string" use="required" fixed="3"/>
对于XML Schema在枚举方面的改进,请参见参考资料中"XML 问题 #7 W3C XML Schema 与文档类型定义 (DTD) 比较"一文(文献9)。
注释
XML DTD和XML Schema都支持<!-注释内容-->这样的注释方法,但是XML Schema提供了更灵活和有用的注释方式:
documentation和appinfo。它们提供了面向读者和应用的注释。
源码10 XML Schema的注释
<xsd:annotation>
<xsd:documentation>面向用户和应用的注释</xsd:documentation>
<xsd:appinfo>
//这是一段C语言代码。
#include stdio.h
void main()
{
int i,j;
i =1;
j=i+1;
}
</xsd:appinfo>