2016-08-25 53 views
0

名爲「拒絕」的父標記是可選標記。此外,還有2個名爲'option1'和'option2'的子標籤。如果父標籤值出現在請求中,那麼至少必須給一個孩子,最多隻有兩個孩子。但是,如果父母不出現,那麼沒有一個孩子應該出現。xsd驗證 - 子選擇取決於父項

如何在2個子標籤中完成此選擇?

代碼:

<xs:element name="Refuse" minOccurs="0" maxOccurs="1">     
<xs:complexType> 
    <xs:sequence>       
     <xs:element name="option1" minOccurs="0" maxOccurs="1"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="5" /> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
     <xs:element name="option2" minOccurs="0" maxOccurs="1"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="10" /> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 

回答

0

這可以使用的選擇來解決,例如:

<xs:element name="Refuse" minOccurs="0" maxOccurs="1">     
<xs:complexType> 
    <xs:choice>       
     <xs:sequence> 
      <xs:element ref="option1"/> 
     </xs:sequence> 
     <xs:sequence> 
      <xs:element ref="option1"/> 
      <xs:element ref="option2"/> 
     </xs:sequence> 
     <xs:sequence> 
      <xs:element ref="option2" 
     </xs:sequence> 
    </xs:choice> 
</xs:complexType> 
</xselement> 

<xs:element name="option1" > 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="10" /> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

<xs:element name="option2"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:maxLength value="5" /> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

在模式的選擇元件允許一個且只有所定義的序列的一個發生。對於選擇檢查的更多信息here

爲了便於使用和避免重複的代碼,我分離了option1和option2元素的定義。

+0

我想這個代碼解決,但不幸的是,我得到一個錯誤:本地複雜類型:內容模型是不確定性。 [Line:] – Nikhil

0

使用選擇

<xs:element name="Refuse" minOccurs="0" maxOccurs="1">     
<xs:complexType> 
    **<xs:choice minOccurs="1" maxOccurs="2">** 
     **<xs:element name="option1">** 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="5" /> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
     **<xs:element name="option2">** 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="10" /> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:element> 
    </xs:choice> 
</xs:complexType> 

+0

您知道這允許兩次出現其中一個選項嗎?因此,例如這是根據規範或不?我假設你只是最多隻想要每個選項一次。正如原始問題中的maxOccurs =「1」所示。 – ophychius

+0

@ophychius我不知道option1可能發生兩次。你的假設是正確的,每個選項最多需要一次。 – Nikhil