2010-09-16 92 views
2

我想知道是否有限制使用一個元素來檢查另一個元素的驗證方法。在下面的例子中,是否可以檢查一個限制條件,如果OptionOne被選爲「B」,那麼RefIssue必須選擇爲「XXXX-B-XXX」,反之亦然?xml使用另一個元素的xsd元素限制

我已查看過關鍵/ refkey,但我無法弄清楚它是否可以執行此約束。任何幫助讚賞。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="CustomIssueSchema"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="CustomIssue" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="CustomArgs" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="OptionOne"> 
         <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:enumeration value="A"/> 
          <xs:enumeration value="B"/> 
          <xs:enumeration value="C"/> 
         </xs:restriction> 
         </xs:simpleType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="CustomRef" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="RefIssue"> 
         <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:enumeration value="XXXX-A-XXX"/> 
          <xs:enumeration value="XXXX-B-XXX"/> 
          <xs:enumeration value="XXXX-C-XXX"/> 
         </xs:restriction> 
         </xs:simpleType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

回答

0

看起來你可以用XSD 1.1來做到這一點,但它沒有發佈,也沒有我可以使用的實現。

1

這在XML模式中是不可能的。你不能有這種交叉元素約束,你將不得不使用另一種語言(Schematron,XQuery等)或編寫代碼。