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 :

Dans quels cas choisir entre SAX, DOM, JAXB, ou XPath ?


Sujet :

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

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Points : 19
    Points
    19
    Par défaut Dans quels cas choisir entre SAX, DOM, JAXB, ou XPath ?
    Bonjour à tous,

    Je me perds un peu avec toutes ces technologies, et j'ai beau consulter pas mal de livre, je n'ai toujours pas compris dans quels cas utilisez certaines technologies.

    Donc, je vais d'abord présenter pourquoi j'en arrive là. Dans le cadre de mes études, je dois réaliser un projet Java.

    Durant l'entretien avec un professeur spécialisé dans Java, il m'a parlé de tout un tas de technologie que j'ai bien pris note, et de savoir dans quel cas utilisez chacune de ces technologies, et donc utilisez la technologie la plus évidente dans le cadre de mon projet.

    Il m'a donc parler de SAX, DOM, JAXB, et XPath.
    J'ai consulter pas mal de livre et de doc à ce sujet, notamment Professional XML de Mark Birbick, et si beaucoup m'ont fait clairement comprendre la différence entre DOM et SAX, aucun parlait de comment utiliser XPath par exemple.

    D'ailleurs XPath comment l'utilisez ? Est t'il complémentaire à l'un des trois autres cités au dessus ?

    Voici ce que j'ai compris des trois technologies cités au dessus :
    SAX : Avec son utilisation on peut lire un document xml sans le stocker en mémoire, donc il est plus rapide que DOM. Cependant il lit de manière séquentielle.
    Dans tous les exemples que j'ai vu concernant SAX, on parlait de lire un fichier XML avec des documents de validation DTD. Or j'utilise XML Shéma pour valider mon XML ...

    DOM : Stocke en mémoire le fichier XML. On peut le modifier, lire, enregistrer etc ...
    Moins rapide, car plus de ressources utilisées, cependant ... quel est son avantage par rapport à SAX ?

    JAXB : Là j'ai moins compris, mais en gros il accepte les deux manières cités au dessus SAX et DOM, et peut génerer des objets Java à partir d'un fichier XML (ou inversement des documents XML à partir d'objet Java).

    Voila, j'aimerais avoir un éclaircissement de votre part par rapport à ces technologies.

    Merci d'avance.

    Cordialement

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Points : 459
    Points
    459
    Par défaut
    SAX produit des évènements XML (start, end, characters..). C'est ce que l'on appelle un "push parser" : on se fait recevoir des évènements. Il est construit autour de deux classes principales : XMLReader et ContentHandler. XMLReader est une classe qui, à partir d'une donnée (pas forcément XML) produit des évènements SAX qu'il transmet à un ContentHandler. Cet handler peut alors décider d'écrire les évènements dans un fichier, en ignorer, en modifier à la volée, ou les déléguer à un Handler suivant.

    De part mon expérience, je réserve l'utilisation de SAX pour chainer des transformations. Par exemple si tu veux chainer plusieurs transformations (XSLT, XPath, XQuery), tu n'es pas obligé de produire des arbres DOM intermédiaires, tu peux tout faire en une seule passe avec SAX.
    Tu peux également produire tes propres évènements XML à partir d'une donnée non XML, par exemple un résultat d'une requête SQL ou un fichier dont la structure est propre au SI de l'entreprise (Cobol par exemple ...). Ta donnée initiale devient alors accessible à toutes les API de transformation XML ...

    Je te conseille cet article complet sur une utilisation intéressante de SAX http://www.javaworld.com/javaworld/j...0905-xslt.html

    En ce qui concerne la validation XML Schéma, elle n'est pas propre à SAX et est implémentée aussi par des parseurs DOM et StAX.

    Pour JAXB : c'est ce qu'on appelle du DataBinding, ou OXM (object/xml mapping). Tu transformes une source XML en un model d'objets "métiers". On utilise alors un fichier de mapping qui va faire les associations balise XML=>attribut java. JAXB n'est pas le seul dans ce domaine et on peut citer JiBX, XmlBeans, XStream ...

    DOM est de moins en moins utilisé car il devient plus simple de manipuler des objets métiers plutôt que des nœuds XML.

    StAX : traite des flux à la volée, mais cette fois en mode "pull". Le mécanisme est similaire à de simple InputStream/OutputStream, sauf que l'on produit des évènements StAX. Les interfaces principales : XMLStreamReader et XMLStreamWriter. Si tu n'as l'intention que de parser le XML sans l'altérer, alors c'est l'API à utiliser. Tu peux évidement produire des évènements SAX à partir de StAX, et inversement !

    Il y a encore plein d'autres API xml.
    Citons par exemple Apache Axiom, utilisée et créée spécialement pour le moteur de WebServices, Axis2.
    Il est capable de te fournir une structure en arbre "à la DOM" alors que le flux XML n'est pas encore disponible. L'arbre est construit au fur et à mesure que tu y accèdes. Cela a un gros avantage si tu souhaites lire des balises situées au tout début du flux, sans avoir à parser tout le reste (par exemple les SOAP Header des web services).
    En anglais ils appellent ça le "deferred building", construction reportée ...

    http://ws.apache.org/commons/axiom/OMTutorial.html

    XPath est une api permettant de sélectionner des valeurs et des nœuds en utilisant des expressions régulières.

    XQuery, est au XML ce que le SQL est aux bases de données (edit: relationnelles ). Mais je ne m'aventure pas trop car je connais peu.

    D'autres un peu comme DOM : jdom, dom4j ...

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    Merci

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

Discussions similaires

  1. UML : Qui s'en sert ? Pourquoi ? Dans quels cas ? Où ?
    Par Matthieu Brucher dans le forum UML
    Réponses: 83
    Dernier message: 10/06/2013, 16h13
  2. communication entre processus dans quel cas
    Par gastoncs dans le forum C
    Réponses: 14
    Dernier message: 09/05/2012, 00h03
  3. Réponses: 3
    Dernier message: 24/04/2007, 23h42
  4. [Zope] Dans quel cas utiliser zope ?
    Par kalimero dans le forum Zope
    Réponses: 3
    Dernier message: 26/07/2005, 09h08
  5. [corba] débutant : dans quels cas l'utiliser
    Par jmturc dans le forum CORBA
    Réponses: 2
    Dernier message: 10/10/2002, 08h58

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