XML Schema:使用任意数量的元素的复杂类型

时间:2013-06-05 10:41:28

标签: xml xsd schema complextype

我正在尝试创建一个架构并遇到了这个问题,虽然我找到了一个应该可行的解决方案(XSD - how to allow elements in any order any number of times?)但在我的情况下却没有。

<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会带回错误'Unexpected child element':

<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>

我没有列出p f和summary的定义,但它们的各个元素(fr,pr,p_summary)都包含maxOccurs =“unbounded”。

1 个答案:

答案 0 :(得分:1)

&lt; xsd:choice&gt; 必须无界。您正确的架构应如下所示:

<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"pf设置summary这里不会有任何区别。它只允许你多次重复相同的元素,但不能与其他元素混合。