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

Format d'échange (XML, JSON...) Java Discussion :

Validation élément inconnu


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut Validation élément inconnu
    Bonjour,

    Je souhaiterais valider un fichier XML incluant plusieurs éléments inconnus et élément requis.

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <orders>
        <order>
         <require1>**</require1>
         <require2>**</require2>
         <unknow>***</unknow>
        </order>
        <order>
         <require1>**</require1>
         <require2>**</require2>
         <unknow1>***</unknow1>
         <unknow2>***</unknow2>
        </order>
    Voici le XSD que j'utilise pour valider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xs:element name="orders">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="order" maxOccurs="unbounded" minOccurs="0">
    <xs:complexType>
     
                <xs:choice maxOccurs="unbounded" minOccurs="2">
                  <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
                   <xs:element type="xs:string" name="require1"/>
                  <xs:element type="xs:string" name="require2"/>
    Cependant cela ne fonctionne pas. Quand je rajoute un champs non présent dans le XSD, j'ai une erreur de validation de ce type :
    cvc-complex-type.2.4.a : Contenu non valide trouvé à partir.
    Quelqu'un saurait-il m'indiquer ce qui ne va pas ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    namespace="##other" signifie que seuls les éléments ayant un autre namespace que les autres éléments du document, sont acceptés.

    Vu ce que tu décris, tu veux accepter n'importe quoi, peu importe le namespace. Il n'y a donc pas de raison de mettre ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Merci Thelvin pour ton retour sur mon problème,
    j'ai positionné ce namespace car j'avais une erreur un peu plus critique dans la validation.
    Si je ne positionne pas de namespace dans la balise xs:any voici ce que me retourne la validation :

    Failed to resolve endpoint: validator://orders.xsd due to: cos-nonambig : WC[##any]
    et id (ou des éléments de leur groupe de substitution) violent la règle d'attribution de particule unique (Unique Particle Attribution). Au cours de la validation par rapport à ce schéma, ces deux particules peuvent devenir ambiguës..
    http://en.wikipedia.org/wiki/Unique_...le_Attribution

    As tu une idée?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ah, effectivement. Un <xs:any> accepte tout, y compris les éléments que tu veux avoir obligatoirement.
    Du coup, si tu mets les deux dans un choice, c'est ambigu : quand on tombe sur un de tes éléments obligatoires, on ne sait pas si c'est la règle du any, ou la règle de l'élément qui s'applique.

    En XML Schema les grammaires ambigües sont interdites, donc je ne pense pas qu'on puisse avoir des balises obligatoires, mélangées dans n'importe quel ordre avec n'importe quelles balises.
    Il vaudrait mieux une séquence, qu'un choice.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Merci Thelvin, j'avais en effet un petit doute cependant la documentation crosoft et w3c indique que le container xsd:choice peut être utilisé avec un xs:any. Mais comme tu l'évoques avec une énumération de champs en plus il peut se mélanger les pinceaux, je comprends mieux cette erreur grace à ton explication.

    Donc un xsd sequence, mince je voulais un xml assez souple et ne pas être perturbé sur l'ordre d'apparition des éléments.
    <inconnu/>
    <inconnu/>
    <connu>
    Cela m'oblige à intercaler dans ma xsd avant et après chaque élément un xs:any. Je trouve ça un peu lourd mais il n'y a pas trop de solution apparemment.

    Merci beaucoup Thelvin.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ben, il y pas assez flexible, ou trop flexible. Tu pourrais juste ne pas imposer les deux éléments.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    En effet, cependant en pratique, j'impose certains éléments car ils sont critiques pour le cheminement dans mon SI.
    Après le "fournisseur" externe du fichier xml peut rajouter s'il le souhaite d'autres informations optionnels sans compromettre le fonctionnement.
    Voilà un petit peu le concept que j'avais du mal à faire passer techniquement via la xsd.

Discussions similaires

  1. Exclure certains sous éléments de la validation
    Par T`lash dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/11/2007, 12h07
  2. Réponses: 4
    Dernier message: 22/11/2007, 16h46
  3. validation d'un élément d'une liste box
    Par piotrr dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/09/2007, 23h42
  4. Réponses: 6
    Dernier message: 15/05/2007, 17h27
  5. Réponses: 2
    Dernier message: 16/08/2005, 09h43

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