IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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] Comparer les valeurs de 2 éléments différents


Sujet :

Valider XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [XSD] Comparer les valeurs de 2 éléments différents
    Bonjour,

    j'aimerai savoir s'il est possible grace à un XSD de comparer les valeurs d'au moins 2 éléments dans un même parent pour savoir si elles sont bien différentes.

    Exemples:
    *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Position>
          <Coord0>(6,8)</Coord0> <- Valeur correct
          <Coord1>(8,8)</Coord1> <- Valeur correct
          <Coord2>(9,11)</Coord2> <- Valeur correct
    </Position>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Position>
          <Coord0>(6,8)</Coord0> <- Valeur incorrect car identique à Coord1
          <Coord1>(6,8)</Coord1> <- Valeur incorrect car identique à Coord0
          <Coord2>(9,11)</Coord2> <- Valeur correct
    </Position>
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    Je n'arrive pas à l'utiliser.

    Je vais expliquer le contexte.
    Dans mon XML, j'ai un truc comme ça (Les éléments Coord* pouvant être dans le désordre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
    <Emplacement>
          <PositionIni>
                <Coord0>(6,8)</Coord0>
                <Coord2>(9,11)</Coord2>
                <Coord1>(8,8)</Coord1>
          </PositionIni>
          <PositionFin>
                <Coord2>(2,7)</Coord2>
                <Coord1>(11,5)</Coord1>
                <Coord0>(3,4)</Coord0>
           </PositionFin>
    </Emplacement>
    Mon XSD d'origine:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     
        <xsd:simpleType name="coordValide">
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="\(([1-9]|1[0-9]|2[0-9])\,([1-9]|1[0-9]|2[0-9])\)" />
            </xsd:restriction>
        </xsd:simpleType>
     
        <xsd:complexType name="PositionType">
            <xsd:choice minOccurs="0" maxOccurs="3">
                <xsd:element name="Coord0" type="coordValide" maxOccurs="1" />
                <xsd:element name="Coord1" type="coordValide" maxOccurs="1" />
                <xsd:element name="Coord2" type="coordValide" maxOccurs="1" />
            </xsd:choice>
        </xsd:complexType>
     
        <xsd:element name="PositionIni"    type="PositionType" />
        <xsd:element name="PositionFin"    type="PositionType" />
     
        <xsd:element name="Emplacement">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element ref="PositionIni" />
                    <xsd:element ref="PositionFin" />
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
     
    </xsd:schema>
    Je dois vérifier que les coordonnées soient différentes entre elles dans la même balise (exemple PositionIni) mais aussi avec celles de l'autre balise.
    En clair, la valeur de l'élément Coord0 de PositionIni doit être différente de celle de Coord1 et Coord2 de PositionIni et de Coord0, Coord1 et Coord2 de PositionFin.

    J'aurai compris que ce serait un truc comme ça:
    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
    16
    17
        <xsd:element name="Emplacement">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element ref="PositionIni" />
                    <xsd:element ref="PositionFin" />
                </xsd:sequence>
            </xsd:complexType>
           <xsd:unique name="CoordUniques">
                <xsd:selector xpath="Emplacement" />
                <xsd:field xpath="PositionIni/Coord0" />
                <xsd:field xpath="PositionIni/Coord1" />
                <xsd:field xpath="PositionIni/Coord2" />
                <xsd:field xpath="PositionFin/Coord0" />
                <xsd:field xpath="PositionFin/Coord1" />
                <xsd:field xpath="PositionFin/Coord2" />
            </xsd:unique>
        </xsd:element>
    Mais ça ne marche pas... Une solution?

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    le sélecteur n'est pas le bon... De plus, avec la règle de nommage de tes éléments (pas très heureuse d'ailleurs, si tu veux mon avis), il faut utiliser le caractère Joker * :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        <xsd:element name="Emplacement">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element ref="PositionIni" />
                    <xsd:element ref="PositionFin" />
                </xsd:sequence>
            </xsd:complexType>
            <xsd:unique name="uniq-coord">
              <xsd:selector xpath="./*/*"></xsd:selector>
              <xsd:field xpath="."></xsd:field>
            </xsd:unique>
        </xsd:element>
    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

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci GrandFather et gorgonite pour votre aide.

    C'est vrai que la règle de nommage de mes éléments m'aidait pas. Mais elle m'était imposé. Je l'aurai fais autrement, mais bon.

    Encore merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2013, 14h05
  2. Réponses: 2
    Dernier message: 21/03/2013, 18h38
  3. [VBA-E] Comparer les valeurs entre classeur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/03/2006, 12h32
  4. Réponses: 17
    Dernier message: 31/12/2005, 21h32
  5. comparer les valeurs d'un tableau
    Par nicerico dans le forum ASP
    Réponses: 4
    Dernier message: 19/08/2004, 11h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo