我在xml下面,
<miniHome>
<required>
<washing_machine/>
<vessels/>
<refrigerator/><!--THIS SHOULD BE A CHOICE-->
<cooler/><!--THIS SHOULD BE A CHOICE-->
</required>
</miniHome>
在这种情况下,我需要选择“冰箱”和“冷却器”。一次只能出现一个。而且这两个元素不是强制性的。
这里的问题是我需要在xsd以下满足此要求
<xs:complexType name="homeOperationType"/>
<xs:element name="homeType" type="homeOperationType" abstract="true"/>
<xs:complexType name="miniHomeType">
<xs:complexContent>
<xs:extension base="homeOperationType">
<xs:all>
<xs:element name="AC"/>
<xs:element name="washing_machine"/>
<xs:element ref="cooler"/> <!--THIS SHOULD BE A CHOICE-->
<xs:element ref="refridgerator"/> <!--THIS SHOULD BE A CHOICE-->
</xs:choice>
</xs:all>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="miniHome" type="miniHomeType" substitutionGroup="homeType"/>
<xs:complexType name="coolerType">
<xs:complexContent>
<xs:extension base="xs:anyType"/>
</xs:complexContent>
</xs:complexType>
<xs:element name="cooler" type="coolerType"/>
<xs:complexType name="configUriType">
<xs:simpleContent>
<xs:extension base="xs:anyURI"/>
</xs:simpleContent>
</xs:complexType>
<xs:element name="refrigerator" type="configUriType"/>
'cooler'和'refrigerator'已经如上定义,并已在其他地方使用。
请帮助。
答案 0 :(得分:1)
您可以使用xs:choice
在xs:all
中实现substitutionGroup
。我还必须为required
父元素添加一条规则。这是总共出来的:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="homeOperationType" />
<xs:element name="homeType" type="homeOperationType" abstract="true"/>
<xs:complexType name="miniHomeType">
<xs:complexContent>
<xs:extension base="homeOperationType">
<xs:all>
<xs:element name="AC" minOccurs="0" />
<xs:element name="washing_machine"/>
<xs:element name="vessels"/>
<xs:element ref="coolingType" />
</xs:all>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="coolerType">
<xs:complexContent>
<xs:extension base="xs:anyType"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="configUriType">
<xs:simpleContent>
<xs:extension base="xs:anyURI"/>
</xs:simpleContent>
</xs:complexType>
<xs:element name="coolingType" /> <!--THIS SHOULD BE A CHOICE-->
<xs:element name="cooler" type="coolerType" substitutionGroup="coolingType"/>
<xs:element name="refrigerator" type="configUriType" substitutionGroup="coolingType" />
<xs:complexType name="miniRequiredType" >
<xs:sequence>
<xs:element name="required" type="miniHomeType" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:element name="miniHome" type="miniRequiredType" />
</xs:schema>
由于处理了substitutionGroup="homeType"
元素,因此本示例中的required
丢失了,但是您当然可以将其重新集成到代码中。
编辑:合并了其他类型定义。