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] Probléme avec nillable [FAQ]


Sujet :

Valider XML

  1. #1
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut [XSD] Probléme avec nillable
    Bonjour,

    J'ai un fichier xsd qui valide mon flux xml. Jusque la pas de soucis sauf pour une balise <VISITE_MEDICALE> qui a l'option nillable d'activé.
    En effet, cette balise peut etre vide.

    En gros dans mon flux XML la balise est du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <VISITE_MEDICALE></VISITE_MEDICALE>
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <VISITE_MEDICALE>2005-09-09</VISITE_MEDICALE>
    Mon flux XSD contient la déclaration de la balise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:element ref="VISITE_MEDICALE" minOccurs="0"/>
    puis plus loin l'implémentation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:element name="VISITE_MEDICALE" type="xs:date" nillable="true"/>
    J'ai un peu du mal à trouver (et à comprendre) l'option nillable.
    Si elle est notée, elle permet d'autoriser que le champ soit vide mais valide.

    Mais, ça plante :-/

    Aprés plusieurs essaies, il semble que le type date ne peut pas etre vide tout simplement.

    Comment faire pour consillier les 2 ? Vérifier que le champ est format date (quand il est remplis) mais ne pas faire d'erreur en cas de date vide :

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

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

    ton utilisation de l'option nillable est correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:element name="VISITE_MEDICALE" type="xs:date" nillable="true"/>
    Mais pour que le processeur de schéma puisse faire la différence entre un élément qui est vide dans l'instance XML parce que son créateur l'a voulu, et un élément qui est anormalement vide, il faut que l'instance XML soit marquée avec l'attribut nil, de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <VISITE_MEDICALE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    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
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    bonjour,

    Merci pour ta réponse
    Mais je ne comprend pas trop ou je dois mettre le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <VISITE_MEDICALE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
    :

    Dans le XML ou dans le XSD ?
    Je suis un peu perdue

    si c'est dans le XML, il me faut donc rajouter des champs ?

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    C'est bien dans le XML qu'il faut ajouter l'attribut xsi:nil, dans les éléments <VISITE_MEDICALE> n'ayant pas de valeur.

    Le défaut de cette méthode est qu'elle est intrusive, puisqu'elle nécessite de modifier l'instance XML. L'autre option consiste à transformer le xs:date en xs:string, qui accepte des chaînes vides, mais on perd en rigueur de validation, ou encore d'utiliser un xs:pattern, au détriment de la lisibilité.
    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
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    Ok, donc pour résumé,
    si ma date est non null j'aurai un flux xml du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <visite_medicale>2005-06-14</visite_medicale>
    Dans le cas contraire, il faudra que j'y mette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <visite_medicale xsi:nil="true"></visite_medicale>
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <visite_medicale xsi:nil="true"/>
    ? A ce moment la, ca changer le type de mes balises ?

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Oui, c'est exactement cela. Il vaut cependant mieux privilégier cette écriture, plus compacte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <visite_medicale xsi:nil="true"/>
    Citation Envoyé par mmontig
    ? A ce moment la, ca changer le type de mes balises ?
    Que veux-tu dire par là ?
    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

  7. #7
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    Et bien, il existe une différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <visite_medicale>bla bla</visite_medicale>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <visite_medicale bla bla />
    Est-ce que mon xsl va l'accepter de la meme facon ?

    N'y aura-t-il pas de soucis entre 'type simple' et 'type complexe' ?

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Ca ne change absolument rien pour XSL, je ne saisis pas bien ta question...
    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

  9. #9
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    Je vois ça Et merci de prendre le temps d'essayer de comprendre.

    En gros, il existe 2 types de balisage sous XML

    soit
    <balise>le texte qui va bien</balise>
    soit
    <balise attribut="le texte qui va bien"/>
    ?

    Le premier étant pour moi un type 'simple' et l'autre un type 'complexe' :

    Le xsl ne fait-t-il pas la différence ?
    Si pour ma balise <viste_medicale>2005-06-16</visite_medicale> je me retrouve à lui mettre (quand la date est nulle) <viste_medicale xsi:nill="true"/> ne va-t-il pas bugger et ne pas reconnaitre la balise ?



    ps: dans mon autre post ma question portait aussi la dessus.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par mmontig
    ps: dans mon autre post ma question portait aussi la dessus.
    Dans ce post, il est question d'un schéma XML (XSD). Or, là, tu me parles d'une feuille de style (XSL)...
    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

  11. #11
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    oups je voulais parler de XSD et non XSL...
    Désolée, je m'embrouille dans les abréviation

  12. #12
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 13
    Par défaut
    Désolé pour le UP du sujet,

    Mais effectivement après avoir essayé la solution de GrandFather, je confirme que tout fonctionne et pour répondre au problème de balise simple ou balise complexe, le XSD gère tout seul, donc pas de problème à avoir deux type de balises et un seul schéma XSD.

    Merci votre Post m'a beaucoup aidé !

Discussions similaires

  1. [XSD] problème avec all et extension
    Par leelou12 dans le forum Valider
    Réponses: 1
    Dernier message: 03/05/2010, 13h41
  2. [XSD] Problème validation xml avec schema
    Par Loki13 dans le forum Valider
    Réponses: 1
    Dernier message: 24/10/2008, 20h19
  3. [JAXB] XSD to Java - problème avec "xs:any"
    Par Mat1664 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 31/01/2008, 16h19
  4. [XSD] Problème avec "xs:choice"
    Par be_tnt dans le forum Valider
    Réponses: 4
    Dernier message: 06/02/2007, 16h00
  5. Réponses: 3
    Dernier message: 08/12/2005, 10h38

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