DOM / SAX / JAXP. Module développement/ Conception XML. DOM / SAX Module XML / ESIAL 3A



Documents pareils
Programmation des Applications Réparties. Parsers XML DOM et SAX

< _155_0>

34. DOM (Document Object Model)

XML et Java Vue Balisée en XML. Programmation avancée NFP 121. XML pourquoi faire? Structuration des données. Titre Auteur Section Paragraphe

Document Object Model (DOM)

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

Master d Informatique Corrigé du partiel novembre 2010

DOM - Document Object Model

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Évaluation et implémentation des langages

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

L'API DOM : Document Object Model

Programmation Web. Madalina Croitoru IUT Montpellier

Introduction aux concepts d ez Publish

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Refonte front-office / back-office - Architecture & Conception -

Chapitre 2. Classes et objets

Remote Method Invocation (RMI)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Université de Bangui. Modélisons en UML

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

4. SERVICES WEB REST 46

Mise en œuvre des serveurs d application

Devenez un véritable développeur web en 3 mois!

Architecture Orientée Service, JSON et API REST

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Alfstore workflow framework Spécification technique

La base de données XML exist. A. Belaïd

Java DataBaseConnectivity

PDO : PHP Data Object 1/13

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Java pour le Web. Cours Java - F. Michel

Compte Rendu d intégration d application

Documentation CAS à destination des éditeurs

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Formation : WEbMaster

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Authentification et contrôle d'accès dans les applications web

Programmer en JAVA. par Tama

Architectures web/bases de données

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

PHP 5.4 Développez un site web dynamique et interactif

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

XML et Bases de données. Les bases de données XML natives.

Cours Bases de données

BASE DE DONNÉES XML NATIVE

Groupe Eyrolles, 2004 ISBN :

Aspects techniques : guide d interfaçage SSO

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

OCL - Object Constraint Language

contact@nqicorp.com - Web :

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Qu'est-ce que XML? XML : Extensible Markup Language. Exemple de document SGML SGML

Chapitre VI- La validation de la composition.

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

REQUEA. v PD 20 mars Mouvements d arrivée / départ de personnels Description produit

RMI le langage Java XII-1 JMF

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Héritage presque multiple en Java (1/2)

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmation par composants (1/3) Programmation par composants (2/3)

TP1 : Initiation à Java et Eclipse

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Java Naming and Directory Interface

Thierry BOULANGER. par la pratique. Bases indispensables Concepts et cas pratiques XML. 3 ième édition. Nouvelle édition

les techniques d'extraction, les formulaires et intégration dans un site WEB

Module BD et sites WEB

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Projet gestion d'objets dupliqués

Ingénierie des Modèles. Méta-modélisation

Projet de Veille Technologique

SQL Parser XML Xquery : Approche de détection des injections SQL

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

«Clustering» et «Load balancing» avec Zope et ZEO

OpenPaaS Le réseau social d'entreprise

Application web de gestion de comptes en banques

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Programmation en Java IUT GEII (MC-II1) 1

Urbanisme du Système d Information et EAI

Information utiles. webpage : Google+ : digiusto/

Les structures de données. Rajae El Ouazzani

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Configuration d'un annuaire LDAP

Livre Blanc WebSphere Transcoding Publisher

Transcription:

/ JAXP Module développement/ Conception XML 1

Plan Général parser DOM SAX JAXP 2

Présentation générale Présentation générale DTD XML XML Conception Données Données XSL Amphi précédents XML : syntaxe DTD : spécifier une grammaire XSL : spécifier des traitements Comment faire des applications avec XML? Tirer parti des spécificités de XML Traitement 3

Présentation générale Étapes d une application XML standard Deux étapes essentielles Analyse (parsing) Récupérer les données à partir du fichier XML Traitements des données Manipulation : Accès, Modification, Sauvegarde Autre traitements : affichage, etc Utilisateur Interface Web Analyse traitement Données 4

Présentation générale Composants d une application XML standard Composants d une application XML standard: Sources Données dans un fichier XML Analyse Un parser pour analyser les données du fichier XML Traitement Des objets pour stocker les données Des méthodes pour les manipuler 5

Présentation générale Composants d une application XML standard Composants d une application XML standard: Sources Données dans un fichier XML Analyse Un parser pour analyser les données du fichier XML Traitement Des objets pour stocker les données Des méthodes pour les manipuler Utilisateur Interface Web analyse Application traitement Données Parser Modèle 6

