2010-09-16 8 views
2

Je me demande s'il existe un moyen de restreindre ce qui valide en utilisant un élément pour vérifier un autre élément. Dans l'exemple ci-dessous, est-il possible de vérifier une restriction qui si OptionOne est sélectionné comme "B", alors RefIssue devra être sélectionné comme "XXXX-B-XXX" et vice versa?xml restriction d'élément xsd en utilisant un autre élément

J'ai regardé dans key/refkey, mais je n'ai pas été capable de comprendre s'il pouvait faire cette contrainte. Toute aide appréciée.

<?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> 

Répondre

0

On dirait que vous pouvez le faire avec XSD 1.1, mais il n'est pas libéré et il n'y a aucune implémentation de celui que je peux utiliser.

1

Ceci n'est pas possible dans le schéma XML. Vous ne pouvez pas avoir de contraintes d'éléments croisés de ce genre, vous devrez utiliser un autre langage (Schematron, XQuery, etc.) ou écrire du code.