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