Présentation générale Contenu du cours Utilisateur Interface Web analyse Application traitement Données Parser Modèle Comment Récupérer et Stocker de l information de documents XML Manipuler des documents XML Créer de nouveaux documents XML 7

Plan Général parser DOM SAX JAXP 8

Parser Parser XML (1) Pourquoi un parser? Il existe une infinité de modèle de données XML pour une infinité d'applications Toutes les applications devront implémenter la lecture de données XML : A partir de la même syntaxe (document bien formé) Des grammaires différentes mais représentées dans la DTD Résoudre le problème de l indexation, de stockage, et de manipulation Qu'est-ce qu'un parser? Un parser serait donc un petit module de programme, dont le seul objectif serait de découper un flux d'entrée en un ensemble de " mots" (token) qui seront ensuite proposés à d'autres applications. Un parser n'est donc pas un programme en soi : il est associé à un module de traitement et c'est la nature de ce module qui prime. La spécification XML parle alors de "processeur XML" (parser et traitement). 9

Parser Parser XML (2) Tâches du parser XML : Analyse syntaxique Le contrôle de conformité de la syntaxe par rapport à la norme Tâches du processeur XML : Lire et analyser la structure d'un document XML Décomposition des documents éléments, attributs, texte, entités, instructions de traitement, commentaires, Vérification Documents bien-formés (syntaxiquement corrects) Validation (DTD, schéma) Éventuellement, accéder au contenu de la DTD ou du schéma Pour l'instant, interface propriétaire! Représentation interne des informations : DOM 10

Parser Processeurs XML Interface des parsers est propriétaire Propre au parser utilisé Fonctionnalités fines mais spécifiques et nettement moins portables 2 types Processeurs XML Processeur DOM Modèle objet Document Object Model (DOM 1, 2 et 3) Processeur SAX Interface évènementielle Simple API for XML (SAX 1 et 2) 11

Parser JAXP Autres modèles de parsing et d'api Java API for XML Parsing Une initiative de Sun pour "normaliser" la déclaration du parser XML à utiliser et uniformiser les paramètres standards JDOM Java + XML Définir des classes JAVA pour manipuler des fichiers XML 12

Parser Catégories de parsers XML On peut classifier les parsers sous plusieurs catégories : Les validant vs. non-validant (par rapport DTD) Les parsers supportant le modèle DOM (tree-based) Les parsers supportant l'interface SAX (event-based) Les parsers écrits avec différents langages Java, C/C++, Perl, Python, etc. C# Les parsers: Xerces (apache), JAXP (Sun), Oracle XML Parser, Microsoft XML Parser (msxml), XML4J (IBM), etc Voir les benchmarks! 13

Plan Général parser DOM SAX JAXP 14

DOM DOM Recommandation Utilisation Package DOM Parser DOM Lecture de document Manipulation Interface Node Interface Document Sauvegarde 15

La recommandation DOM du W3C Document Object Model C est une recommandation du W3C ("norme") Elle spécifie une API orientée objet permettant au programmeur d application d écrire des fonctions de création, de modification et de consultation des éléments constitutifs d un document XML ou HTML. C est un modèle d objets représentant un document : générique une interface de programmation pour les documents HTML ou XML DOM core, DOM HTML Représentation arborescente d objets : Attributs et méthodes permettent la manipulation de la structure logique et l information contenue dans ce document Indépendant des plates-formes, des langages de programmation et de script 16

Qu est ce que DOM? Représentation en mémoire d'un arbre de nœuds contenant la structure et les données contenues dans le document XML Lecture d'un document XML existant XML Modèle Création d un modèle Utilisant un parser Modèle Parser Données 17

Qu est ce que DOM? Représentation en mémoire d'un arbre de nœuds contenant la structure et les données contenues dans le document XML Lecture d'un document XML existant XML Modèle Création d un modèle Utilisant un parser Modifications en utilisant l'api DOM Modèle Modèle Manipulation de modèle Modèle Parser Modèle Parser Données Données 18

