实战案例

XML Schema 教程 · 第 8 章 · 8 次浏览

综合实战:给订单系统写 Schema。完整定义订单 XML 结构:订单头(id、时间、客户)+ 明细行(商品、数量、单价)+ 校验约束。

Schema 设计

订单行必填、金额精确两位小数、状态枚举、至少一个明细。这套 Schema 可以直接用到支付对接、ERP 系统。

代码示例

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="order">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="customer">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string"/>
              <xs:element name="phone" type="xs:string">
                <xs:annotation>
                  <xs:documentation>手机号</xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <xs:element name="items" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="product_id" type="xs:integer"/>
              <xs:element name="product_name" type="xs:string"/>
              <xs:element name="qty" type="xs:positiveInteger"/>
              <xs:element name="unit_price" type="xs:decimal"/>
              <!-- 金额 = 数量 × 单价 -->
              <xs:element name="line_total" type="xs:decimal"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>

        <xs:element name="total" type="xs:decimal"/>
      </xs:sequence>

      <xs:attribute name="id" type="xs:string" use="required"/>
      <xs:attribute name="created_at" type="xs:dateTime" use="required"/>
      <xs:attribute name="status" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="pending"/>
            <xs:enumeration value="paid"/>
            <xs:enumeration value="cancelled"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>