将 XSD 1.1 转换为 1.0 - 验证错误

Converting XSD 1.1 to 1.0 - Validation Error

当我尝试验证这个时 XSD:

<xs:group name="ValidityDateGroup">
    <xs:annotation>
        <xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation>
    </xs:annotation>
    <xs:all>
        <xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
        <xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
    </xs:all>
</xs:group>

<xs:complexType name="NameType">
    <xs:choice maxOccurs="unbounded" minOccurs="0">
        <!-- SNIP - many more choices here -->
        <xs:group ref="ValidityDateGroup"/>  <!-- THIS IS WHERE THE ERROR IS -->
     </xs:choice>
</xs:complexType>

我收到以下错误:

An 'all' model group must appear in a particle with '{'min occurs'}' = '{'max occurs'}' = 1, and that particle must be of a pair which constitutes the '{'content type'}' of a complex type definition.

我能够让它作为 1.0 XSD 工作的唯一方法是将 'all' 更改为 'sequence':

<xs:group name="ValidityDateGroup">
    <xs:annotation>
        <xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation>
    </xs:annotation>
    <xs:sequence>
        <xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
        <xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
    </xs:sequence>
</xs:group>

但这会强制执行特定顺序。

有没有人知道如何让这个 XSD 与 XSD 1.0 一起工作?

你不能让它与 XSD 1.0 一起工作。 "all" 不允许作为选择的一部分。在 1.1 中也是如此。

但是你到底想达到什么目的?您只能选择一个分支,这显然是多余的,只是它指定了 max=unbounded。您的 "all" 组说 From 和 Until 都是可选的,可以按任意顺序出现,而您的 max=unbounded 说该组可以出现任意次数。对我来说,如果这意味着什么,那就意味着您的内容可以包含任意数量的 From 元素和任意数量的 Until 元素,并且它们可以按照您喜欢的任何顺序出现。即表示

<choice maxOccurs="unbounded">
  <element name="From"/>
  <element name="Until"/>
</choice>

我设法根据 Michael 的回答完成了这项工作,但将选择包装在 ValidityDateGroup 中的序列中:

<xs:group name="ValidityDateGroup">
    <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
            <xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
        </xs:choice>
    </xs:sequence>
</xs:group>

因此,引用迈克尔的话,我的内容 "can contain any number of From elements and any number of Until elements, and they can occur in any order"。这也保留了可以在别处重复使用的 ValidityDateGroup。