Qu est ce que DOM? Représentation en mémoire d'un arbre de nœuds contenant la structure et les données contenues dans le document XML Lecture d'un document XML existant XML Modèle Création d un modèle Utilisant un parser Modifications en utilisant l'api DOM Modèle Modèle Manipulation de modèle Création d'un nouveau document XML Modèle XML Sauvegarde de document XML Modèle Parser Modèle Parser Modèle Parser Données Données Données 19

Intérêts de DOM DOM se situe entre le parser et l'application Indépendance (ou presque) de l'application par rapport au parser Modèle générique de document API indépendante des plate-formes et langages 20

DOM : organisation des recommandations La spécification est organisée en différents niveaux (3 niveaux) Chaque niveau possède un CORE Qui est générique, pour n'importe quel document XML Qui a certaines caractéristiques dépendantes du niveau Que doit supporter toute implémentation de DOM. Des modules Correspond à des interfaces spécifiques, pour des types de documents donnés. Ces interfaces sont des extensions des interfaces Core DOM XML : avec specificité entité, CDATA DOM HTML DOM CSS 21

DOM : core et extensions Le CORE de DOM définit les éléments ci-après : ce qu'est une implémentation DOM et la nature des erreurs reconnues les interfaces de gestion d'un document XML pour Y accéder (fonction d'accès à des éléments, attributs, etc.) le construire (fonctions de création de documents, d'éléments, d'attributs, etc.) Les extensions, qui sont optionnelles dans les implémentations, ajoutent pour XML: les notions de sections CDATA et la gestion des entités externes (niveau 1), les notions de DTD, de processing instructions, de notation (niveau 2). 22

DOM Niveau 1 (Oct 1998) Objectif : gestion XML et HTML Définit un modèle orienté objet pour représenter des documents structurés (XML, HTML) Document, Element, Attr, Text,, Node CORE: Accéder et construire document Extension XML et HTML Objets nouveaux comme les frames, les images ou les ancres. Les fonctionnalités de manipulation sont minimes, celles du core étant a priori souvent suffisantes. 23

DOM Niveau 2 (Nov 2000) CORE : Ajout des espaces de nommage (ajouter NS à la fin des méthodes (éléments par ex)) Extensions : Des fonctionnalités de manipulation des CSS, les feuilles de styles associées aux documents HTML. Des fonctionnalités d'accès à des événements liées à des changements d'état d'un document ou à des actions de l'utilisateur sur un document (Des fonctionnalités de parcours de document XML, avec ou sans filtre Fonctionnalités d'identification de portion de document, basées sur les informations de structure ou sur des contenus quelconques, identifiés par leur ordre séquentiel. 24

DOM Niveau 3 (Avr 2004) DOM CORE niveau 3 permet Accés aux modèles de documents Sous la forme de DTD, Schéma ou tout autre formalisme. Chargement et sauvegarde des données Utilisation de filtres 25

Utilisation de DOM Vous devez disposer parserxml Compatible DOM JAXP ou Xerces Fichier XML Implémentation DOM Java Possibilité Création Manipulation Sauvegarde? Instancier document Source Manipulation document Sauvegarde document Destination 26

import org.w3c.dom.*; Package et API DOM et indépendant du parser sauf : Pour instancier un Document Mais à partir d'une instance de Document, on reste dans du DOM Pour accéder aux nœuds, éléments, attributs, textes, Pour créer de nouveaux nœuds 27

Instancier un document DOM Instancier document Manipulation document Sauvegarde document Source Destination 28

Lecture de DOM Utilise un parser compatible DOM Document XML Parser XML Transforme le document XML en objets Java. Accès et modification par l'api DOM Objets Ensemble d'objets contenant l'information du document XML, un objet Document. Application Utilisation de l'interface DOM pour accéder aux données du document XML Parser XML & DOM 29

Un parser XML DOM Transforme un document XML en une représentation arborescente orientée objet Le document est stocké en mémoire (attention donc!) Permet d'accéder, de naviguer ou de modifier le document Sans manipuler directement le fichier XML! Le parser effectue quelques traitements simples Résout toutes les entités externes par exemple Opération de validation si la DTD/schéma est présent 30

Étapes On dispose d un document XML Trois étapes Spécifier un parser DOM Créer un objet document Charger le contenu du fichier XML dans le document Ces étapes dépendent du parser utilisé 31

Créer un document (exemple JAXP) import org.w3c.dom.*; //package DOM import javax.xml.parsers.*; //jaxp import java.io.*; try { // Code propre à JAXP de Sun DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newdocumentbuilder (); Document doc = db.parse(new File("annuaire.xml")); Création documentbuilder Création du document // A partir d'ici, c'est du DOM } cash(exception e) { } 32

Créer un document (exemple Xerces) import org.w3c.dom.*; //package DOM import java.io.*; try { // Code propre à Xerces org.apache.xerces.parsers.domparser parser= new org.apache.xerces.parsers.domparser (); parser.setfeature("http://xml.org/sax/features/validation",true); Création parser parser.parse("annuaire.xml"); Document doc=parser.getdocument(); Création du document // A partir d'ici, c'est du DOM } cash(exception e) { } 33

Manipulation On suppose qu on a un document chargé Indépendant du parser Instancier document Manipulation document Sauvegarde document Source Destination Utiliser API DOM Créer un objet Document API DOM différentes interfaces 34

DOMImplementation NodeList DOM-core (interfaces API DOM) DocumentFragment Element Node Attr CharacterData Document Text Comment CDATASection DocumentType Notation Entity ProcessingInstruction 35

DOM-core : interface Node Interface fondamentale Node : tout est nœud ou presque Utilisation: On ne manipule que des nœuds On ne crée pas de nœuds Mais une interface héritée Éléments, Attributs, Commentaires, etc Remarque: Tout nœud est rattaché à un document (propriété ownerdocument) Mais n est pas forcément dans l arbre du document (ex création) 36

DOM-core : Node (propriétés) Méthodes de l'interface Node getnodetype( ): indique une valeur caractérisant le type du noeud (ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, ) getnodename( ): nom de l élément (lecture seule) Null si Text Nom de la balise ou de l attribut getnodevalue( ) : valeur du nœud Attribut: valeur de l attribut Si élément retourne null getattributes( ) : Retourne nodemap des attributs (seulement si élément) 37

Types de nœud Type nodename nodevalue attributes Element tag name null NamedNodeMap Attr attribute name valeur de l'attribut null Text #text contenu null CDATASection #cdata-section contenu null EntityReference nom de l'entité null null Entity nom de l'entité null null ProcessingInstruction cible (target) contenu sauf la cible null Comment #comment contenu du commentaire null Document #document null null DocumentType nom de la DTD null null DocumentFragment #document-fragment null null Notation nom de la notation null null 38

Exemple <?xml version="1.0"?> <carnet> <personne> <nom>thomas</nom> <prenom>vincent</prenom> </personne> </carnet> Element Carnet Element Personne Element Nom Text Thomas Element Prenom 39 Text Vincent

Exemple Element Carnet Element Personne Element Nom Element Prenom Text Thomas Text Vincent nodetype? nodename? nodevalue? 40

Exemple Element Carnet Element Personne Element Nom Element Prenom Text Thomas Text Vincent nodetype ELEMENT_NODE nodename Nom nodevalue null 41

Exemple Element Carnet Element Personne Element Nom Element Prenom Text Thomas Text Vincent nodetype? nodename? nodevalue? 42

Exemple Element Carnet Element Personne Element Nom Element Prenom Text Thomas Text Vincent nodetype TEXT_NODE nodename "#text" nodevalue "Thomas" 43

Node (navigation dans l arbre) Savoir si le nœud à des enfants Boolean haschildnodes() Accéder aux autres éléments Faire des gets (cf transparent suivant) 44

DOM-core (navigation dans l arbre) Node ParentNode Node PreviousSibling Node Élément courant NodeList ChildNodes Node FirstChild Node Node NextSibling Node LastChild 45

Navigation arbre avec Node (exemple) <?xml version="1.0"?> <carnet> <personne> <nom>thomas</nom> <prenom>vincent</prenom> </personne> </carnet> // part d un Node Obj correspondant à Carnet Element Carnet Element Personne Element Nom //acceder «carnet» Obj.getNodeName(); //acceder «prenom» Node Obj2=(Obj.getLastChild()).getLastChild(); Obj2.getNodeName(); //acceder «Vincent» (Obj2.getLastChild()).getNodeValue(); Element Prenom Text Thomas Text Vincent 46

DOM-core : Node (manipulation) Ajouter un nœud en tant que dernier fils appenchild(node nouvel_objet) Ajouter nœud insertbefore(node nouvel_objet,node objet_fils) Retirer un nœud removechild(node objet_fils) Remplacer un nœud replacechild(node nouvel_objet,node objet_fils) Cloner un nœud CloneNode(boolean deep) 47

Interface Node: Clone Node Deux manières distinctes de cloner Superficielle Seul nœud courant Et les attributs (si c'est un élément) En profondeur récursivement "false" (superficiel) clonenode() "true" (en profondeur) 48

DOM-core : interface document L interface document représente l ensemble du document C est aussi un Node Le nœud document est la racine du document Et non pas l élément racine!! Interface de construction Utiliser des méthodes de document pour créer des nœuds Les nœuds sont reliés au document (même s ils ne sont pas dans l arbre) Ajouter ces nœuds à l arbre 49

Méthodes de construction createnodetype() Précise NodeType Element, Attribut, TextNode, DOM-core : document Méthodes d accès Node getdocumentelement() : renvoie l élément racine NodeList getelemenstbytagname(string name) Accès aux élément à partir des tags 50

Navigation arbre avec document <?xml version="1.0"?> <carnet> <personne> <nom>thomas</nom> <prenom>vincent</prenom> </personne> </carnet> Element Carnet Element Personne Element Nom // part d un Document Doc //acceder «carnet» Node Obj=Doc.getDocumentElement(); Obj.getNodeName(); Element Prenom Text Thomas Text Vincent 51

DOM-Core (document from scratch) Démarche à suivre: 1. Créer un document ObjDoc = new Document(); 2. Créer des éléments à partir du document ObjElement=ObjDoc.createElement("racine"); SsElement=ObjDoc.createElement("elem"); 3. Insérer les éléments dans l arbre ObjDoc.appenChild(ObjElement); ObjElement.appenChild(SsElement); 52

DOM-Core (document from scratch) Attention Les nœuds créés appartiennent au document Les nœuds créés appartiennent au document Insérer un Nœud de Doc1 sur l arbre de Doc2 Génére DOMException utiliser Node importnode(node noeud, boolean deep) de document // part d un Document Doc1 et Doc2 Element El1=doc1.getDocumentElement(); Element El2=doc2.getDocumentElement(); //génère une exception El1.appenChild(El2); // part d un Document Doc1 et Doc2 Element El1=doc1.getDocumentElement(); Element El2=doc2.getDocumentElement(); //accepté Node node=doc1.importnode(el2, true) El1.appenChild(El2); 53

DOM-core : Element (manipulation) NamedNodeMap getattributes() String getattribute (String name) Retourne la valeur de l attribut Attr getattribute (String name) Retourne le noeud de l attribut String gettagname() Retourne le nom de l élément void removeattribute(string name) Retire l attribut spécifié Idem avec removeattributenode(attr node) void setattribute(string name, String value) Ajoute un attribut Idem avec setattributenode(attr node) 54

DOM-core : Attributs (manipulation) Les attributs sont des Node eux aussi MAIS Ils ne sont pas connectés à l arbre par dépendance hiérarchique Pour un node élément, getchildnodes( ) ne contient pas d attributs, il faut utiliser getattributes( ) de node 55

DOM-core : DocumentFragment Un fragment de document XML peut être stocké temporairement dans un nœud de type DocumentFragment Objet léger, par exemple pour les copier-coller Attaché sur un autre nœud, il se détruit automatiquement Très utile pour l ajout des enfants dans l arbre Arbre DOM Sous arbre DocumentFragment Nouvel Arbre DOM 56

On a un document Sauvegarde d un Document Instancier document Manipulation document Sauvegarde document Source Destination On souhaite l exporter Directement Après transformation XSLT 57

Sauvegarde et transformation d un document Pas dans API DOM (sauf niveau 3) Dans JAXP: Java API for XML Parsing Processeurs XSL Utilise DOM (fin amphi : JAXP) Packages javax.xml.transform 58

DOM: sauvegarde et transformation (JAXP) Class TransformerFactory : créer des Transformer...(sic) newtransformer() qui produit un nouveau transformer newtransformer(source XML) qui produit un nouveau transformer (possibilité d utiliser XSL) Class Transformer : appliquer des transformations setparameter permet de spécifier des paramètres à la transformations transform(source XmlSource, Result target) effectue la transformation du document source vers le résultat Class Source : Utiliser des StreamSource ou DOMSource Class Result : Utiliser des StreamResult ou DOMResult 59

DOM: sauvegarde et transformation (ex) // créer un stream vers xsl StreamSource style_auteur=new StreamSource("transfo.xsl"); 60

DOM: sauvegarde et transformation (ex) // créer un stream vers xsl StreamSource style_auteur=new StreamSource("transfo.xsl"); //créer un transformer utilisant XSL TransformerFactory TR=TransformerFactory.newInstance(); Transformer Transfo=TR.newTransformer(style_auteur); 61

DOM: sauvegarde et transformation (ex) // créer un stream vers xsl StreamSource style_auteur=new StreamSource("transfo.xsl"); //créer un transformer utilisant XSL TransformerFactory TR=TransformerFactory.newInstance(); Transformer Transfo=TR.newTransformer(style_auteur); //créer la source et la destination //doc désigne un document DOM DOMSource source=new DOMSource(doc); StreamResult=new StreamResult("result.html"); 62

DOM: sauvegarde et transformation (ex) // créer un stream vers xsl StreamSource style_auteur=new StreamSource("transfo.xsl"); //créer un transformer utilisant XSL TransformerFactory TR=TransformerFactory.newInstance(); Transformer Transfo=TR.newTransformer(style_auteur); //créer la source et la destination //doc désigne un document DOM DOMSource source=new DOMSource(doc); StreamResult=new StreamResult("result.html"); //appliquer la transformation Transfo.transform(sourceb,resultb); 63

On a vu DOM: résumé L API DOM Interface node, document, Comment utiliser cette API sous java Package Pour Charger et analyser un document XML Manipuler ce document Faire des transformations Sauvegarder le document Plus d informations sur: http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/package-summary.html 64

SAX Plan Général parser DOM SAX JAXP 65

SAX Simple API for XML Interface SAX (1) SAX est une normalisation proposée par des industriels (xml-dev) Standard de fait (1997) Supportée par la majeure partie des parsers XML Une alternative à DOM pour éviter les problèmes de mémoire et la lecture de gros documents XML 66

SAX DOM Différence SAX/DOM Utilisateur Application analyse traitement Données Parser Modèle Problème: on charge tout le document en mémoire Avantage: on peut manipuler l'arbre construit SAX Demande analyse Application Gestionnaire événement Données Parser SAX Avantage : On traite au fur et à mesure Probleme: On ne conserve pas l'information 67

SAX Interface SAX (2) Principe: SAX est événementiel Une application SAX implémente un ensemble de méthodes correspondant aux évènements du parser Balise ouvrante/fermante... Le parser XML appelle ces méthodes, en passant les paramètres nécessaires un nom pour un élément, un couple nom/valeur pour un attribut, Un parser SAX est uniquement un consommateur de données, il ne garde rien en mémoire 68

SAX Architecture générique d'une application SAX Application SAX 2 Modèle objet Java 3 Parser SAX XML -> Java String toxml() Java -> XML 1 4 Document XML Document XML 69

SAX Application SAX Avoir un parser XML implémentant SAX Trois étapes pour utiliser SAX Créer un modèle objet interne (comme CD, Livre, ) Créer un parser SAX Créer un ContentHandler Qui traite les événements pour transformer le document XML en objets internes Et éventuellement, un ErrorHandler, DTDHandler et un EntityResolver Créer modèle Objet interne Créer un Parser SAX Créer un ContentHandler 70

SAX 1) Créer un modèle objet interne Créer modèle Objet interne Créer un ContentHandler Créer un Parser SAX Votre objet Dans lequel vous récupérerez les informations lors de l analyse 71

SAX 2) Créer un ContentHandler Créer modèle Objet interne Créer un ContentHandler Créer un Parser SAX ContentHandler est chargé de traiter les événements Package org.xml.sax.* En JAVA: il suffit implémenter interface ContentHandler Et surcharger certaines méthodes pour répondre aux événements correspondants 72

SAX ContentHandler (Réception évènements) Évènement Méthode Début du document Fin du document startdocument() enddocument() Balise ouvrante Balise fermante startelement(string, String local, String qname, Attributes liste) endelement(string) Chaîne de caractères Processing instruction Espaces blancs (problème DTD) characters(char[],int, int) processinginstruction(string,string) ignorablewhitespace(char[],int,int) 73

SAX Séquence des évènements <?xml version="1.0"?> <cd id="4"> <titre> Freak on ica </titre> startdocument() startelement("cd",...) startelement("titre",...) characters(char[],start,length) endelement("titre") </cd> endelement("cd") enddocument() 74

SAX Remarques Attention Pas de recommandation SAX pour characters Pour les contenus mixtes <cd id="4"> a <b/> c </cd> Récupérer les attributs startelement(string namespaceuri, String localname, String qname, Attributes atts) a pour paramètres Le nom qname de l élément rencontré La liste d attributs liste avec plusieurs methodes getlength() qui renvoie le nombre d attributs getqname(int i) renvoie le nom de l attribut numero i getvalue(int i) renvoie la valeur de l attribut numero i getvalue(string name) renvoie la valeur de l attribut name gettype(int i) revoie le type de l attribut 75

SAX DefaultHandler qui affiche les éléments Utiliser une classe DefaultHandler implémentant ContentHandler Pour afficher les noms des éléments rencontrés Public class Lecture extends DefaultHandler { public void startdocument() throws SAXException {System.out.println("debut");} public void enddocument() throws SAXException {System.out.println("fin");} public void startelement(string namespaceuri, String localname, String qname, Attributes atts) throws SAXException { System.out.println("l element est"+qname);} Début document Fin document Début élément } 76

SAX Utilisation du handler <?xml version="1.0"?> <cd id="4"> <titre> Freak on ica </titre> startdocument() startelement( ) startelement( ) characters( ) endelement( ) début cd rencontré titre rencontré </cd> endelement( ) enddocument() fin 77

SAX 3) Créer un parser SAX Créer modèle Objet interne Créer un ContentHandler Créer un Parser SAX Il faut créer un parser SAX A partir d une librairie En lui fournissant le ContentHandler Possibilité De gérer les exceptions : interface errorhandler D accéder aux déclarations de la dtd: interface DTDHandler De gérer plusieurs entrées De résoudre les liens des entités 78

