les technologies xml - dil.univ-mrs.frtichit/java/coursxml_3_apisxml.pdf · et des méthodes...

27
1 Les technologies XML Les technologies XML Cours 3 : Cours 3 : Les API XML Les API XML Novembre 2013 Novembre 2013 - Version 4.0 - - Version 4.0 -

Upload: dangkhue

Post on 13-Sep-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

1

Les technologies XMLLes technologies XML

Cours 3 : Cours 3 : Les API XMLLes API XML

Novembre 2013 Novembre 2013

- Version 4.0 - - Version 4.0 -

Page 2: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

2

LES API POUR MANIPULER DES LES API POUR MANIPULER DES DOCUMENTS XMLDOCUMENTS XML

Les API XML sont :Les API XML sont :

des librairies des librairies

proposant un ensemble de composants logiciels proposant un ensemble de composants logiciels

facilitant la lecture, la génération et le traitement de facilitant la lecture, la génération et le traitement de documents XML. documents XML.

Ces API sont implémentées sur la base de 2 Ces API sont implémentées sur la base de 2 modèles  : modèles  :

le DOM XML (Document Objet Model) permettant la le DOM XML (Document Objet Model) permettant la manipulation d’un document XML après l’avoir représenté manipulation d’un document XML après l’avoir représenté en mémoire sous la forme d’un arbre d’objets, en mémoire sous la forme d’un arbre d’objets,

le modèle SAX (Simple API for XML) permettant la le modèle SAX (Simple API for XML) permettant la manipulation d’un document XML au fur et à mesure de la manipulation d’un document XML au fur et à mesure de la lecture de celui-ci. L’extraction des données est basée sur lecture de celui-ci. L’extraction des données est basée sur une gestion d’événements (création d’un document, d’un une gestion d’événements (création d’un document, d’un élément ...).élément ...).

Page 3: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

API Java pour XML API Java pour XML 1/31/3

JAXP: Java API for XML ProcessingJAXP: Java API for XML Processing

