2010-03-03 44 views
16

我想做一個簡單的XSD選擇結構允許一個或兩個引用的元素,但不是沒有。該構造與下面類似,但我一直得到一個模糊性錯誤。我錯過了什麼?XSD「一個或兩個」的選擇結構導致模糊的內容模型

<xs:schema xmlns:xs="..."> 
    <xs:element name="Number" type="xs:integer"/> 
    <xs:element name="Text" type="xs:string"/> 
    <xs:element name="RootStructure"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:choice> 
      <xs:sequence> 
      <xs:element ref="Number"/> 
      <xs:element ref="Text"/> 
      </xs:sequence> 
      <xs:element ref="Number"/> 
      <xs:element ref="Text"/> 
     </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

回答

30

通常的方式做到這一點是這樣的:

<xs:schema xmlns:xs="..."> 
    <xs:element name="Number" type="xs:integer"/> 
    <xs:element name="Text" type="xs:string"/> 
    <xs:element name="RootStructure"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:choice> 
      <xs:sequence> 
      <xs:element ref="Number"/> 
      <xs:element ref="Text" minOccurs="0"/> 
      </xs:sequence> 
      <xs:element ref="Text"/> 
     </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
0

一些額外的提示,如果你有多個元素相連,你想要的元素之一束或其它束,或兩者兼而有之,你可以這樣做:

<xsd:complexType name="ComplexTypeName"> 
    <xsd:choice> 
     <xsd:sequence> 
      <xsd:element name="theElement" /> 
      <xsd:element name="theElementIsFlagged" /> 
      <xsd:choice> 
       <xsd:sequence> 
<!-- note the empty sequence block --> 
       </xsd:sequence> 
       <xsd:sequence> 
        <xsd:element name="theOtherElement" /> 
        <xsd:element name="theOtherElementIsFlagged" /> 
       </xsd:sequence> 
      </xsd:choice> 
     </xsd:sequence> 
     <xsd:sequence> 
      <xsd:element name="theOtherElement" /> 
      <xsd:element name="theOtherElementIsFlagged" /> 
     </xsd:sequence> 
    </xsd:choice> 
</xsd:complexType> 

以防萬一你碰到相同的問題!

相關問題