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 :

différents élements suivant la valeur de l'élément supérieur


Sujet :

Valider XML

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut différents élements suivant la valeur de l'élément supérieur
    Bonjour,

    Je cherche à valider mes XML avec un XSD (je débute) pour que mon script en Perl qui lis le XML puisse faire une validation propre des données du XML avant de le traiter.

    Cependant, j'ai des XML avec des éléments de ce genre par exemple, avec des actions de plusieurs types (type=blabla) qui prennent des elems/attribs différents suivant l'action sélectionnée :

    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
    <!-- ACTIONS -->
    <actions>
        <action type="sftpdownload">
            <mandatory>1</mandatory>
            <file path="/var/tmp/a.txt"/>
            <file path="/var/tmp/b.txt"/>
            <file path="/var/tmp/c.txt"/>
            <server>hostname_here</server>
            <username>username_here</username>
            <debug>no</debug>
            <interval>20</interval>
            <timelimit>20:00</timelimit>
        </action>
        <action type="rename">
            <mandatory>1</mandatory>
            <rename from="a.txt" to="a_new.txt"/>
            <rename from="b.txt" to="b_new.txt"/>
            <rename from="c.txt" to="c_new.txt"/>
        </action>
        <action type="scpupload">
            <mandatory>1</mandatory>
            <path>a_new.txt</path>
            <username>username_here</username>
            <server>hostname_here</server>
            <remotepath>/tmp</remotepath>
            <options></options>
        </action>
    </actions>
    Est-ce possible de valider cela en XSD ?

    car si je prend un simple exemple du premier (sftpdownload), je peux faire ç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
    18
    19
    20
    21
    22
    <!-- ACTION (at least 1) -->
    <xs:element name="action" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
            <xs:sequence>
                <!-- MANDATORY -->
                <xs:element type="xs:int" name="mandatory" minOccurs="1" maxOccurs="1"/>
                <!-- ELEMENTS OF THE ACTION -->
                <xs:element name="file" maxOccurs="unbounded" minOccurs="1">
                    <xs:complexType>
                        <xs:attribute type="xs:string" name="path"/>
                    </xs:complexType>
                </xs:element>
                <xs:element type="xs:string" name="server"/>
                <xs:element type="xs:string" name="username"/>
                <xs:element type="xs:string" name="debug" minOccurs="0" maxOccurs="1"/>
                <xs:element type="xs:int" name="interval" minOccurs="0" maxOccurs="1"/>
                <xs:element type="xs:string" name="timelimit" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
            <!-- ACTION TYPE -->
            <xs:attribute type="xs:string" name="type"></xs:attribute>
        </xs:complexType>
    </xs:element>
    mais comment faire pour changer ces options suivant le type d'action ?
    je précise que les actions ne sont pas toujours les mêmes, j'en ai une 20aine de dispo, et elles peuvent se répéter (je peux avoir plusieurs conditions sftpdownload à la suite par exemple), et certaines sont évidemment facultatives, c'est configuré suivant le besoin

    merci de vos lumières !

    merci !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est possible, à condition d'accepter comme valide tout ce que <action> peut possiblement contenir, indépendamment du type.
    C'est impossible de se baser sur un attribut pour changer de type à valider.

    Ce que tu pourrais faire, c'est changer le format XML, pour que le type ne soit plus un attribut, mais un élément <sftpdownload>. Suivant les cas, il serait peut-être plus simple qu'il soit contenu à l'intérieur de <action> ou que <action> soit simplement supprimé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut
    hello

    merci pour ton message

    donc globalement, si je veux faire simple, je dois définir plusieurs elements avec un simple minOccurs="0" bien sale histoire de dire qu'ils sont facultatifs ? mais au moins s'ils existent je check le type de datas et/ou attributs ?

    si je refais le XML, je dois changer une grosse partie de mon code, et je ne peux pas me permettre de le faire pour l'instant

    n'y-a-t'il pas d'autres methoes que le XSD pour faire ma validation ?

    merci à toi

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Non, c'est de la sémantique et XSD ne vérifie que la grammaire. C'est d'ailleurs pour ça qu'il est au moins possible de définir des bindings XML rien qu'en XSD.

    Si tu pouvais changer un peu ton XML, la FAQ dit que tu pourrais remplacer l'attribut type par xsi:type.
    Ça peut te sortir d'un mauvais pas, mais c'est inhabituel.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    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
    Citation Envoyé par frenchlion
    n'y-a-t'il pas d'autres methoes que le XSD pour faire ma validation ?
    Souvent on s'en serve de xsd pas seulement pour la raison de validation toute seule, mais aussi pour les technologies qu'il engend, les téchnologies qui le dépendent. Si le xml n'a que "actions" qui encadre des éléments "action" et le but d'exercice n'est que de valider, il y a d'autres façons de faire avancer des choses.

    Citation Envoyé par frenchlion
    ...pour que mon script en Perl...
    Je dirais vous avez la chance. En Perl, vous pouvez charger le module XML::Schematron::LibXSLT via CPAN. Avec le module, vous pouvez faire exactement une validation de façon Schematron. Pas seulement vous pouvez le faire, il me semble il est plus pertinent de le faire de la façon qui fait Schematron un champion du genre.

    Vous pouvez commencer par là :
    http://search.cpan.org/~khampton/XML...ron/LibXSLT.pm
    http://search.cpan.org/~khampton/XML.../Schematron.pm

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/05/2015, 15h10
  2. [XSD] Comparer les valeurs de 2 éléments différents
    Par ZackaruS dans le forum Valider
    Réponses: 4
    Dernier message: 20/08/2009, 17h36
  3. Réponses: 4
    Dernier message: 27/03/2008, 23h01
  4. Réponses: 3
    Dernier message: 23/04/2007, 11h55
  5. Réponses: 11
    Dernier message: 30/03/2007, 10h30

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