SAX Création du parser SAX Déclarer un parser Obtenir un parser org.xml.sax.xmlreader reader; reader = org.xml.sax.helpers.xmlreaderfactory.createxmlreader(nom); Désigne un parser compatible SAX Par exemple : "com.sun.xml.parser.parser" Associer un ContentHandler reader.setcontenthandler(handler); Handler désigne un ContentHandler Instancié au préalable 79

SAX Lier le parser a un fichier XML InputSource : Analogue à un InputStream mais encapsule un flux de lecture sur : un flux d'octets (bytes) un flux de caractères une connexion HTTP un fichier XML local Création InputSource InputSource InputSource source= new source= InputSource(source) new InputSource("nom") Le lier au XMLReader pour parser un fichier Xmlreader.parse(source); 80

SAX Interface ErrorHandler Gestion des exceptions Ses Méthodes permettent de personnaliser les messages d erreur dans votre Application SAX error(saxparseexception) : fatalerror(saxparseexception) warning(saxparseexception) Associer au parser parser.seterrorhandler(errorhandler); 81

SAX DTDHandler Interface pour des évènements liés à la DTD Notation dans les DTD Notation déclaré dans les DTD Permet de spécifier des formats de fichiers Evenement récupéré par la méthode Void notationdecl(string name,string PublicId,String systemid) Unparsed entity Evenement récupéré par la méthode Void unparsedentity(string name,string PublicId,String systemid,string notationname) 82

