Programmation des Applications Réparties Parsers XML – DOM et
Transcription
Programmation des Applications Réparties Parsers XML – DOM et
Programmation des Applications Réparties Parsers XML – DOM et SAX Luiz Angelo Steffenel [email protected] 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 – ● Mais il faut extraire les données pour utiliser avec nos applications – Steffenel structuration, indépendance, auto-description C, C++, Java, php, ... Programmation des Applications Réparties – Master M1 - 2007-2008 2 Un Parser XML ● ● ● ● Steffenel 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 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 – ● Steffenel 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 Programmation des Applications Réparties – Master M1 - 2007-2008 4 DOM – Document Object Model ● Représente un document XML comme un arbre – ● Charge la totalité du document XML en mémoire – ● ● Steffenel API riche en fonctions de recherche é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 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 – ● Le document est analysé par SAX du début jusqu'à la fin, élément par élément, attribut par attribut – Steffenel Les événements sont la découverte par le parser des balises, des PCDATA, ... 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 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 Structure Status Phylosophie Complexité Type d'accès DOM en arbre Standard W3C batch – lecture de la totalité du document complexe mais plus flexible (spec 500 pages) création, lecture, modification, suppression + mémoire et processeur Demande de ressources Type d'utilisation accès non séquentiel, modification Steffenel SAX par des événements standard de facto streaming Simple mais parfois limité (spec 30 pages) lecture seule légér, +efficace lecture de longs documents Programmation des Applications Réparties – Master M1 - 2007-2008 9 JAXP – API Java pour le traitement de XML Steffenel ● 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) 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 – Steffenel affichage, transformation, prise de décisions, etc. 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 ● Steffenel Les attributs ne sont pas inclus dans l'arbre – accessibles à partir de la méthodeProgrammation Elementobject 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 ● Steffenel Mais aussi : – création de noeuds – modification, etc. 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 ● Steffenel Le parsing est fait au fur et à mesure Programmation des Applications Réparties – Master M1 - 2007-2008 18 Fonctionnement de SAX ● ● Steffenel 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 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 – Steffenel getLength(), getIndex(), getValue(), etc. Programmation des Applications Réparties – Master M1 - 2007-2008 20 Rappel : DOM vs SAX Structure Status Phylosophie Complexité Type d'accès DOM en arbre Standard W3C batch – lecture de la totalité du document complexe mais plus flexible (spec 500 pages) création, lecture, modification, suppression + mémoire et processeur Demande de ressources Type d'utilisation accès non séquentiel, modification Steffenel SAX par des événements standard de facto streaming Simple mais parfois limité (spec 30 pages) lecture seule légér, +efficace lecture de longs documents Programmation des Applications Réparties – Master M1 - 2007-2008 21