Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

[XSD] Equivalent du <choice> pour les attribut


Sujet :

Valider XML

  1. #1
    Candidat au Club
    [XSD] Equivalent du <choice> pour les attribut
    Bonjour à tous.

    J'aimerai savoir s'il est possible de créer l'équivalent du <choice> pour des attributs pour obtenir quelquechose qui ressemblerait à cela :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <choice>
      <attributeGoup>
        <attribute name="A"/>
        <attribute name="B"/>
      </attributeGoup>
     
      <attribute name="C"/>
    </choice>


    Merci d'avance

  2. #2
    Expert éminent
    Bonjour,

    il n'existe pas de fonction toute faite permettant de définir cela, mais il est possible de s'en sortir en utilisant un xs:key.

    Exemple :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <xs:element name="toto">
    	<xs:complexType>
    		<xs:simpleContent>
    			<xs:extension base="xs:string">
    				<xs:attribute name="a" type="xs:string"/>
    				<xs:attribute name="b" type="xs:string"/>
    				<xs:attribute name="c" type="xs:string"/>
    			</xs:extension>
    		</xs:simpleContent>
    	</xs:complexType>
    	<xs:key name="att">
    		<xs:selector xpath="."/>
    		<xs:field xpath="@a|@b"/>
    	</xs:key>
    </xs:element>

    L'élément <toto> doit contenir un attribut a ou b, et un attribut c. Pour définir cette contrainte, on définit un xs:key qui déclare que l'élément toto est identifié par une clé composée de l'attribut a ou de l'attribut b ; si les deux attributs sont présents (même avec des valeurs différentes), cela crée deux clés pour <toto>, donc un doublon qui met en échec la validation. D'autre part, le <xs:key> impose qu'une clé soit définie pour l'élément, et donc qu'un des deux attributs soit présent (contrairement à <xs:unique> qui n'impose pas que le <xs:field> renvoie une valeur)
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Candidat au Club
    Rapide, clair, efficace
    merci GrandFather
    Manque juste la distribution d'un werthers original et t'es le grand-père parfait

  4. #4
    Membre du Club
    Bonjours le sujet m'intéresse mais il me semble qu'il ne fonctionne pas.

    j'ai fait un xml qui ne devrai pas respecter être valide et pourtant oxygen (qui est un outils correct en ce qui concerne tout ce qui touche à l'XML) me le valide !

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8"?>
    <toto xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="test.xsd"
     a="sdqs"
     b="csdcsd"
     c="csdcsdc" >
     
    </toto>

  5. #5
    Expert éminent
    La validation n'est en fait pas réalisée par Oxygen directement mais par Xerces-J, qui implémente W3C XML Schema. Ce schema est parfaitement licite, je pencherais plutôt pour un problème de paramétrage de Oxygen.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  6. #6
    Nouveau Candidat au Club
    Bonjour,

    Par rapport à cette question de la FAQ, il y a t il moyen de définir un élément qui doit avoir l'attribut a ou l'attribut b, mais qui est aussi valide s'il a les deux attributs a et b ?

    Merci

    PW

  7. #7
    Membre actif
    Bonjour,
    Pour info, la solution présenté ici avec le xsd:key ne fonctionne pas avec xml V1.0. A priori il y a une évolution avec la version 1.1, mais sinon, voir topic http://www.developpez.net/forums/d14...ice-attributs/