XML 深入了解

XML 深入了解

使用 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,该元素具有三种类型的子元素:customerdateline-itemshipper。此 XML 的一种直观的、基于对象的视图提供了一个表示 purchase-order 元素的对象。该对象拥有一些方法,可以用于获取日期,以及 customerline-itemshipper 元素的从属对象。最后的三个元素每个也都有其自己的方法,可以用这些方法来获取其内部的数据。

查看 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 生成的接口。

你可能感兴趣的:(XML 深入了解)