2009-07-06 65 views
1

我試圖在XSD中表示以下DTD片段: -DTD - > XSD轉換:兩個元素的混合列表,一個約束

(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 = 「0」> <元素的minOccurs = 「1」 maxOccurs的= 「無限」 REF = 「TNS:B」/> <序列的minOccurs = 「0」 maxOccurs的= 「無限」 <元件的maxOccurs = 「無限」 REF = 「TNS:A」/> <元素的minOccurs = 「0」 maxOccurs的= 「無限」 REF = 「TNS:B」/> ... 看起來不錯,你看到任何問題? – 2009-07-06 12:40:34