xsd validation-子选择取决于父级

时间:2016-08-25 06:25:48

标签: xml xsd

名为'拒绝'的父标记。是一个可选标签。此外,有2个子标签命名为' option1'和' option2'。如果父标记值出现在请求中,则必须至少给出一个孩子,最多2个孩子。但是,如果父母没有出现,那么任何一个孩子都不应该出现。

如何在2个子标签中进行此选择?

代码:

<xs:element name="Refuse" minOccurs="0" maxOccurs="1">                  
<xs:complexType>
    <xs:sequence>                           
        <xs:element name="option1" minOccurs="0" maxOccurs="1">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="5" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="option2" minOccurs="0" maxOccurs="1">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="10" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

2 个答案:

答案 0 :(得分:0)

这可以通过选择来解决,例如:

 <xs:element name="Refuse" minOccurs="0" maxOccurs="1">                  
<xs:complexType>
    <xs:choice>                           
        <xs:sequence>
            <xs:element ref="option1"/>
        </xs:sequence>
        <xs:sequence>
            <xs:element ref="option1"/>
            <xs:element ref="option2"/>
        </xs:sequence>
        <xs:sequence>
            <xs:element ref="option2"
        </xs:sequence>
    </xs:choice>
</xs:complexType>
</xselement>

<xs:element name="option1" >
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:maxLength value="10" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

<xs:element name="option2">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:maxLength value="5" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

架构中的Choice元素允许发生一个且仅一个定义的序列。有关选择检查here

的更多信息

为了便于使用并避免重复代码,我已经分离了option1和option2元素的定义。

答案 1 :(得分:0)

使用选择解决

<xs:element name="Refuse" minOccurs="0" maxOccurs="1">                  
<xs:complexType>
    **<xs:choice minOccurs="1" maxOccurs="2">**
        **<xs:element name="option1">**
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="5" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        **<xs:element name="option2">**
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="10" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:choice>
</xs:complexType>