0

我正在尝试创建一个模式并遇到了这个问题,尽管我找到了一个应该有效的解决方案(XSD - 如何允许任意顺序的元素任意多次?)在我的情况下它没有。

<xsd:element name="foo">
<xsd:complexType>
    <xsd:choice>
          <xsd:element ref="p" maxOccurs="unbounded"/> *--element p is complex--*
          <xsd:element ref="f" maxOccurs="unbounded"/> *--element f is complex--*
          <xsd:element ref="summary"/>
    </xsd:choice>
      <xsd:attribute ref="type"/>
</xsd:complexType>
</xsd:element>

使用它来验证下面的 xml 会返回错误“意外的子元素”:

<foo type="###">
    <p type="###">
       <pr date="##/##/##" amount="###"/>
       <pr date="##/##/##" amount="###"/>
    </p>
    <f type="###">
       <fr date="##/##/##" factor="###"/>
       <fr date="##/##/##" factor="###"/>
    </f>
    <p type="###">
       <pr date="##/##/##" amount="###"/>
       <pr date="##/##/##" amount="###"/>
    </p>
    <f type="###">
       <fr date="##/##/##" factor="###"/>
       <fr date="##/##/##" factor="###"/>
    </f>
    <summary>
        <p_summary date="##/##/##" p="####" dis="###" ......./>   
        <p_summary date="##/##/##" p="####" dis="###" ......./>
        <p_summary date="##/##/##" p="####" dis="###" ......./>
    </summary>
</foo>

我没有列出 pf 和 summary 的定义,但它们都包含各自元素(fr、pr、p_summary)的 maxOccurs="unbounded"。

4

1 回答 1

1

<xsd:choice>在这里必须是无界的。您正确的架构应如下所示:

<xsd:element name="foo">
<xsd:complexType>
    <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="p"/>
        <xsd:element ref="f"/>
        <xsd:element ref="summary"/>
    </xsd:choice>
    <xsd:attribute ref="type"/>
</xsd:complexType>
</xsd:element>

maxOccurs="unbounded"每个元素(p, f, )的设置summary在这里没有任何区别。它只是允许您多次重复相同的元素,但不能与其他元素混合。

于 2013-06-05T13:10:05.623 回答