SAX EntityResolver Permet de modifier la source à traiter Lorsqu'on rencontre des entités exterieure Évènement est récupéré par la méthode resolveentity Celle-ci retourne un nouvel InputSource 83

ou SAX? DOM Navigation, parcours du document Documents peu structurés Beaucoup de données Petits documents (< 1Mo) Extraction de fragment Création de nouveau document XML SAX Lecture séquentielle : pas d'accès aléatoire au document Documents très structurés Peu de données Petits et gros documents (de 1ko à 2,5Mo) Sélection Extraction de données Filtrage 84

JAXP et JDOM Plan Général parser DOM SAX JAXP et JDOM 85

JAXP et JDOM JAXP Java API for XML Parsing JAXP est un ensemble d'apis Java permettant d'effectuer des traitements XML qui inclut SAX (SAX 2.0) DOM (DOM Level 2) la manipulation de transformations XSLT Le but est de : Fournir une couche d abstraction au dessus de SAX ou DOM afin de garantir un effort de standardisation des aspects non couverts par SAX et DOM L origine : L'API est le fruit de travaux de développement communs à Ariba, AOL/Netscape, BEA, Bluestone, Fujitsu, IBM, et Oracle. Téléchargeable gratuitement depuis l'espace de Sun Java Technology and XML (XML Pack). 86

