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"各要素 ( pf、 ) ごとに設定しsummaryても、ここでは違いはありません。同じ要素を何度も繰り返すことができますが、他の要素と混合することはできません.

于 2013-06-05T13:10:05.623 に答える