1

我想要做的是,声明一个名为“数据”的父元素,其中有这一个元素的 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. 更重要的是,我已经涵盖了第 1 点和第 2 点,但我还想要一个限制,那就是只有四个元素将成为其中的一部分,<data>这意味着从<A>to 到的元素计数<Q>正好是四个,

组合可以从<A>到任何一个,<Q>但最终计数只有四个,请帮助我。

现在目前我无法设置maxOccures<all>它在设置 maxOccures 后不编译 xsd。

4

1 回答 1

1

处理此问题的最简单方法可能是使用 XSD 1.1 并在父级上使用断言来指定必须恰好(或最多)四个子级。您还需要将 all-group 的每个孩子设为可选,因为其中有 13 个不会出现。

最好的方法可能是重新设计您的 XML 以更好地使用您的模式语言,而不是与之抗衡。但是,很难就此提供建议,因为您的示例足够抽象,以至于您不清楚为什么要强加您提到的要求。

于 2014-04-21T13:42:53.217 回答