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 XML avec un XSD [XSD]


Sujet :

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

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut Validation XML avec un XSD
    Bonjour

    J'ai un XML que je veut valider avec un XSD. C'est un XML simple de ce genre:

    Code XML : 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="ISO-8859-1"?>
     
    <COMMS application="Cadral+">
    	<COMM>
              <a>aaa</a>
              <x>aaa</x>
    	</COMM>
            <COMM>
              <b>aaa</b>
              <d>aaa</d>
    	</COMM>
    </COMMS>

    Je voudrais valider que je reçoit un toujours un XML avec cette structure, jusqu'au niveau de COMM, car le contenu sous le noeud COMM pourra varier et même être vide.

    J'ai crée le XSD suivant pour valider cet XML:
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
    <xs:element name="COMMS">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="COMM" maxOccurs="unbounded">
            <xs:complexType mixed="true">
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="application" type="xs:string" use="required"/>
      </xs:complexType>
    </xs:element>
     
    </xs:schema>

    Cependant en exécutant la validation sous Java, j'obtient l'erreur suivante:

    org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'a'. No child element is expected at this point.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)

    Mon code Java pour effectuer la validation marche car j'ai testé avec d'autres XMLs/XSDs mais le voilà quand même:

    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
     
    // define the type of schema - we use W3C:
    		      String schemaLang = "http://www.w3.org/2001/XMLSchema";
     
    		      // get validation driver:
    		      SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
     
    		      // create schema by reading it from an XSD file:
    		      //Schema schema = 
    		    	  //factory.newSchema(new StreamSource("D:\\CVSProjects\\Eclipse\\PComTraitementAutomatique2\\schema.xsd"));
    		      Schema schema = 
    		    	  factory.newSchema(new StreamSource("D:\\test\\t.xsd"));
    		      Validator validator = schema.newValidator();
     
    		      // at last perform validation:
    		      validator.validate(new StreamSource("d:/test/t.xml"));
    System.out.println("The XML is valid");
    		    }catch (SAXException ex) {
    		      // we are here if the document is not valid:
    		      // ... process validation error...
    		    	ex.printStackTrace();
    		    } catch (Exception ex) {
    		      ex.printStackTrace();
    		    }
    Quelqu'un peut-il m'aider?

    merci

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Je voudrais valider que je reçoit un toujours un XML avec cette structure, jusqu'au niveau de COMM, car le contenu sous le noeud COMM pourra varier et même être vide.
    Je suis pas certain qu'on puisse faire ça avec des XSDs car le message d'erreur signifie que le parser SAX ne connait pas la balise <a> car elle n'est pas déclarée dans le XSD. (il te dit que <COMM> n'est pas censé contenir des balises.)
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut
    Merci pour la réponse, c'est bien ce que je pensais...
    A part si on se trompe et que quelqu'un ai une meilleure idée, je devrais faire ma propre méthode en Java pour valider la structure de mon XML...

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Je me demande surtout quel est l'intérêt d'avoir des noms de balises différents (enfin je veux dire variables) ? Ça sert à quoi ?
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut
    Le XML que je vais traiter va avoir la structure base dont j'ai parlé mais comme on va recevoir cet XML de différente application, on aura des balises différentes...

    Citation Envoyé par Marco46 Voir le message
    Je me demande surtout quel est l'intérêt d'avoir des noms de balises différents (enfin je veux dire variables) ? Ça sert à quoi ?

  6. #6
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Si c'est vous qui définissez la structure du XML vous devriez imposer une balise nommée <contenu> avec un attribut type où vos clients pourraient envoyer la valeur qu'ils veulent dans cet attribut. Là tu pourrais alors écrire un XSD valide.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  7. #7
    Membre actif
    Homme Profil pro
    Développement logiciel
    Inscrit en
    Mai 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développement logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2005
    Messages : 74
    Points : 244
    Points
    244
    Par défaut
    Je ne connais pas l'API que tu utilises pour la validation, mais a priori le fait qu'elle renvoie une erreur en cas d'élément en trop peut être configuré.

    En tout cas la configuration par défaut de Castor XML permet de valider un fichier XML pour un objet contenant des éléments "en trop".

    Sinon il existe aussi cette méthode, que je n'ai pas testée: les éléments any et anyAttribute.

    Ils te permettent d'autoriser n'importe quel type d'élément ou d'attribut, comme sous cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsd:complexType name="descType" mixed="true">
      <xsd:sequence>
       <xsd:any namespace="http://www.w3.org/1999/xhtml"
        minOccurs="0" maxOccurs="unbounded"
        processContents="skip"/>
      </xsd:sequence>
    </xsd:complexType>

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2007
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 401
    Points : 153
    Points
    153
    Par défaut
    C'est exactement ceci que je cherchais.

    Merci!

    Citation Envoyé par egann538 Voir le message
    Je ne connais pas l'API que tu utilises pour la validation, mais a priori le fait qu'elle renvoie une erreur en cas d'élément en trop peut être configuré.

    En tout cas la configuration par défaut de Castor XML permet de valider un fichier XML pour un objet contenant des éléments "en trop".

    Sinon il existe aussi cette méthode, que je n'ai pas testée: les éléments any et anyAttribute.

    Ils te permettent d'autoriser n'importe quel type d'élément ou d'attribut, comme sous cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsd:complexType name="descType" mixed="true">
      <xsd:sequence>
       <xsd:any namespace="http://www.w3.org/1999/xhtml"
        minOccurs="0" maxOccurs="unbounded"
        processContents="skip"/>
      </xsd:sequence>
    </xsd:complexType>

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

Discussions similaires

  1. [XSD] Validation xml avec un xsd automatique
    Par Tora21 dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 01/07/2011, 14h37
  2. Réponses: 1
    Dernier message: 20/04/2010, 16h41
  3. Validation XML avec un XSD
    Par olobraecky dans le forum C
    Réponses: 2
    Dernier message: 16/09/2008, 13h30
  4. [XSD] [Xerces-J 1.4.4] Validation XML avec schéma XSD
    Par g_rare dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 08/04/2008, 16h40
  5. [XSD][xerces] validation xml avec un xsd
    Par chand_bing dans le forum Valider
    Réponses: 2
    Dernier message: 05/02/2004, 20h21

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