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