我有一系列不同的类型,对于其中一些我想要确保的,最多使用其中一个元素。以下是一些示例:<Synchronisation>
和<Link>
可能会出现一次。有<TextBox>
,<Label>
,<CheckBox>
等元素。从这些元素中最多只允许一个元素。 <TextBox>
,<Label>
或<CheckBox>
。
有效的XML:
<Property>
<Synchronisation/>
</Property>
<Property>
<Synchronisation/>
<Link/>
</Property>
<Property>
<Synchronisation/>
<Link/>
<TextBox/>
</Property>
<Property>
<Synchronisation/>
<Link/>
<Label/>
</Property>
无效的XML,<TextBox>
和<Label>
发生。
<Property>
<Synchronisation/>
<Link/>
<Label/>
<TextBox/>
</Property>
我尝试像这样做xsd,但它不起作用:
<xsd:complexType name="PropertyType">
<xsd:sequence minOccurs="0">
<xsd:element minOccurs="0" maxOccurs="1" name="Synchronisation" type="SynchronisationType"/>
<xsd:element minOccurs="0" maxOccurs="1" name="Links" type="LinksType"/>
<xsd:element minOccurs="0" maxOccurs="1" ref="ElementType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ElementType">
<xsd:choice>
<xsd:element name="TextBox" type="TextBoxType"/>
<xsd:element name="Label" type="TextBoxType"/>
<xsd:element name="CheckBox" type="TextBoxType"/>
</xsd:choice>
</xsd:complexType>
答案 0 :(得分:1)
最后,我找到了解决问题的方法:
<xsd:complexType name="PropertyType">
<xsd:sequence minOccurs="0">
<xsd:element minOccurs="0" maxOccurs="1" name="Synchronisation" type="SynchronisationType"/>
<xsd:element minOccurs="0" maxOccurs="1" name="Links" type="LinksType"/>
<xsd:choice minOccurs="0" maxOccurs="1"/>
<xsd:element minOccurs="0" maxOccurs="1" name="TextBox" type="TextBoxType" />
<xsd:element minOccurs="0" maxOccurs="1" name="Label" type="LabelType" />
<xsd:element minOccurs="0" maxOccurs="1" name="CheckBox" type="CheckBoxType" />
</xsd:choice>
</xsd:sequence>
</xsd:complexType>