XSD:有选择的序列

XSD: Sequence with some choice

我有一系列不同类型,对于其中一些我想确保最多使用这些元素中的一个。以下是一些示例:<Synchronisation><Link> 可能会出现一次。有 <TextBox><Label><CheckBox> 等元素。从这些元素中最多允许一个。 <TextBox><Label><CheckBox>.

有效 XMLs:

<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>

最后我找到了解决问题的办法:

<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>