1

XSDで次のDTDフラグメントを表現しようとしています:-

(A | B)* | (A | C)* | (A | D)* | ..。

つまり、任意の数のAsと任意の数のB、C、D、..の混合リスト

CastorConverterが吐き出します:-

              <choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:B" />
                    </choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:C" />
                    </choice>
                    <choice minOccurs="0" maxOccurs="unbounded">
                          <element ref="tns:A" />
                          <element ref="tns:D" />
                    </choice>
              </choice>

しかし、これは私にパーサーエラーを与えます。Visual Studioで調査すると、次の警告が表示されます。-

「要素「A」の複数の定義により、コンテンツモデルがあいまいになります。コンテンツモデルは、要素情報アイテムシーケンスの検証中に、各アイテムの検証を試みるために、直接、間接、または暗黙的に含まれるように形成する必要があります。シーケンス内のアイテムは、そのアイテムのコンテンツや属性を調べたり、シーケンスの残りのアイテムに関する情報を調べたりすることなく、一意に決定できます。」

問題は、パーサーが「A」に遭遇した場合、検証する選択肢を決定するために、シーケンスの残りの部分を「先読み」する必要があることです。

このシーケンスをXSDで表す別の方法はありますか?

4

1 に答える 1

2

次のようにシーケンスを使用します。

<sequence minOccurs="0">
  <element minOccurs="0" maxOccurs="unbounded" ref="tns:A" />
  <choice>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:B" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:B" />
      </sequence>
    </sequence>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:C" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:C" />
      </sequence>
    </sequence>
    <sequence>
      <element minOccurs="1" maxOccurs="unbounded" ref="tns:D" />
      <sequence minOccurs="0" maxOccurs="unbounded">
        <element maxOccurs="unbounded" ref="tns:A" />
        <element minOccurs="0" maxOccurs="unbounded" ref="tns:D" />
      </sequence>
    </sequence>
  </choice>
</sequence>

代替テキスト http://www.freeimagehosting.net/uploads/29c07bafa2.png

于 2009-07-06T11:53:53.230 に答える