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 une instance XML avec schéma(plusieurs fichiers XSD)


Sujet :

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

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut Validation une instance XML avec schéma(plusieurs fichiers XSD)
    Bonjour,

    J'ai parcouru sur Internet pour la validation un fichier XML avec un schéma constituant des fichiers XSD en java: mais je n'ai rien trouvé, seulement la validation un XML contre un XSD simple. Il existe en C# des articles/API traités sur ce sujet mais aucun pour Java.

    Données en entrée du problème:
    - un fichier XML (instance) à valider.
    - un schéma constituant des fichiers XSD dans un répertoire

    J'ai essayé avec ceci mais il ne marche pas
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    public void validatorWithDom()
    {
      try
      {
        DocumentBuilderFactory documentFactory =  
              DocumentBuilderFactory.newInstance();
        documentFactory.setValidating(false);
        documentFactory.setNamespaceAware(true);
    
        SchemaFactory schemaFactory =
        SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    
        documentFactory.setSchema(schemaFactory.newSchema(
    	new Source[]
           {
    	  new StreamSource("C:/XmlSchemes/musiml_All.xsd"),
    	  new StreamSource("C:/XmlSchemes/musiml_instance.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_container.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_curve.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_enum.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_error.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_generic.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_main.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_matrix.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_primitive.xsd"),
    	  new StreamSource("C:/XmlSchemes/Generic/musiml_vectors.xsd"),
            }
        )
      );
    
      DocumentBuilder documentBuilder =documentFactory.newDocumentBuilder();
      documentBuilder.setErrorHandler(new ErrorChecker());
    
      Document document = 
        documentBuilder.parse(new InputSource("C:/Response/result.xml"));
      }
      catch (SAXException e)
      {
    	// we are here if the document is not valid:
    	// ... process validation error...
    	System.err.println("===>" + e.getMessage());
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    
    }
    Quand j'ai exécuté j'ai des erreurs suivantes:


    ERROR [2008-12-16 16:40:51.411] validationXSD.ErrorChecker " Line number: 6
    Column number: 52
    Message: cvc-elt.1: Cannot find the declaration of element 'resDoc'."
    ERROR [2008-12-16 16:40:51.427] validationXSD.ErrorChecker " Line number: 6
    Column number: 52
    Message: cvc-elt.1: Cannot find the declaration of element 'resDoc'."
    ERROR [2008-12-16 16:40:51.427] validationXSD.ErrorChecker " Line number: 11
    Column number: 23
    Message: cvc-elt.4.2: Cannot resolve 'ListResultMktData' to a type definition for element 'results'."


    Contenu de response.xml
    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
    29
    30
    31
    32
    33
    34
    35
    36
    <?xml version="1.0" encoding="utf-8"?>
    <resDoc
        xmlns = "http://www.test.org"
        version = "1.2.3.1"
        xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
        <results
            xsi:type = "ListResultMktData"
            source = "PC Client"
            destination = "Marketdata connector"
            conf = "NONE">
            <resMktData
                xsi:type = "CorrelMatrixExtended"
                specificParameter = "Closing"
                asOfDate = "2008-11-10T13:13:13">
                <maturities>2008-11-11T00:00:00</maturities>
                <correls>
                    <maturity>2008-11-11T00:00:00</maturity>
                    <matrix>
                        <vector>
                            <value>1.00000000</value>
                            <value>-0.10941950</value>
                        </vector>
                        <vector>
                            <value>-0.10941950</value>
                            <value>1.00000000</value>
                        </vector>
                    </matrix>
                </correls>
                <names>NIKKEI 225</names>
                <names>JPY LIB 3M</names>
            </resMktData>
        </results>
    </resDoc>
    
    Pourriez-vous m'indiquer comment valider ce XML (instance) avec l'ensemble des XSD?

    Merci

  2. #2
    Membre régulier Avatar de NizarK
    Inscrit en
    Mars 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 189
    Points : 122
    Points
    122
    Par défaut
    Je connais une méthode pour valider un xml suivant plusieurs XSD. Toutefois elle est basée sur les namespaces ( et non en utilisant xsi:type comme ce qui est fait ici). et aussi en utilisant SAXParser.

    SI tu n'es pas limité par ces deux choses alors je peux te donner cette méthode

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Salut NizarK,

    Peux-tu m'indiquer comment valider un instance XML contre les XSD?
    Je peux utiliser n'importe quel parser si celui-ci peut valider mon flux XML contre les XSD schéma.

    Merci

  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 : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 608
    Points
    19 608
    Par défaut
    Citation Envoyé par NizarK Voir le message
    Je connais une méthode pour valider un xml suivant plusieurs XSD. Toutefois elle est basée sur les namespaces ( et non en utilisant xsi:type comme ce qui est fait ici). et aussi en utilisant SAXParser.

    SI tu n'es pas limité par ces deux choses alors je peux te donner cette méthode
    J'aurais bien aimé la voir moi la méthode, comme ça j'aurais pas eu le faux espoir de tomber sur un post résolvant mon problème pour découvrir qu'un contributeur au forum dit qu'il sait faire (on est super content pour lui) pour ne pas dire comment

    EDIT :

    Bon tant qu'à faire je pose la question. Mon contexte :

    J'ai un XSD contenant d'autres XSD. Je valide mon XML de manière tout a fait standard avec un Handler perso hérité de DefaultHandler, etc ...

    Bref, tout ça marche très bien tant que j'ai qu'un seul XSD.

    Dans mes XSD, les includes sont indiqués comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:include schemaLocation="bodypart.xsd"/>
    Le chemin d'accès au XSD principal est indiqué au parser comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbf.setAttribute(JAXP_SCHEMA_SOURCE, p_fXSD);
    où dbf est une DocumentBuilderFactory, et p_fXSD une instance de java.io.File représentant le fichier xsd bien sûr.

    Lorsque dans mon XSD principal je mets les chemins complets de mes XSD internes, ça marche très bien.
    Si je mets comme indiqué ci-dessus (donc directement le nom du xsd) ça ne marche pas.

    Je ne comprends pas pourquoi !
    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 confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Salut Marco46,

    Depuis l'année dernière j'ai trouvé un autre moyen de règle ce problème: en mettant dans un seul XSD tous les includes les autres XSD et j'utilise ce fichier pour la validation de toutes les instances XML contre le XSD.

Discussions similaires

  1. [XML] Performance & validation XML avec schéma XSD
    Par fetusgoulash dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 17/12/2012, 15h35
  2. SSIS : Fichier XML avec schéma DTD
    Par Pelote2012 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 03/02/2012, 17h38
  3. Réponses: 3
    Dernier message: 24/07/2009, 15h04
  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, 17h40
  5. [XSD] Valider un document XML avec plusieurs XSD
    Par Cbast dans le forum Valider
    Réponses: 1
    Dernier message: 11/02/2008, 09h57

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