zoukankan      html  css  js  c++  java
  • XML Schema

    XML Schema

     

    Schema的由来

    ----DTD作为XML 1.0规范的重要组成部分,对于XML文档的结构起到很好的描述作用。但是,它也具有一些缺点,比如,它采用了非XML的语法规则、不支持数据类型、扩展性较差等等。Schema正好解决了这些问题。从总体上讲,Schema具有以下优点:

    一致性:Schema使得对XML的定义不必再利用一种特定的形式化的语言,而是直接借助XML自身的特性,利用XML的基本语法规则来定义XML文档的结构,使得XML达到了从内到外的完美统一,也为XML的进一步发展奠定了坚实的基础。

    扩展性:Schema对DTD进行了扩充,引入了数据类型、命名空间,从而使其具备较强的可扩展性。

    互换性:利用Schema,我们能够书写XML文档以及验证文档的合法性。另外,通过特定的映射机制,还可以将不同的Schema进行转换,以实现更高层次的数据交换。

    规范性:同DTD一样,Schema也提供了一套完整的机制以约束XML文档中置标的使用,但相比之下,后者基于XML,更具有规范性。Schema利用元素的内容和属性来定义XML文档的整体结构,如哪些元素可以出现在文档中、元素间的关系是什么、每个元素有哪些内容和属性、以及元素出现的顺序和次数等等,都可一目了然。

    Schema的发展

    ----Schema是伴随着XML1.0规范的制订而推出的,从Schema的第一个方案到现在为止,W3C成员共提交了五个Schema规范,分别是XML-Data、DCD(Document Content Description for XML)、SOX(Schema for Object-Oriented XML)、DDML(Document Definition Markup Language)和XML Schema。直到现在,关于Schema还没有一个正式推荐标准,它仍处于不断修改完善的过程当中。

    初识Schema

    ----下面以一个简单的示例对Schema进行介绍(注:本例以及后面的Schema语法均以微软Internet Explorer 5.0的Schema实现为蓝本):

     

    1. <?xml version="1.0" encoding="GB2312" ?>

    2. <Schema xmlns="urn:schemas-microsoft-com:xml-data"

       xmlns:dt="urn:schemas-microsoft-com:datatypes">

    3. <AttributeType name="序号"/>

    4. <AttributeType name="性别"/>

    5. <ElementType name= "姓名"/>

    6. <ElementType name= "年龄"/>

    7. <ElementType name= "电话" dt:type="fixed.14.4"/>

    8. <ElementType name= "地址" />

    9. <ElementType name= "联系人" content="eltOnly">

    10. <element type= "姓名" />

    11. <element type= "年龄" />

    12. <element type= "电话" />

    13. <element type= "地址" />

    14. </ElementType>

    15. <ElementType name= "通讯录" content="eltOnly">

    16. <element type= "联系人" />

    17. <attribute type="序号"/>

    18. <attribute type="性别"/>

    19. </ElementType>

    20.</Schema> 

     

     

    ----1行是XML类型声明语句指明该文档是一个XML文档并且符合版本1.0规范该文档采用GB2312编码。

    ----第2行是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可以使用的数据类型。

    ----第3、4行是属性定义语句,它定义了两个属性:序号和性别。

    ----第5、6、7、8行是元素定义语句,它定义了四个元素:姓名、年龄、电话、地址。其中为"电话"元素定义了数据类型:fixed.14.4。

    ----第9-14行定义了本XML Schema的二级元素:联系人,指明该元素包含四个子元素:姓名、年龄、电话、地址。

    ----第15-19行定义了本XML Schema的顶级元素:通讯录,指明该元素包含一个子元素:联系人,以及两个属性:序号、性别。

    ----第20行是结束标记语句,它表明该XML Schema的描述到此为止。

    Schema语法

     

    ----Schema有着自己的一套完整的语法,涉及到的关键元素包括:Schema、ElementType、element、AttributeType、attribute、group、datatype、description。

    ----Schema元素是XML Schema中第一个出现的元素,用于声明该XML文档是一个Schema文档。Schema具有两个属性:name指定该Schema的名称,而xmlns则指定该Schema包含的命名空间。

    ----ElementType元素是XML Schema中重要元素之一,用于定义该XML Schema文档中出现的元素。通过属性content来表明ElementType所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素,通过dt:type指定该元素的数据类型,通过order指定该元素的子元素的排列规则,相应取值有:one、seq、many。element元素是用于声明在ElementType中出现的元素,它需要同ElementType配合使用。

    ----AttributeType元素用于定义在Schema文档中出现的属性类型。其属性dt:type指定所声明属性类型的数据类型,可支持的数据类型包括:entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, 和 string。default属性可用于指定该属性类型的缺省取值。required属性指定该属性对于引用它的元素是否是必须的。 attribute元素实际上是对AttributeType声明的属性的引用,它也需要同AttributeType配合使用。

    ----group元素是用于将XML 文档中的元素分组。通过属性order可指定该分组中的元素或子分组的顺序,通过minOccurs和maxOccurs分别指定该分组在XML实例文档中出现的最少和最多次数。

    ----datatype是XML Schema中一个重要元素,也是XML Schema的一大特色,它用于为ElementType和AttributeType指定数据类型。XML Schema支持两种数据类型,一种是XML 1.0标准中定义的十种基本数据类型:entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, 和 string;另外,还支持一些扩展数据类型,包括:bin.base64, bin.hex, boolean, char, date, dateTime, dateTime.tz, fixed.14.4, float, int, number, time, time.tz, i1, i2, i4, r4, r8, ui1, ui2, ui4, uri, uuid。

    ----description只能算是XML Schema中一个配角,它的主要作用是为ElementType和AttributeType元素提供描述信息。

    Schema的应用

     

    ----由于XML Schema的种种优点,现在Schema取代DTD已成大势所趋。在这种情况下,国际上一些知名企业和组织审时度势纷纷在战略上向XML Schema倾斜,提供对XML Schema的支持。其中最为典型的当然要数微软的BizTalk和xml.org组织的注册/资源库。更加值得一提的是,微软在其浏览器软件Internet Explorer 5.0中率先提供对Schema的支持,当然,因为最终的XML Schema标准尚未正式推出,因此微软支持的Schema也只是过渡性"标准",今后还会不断修改。

  • 相关阅读:
    HDU 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/frogbag/p/261182.html
Copyright © 2011-2022 走看看