限制<all> XSD Schema </all>中的元素数量

时间:2014-04-21 10:31:59

标签: xsd xsd-validation xsd-1.1

我要做的是,声明一个名为“data”的父元素,它们具有这些元素的10个子元素是有条件的。

我的XSD是:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
    <xs:element name="data" >
        <xs:complexType>
            <xs:sequence>
                <xs:element name="sub_data" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:all >
                            <xs:element ref="A"/>
                            <xs:element ref="B" minOccurs="0" maxOccurs="1"/>
                            <xs:element ref="C"/>
                            <xs:element ref="D"/>
                            <xs:element ref="E"/>
                            <xs:element ref="F"/>
                            <xs:element ref="G"/>
                            <xs:element ref="H"/>
                            <xs:element ref="I"/>
                            <xs:element ref="J"/>
                            <xs:element ref="K"/>
                            <xs:element ref="L"/>
                            <xs:element ref="M"/>
                            <xs:element ref="N"/>
                            <xs:element ref="element_group"/>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="status"/>
        </xs:complexType>
    </xs:element>

    <xs:element name="O" type="xs:string" substitutionGroup="element_group">
    <xs:element name="P" type="xs:string" substitutionGroup="element_group">
    <xs:element name="Q" type="xs:string" substitutionGroup="element_group">

</xs:schema>

要求是:

  1. 从A到N的所有元素都以任何顺序出现。
  2. 元素P,Q和R也是数据的一部分,但只有一个元素出现在3.顺序也是任何元素。
  3. 更重要的是我已经涵盖了第一点和第二点,但我还想要一个限制,即只有四个元素将成为<data>的一部分,这意味着从<A>到{{1确切地说是四,
  4. <Q><A>可以合并其中任何一个,但最终的数量只有四个,请帮帮我。

    现在我无法在<Q>中设置maxOccures,在设置maxOccures后没有编译xsd。

1 个答案:

答案 0 :(得分:1)

处理此问题的最简单方法可能是使用XSD 1.1并在父级上使用断言来指定必须有完全(或最多)四个子级。你还需要让所有组中的每个孩子都可选,因为它们中的13个不会出现。

最好的方法可能是重新设计XML,以便更好地使用模式语言而不是对抗它。但是,很难就此提出建议,因为你的例子足够抽象,不清楚为什么要强加你提到的要求。