如果一个地址可以由子元素组成:Street,City,State,PostalCode ......你如何允许这个XML:
<Address>
<Street>Somestreet</Street>
<PostalCode>zip</PostalCode>
</Address>
Run Code Online (Sandbox Code Playgroud)
并允许这个:
<Address>
<City>San Jose</City>
<Street>Somestreet</Street>
<State>CA</State>
</Address>
Run Code Online (Sandbox Code Playgroud)
但不是这个:
<Address>
<Street>Somestreet</Street>
<City>San Jose</City>
</Address>
Run Code Online (Sandbox Code Playgroud)
什么架构会做这样的事情!?
有一种复杂的方式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>
Run Code Online (Sandbox Code Playgroud)
另一个简单的例子,如果你想允许三个中的任何两个..你可以这样做,说你有元素ABC,你想允许三个中的任何两个你可以使用以下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>
Run Code Online (Sandbox Code Playgroud)
你可以看到,对于大型套装来说,这很快就会变得笨重,但校长确实有效!
编辑:也参见这个答案
| 归档时间: |
|
| 查看次数: |
3697 次 |
| 最近记录: |