Programmation des Applications Réparties Parsers XML DOM et SAX Luiz Angelo Steffenel luiz-angelo.steffenel@univ-reims.fr Steffenel Programmation des Applications Réparties Master M1-2007-2008 1
Comment Utiliser XML dans mon Application? XML est très efficace pour transporter des données structuration, indépendance, auto-description Mais il faut extraire les données pour utiliser avec nos applications C, C++, Java, php,... Steffenel Programmation des Applications Réparties Master M1-2007-2008 2
Un Parser XML Un parser sert à extraire la structure et le contenu d'un document XML. Offre une API de programmmation pour accéder aux élements d'un document XML spécification indépendante du langage de programmation le programmeur peut rajouter du code pour augmenter les fonctionnalités du parser Deux APIs standard couramment disponibles : DOM (Document Object Model) SAX (Simple API for XML) Toutes les deux font l'extraction des données d'un document XML, mais selon des stratégies différentes Steffenel Programmation des Applications Réparties Master M1-2007-2008 3
Pourquoi utiliser une API XML? Pour pouvoir lire/écrire des données XML sans avoir à créer notre propre parser XML Applications : traitement de documents XML (balises, attributs, etc.) enregistrement de configs, préférences, etc. en format XML partage de résultats dans un format portable exemple : expression des relations dans un modèle E-A alternative à la sérialisation pour le stockage d'objets compatible avec les définitions de classes et objets lisible Steffenel Programmation des Applications Réparties Master M1-2007-2008 4
DOM Document Object Model Représente un document XML comme un arbre API riche en fonctions de recherche Charge la totalité du document XML en mémoire évite le parsing à chaque nouvelle requête Indiqué : lorsqu'on veut éditer le document lorsqu'on doit accéder au document XML plusieurs fois http://www.w3.org/dom Steffenel Programmation des Applications Réparties Master M1-2007-2008 5
Le modèle d'arbre de DOM Steffenel Programmation des Applications Réparties Master M1-2007-2008 6
SAX Simple API for XML Les documents XML sont modélisés comme un flux de d'événements Les événements sont la découverte par le parser des balises, des PCDATA,... Le document est analysé par SAX du début jusqu'à la fin, élément par élément, attribut par attribut Méthodes d'accès séquentiel tels que startdocument(), endelement() Plus rapide et plus facile d'utiliser Indiqué : lorsqu'on n'a pas besoin d'éditer le document en mémoire si la mémoire est limitée lorsqu'on veut accéder à une partie du document seulement Steffenel Programmation des Applications Réparties Master M1-2007-2008 7
La séquence d'événements SAX Steffenel Programmation des Applications Réparties Master M1-2007-2008 8
DOM vs SAX DOM SAX Structure en arbre par des événements Status Standard W3C standard de facto Phylosophie batch lecture de la totalité streaming Complexité du document complexe mais plus flexible (spec 500 pages) Simple mais parfois limité (spec 30 pages) Type d'accès création, lecture, lecture seule modification, suppression Demande de + mémoire et processeur légér, +efficace ressources Type d'utilisation accès non séquentiel, lecture de longs documents modification Steffenel Programmation des Applications Réparties Master M1-2007-2008 9
JAXP API Java pour le traitement de XML API de SUN livré avec Java J2EE JAXP offre une interface commune pour utiliser SAX ou DOM mais aussi XSLT interface indépendante de l'implémentation Crimson (impl. SAX J2SE < 1.4.1) Xerces (produit par Apache, J2SE >=1.4.2) Steffenel Programmation des Applications Réparties Master M1-2007-2008 10
Fonctions de JAXP Parser le document DOM crée un arbre DOM SAX extrait les données à partir d'événements Traiter le document DOM utilisation de l'api DOM SAX traitement des événements SAX Traitement d'erreurs Quelques opérations sur les données affichage, transformation, prise de décisions, etc. Steffenel Programmation des Applications Réparties Master M1-2007-2008 11
Les paquets de Base Steffenel Programmation des Applications Réparties Master M1-2007-2008 12
DOM Steffenel Programmation des Applications Réparties Master M1-2007-2008 13
Structure d'un arbre DOM Chaque noeud a un élément «text» même si le texte est vide Les commentaires apparaissent comme des noeuds spéciaux Les attributs ne sont pas inclus dans l'arbre accessibles à partir de la méthode Elementobject Steffenel Programmation des Applications Réparties Master M1-2007-2008 14
Programmation avec DOM Structure minimale Accès au document Steffenel Programmation des Applications Réparties Master M1-2007-2008 15
D'autres méthodes DOM Mais aussi : création de noeuds modification, etc. Steffenel Programmation des Applications Réparties Master M1-2007-2008 16
SAX Steffenel Programmation des Applications Réparties Master M1-2007-2008 17
Parsing avec SAX Le parsing est fait au fur et à mesure Steffenel Programmation des Applications Réparties Master M1-2007-2008 18
Fonctionnement de SAX SAX définit un DefaultHandler pour répondre è certains événements startdocument() enddocument() startelement(string namespace, String localname, String qname, Attributes atts) endelement(string namespace, String localname, String qname) characters() Les appels à startelement() et endelement() viennent TOUJOURS par paires Steffenel Programmation des Applications Réparties Master M1-2007-2008 19
Parsing avec SAX Les paramètres passées aux méthodes contiennent les données <foo>test</foo> startelement(" "," ", "foo",null) characters ("test",0,4) endelement(" "," ","foo") les attributs sont passés dans startelement() à travers un objet Attributs <foo id="10">test</foo> startelement(" "," ", "foo",att) l'objet Attributs peut être accédé avec getlength(), getindex(), getvalue(), etc. Steffenel Programmation des Applications Réparties Master M1-2007-2008 20
Rappel : DOM vs SAX DOM SAX Structure en arbre par des événements Status Standard W3C standard de facto Phylosophie batch lecture de la totalité streaming Complexité du document complexe mais plus flexible (spec 500 pages) Simple mais parfois limité (spec 30 pages) Type d'accès création, lecture, lecture seule modification, suppression Demande de + mémoire et processeur légér, +efficace ressources Type d'utilisation accès non séquentiel, lecture de longs documents modification Steffenel Programmation des Applications Réparties Master M1-2007-2008 21