XML Schema中的选择元素,包含任何订单,任何数字和"一个元素限制"?

时间:2014-04-18 09:53:59

标签: xml xsd xsd-validation

我要做的是,声明一个名为" data"的父元素,它们具有这些元素的6个子元素是条件的,这意味着一个元素只出现而且只有一个时间和其他任何订单都可以出现任意次数。

Example:

<data>
   <Child1>text1</Child1>
   <Child2>text1</Child2>
   <Child3>text1</Child3>
   <Child4>text1</Child4>
   <Child5>text1</Child5>
   <Child6>text1</Child6> <!-- Only one times-->


</data>

1:所有元素都可以按任意顺序和任意次数出现。

2:Child6只出现一次。

XSD代码

<xs:element name="data">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="sequence" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:choice minOccurs="0" maxOccurs="unbounded" >
                            <xs:element ref="Child1" />
                            <xs:element ref="Child1" />
                            <xs:element ref="Child3" />
                            <xs:element ref="Child4" />                          
                            <xs:element ref="Child5" />
                            <xs:element ref="Child6" minOccurs="0" maxOccurs="1"/>

                        </xs:choice>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

请建议我怎么做。?

1 个答案:

答案 0 :(得分:1)

以下XSD将根据以下规则进行验证:

  • 以任意顺序允许Child1Child5元素,所有这些元素都是可选的,重复任意次。
  • 仅允许一个 Child6元素,如果存在,必须在所有其他元素之后定位。

<xs:element name="data">
    <xs:complexType>
        <xs:sequence>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="Child1" />
                <xs:element name="Child2" />
                <xs:element name="Child3" />
                <xs:element name="Child4" />                          
                <xs:element name="Child5" />
            </xs:choice>
            <xs:element name="Child6" minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

要允许Child6出现在任何地方,您可以使用xs:all但是您需要一个 XSD 1.1 兼容解析器,因为XSD 1.0解析器不允许使用xsd:all无限次出现:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> 

    <xs:element name="data">
        <xs:complexType>
            <xs:all>
                <xs:element name="Child1" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child2" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child3" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child4" minOccurs="0" maxOccurs="unbounded" />                          
                <xs:element name="Child5" minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="Child6" minOccurs="0" maxOccurs="1"/>
            </xs:all>
        </xs:complexType>
    </xs:element>

</xs:schema>

可以在XSD 1.0之间实现某些目标,但您必须决定是否值得编写更复杂且更少可重复使用的架构,以便在放置元素时获得所需的灵活性