JAXP et JDOM Packages JAXP La librairie JAXP utilise plusieurs packages javax.xml.parsers Ensemble de classes pour interfacer des parsers SAX : SAXParser et SAXParserFactory DOM : DocumentBuilder et DocumentBuilderFactory org.w3c.dom Package DOM org.xml.sax et org.xml.sax.helpers Packages SAX 87

JAXP et JDOM JAXP Pourquoi utiliser JAXP : DOM ne spécifie pas comment créer un objet parser différent API selon implémentation portabilité du code est affecté. En utilisant DOM, il faut explicitement importer et référencer la classe de l analyseur (org.apache.xerces.parsers.domparser) Si on change de parser problèmes! Avant chaque opération DOM, le document XML a besoin d être analysé (parsé) et un objet doit être créé. Cette opération n est pas standardisée par le W3C! Pas de norme sur l'obtention d'un document JAXP sert donc de couche intermédiaire entre votre application et le(s) parser(s) utilisé(s). Livré en plus avec un parser XML minimal (non validant) 88

JAXP et JDOM Cf transparent DOM Cf transparents SAX JAXP comment utiliser? 89

JAXP et JDOM DOM: Créer un document (exemple JAXP) import org.w3c.dom.*; //package DOM import javax.xml.parsers.*; //jaxp import java.io.*; try { // Code propre à JAXP de Sun DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newdocumentbuilder (); Document doc = db.parse(new File("annuaire.xml")); Création documentbuilder Création du document // A partir d'ici, c'est du DOM } cash(exception e) { } 90

