实战案例
综合实战:给订单系统写 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>