您可以獲得與推導。假設你有一個類型Order
包含可選foo
和bar
:
<xs:complexType name="Order">
<xs:sequence>
<xs:element ref="foo" minOccurs="0"/>
<xs:element ref="bar" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
我假設你有一個支持不同業務的根元素:
<xs:element name="services">
<xs:complexType>
<xs:choice>
<xs:element name="serviceA" type="ServiceAType" />
<xs:element name="serviceB" type="ServiceBType" />
</xs:choice>
</xs:complexType>
</xs:element>
如果serviceB
允許可選foo
和bar
,你可以簡單地聲明的serviceB
類型爲Order
,或者創建一個ServiceBType
延伸Order
:
<xs:complexType name="ServiceBType">
<xs:complexContent>
<xs:extension base="Order"/>
</xs:complexContent>
</xs:complexType>
如果你想ServiceAType
限制的Order
內容,以便foo
是必需的,那麼你就可以實現它作爲訂單的限制:
<xs:complexType name="ServiceAType">
<xs:complexContent>
<xs:restriction base="Order">
<xs:sequence>
<xs:element ref="foo" minOccurs="1"/>
<xs:element ref="bar" minOccurs="0"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
現在你可以有<serviceB>
不含元素,包含<foo>
,<bar>
或<foo>
,然後是<bar>
。 <serviceA>
將允許之後<bar>
或<foo>
,但沒有別的<foo>
。