使用 Schema 访问 XML
要大致了解 XMLBean 的各种功能,请看一个使用 XML 处理订购单的示例。订购单 XML 包含两方(如两个公司)交换的数据。两方需要能够依赖一致的消息形态,并通过 Schema 来指定共同点。
下面是订购单 XML 实例的可能外观。
<po:purchase-order xmlns:po="http://openuri.org/easypo">
<po:customer>
<po:name>Gladys Kravitz</po:name>
<po:address>Anytown, PA</po:address>
</po:customer>
<po:date>2003-01-07T14:16:00-05:00</po:date>
<po:line-item>
<po:description>Burnham's Celestial Handbook, Vol 1</po:description>
<po:per-unit-ounces>5</po:per-unit-ounces>
<po:price>21.79</po:price>
<po:quantity>2</po:quantity>
</po:line-item>
<po:line-item>
<po:description>Burnham's Celestial Handbook, Vol 2</po:description>
<po:per-unit-ounces>5</po:per-unit-ounces>
<po:price>19.89</po:price>
<po:quantity>2</po:quantity>
</po:line-item>
<po:shipper>
<po:name>ZipShip</po:name>
<po:per-ounce-rate>0.74</po:per-ounce-rate>
</po:shipper>
</po:purchase-order>
此 XML 包括一个根元素 purchase-order,该元素具有三种类型的子元素:customer、date、line-item 和 shipper。此 XML 的一种直观的、基于对象的视图提供了一个表示 purchase-order 元素的对象。该对象拥有一些方法,可以用于获取日期,以及 customer、line-item 和 shipper 元素的从属对象。最后的三个元素每个也都有其自己的方法,可以用这些方法来获取其内部的数据。
查看 Schema
下面的 XML 是前面的订购单 XML 的 Schema。它定义了 XML 的“结构”,即它有哪些元素、它们的出现顺序、每一个元素都有哪些子元素等等。
<xs:schema targetNamespace="http://openuri.org/easypo"
xmlns:po="http://openuri.org/easypo"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="purchase-order">
<xs:complexType>
<xs:sequence>
<xs:element name="customer" type="po:customer"/>
<xs:element name="date" type="xs:dateTime"/>
<xs:element name="line-item" type="po:line-item" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="shipper" type="po:shipper" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="line-item">
<xs:sequence>
<xs:element name="description" type="xs:string"/>
<xs:element name="per-unit-ounces" type="xs:decimal"/>
<xs:element name="price" type="xs:double"/>
<xs:element name="quantity" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="shipper">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="per-ounce-rate" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
此 Schema 通过定义下列内容来描述订购单 XML 实例:
-
三种复杂类型的定义:customer、line-item 和 shipper。它们是订购单元素的子元素所使用的类型。在 Schema 中,复杂类型用于定义可以具有子元素和特性的元素。嵌套在复杂类型中的顺序元素则列出其子元素。
它们也是“全局”类型。它们之所以是全局类型,是因为它们位于 Schema 的顶级,也就是说,紧靠 schema 根元素的下面。这意味着可以从 Schema 中的其他任何位置引用这些类型。
- 复杂类型中简单类型的使用。name、address 和 description 元素(以及其他元素)被当作简单类型。它们恰好也是“内置”类型。内置类型(本例中是具有“xs”前缀的类型)是 Schema 规范的一部分。(规范定义了 46 个内置类型。)
- 名为 purchase-order 的全局元素。该元素定义中包含嵌套的复杂类型定义,以指定 purchase-order 元素的子元素。请注意,复杂类型中包含对该 Schema 中定义的其他复杂类型的引用。
也就是说,Schema 定义了子元素的类型,并将它们的位置描述为根元素 purchase-order 的从属元素。
使用 XMLBean 编译器编译类似该 Schema 的 XSD 文件时,将生成一个 JAR 文件,该文件会包含从该 Schema 生成的接口。
posted on 2006-02-16 11:11
Parmy 阅读(261)
评论(0) 编辑 收藏