2010-11-22 20 views
1

Ce que je dois faire est de valider ce morceau de xml:xsd: element même, différents attributs

<token type="email">qwqe12e12e1</token> 
<token type="mobile">12e12313121w</token> 

Je sais comment valider cet élément avec l'attribut et le contenu, mais ma question est de savoir comment empêcher signe de tapez par exemple email se produire plus d'une fois? J'ai besoin des deux jetons, mais chaque jeton ne peut apparaître qu'une seule fois.

Répondre

0

Compte tenu de l'échantillon XML suivant:

<tokens> 
    <token type="email">qwqe12e12e1</token> 
    <token type="mobile">12e12313121w</token> 
    <token type="mobile">1234</token> 
</tokens> 

et XSD suivant:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="tokens"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="token" maxOccurs="unbounded" /> 
     </xs:sequence> 
    </xs:complexType> 
    <!-- token[type] to only occur once --> 
    <xs:unique name="type"> 
     <xs:selector xpath="token" /> 
     <xs:field xpath="@type" /> 
    </xs:unique> 
    </xs:element> 

    <xs:element name="token"> 
    <xs:complexType> 
     <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attribute name="type" use="required"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:enumeration value="email"/> 
       <xs:enumeration value="mobile"/> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:attribute> 
     </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

La validation échoue sur le second type de jeton "mobile".

Lorsque le second type de jeton "mobile" est supprimé du code XML d'entrée, la validation aboutit.