2011-07-08 5 views
1

オプションのタグsort_expressionを持つXMLスキーマを定義しようとしています。そのオプションのタグが提供されている場合、第2のオプションのタグalternate_sort_expressionは許可されますが、最初のタグの存在を条件とします。XMLスキーマ:別のオプションのタグが提供されている場合にのみ、タグを許可します。

例えば、私が検証するためにこれらの例たい:

<indication> 
    <label>A label for the item</label> 
    <sort_expression>Some Value</sort_expression> 
    <!-- one sort expression was provided --> 
</indication> 

または

<indication> 
    <label>A label for the item</label> 
    <!-- no sort expression was provided --> 
</indication> 

または

<indication> 
    <label>A label for the item</label> 
    <sort_expression>Some Value</sort_expression> 
    <alternate_sort_expression>Some Value</alternate_sort_expression> 
</indication> 

をしかし、以下が検証に合格しないでください。

<indication> 
    <label>A label for the item</label> 
    <!-- no main sort expression was provided --> 
    <alternate_sort_expression>INVALID</alternate_sort_expression> 
</indication> 

私は、2つのシーケンスの選択を使用して、次のスキーマが機能すると考えました。残念ながら、スキーマ自体は検証されていません。 AltovaのXMLのスパイは、複合型表示の内容モデルが曖昧である」私に言っている:

<xs:complexType name="indication"> 
<xs:sequence> 
    <xs:element name="label" type="xs:string"/> 
    <xs:choice> 
    <xs:sequence> 
     <xs:element name="sort_expression" type="xs:string" minOccurs="0"/> 
    </xs:sequence> 
    <xs:sequence> 
     <xs:element name="sort_expression" type="xs:string"/> 
     <xs:element name="alternate_sort_expression" type="xs:string" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:choice> 
</xs:sequence> 

答えて

4

必須の<sort_expression>要素とオプションのを含むオプションの順序を作成します。 0要素。

<sort_expression>が存在する場合にのみ、が表示されますが、<sort_expression>も省略することができます。

<xs:complexType name="indication"> 
    <xs:sequence> 
    <xs:element name="label" type="xs:string"/> 
    <xs:sequence minOccurs="0"> 
     <xs:element name="sort_expression" type="xs:string"/> 
     <xs:element name="alternate_sort_expression" minOccurs="0" maxOccurs="unbounded" type="xs:string"/> 
    </xs:sequence> 
    </xs:sequence> 
</xs:complexType> 
1

これは、ネストされたシーケンス使用可能になります:

<xs:complexType> 
    <xs:sequence> 
     <xs:element name="label" type="xs:string" /> 
     <xs:sequence minOccurs="0" maxOccurs="1"> 
      <xs:element name="sort_expression" type="xs:string" /> 
      <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="alternate_sort_expression" type="xs:string" /> 
      </xs:sequence> 
     </xs:sequence> 
    </xs:sequence> 
</xs:complexType> 

を...少なくともそれは検証します

関連する問題