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

XML/XSL et SOAP Discussion :

[XML] Inclusion par entité externe d'un morceau XML pas bien formé


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut [XML] Inclusion par entité externe d'un morceau XML pas bien formé
    Bonjour,

    J'ai récupéré la maintenance d'un projet qui utilise ici et là, afin de factoriser des segments de code XML, des entités externes.

    Par exemple (fichier de config commons-validator) :
    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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE (... blabla dtd de commons validator ...)>
    [
    <!ENTITY bidule SYSTEM "chemin/bidule.xml">
    <!ENTITY truc SYSTEM "chemin/truc.xml">
    <!ENTITY machin SYSTEM "chemin/machin.xml">
    ]>
     
    <form-validation>
      <formset>
        <form name="form_1">
          &truc;
          &bidule;
        </form>
        <form name="form_2">
          &truc;
          &machin;
        </form>
        (... blabla autres formulaires ...)
      </formset>
    </form-validation>
    Malheureusement, les fichiers XML inclus sont des séquences d'éléments <field>, n'ont donc pas d'élément racine, et dans Eclipse j'ai forcément tout plein erreurs.
    De plus je ne trouve pas très propre la présence de ces bouts d'XML.
    J'aimerais trouver un autre moyen.

    Avez-vous des idées ?
    Utiliser des entités non parsées et inclure le XML comme texte ?
    D'autres moyens existent-ils afin d'inclure des segments XML répétitifs ?

    Merci pour toute suggestion.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par vieuxblasé Voir le message
    Utiliser des entités non parsées et inclure le XML comme texte ?
    Si tu arrives à le faire accepter par tes applications qui consomment le XML, pourquoi pas... Mais cela ne sera pas une sémantique intrinsèque au langage XML, seulement au format de tes données. Tout nouveau consommateur devra s'y adapter lui-même, ça ne sera pas fourni par ses outils XML.

    Il n'y a rien de bien idéalement intégré pour faire ça. Il y a plusieurs technos utilisables pour produire le document final sous forme logique plutôt que physique :

    - XInclude
    - XQuery
    - XSLT

    Voire un panaché.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Merci pour ta réponse, cela m'a donné une piste.

    • Je maîtrise mal les entités en général et externes en particulier mais cela ne m'apparaît pas être une bonne solution. J'ai besoin que mon document XML reste un document XML. De plus, à ce que j'en comprends, cela est plutôt utilisé pour des images, etc.

    • J'étais déjà tombé avec Google sur XInclude que je ne connais pas non plus. J'avais peur de me retrouver avec le même souci : inclusion de fichiers XML qui doivent être bien formés. Mais en creusant, l'attribut xpointer pourrait m'aider : il apparaît possible de rajouter une balise root arbitraire dans mes fichiers à inclure (typiquement "fields" dans mon cas), et ne sélectionner que ses enfants grâce à l'attribut xpointer. Cela semble de plus une solution élégante et "full-xml".


    Je creuserai cette piste quand j'aurais un peu de temps, si ça marche je fournirai un exemple.

    Merci.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    J'ai oublié de préciser un truc important : ce que tu as déjà devrait très bien marcher, et cela indépendamment des warnings que fait Eclipse.

    Tes fichiers qui contiennent des séquences d'éléments, sans racine, ne sont pas des fichiers XML bien formés, en effet. Et Eclipse aurait raison de te le signaler si jamais tu te mettais à croire que ces trucs étaient des documents XML.

    Mais, ils sont parfaitement bien formés en tant qu'entités utilisables comme entité externe parsée d'un document XML. C'est grosso-modo la même chose qu'un fragment XML, et c'est prévu pour.

    En réalité, les chaînes d'outils XML ne savent pas très bien gérer ce genre de choses et ça peut poser problème. Notamment les validateurs intégrés à Eclipse deviennent un peu foufous quand ils essaient de valider des documents avec entités externes. Mais elles devraient.

    En cas de problème avec ça, en général XInclude pose moins de problème en cela qu'il est généralement considéré comme une extension à XML et non pas comme une de ses notations de bases. Mais bon c'est un peu lourdingue aussi. Il n'y a pas vraiment de solution idéale complètement intégrée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Merci.

    En effet, c'est moi qui ai également oublié de préciser que les documents XML sont parfaitement interprétés tels quels. Mon souci est plutôt d'éviter d'avoir des warnings ou des erreurs dans tous les sens dès que quelqu'un se récupère le projet du référentiel de sources... Avoir un truc propre et indépendant des préférences Eclipse, en somme...

    En tout cas il y a des choses qui sont plus claires pour moi avec tes explications

    Là j'essaie avec XInclude, cela dit c'est pas gagné (je dois être un peu neuneu en ce moment...)
    Soit je laisse le doctype et Eclipse râle sur l'attribut xmlnsi...
    Soit j'enlève le doctype et essaie de lui fournir un namespace, mais j'ai toujours "grammar not found" et "root element must match DOCTYPE root null".

    Enfin bref, je vais continuer à chercher...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    J'avais récupéré avec le projet une très vieille version d'Eclipse.
    Je n'insiste pas plus, c'est plutôt une problématique d'IDE.

    Avec une version un minimum récente, renommer les fichiers-fragments XML en extension .xmlf (par exemple) permet en effet de bypasser la validation.
    Changer bien sûr également la référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!ENTITY truc SYSTEM "chemin/truc.xmlf">
    (J'avais essayé mais mon vieil Eclipse persistait à valider.)
    Cela dit, on peut avoir à supprimer les messages d'erreur à la main et faire un clean ou redémarrer Eclipse avant que cela ne soit pris en compte...

    Je creuserai néanmoins la piste XInclude à l'occasion.

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

Discussions similaires

  1. [DOM] Entités dans les attributs d'un XML généré par DOM
    Par angelinemm dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/05/2008, 09h26
  2. [XML] Problème d'entité externe dans mon XSLT
    Par fragmonster dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 13/04/2007, 14h55
  3. hibernate.cfg.xml Entité externe introuvable
    Par allstar dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/08/2006, 12h18
  4. [JAXP 1.2] Valider XML par schéma externe avec SAX (voire DOM)
    Par g_rare dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 17/07/2006, 19h48
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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