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で表す別の方法はありますか?