proposé par JavaSoft (http://java.sun.com/xml/jaxp/) et proposé par JavaSoft (http://java.sun.com/xml/jaxp/) et présent depuis java2 version 1.4.présent depuis java2 version 1.4.

Unification des approches SAX & DOMUnification des approches SAX & DOM

Proposition d'une API standard pour les transformations Proposition d'une API standard pour les transformations de documents XML (processeurs XSLT, XSL-FO et de documents XML (processeurs XSLT, XSL-FO et XPATH).XPATH).

Page 4: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

4

API Java pour XML API Java pour XML 2/32/3

Les différentes classes des API XML :Les différentes classes des API XML :

Page 5: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

5

API Java pour XML API Java pour XML 3/33/3

JAXP: Java API for XML ProcessingJAXP: Java API for XML Processing : :

L’API javax.xml.parsers permet d’obtenir des L’API javax.xml.parsers permet d’obtenir des instances d’un parseur DOM ou d’un parseur SAX.instances d’un parseur DOM ou d’un parseur SAX.

C’est en effet l’étape préliminaire à toute C’est en effet l’étape préliminaire à toute manipulation de document XMLmanipulation de document XML. .

Un parseur a pour rôle d’analyser un document XML.Un parseur a pour rôle d’analyser un document XML.

Un parseur / valideur peut en outre vérifier la Un parseur / valideur peut en outre vérifier la validité d’un document en fonction de sa DTD ou du validité d’un document en fonction de sa DTD ou du XML-Schema associé, le cas échéant au document XML-Schema associé, le cas échéant au document XMLXML

Page 6: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

6

PrincipesPrincipes

Référence : Référence : http://www.saxproject.orghttp://www.saxproject.org

Objectifs :Objectifs :

Simplifier l'accès aux analyseurs,Rendre l'application indépendante des

analyseurs,

L'analyse génère des évènements récupérés par L'analyse génère des évènements récupérés par SAX et passés à l'application.SAX et passés à l'application.

Simple API for XML Simple API for XML 1/91/9

Page 7: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

7

Simple API for XML Simple API for XML 2/92/9

L’API org.xml.sax L’API org.xml.sax ::Elle implémente les interfaces SAX et fournit des classes Elle implémente les interfaces SAX et fournit des classes et des méthodes permettant la manipulation d’un et des méthodes permettant la manipulation d’un document XML via une gestion d’événements.document XML via une gestion d’événements.

Le parseur analyse le flot de caractères du document et Le parseur analyse le flot de caractères du document et appelle des méthodes dites de Callback lors qu’il appelle des méthodes dites de Callback lors qu’il rencontre les balises de début et de fin du document et rencontre les balises de début et de fin du document et d’élémentsd’éléments

Page 8: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

8

Exemple d’un lecteur SAX :Exemple d’un lecteur SAX :

Simple API for XML Simple API for XML 3/93/9

Page 9: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

9

Exemple d’un lecteur SAX (suite) :Exemple d’un lecteur SAX (suite) :Ce premier exemple est un parseur de type SAX qui se contente de Ce premier exemple est un parseur de type SAX qui se contente de détecter les différents balises et attributs contenus dans un document détecter les différents balises et attributs contenus dans un document XML et d’effectuer un traitement associé. XML et d’effectuer un traitement associé.

Pour se faire, la classe principale hérite de la classe DefaultHandler. Pour se faire, la classe principale hérite de la classe DefaultHandler. Cette classe fournit en effet un certain nombre de méthodes capable Cette classe fournit en effet un certain nombre de méthodes capable de gérer les événements liées à l’analyse d’un document XML :de gérer les événements liées à l’analyse d’un document XML :startElement gère l’évènement début d’un élément, startDocument gère l’événement début d’un document, endDocument gére l’événement fin d’un document...

Une fois, l’instance d’un parseur de type SAXParser obtenue, il faut Une fois, l’instance d’un parseur de type SAXParser obtenue, il faut ensuite, à l’aide de la méthode parse, associer la source de données ensuite, à l’aide de la méthode parse, associer la source de données XML (passée en paramètre) au flux d’évènements gérés par les XML (passée en paramètre) au flux d’évènements gérés par les méthodes des classes DefaultHandler.méthodes des classes DefaultHandler.

Simple API for XML Simple API for XML 4/94/9

Page 10: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

Simple API for XML Simple API for XML 5/95/9

Les packages Java de SAX 2Les packages Java de SAX 2 Les interfaces du package org.xml.sax:

ContentHandler évènements liés au contenu

DTDHandler évènements liés à la DTD

ErrorHandler récupération des erreurs

Locator récupération de la position

XMLReader analyseur

| XMLFilter

Attributes

EntityResolver

Les classes du package org.xml.sax.helpers:

org.xml.sax.helpers.DefaultHandler

implements org.xml.sax.ContentHandler,

implements org.xml.sax.DTDHandler,

implements org.xml.sax.EntityResolver,

implements org.xml.sax.ErrorHandler

Page 11: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

import java.io.FileReader;import org.xml.sax.XMLReader;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.helpers.XMLReaderFactory;

public class Essai extends org.xml.sax.helpers.DefaultHandler {    public Essai () { super(); }    public static void main (String args[]) throws Exception {        // XMLReader xr = new org.apache.xerces.parsers.SAXParser();        XMLReader xr = XMLReaderFactory.createXMLReader();        Essai handler = new Essai();        xr.setContentHandler(handler);        xr.setErrorHandler(handler);        xr.setFeature("http://xml.org/sax/features/validation",true);        for (int i = 0; i < args.length; i++) {            FileReader r = new FileReader(args[i]);            xr.parse(new InputSource(r));

}    }

Simple API for XML Simple API for XML 6/96/9

SAX: Premier programmeSAX: Premier programme

Page 12: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

public void startDocument () {    System.out.println("Start document");}

public void endDocument () {    System.out.println("End document");}

public void startElement (String uri, String name, String qName,        Attributes atts) {

    System.out.println("Start element: " + uri + "," + name);}

public void endElement (String uri, String name, String qName) {    System.out.println("End element: " + uri + "," + name);}

Simple API for XML Simple API for XML 7/97/9

SAX: Le gestionnaire de contenuSAX: Le gestionnaire de contenu

Page 13: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

public void characters (char ch[], int start, int length) {    System.out.print("Characters: ");    for (int i = start; i < start + length; i++) {        System.out.print(ch[i]); break;    }    System.out.println();}

Simple API for XML Simple API for XML 8/98/9

SAX: Le gestionnaire de contenu (suite)SAX: Le gestionnaire de contenu (suite)

Page 14: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

public void error(SAXParseException e) {    System.err.println("Erreur non fatale  (ligne " +        e.getLineNumber() + ", col " +        e.getColumnNumber() + ") : " + e.getMessage());    }

public void fatalError(SAXParseException e) {    System.err.println("Erreur fatale : " + e.getMessage());    }

public void warning(SAXParseException e) {    System.err.println("warning : " + e.getMessage());    }

Simple API for XML Simple API for XML 9/99/9

SAX: Le gestionnaire des erreursSAX: Le gestionnaire des erreurs

Page 15: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

Document Object Model Document Object Model 1/91/9

Représentation Objet en mémoire d'un document Représentation Objet en mémoire d'un document XML ou HTML (4.01).XML ou HTML (4.01).

C'est une norme proposée par le consortium W3CC'est une norme proposée par le consortium W3C((http://www.w3.org/DOM/http://www.w3.org/DOM/).).

Le DOM se compose de deux parties:Le DOM se compose de deux parties:DOM noyau (Core DOM) pour XML,DOM HTML.

Page 16: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

16

Document Object Model Document Object Model 2/92/9

L’API org.xml.dom L’API org.xml.dom ::Elle implémente les interfaces DOM et fournit des classes Elle implémente les interfaces DOM et fournit des classes et des méthodes permettant la manipulation d’un et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi document XML via une gestion d’arbre. On peut ainsi ajouter ou supprimer un nœud, ajouter ou supprimer un ajouter ou supprimer un nœud, ajouter ou supprimer un attribut à un nœud (méthodes appendChild, setAttribute attribut à un nœud (méthodes appendChild, setAttribute de la classe Element par exemple)...de la classe Element par exemple)...

Un parseur DOM construit un objet DOM, puis parcours en Un parseur DOM construit un objet DOM, puis parcours en largeur et en profondeur l’arbre afin d’en traiter chaque largeur et en profondeur l’arbre afin d’en traiter chaque nœud.nœud.

Page 17: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

Document Object Model Document Object Model 6/96/9

DOM: Le package Java org.w3c.domDOM: Le package Java org.w3c.dom

Les interfaces du package org.w3c.dom:Les interfaces du package org.w3c.dom:Node | Attr | CharacterData |  | Comment |  | Text |  |  | CDATASection | Document | DocumentFragment | DocumentType | Element | Entity | EntityReference | Notation | ProcessingInstruction

NamedNodeMapNodeList

Page 18: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

Document Object Model Document Object Model 7/97/9

Node getFirstChild()         Node getNextSibling() Node getLastChild()          Node getPreviousSibling()Node getParentNode()         NodeList getChildNodes() boolean hasChildNodes()      Document getOwnerDocument() 

NamedNodeMap getAttributes() boolean hasAttributes() 

String getLocalName()        String getNamespaceURI() String getNodeName()         String getPrefix() 

short getNodeType() String getNodeValue() 

Node appendChild(Node newChild) Node insertBefore(Node newChild, Node refChild) Node removeChild(Node oldChild) Node replaceChild(Node newChild, Node oldChild) void setNodeValue(String nodeValue) void setPrefix(String prefix)

Node cloneNode(boolean deep) 

 

Page 19: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

Document Object Model Document Object Model 8/98/9

DOM: Premier générateur DOMDOM: Premier générateur DOM

Déclaration de l'analyseur XML et création du Déclaration de l'analyseur XML et création du document:document:

import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*;

public class Exemple {

  public static void main(String[] args) throws Exception {

    Document doc;

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    dbf.setValidating(true); // valide les documents au cours de l'analyse

    DocumentBuilder db = dbf.newDocumentBuilder();

    doc = db.parse(new File(args[0]));

    afficher("", doc);

  }

}

Page 20: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

Document Object Model Document Object Model 9/99/9

DOM: Premier générateur DOM (2)DOM: Premier générateur DOM (2)

Parcours de l'arbre XML:Parcours de l'arbre XML:

public static void afficher(String indent, Node n) {    switch (n.getNodeType()) {        case org.w3c.dom.Node.COMMENT_NODE:            System.out.println(indent +                "<!­­" + n.getNodeValue() + " ­­>"); break;        case org.w3c.dom.Node.TEXT_NODE:            System.out.println(indent +                ((CharacterData) n).getData() ); break;        case org.w3c.dom.Node.ELEMENT_NODE:            System.out.println(indent + "<" +                ((Element) n).getTagName() + ">"); break; }

    NodeList fils = n.getChildNodes();    for(int i=0; (i < fils.getLength()); i++)        afficher(indent + " | ", fils.item(i));     if (n.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE)        System.out.println(indent + "</" +            ((Element) n).getTagName() + ">"); }

Page 21: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

21

Exemple d’un 2Exemple d’un 2ndnd générateur DOM : générateur DOM :

Document Object Model Document Object Model 3/93/9

Page 22: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

22

Exemple d’un 2Exemple d’un 2ndnd générateur DOM (suite) : générateur DOM (suite) :

Document Object Model Document Object Model 4/94/9

Page 23: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

23

Exemple d’un 2Exemple d’un 2ndnd générateur DOM (fin) : générateur DOM (fin) :

Document Object Model Document Object Model 5/95/9

Page 24: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

24

CONCLUSION : SAX VERSUS DOMCONCLUSION : SAX VERSUS DOM

SAX ou DOM ?SAX ou DOM ?

Page 25: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

25

XSLT en JavaXSLT en Java

Exemple de transformation de document XML :Exemple de transformation de document XML :

On dispose d’un fichier source input.xml et d’une fiche On dispose d’un fichier source input.xml et d’une fiche XSLT input.xsl,XSLT input.xsl, et on désire créer un fichier output.html et on désire créer un fichier output.html à partir de ces deux éléments.à partir de ces deux éléments.

Page 26: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

JDOM : alternative à SAX/DOM/JAXPJDOM : alternative à SAX/DOM/JAXP

Objectifs : offrir une bibliothèque de classes simple Objectifs : offrir une bibliothèque de classes simple pour la représentation et la manipulation de pour la représentation et la manipulation de documents XML (documents XML (http://www.jdom.orghttp://www.jdom.org).).

public static void main(String[] args) {    org.jdom.Element stock = new org.jdom.Element("stock")        .addContent(new org.jdom.Element("nom").setText("CD"))        .addContent(new org.jdom.Element("prix").setText("100"));

    org.jdom.Document root = new org.jdom.Document(stock);    org.jdom.output.XMLOutputter outputter =        new org.jdom.output.XMLOutputter();        try { outputter.output(root, System.out); }     catch (java.io.IOException e) { }}

Page 27: Les technologies XML - dil.univ-mrs.frtichit/java/CoursXML_3_APIsXML.pdf · et des méthodes permettant la manipulation d’un document XML via une gestion d’arbre. On peut ainsi

JDOM: alternative à SAX/DOM/JAXPJDOM: alternative à SAX/DOM/JAXP

Des passerelles sont disponibles vers :Des passerelles sont disponibles vers :

la représentation DOM,la représentation DOM,

les évènements SAX,les évènements SAX,

les analyseurs compatibles SAX/DOM,les analyseurs compatibles SAX/DOM,

les processeurs XSL compatibles JAXP.les processeurs XSL compatibles JAXP.

D'autres alternatives existent : D'autres alternatives existent :

DOM4JDOM4J

XOMXOM