限制<;中的元素计数数;全部>;XSD模式

限制<;中的元素计数数;全部>;XSD模式,xsd,xsd-validation,xsd-1.1,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" attribute

我想做的是,声明一个名为“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>

要求是:

  • 从A到N的所有元素都以任意顺序出现
  • 元素P、Q和R也是数据的一部分,但在3个元素中只有一个元素出现。订单也是任意的
  • 更重要的是,我已经讨论了第一点和第二点,但我想再限制一点,即只有并且只有四个元素将成为
    的一部分,这意味着从
    的元素计数正好是四
  • 组合可以是从
    的任意一个,但最后的计数只有四个,请帮助我。


    目前,我无法在
    中设置
    maxoccurrents
    ,设置maxoccurrents后不会编译xsd。

    处理此问题的最简单方法可能是使用xsd 1.1并在父级上使用断言来指定必须恰好(或最多)有四个子级。您还需要使所有组中的每个子组都是可选的,因为其中十三个不会出现


    最好的方法可能是重新设计XML以更好地使用模式语言,而不是与之对抗。但是,很难给出建议,因为您的示例非常抽象,不清楚您为什么要强加您提到的要求。

    感谢您的支持,我通过添加parent