JAXP et JDOM DOM: sauvegarde et transformation (ex) // créer un stream vers xsl StreamSource style_auteur=new StreamSource("transfo.xsl"); //créer un transformer utilisant XSL TransformerFactory TR=TransformerFactory.newInstance(); Transformer Transfo=TR.newTransformer(style_auteur); //créer la source et la destination //doc désigne un document DOM DOMSource source=new DOMSource(doc); StreamResult=new StreamResult("result.html"); //appliquer la transformation Transfo.transform(sourceb,resultb); 91

JAXP et JDOM JDOM : le principe Philosophie de JDOM (projet open-source Apache like): Facile à utiliser pour les programmeurs Java Devrait intégrer DOM et SAX Lecture et écriture des documents DOM et les évènements SAX Utilisation des différents parsers DOM ou SAX (utilisation du modèle JAXP) Devrait rester compatible avec les dernières normes de XML Pourquoi ne pas utiliser DOM directement : Occupation élevée de la mémoire Pourquoi ne pas utiliser SAX : Pas de possibilité de modifier les documents, d accéder aléatoirement, ou de générer une sortie physique Java optimalisé (utilisation des Collections Java 2 par exemple) Couvrir 80% des problèmes et laisser 20% aux autres parsers! 92

JAXP et JDOM Les classes représentant un document XML et sa construction: Attribute CDATA Comment DocType Document Element EntityRef Namespace ProcessingInstruction (PartialList) (Verifier) (Assorted Exceptions) JDOM : packages Les classes de lecture des documents XML depuis des sources existants : DOMBuilder SAXBuilder Packages d adaptateurs pour obtenir un objet DOM à partir de n importe quel analyseur org.jdom org.jdom.adapters org.jdom.input Les classes pour écrire les documents XML sous plusieurs formes et sorties : org.jdom.output DOMOutputter SAXOutputter XMLOutputter org.jdom.transform 93

JAXP et JDOM JDOM vs. DOM : un exemple Création d'un document from scratch en JDOM Document doc = new Document( new Element("rootElement").setText("This is a root element")); Et en DOM? Document mydocument = new org.apache.xerces.dom.documentimpl(); Element root = mydocument.createelement("myrootelement"); Text text = mydocument.createtext( "This is a root element"); // Et on ajoute le tout! root.appendchild(text); mydocument.appendchild(root); 94