1
我已經定義了許多其他模式中常用的類型模式。重複使用不含子類型的XML模式元素/類型
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.exampleURI.com/MyTypes" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mytypes="http://www.exampleURI.com/MyTypes">
<xs:complexType name="Order">
<xs:sequence>
<xs:element name="Customer" type="mytypes:Customer" minOccurs="1" maxOccurs="1"/>
<xs:element name="Date" type="xs:date" minOccurs="1" maxOccurs="1"/>
<xs:element name="Products" type="mytypes:Products" minOccurs="1" maxOccurs="1"/>
<xs:element name="Total" type="xs:decimal" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Product">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="Variation" type="mytypes:Variation" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Variation">
<xs:sequence>
<xs:element name="Color" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Customer">
<xs:sequence>
<xs:element name="Discount" type="xs:int" minOccurs="1" maxOccurs="1"/>
<xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Products">
<xs:sequence>
<xs:element name="Product" type="mytypes:Product" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
通常我想重用這些類型,但不是所有的ComplexType子元素。例如以下OrderList響應必須包含訂單和客戶數據,但而不是產品數據。當我從前面的模式引用Order類型時,它將包括Order及其所有子元素。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://www.exampleURI.com/OrderList" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:s1="http://www.exampleURI.com/OrderList" xmlns:mytypes="http://www.exampleURI.com/MyTypes">
<xs:import namespace="http://www.exampleURI.com/MyTypes" schemaLocation="types.xsd"/>
<xs:element name="OrderListResponse" type="s1:OrderListResponse"/>
<xs:complexType name="ResponseData">
<xs:sequence>
<xs:element name="id" type="xs:long" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Orders">
<xs:sequence>
<xs:element name="Order" type="mytypes:Order" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OrderListResponse">
<xs:sequence>
<xs:element name="Orders" type="s1:Orders" minOccurs="1" maxOccurs="1"/>
<xs:element name="Responsedata" type="s1:ResponseData" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
我的目標:
- 定義OrderListResponse這樣只有SimpleType的元素下順序返回。
- 將Order.Customer ComplexType添加到響應中。
- 當我對MyTypes模式(例如新的可選元素)進行向後兼容的更改時,只有它們是SimpleTypes(字符串,日期等)時,它們才應包含在OrderListResponse中。
是否有任何形式的patter來實現這些目標,或者我應該簡單地將MyTypes模式類型複製粘貼到所有其他模式並刪除不需要的子元素?
哇,非常感謝!我知道必須有一個簡單的方法來做到這一點。 – Indrek 2014-08-27 22:17:37