XSD:有一些选择的顺序

时间:2017-07-26 10:06:40

标签: xml xsd xsd-validation

我有一系列不同的类型,对于其中一些我想要确保的,最多使用其中一个元素。以下是一些示例:<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>

1 个答案:

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