您可以获得与推导。假设你有一个类型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>
。