Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    janvier 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Problème de vérification de choix pour les attributs

    Bonjour,

    Je me trouve actuellement face à un problème. Je souhaiterai savoir si il est possible d'effectuer la vérification suivante avec un schéma XML :

    J'ai un code XML qui peut s'écrire de 3 façons différentes.

    Code :
    <couleur rouge="255" vert="42" bleu="0">Le texte à colorer</couleur>
    ou

    Code :
    <couleur hexa="e4e4f2">Le texte à colorer</couleur>
    ou

    Code :
    <couleur nom="bleu">Le texte à colorer</couleur>

    En fonction de ces codes, je souhaiterai pouvoir effectuer la vérification suivante avec un schéma XML :
    Vérifier que l’attribut ["rouge" ET "vert" ET "bleu"] sont présents OU l'attribut "hexa" OU l'attribut "nom".

    Que me conseillez-vous pour faire face à ce problème ?


    J'ai testé le code suivant, mais sans sucés. Car dans ce cas présent le code attend un attribut rouge, hexa et nom en même temps si j'ai bien compris...
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <xsd:element name="couleur"> 
    	<xsd:complexType>
    		<xsd:simpleContent>
    			<xsd:extension base="xsd:string">
    				<xsd:attribute type="checkColorRGB" name="rouge"/> 
    				<xsd:attribute type="checkColorRGB" name="vert"/> 
    				<xsd:attribute type="checkColorRGB" name="bleu"/> 
    				<xsd:attribute type="checkColorHexa" name="hexa"/> 
    				<xsd:attribute type="checkColorName" name="nom"/>
    			</xsd:extension>
    		</xsd:simpleContent>
    	</xsd:complexType>
    	<xsd:key name="key-RGB">
    		<xsd:selector xpath="."/>
    		<xsd:field xpath="@rouge|@vert|@bleu"/>
    	</xsd:key> 
    	<xsd:key name="key-hexa">
    		<xsd:selector xpath="."/>
    		<xsd:field xpath="@hexa"/>
    	</xsd:key> 
    	<xsd:key name="key-name">
    		<xsd:selector xpath="."/>
    		<xsd:field xpath="@nom"/>
    	</xsd:key> 
    </xsd:element>

    En vous remerciant par avance.

  2. #2
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    9 483
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 9 483
    Points : 14 313
    Points
    14 313

    Par défaut

    Citation Envoyé par yeti47 Voir le message
    Je souhaiterai savoir si il est possible d'effectuer la vérification suivante avec un schéma XML
    Non.
    Les attributs, en XSD :
    - ou bien n'ont pas le droit d'être là du tout.
    - ou bien ont le droit optionnel d'être là, sans condition.
    - ou bien ont le devoir d'être là, sans condition.

    Peu importe ce qu'il y a autour d'eux. Autres attributs, contenu de l'élément, ça ne change rien.

    Citation Envoyé par yeti47 Voir le message
    Que me conseillez-vous pour faire face à ce problème ?
    Au niveau de la validation, autorise les trois à être là ensemble. Et au niveau au-dessus, quand tu cherches à traiter le fichier, traite ça comme une erreur.

    Autre possibilité dans un cas comme celui-ci, permettre :

    Code :
    1
    2
    3
    4
    <couleur>
      <rgb rouge="255" vert="42" bleu="0"/>
      <texte>Le texte à colorer</texte>
    </couleur>
    ou

    Code :
    1
    2
    3
    4
    <couleur>
      <hexa>e4e4f2</hexa>
      <texte>Le texte à colorer</texte>
    </couleur>
    ou

    Code :
    1
    2
    3
    4
    <couleur>
      <nom>bleu</nom>
      <texte>Le texte à colorer</texte>
    </couleur>
    Ça, ça peut se vérifier.
    Mais pour cet exemple-là, c'est quand même sacrément nul.


    Citation Envoyé par yeti47 Voir le message
    J'ai testé le code suivant, mais sans sucés. Car dans ce cas présent le code attend un attribut rouge, hexa et nom en même temps si j'ai bien compris...
    Oui, <xsd:key> sert d'une part à assurer l'existence de ce qu'il vise.
    Donc 3 <xsd:key> => existence obligatoire de 3 choses.

  3. #3
    Invité de passage
    Inscrit en
    janvier 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : janvier 2012
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    Merci beaucoup thelvin pour cette réponse. Ça ne peut pas être plus clair !

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •