Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->XML ->正文

XML Schema帮你建模(1)

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-28 点击: [收藏] [投稿]
 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>

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:用XML数据岛解决用户界面问题 - 2   下一篇:XML Schema帮你建模(4)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号