如果地址可以由子元素组成:Street,City,State,PostalCode ...您如何允许此XML:
<Address>
<Street>Somestreet</Street>
<PostalCode>zip</PostalCode>
</Address>
并允许:
<Address>
<City>San Jose</City>
<Street>Somestreet</Street>
<State>CA</State>
</Address>
但不这个:
<Address>
<Street>Somestreet</Street>
<City>San Jose</City>
</Address>
什么模式会做这样的事情??
答案 0 :(得分:6)
有一种令人费解的方式使用choice
来创建只允许有效组合的选择......
在您的示例中,这应该具有所需的结果:
<xs:complexType name="Address">
<xs:choice>
<xs:sequence>
<xs:element name="city"/>
<xs:element name="street"/>
<xs:element name="state"/>
</xs:sequence>
<xs:sequence>
<xs:element name="street"/>
<xs:element name="postcode"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
另一个简单的例子,如果你想允许三个中的任何两个..你可以这样做,比如你有元素A B C并且你想允许三个中的任何两个你可以使用以下xsd:
<xs:complexType name="anyTwo">
<xs:choice>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="B"/>
</xs:sequence>
<xs:sequence>
<xs:element name="A"/>
<xs:element name="C"/>
</xs:sequence>
<xs:sequence>
<xs:element name="B"/>
<xs:element name="C"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
你可以看到,对于大型套装来说这很快就会变得难以处理,但是校长确实有效!
修改:另请参阅此answer