API pour XML

Transcription

API pour XML
DOM
SAX
libxml
API pour XML
Mihaela JUGANARU-MATHIEU
[email protected]
École Nationale Supérieure des Mines de St Etienne
février 2012
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
Les outils pour traiter XML (validation, navigation, interrogation)
sont puissants d’un point de vue pouvoir d’expression, mais ils
s’avèrent insuffisant pour la réalisation des applications complètes.
Nécessité de pouvoir traiter du XML dans un programme écrit en
langage impératif, orienté objet ou non (C, C+, Java, PHP, C#,
etc).
Il existe diverses API permettant de traiter le XML depuis un
langage de programmation de haut niveau.
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM et SAX
DOM = Document Object Model est une recommandation du W3C
http://www.w3.org/TR/DOM
SAX = Simple API for XML est une recommandation d’un groupe
de travail
http://www.saxproject.org/
DOM et SAX sont des API (Application Programming Interface)
qui ont des implémentations dans divers langages (Java, C++,
PHP, ...) pour travailler avec XML sur la base d’une analyse
(parsing) du document de travail .
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
Pour les deux API on réalise un parsing (analyse) du document
XML afin de pouvoir traiter le contenu.
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM :
construit une représentation complète du document dans la
mémoire
est adapté au traitement des documents qui se modifient ou
qui doivent être traités dans la globalité
SAX :
défini des trigger que sont activés lors de l’apparition d’un
événemet (un document XML se traduit par un flux
d’événements)
est mieux adapté pour des document de grandes taille et pour
l’extraction (consultation) de l’information contenue dans le
document XML
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Le parser DOM prend en entrée un document XML et produit un
arbre avec une forme d’objet et contenant des objets.
chaque objet à l’exception de la racine appartient à une classe
ou sous-classe Node
il y a des opérations pour créer/supprimer des nœuds et pour
la navigation
Les applications qui utilisent DOM sont diverses : processeur XSLT,
éditeur XML, applications d’interface avec les bases de données, etc
...
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Les type de nœuds DOM sont :
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Un arbre se définit de manière récursive. Les type de nœuds DOM
sont :
Chaque nœud a un type qui correspond à une catégorie syntaxique
XML et chaque nœud a des propriétés. Selon le type de nœud il y a
une série d’opérations avec les nœuds et une série d’interfaces.
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Les types de nœuds sont :
Document = document XML (la racine)
DocumentType = type de document (DTD)
ProcessingInstruction = instruction de traitement
Element = élément XML
Attribute = attribut XML
Entity = declaration d’entité
EntityReference = référence à une entité
Comment = commentaire
CharacterData = commentaire et section de texte
Text = section de texte
CDataSection = section CDATA
DocumentFragment = fragment de document XML
Notation = notation
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Les propriétés du type noeud (Node) et leur type :
nodeType - unsigned short
nodeName - DOMString
nodeValue - DOMString
attributes - NamedNodeMap
parentNode - Node
firstChild - Node
lastChild - Node
childNodes - NodeList
previousSibling - Node
nextSibling - Node
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Les opérations avec le type noeud :
Type résultat
Méthode
Paramètre
Nœud
insertBefore
Nœud nouveau, Nœud fils
Nœud
replaceChild Nœud nouveau, Node ancien
Nœud
removeChild
Nœud fils
Nœud
appendChild
Nœud nouveau
boolean
hasChildNode
Nœud
cloneNode
boolean preuve
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
DOM
Exemple : insérer un élément de forme
<adventure type = “epic”>&adventure1;</adventure>
avant le 4-ème élément du document.
var racine = myDocument.documentElement;
var enfants = racine.childNodes;
var el_nouv = createElement("adventure") ;
var ent_ref = createEntityReference("adventure1");
el_nouv.setAttribute("type", "epic");
el_nouv.appendChild(ent_ref);
insertBefore(el_nouv, enfants.item(3));
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
SAX
Le principe de SAX est le suivant :
chaque balise ouverte ou fermée est un événement
ouvrir ou fermer un document est un événement
rencontrer du texte est un événement
Le parser SAX travaille avec un flux linéaire et détecte au fur et à
mesure ces événement. Pour chaque événement on peut indiquer
que l’on fait une extraction/transformation du flux ou non.
SAX peut jouer le rôle de filtre entre une application qui génère du
XML et une autre application qui traite un certain type de flux.
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
SAX - exemple de flux
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
SAX en Java
Parser :
org.xml.sax.XMLReader
Handlers :
org.xml.sax.ContentHandler
org.xml.sax.DTDHandler
org.xml.sax.ErrorHandler
org.xml.sax.EntityResolver
Interfaces d’implémentation par défaut (coquille vide) :
org.xml.sax.helpers.DefaultHandler
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
SAX - exemple de code
String fileName = "...";
ContentHandler myContentHandler = new ...;
...
XMLReader parser = XMLReaderFactory.createXMLReader();
parser.setContentHandler(myContentHandler);
parser.parse(fileName);
public static void main(String[] args)
{
Trace t = new Trace();
SAXParser p = new SAXParser();
p.setContentHandler(t);
try { p.parse(args[0]); }
catch (Exception e) {e.printStackTrace();}
}
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML
DOM
SAX
libxml
libxml2 est une librairie libre (licence MIT) et fiable écrite en C
standard permettant d’analyser et traiter du XML.
libxml2 implémente les API DOM et SAX, XPath, XML Base,
XML Pointer, la validation par DTD et XSchema.
La commande xmllint fait partie de la librairie.
La librairie peut s’interfacer avec d’autres langages : C++, PHP,
Ruby, TCL, etc.
Mihaela JUGANARU-MATHIEU [email protected]
API pour XML

Documents pareils