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

时间:2015-06-15 05:27:58

标签: xml xsd xsd-1.0

当我尝试验证此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>

我收到以下错误:

  

所有&#39;模型组必须出现在一个粒子中,{&#39; min恰好&#39;}&#39; =&#39; {&#39; max出现&#39;}&#39; = 1,并且该粒子必须是一对构成&#39;内容类型&#39;}&#39;复杂类型定义。

我能够将其作为1.0 XSD工作的唯一方法是更改​​全部&#39;到一个&#39;序列&#39;:

<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一起使用?

2 个答案:

答案 0 :(得分:1)

您无法使用XSD 1.0。一个&#34;所有&#34;不允许作为选择的一部分。这在1.1中也是如此。

但是你真正想要实现的目标是什么?您只选择了一个分支,这显然是多余的,除了它指定max = unbounded。你的所有&#34; group表示From和Until都是可选的,可以按任意顺序显示,而max=unbounded表示该组可以出现任意次。对我而言,如果这意味着什么,则意味着您的内容可以包含任意数量的From元素和任意数量的Until元素,并且它们可以按您喜欢的任何顺序发生。也就是说,这意味着

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

答案 1 :(得分:0)

我设法让这个工作基于迈克尔的答案,但将选择包装在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>

因此,引用Michael,我的内容&#34;可以包含任意数量的From元素和任意数量的Until元素,它们可以按任何顺序出现&#34;。这也保留了ValidityDateGroup,可以在别处重复使用。