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 1.1 issue assertion


Sujet :

Valider XML

  1. #1
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut XSD 1.1 issue assertion
    Bonjour à tous,

    Je sais dans les grandes lignes comment écrire un XSD en version 1.0, mais j'ai besoin aujourd'hui de contrôler la valeur d'un élément par rapport à un second élément. J'ai cru comprendre que c'était faisable en utilisant <xs:assert test=""></xs:assert>, mais la je bloque... Impossible d'avoir quelques chose de correct (je le valide avec la version trial de oXygen).

    Dans l'élément AXIS_PTS, je veux vérifier que le sous élément Deposit est égal à l'attribut Name d'un des composants RECORD_ELT du fichier XML.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     <xs:element name="AXIS_PTS">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="INV_NAME_ALIAS" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="Name"/>
        <xs:element ref="LongIdentifier"/>
        <xs:element name="Deposit" type="Deposit"/>
        ...
        </xs:sequence>
       <xs:assert test="AXIS_PTS/child::Deposit eq ../RECORD_ELT/attribute::Name"/>
      </xs:complexType>
     </xs:element>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     <xs:simpleType name="Deposit">
      <xs:restriction base="xs:string">
      </xs:restriction>   
     </xs:simpleType>
    Donc j'aimerai savoir si la manière dont je fait l'assertion (et la définition du simpleType Deposit) est la meilleure.

    Merci beaucoup

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Dans xs:assert, vous ne remontez pas de l'hiérachie d'arbre. Et même à part le remontage, mettant AXIS_PTS là n'est pas correct non plus.

    Supposons l'élément parent commun de AXIS_PTS et RECORD_ELT soit "parent" avec une structure de lieu commun pour simplifier la discussion comme prise ci-dessous : l'élément xs:assert devrait apparaître comme ça.
    Code xml : 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
    <xs:element name="parent">
        <xs:complexType name="parentType">
            <xs:sequence>
                <!-- quelque élément d'autre -->
                <xs:element name="AXIS_PTS>
                    <!-- etc etc comme existées déjà ... -->
                </xs:element>
                <!-- quelque élément d'autre -->
                <xs:element name="RECORD_ELT>
                    <!-- etc etc comme existées déjà ... -->
                </xs:element>
                <!-- quelque élément d'autre -->
            </xs:sequence>
            <!-- xs:assert est placé ici comme ça -->
            <xs:assert test="AXIS_PTS/Deposit = RECORD_ELT/@Name" />
        </xs:complexType>
    </xs:element>
    Il peut y avoir de détails que j'ignore, mais en gros c'est ça.

  3. #3
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    J'en était arrivé à cette conclusion aussi, et du coup j'ai finis avec quelques choses comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xs:element name="PARENT">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="RECORD_LAYOUT" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="AXIS" minOccurs="0" maxOccurs="1"/>
        ...
       </xs:sequence>
       <xs:assert test="every $x in MODULE/descendant::Deposit satisfies count(MODULE/descendant::RECORD_ELT[Name = $x]) gt 0" />
      </xs:complexType>
     </xs:element>
    Où je regarde pour chaque Deposit si il existe au moins un RECORD_ELT possédant ce nom.

    Je ne suis pas sur que ce soit très propre/correct mais ça a l'air de fonctionner...

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2004, 17h15
  2. XSD, Cle primaire...
    Par Goupil dans le forum Valider
    Réponses: 3
    Dernier message: 21/10/2003, 10h04
  3. [XSD] XML Schema
    Par sleepy2002 dans le forum Valider
    Réponses: 3
    Dernier message: 15/09/2003, 10h33
  4. [XSD][Java] choix de la techno
    Par cyrdec dans le forum Valider
    Réponses: 4
    Dernier message: 12/09/2003, 17h36
  5. Fichiers xsd
    Par moxnico dans le forum Valider
    Réponses: 3
    Dernier message: 14/08/2002, 12h48

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