新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → XML Schema帮你建模(1) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4606 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: XML Schema帮你建模(1) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     diy930 帅哥哟,离线,有人找我吗?双鱼座1979-3-8
      
      
      威望:4
      头衔:用脑专家
      等级:大三暑假(TOFEL考了650分!)
      文章:50
      积分:930
      门派:XML.ORG.CN
      注册:2004/7/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给diy930发送一个短消息 把diy930加入好友 查看diy930的个人资料 搜索diy930在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看diy930的博客楼主
    发贴心情 XML Schema帮你建模(1)

    XML Schema是2001年5月正式发布的W3C(万维网联盟)的推荐标准,经过数年的大规模讨论和开发如今终于奠定下来,成为全球公认的XML环境下首选的数据建模工具。
       
      由于XML是SGML(标准通用标示语言)的一个子集,它也继承了SGML用于建模的DTD。使用DTD的好处是可以利用大量现有的DTD工具,使得开发应用代价维持在一个相对较低的水平。然而,DTD有不少缺陷:
       
      1. DTD是基于正则表达式的,描述能力有限;
       
      2. DTD没有数据类型的支持,在大多数应用环境下能力不足;
       
      3. DTD的约束定义能力不足,无法对XML实例文档做出更细致的语义限制;
       
      4. DTD不够结构化,重用的代价相对较高;
       
      5. DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。
       
      XML Schema正是针对这些DTD的缺点而设计的,它完全使用XML作为描述手段,具有很强的描述能力、扩展能力和处理维护能力。
       
       
      XML Schema简介
       
       
      XML Schema的主要目的是用来定义一类XML文档(一个XML Application)。因此,模式的“实例文档”形式常常被用于描述一个与特定XML Schema相一致的XML文档。事实上,文档实例和Schema文档都不是必须要以文档的形式存在,它们可以以在应用之间传递的字节流的形式存在,或者作为一个数据库记录及XML的“信息项”的集合存在。然而为了简化入门,我们总是把实例和模式看作文档或者文件,认为它们总以文档实例或是模式文档的形式存在。
       
      这里我们将结合一个实例来对XML Schema进行简单的概述,希望大家通过阅读本节的内容初步掌握的使用方法和XML Schema文档实例的具体语义。XML Schema是Web Services技术中需要使用的一个基本工具,然而并不是XML Schema的所有特性都会被广泛地使用,因此,本文将不对XML Schema规范做系统的介绍。
       
      在介绍XML Schema语法之前,先来考虑一个XML实例文档po.xml。它描述了一个由家庭产品采购/支付应用生成的家庭产品购买订单(参阅代码1)。
       
      <!--代码 1 po.xml,购买订单的XML实例文档-->
      <?xml version="1.0"?>
      <purchaseOrder orderDate="1999-10-20">
      <shipTo country="US">
      <name>Alice Smith</name>
      <street>123 Maple Street</street>
      <city>Mill Valley</city>
      <state>CA</state>
      <zip>90952</zip>
      </shipTo>
      <billTo country="US">
      <name>Robert Smith</name>
      <street>8 Oak Avenue</street>
      <city>Old Town</city>
      <state>PA</state>
      <zip>95819</zip>
      </billTo>
      <comment>Hurry, my lawn is going wild!</comment>
      <items>
      <item partNum="872-AA">
      <productName>Lawnmower</productName>
      <quantity>1</quantity>
      <USPrice>148.95</USPrice>
      <comment>Confirm this is electric</comment>
      </item>
      <item partNum="926-AA">
      <productName>Baby Monitor</productName>
      <quantity>1</quantity>
      <USPrice>39.98</USPrice>
      <shipDate>1999-05-21</shipDate>
      </item>
      </items>
      </purchaseOrder>
       
       
       
      这个购买订单由一个跟元素purchaseOrder及其子元素shipTo、billTo、comment和items组成。这些子元素(除了comment)也依次包含了其它的一些子元素。
       
      叶子元素包含的是一个数字而不是任何子元素,如USPrice这样的子元素。元素如果包含子元素或者是带有属性的,被称为复合类型;反之元素如果仅仅包含数字、字符串或者其它数据等,但不包含任何子元素的,则被称为简单类型。在这个实例文档中,复合类型和一些简单类型是在购买定单的模式文档中定义的,而其它一些标准的简单类型则是作为XML Schema内置的简单类型的形式出现的。
       
      在研究这个实例文档的购买订单模式文档之前,先介绍一下购买订单实例文档和模式文档之间的联系。一个实例文档实际上并不一定需要引用模式文档,当然,在事实上的使用中,很多实例文档确实引用了模式文档,为了使入门变得更加简单,一开始我们选择不引用。同时假设任何实例文档的处理器即使从购买订单实例文档中得不到任何信息,也能够正确地进行购买订单模式文档的处理。
       
       
      购买订单模式文档
       
       
      在代码2,给出了购买订单的模式文档。文件po.xsd在给出解释之前,大家可以使用XML的知识去尝试理解这个模式文档。
       
      <!--代码 2 po.xsd,购买订单的Schema文档-->
      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:annotation>
      <xsd:documentation xml:lang="en">
      Purchase order schema for Example.com.
      Copyright 2000 Example.com. All rights reserved.
      </xsd:documentation>
      </xsd:annotation>
      <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
      <xsd:element name="comment" type="xsd:string"/>
      <xsd:complexType name="PurchaseOrderType">
      <xsd:sequence>
      <xsd:element name="shipTo" type="USAddress"/>
      <xsd:element name="billTo" type="USAddress"/>
      <xsd:element ref="comment" minOccurs="0"/>
      <xsd:element name="items" type="Items"/>
      </xsd:sequence>
      <xsd:attribute name="orderDate" type="xsd:date"/>
      </xsd:complexType>
      <xsd:complexType name="USAddress">
      <xsd:sequence>
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="street" type="xsd:string"/>
      <xsd:element name="city" type="xsd:string"/>
      <xsd:element name="state" type="xsd:string"/>
      <xsd:element name="zip" type="xsd:decimal"/>
      </xsd:sequence>
      <xsd:attribute name="country" type="xsd:NMTOKEN"
      fixed="US"/>
      </xsd:complexType>
      <xsd:complexType name="Items">
      <xsd:sequence>
      <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
      <xsd:complexType>
      <xsd:sequence>
      <xsd:element name="productName" type="xsd:string"/>
      <xsd:element name="quantity">
      <xsd:simpleType>
      <xsd:restriction base="xsd:positiveInteger">
      <xsd:maxExclusive value="100"/>
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:element>
      <xsd:element name="USPrice" type="xsd:decimal"/>
      <xsd:element ref="comment" minOccurs="0"/>
      <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
      </xsd:sequence>
      <xsd:attribute name="partNum" type="SKU" use="required"/>
      </xsd:complexType>
      </xsd:element>
      </xsd:sequence>
      </xsd:complexType>
      <!-- Stock Keeping Unit, a code for identifying products -->
      <xsd:simpleType name="SKU">
      <xsd:restriction base="xsd:string">
      <xsd:pattern value="\d{3}-[A-Z]{2}"/>
      </xsd:restriction>
      </xsd:simpleType>
      </xsd:schema>
       
       
       
      购买订单模式文档由一个schema元素和一系列子元素组成,大多数子元素为element、complexType和simpleType,这些决定了实例文档中元素的表现方式和内容,大家最好能熟记element、complexType、simpleType这几个元素,这些将是我们一直需要使用的几个元素。
       
      同时,可以通过使用出现在schema元素中的命名空间声明xmlns:xsd="http://www.w3.org/2001/XMLSchema",使得模式文档中的每一个元素都有一个与XML Schema命名空间相联系的命名空间前缀“xsd:”。尽管在语法上,可以使用任意的前缀形式,但是,命名空间前缀“xsd:”被约定用于表示XML Schema命名空间。由于使用同样的前缀,所以同样的关联就会出现在内置的简单类型的名字中,例如xsd:string。这种形式关联的目的是用来表示当前的元素或简单类型是属于XML Schema语言的内置定义的,而不是属于模式文档作者自己的词汇表的。为了在这里清楚并且简单地表示,我们仅提及元素的名字和简单类型名,而忽略它们的前缀“xsd:”。

       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    我只知道,用 xml 做网站,可以省我很多时间.

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/21 14:01:00
     
     GoogleAdSense双鱼座1979-3-8
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/16 7:16:46

    本主题贴数2,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  XML Schema帮你建模(1)(6669字) - diy930,2004年7月21日
        回复:  继续!(6字) - 大笨熊,2004年7月26日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    62.500ms