2010-09-16 95 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等)或编写代码。