信息化 频道

XML Schema与XML DTD的技术比较与分析

    对于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>

 

0
相关文章