2009-07-06 4 views
1

を制約: -DTD - > XSDの変換:二つの要素の混合リスト、1は私がXSDに次のDTDの断片を表現しようとしている

(A | B)* | (A | C)* | (A | D)* | ...ように、任意の数及び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> 

をけれどもこれは私にパーサーエラーを与えます。 -

"要素 'A'を複数定義すると、コンテンツモデルが曖昧になります。コンテンツモデルは、要素情報アイテムシーケンスの検証中に、間接的または暗黙的に含まれており、シーケンス内の各アイテムを順番に検証しようとすると、そのアイテムの内容または属性を調べることなく、シーケンスの残りのアイテムについての情報は一切なしに一意に決定できます。

問題は、パーザが遭遇すると、検証する選択肢を判断するために "A"が残りのシーケンスに対して先読みする必要があるという問題があるように見えます。

このシーケンスをXSDで表すことができる別の方法はありますか?このような

答えて

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> 

alt text http://www.freeimagehosting.net/uploads/29c07bafa2.png

+0

こんにちは、あなたの答えをありがとう。 シーケンス "A"は合格になります。 - <配列のminOccurs = "0"> <要素のminOccurs = "1" のmaxOccurs = "unbounded" をREF = "TNS:B" /> <配列のminOccurs = "0" のmaxOccurs = "unbounded" を <エレメントmaxOccurs = "unbounded" をREF = "TNS:A" /> <要素のminOccurs = "0" のmaxOccurs = "unbounded" をREF = "TNS:B" /> ... これは問題ありません。 –

+0

いいえ(私が正しく理解していれば)、その場合、代わりにを指定して、任意の数の単一Aを許可しますが、B/C/D要素は許可しないでください。 – Lucero

+0

もう一度おねがいします。あなたは本当にここで私を助けました! –

関連する問題