<%--兼容IE7 必须放在 head 的第一行--%>
独上高楼网站
  • XML基础教程:XML Schema 与 XML DTD的技术比较与分析
  • XML Schema 与 XML DTD的技术比较与分析

    周竞涛 (zhoujtnet@yahoo.com.cn)西北工业大学CAD/CAM国家专业实验室
    王明微 (wangmv@hotmail.com)西北工业大学CAD/CAM国家专业实验室

    XML DTD是目前使用最广泛的一种XML 模式,XML Schema则已经成为W3C的正式推荐标准,并有替代XML DTD的趋势。那么,从技术角度看,XML Schema与XML DTD有那些区别,XML Schema又有那些优势呢

    引言

    XML DTD(XML的文档类型定义)是近几年来XML技术领域所使用的最广泛的一种模式。但是,由于XML DTD并不能完全满足XML自动化处理的要求,例如不能很好实现应用程序不同模块间的相互协调,缺乏对文档结构、属性、数据类型等约束的足够描述等等,所以W3C于2001年5月正式推荐XML Schema为XML 的标准模式。显然,W3C希望以XML Schema来作为XML模式描述语言的主流,并逐渐代替XML DTD。那么XML Schema与XML DTD相比到底有哪些优势呢,XML DTD是否真的会在XML的模式描述领域中逐渐消失呢




    回页首


    XML模式与XML格式

    XML模式是指用来描述XML结构、约束等因素的语言,例如XML Schema、XML DTD、XDR,SOX等等。XML格式则是XML文档本身所具有的格式。本文以XML Schema来代表W3C所推荐的XML Schema模式标准,而以"XML模式"来代表所有的XML模式描述语言。

    从模式的描述语言来说,XML Schema和XML DTD都属于语法模式。与概念模式不同,语法模式在对同一事物描述时,可以采用不同的语法,例如在对关系模式描述时,无论是使用XML Schema还是XML DTD,都既可以用元素也可以用属性来描述关系模式的列。

    模式必须以某种格式来表示,XML Schema的格式与XML DTD的格式有着非常明显的区别,XML Schema事实上也是XML的一种应用,也就是说XML Schema的格式与XML的格式是完全相同的,而作为SGML DTD的一个子集,XML DTD具有着与XML格式完全不同的格式。这种区别会给XML Schema的使用带来许多好处:

    1. XML用户在使用XML Schema的时候,不需要为了理解XML Schema而重新学习,节省了时间;
    2. 由于XML Schema本身也是一种XML,所以许多的XML编辑工具、API 开发包、XML语法分析器可以直接的应用到XML Schema,而不需要修改。
    3. 作为XML的一个应用,XML Schema理所当然的继承了XML的自描述性和可扩展性,这使得XML Schema 更具有可读性和灵活性。
    4. 由于格式完全与XML一样,XML Schema除了可以像XML一样处理外,也可以同它所描述的XML文档以同样的方式存储在一起,方便管理。
    5. XML Schema与XML格式的一致性,使得以XML为数据交换的应用系统之间,也可以方便的进行模式交换。
    6. XML有非常高的合法性要求,XML DTD对XML的描述,往往也被用作验证XML合法性的一个基础,但是XML DTD本身的合法性却缺少较好的验证机制,必需独立处理。XML Schema则不同,它与XML有着同样的合法性验证机制。




    回页首


    数据类型

    或许,对于许多开发人员来讲,XML Schema与XML DTD相比的一个最显著的特征,就是其对数据类型的支持了。这完全是因为XML DTD提供的数据类型只有CDATA 、Enumerated、NMTOKEN 、NMTOKENS等十种内置(built-in)数据类型。这样少的数据类型通常无法满足文档的可理解性和数据交换的需要。XML Schema则不同,它内置了三十七种数据类型,如long,int,short,double等常用的数据类型,并通过将数据类型表示为由value space、lexical space和facet三部分组成的三元组而获得更大的灵活性。但是, XML Schema数据类型的真正灵活性来自于其对用户自定义类型的支持。XML Schema提供两种方式来实现数据类型的定义。

    1)简单类型定义(simpleType),即在XML Schema内置的数据类型基础上或其它由XML Schema内置的数据类型继承或定义所得到的简单的数据类型(simpleType)基础上,通过restriction,list 或者 union方式定义新的数据类型。

    例如:


    源码1 restriction方式的定义

    < simpleType name='Sku'>
    < restriction base='string'>
    < pattern value='\d{3}-[A-Z]{2}'/>
    < /restriction>
    < /simpleType>

    源码2 list方式的定义
    < simpleType name='listOfDouble'>
    < list itemType='double'/>
    < /simpleType>
     
    源码3 union方式的定义
    < xsd:attribute name="size">
            < xsd:simpleType>
                < xsd:union>
                    < xsd:simpleType>
                        < xsd:restriction base="xsd:positiveInteger">
                            < xsd:minInclusive value="1"/>
                            < xsd:maxInclusive value="12"/>
                        < /xsd:restriction>
                    < /xsd:simpleType>
                    < xsd:simpleType>
                        < xsd:restriction base="xsd:string">
     
                        
                    
                    
                    
                    
    • 与本文主题相关的文章
    • 泰州市国土资源局 王宏喜
      地址泰州市凤凰东路59号 邮编:225300
      电话0523-86883298 电子邮件Tzgtwhx@163.com  QQ:70712371
      苏ICP备07039034号