Espaces de noms, DOM, SAX



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

Document Object Model (DOM)

Master d Informatique Corrigé du partiel novembre 2010

DOM - Document Object Model

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programmer en JAVA. par Tama

< _155_0>

Les structures de données. Rajae El Ouazzani

Arbres binaires de recherche

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

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

34. DOM (Document Object Model)

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)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TD/TP PAC - Programmation n 3

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

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

Remote Method Invocation (RMI)

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation Par Objets

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des exercices sur les références

as Architecture des Systèmes d Information

Programmation avec des objets : Cours 7. Menu du jour

Documentation CAS à destination des éditeurs

TD/TP PAC - Programmation n 3

INITIATION AU LANGAGE JAVA

Aspects techniques : guide d interfaçage SSO

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

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

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Un ordonnanceur stupide

Chapitre 10. Les interfaces Comparable et Comparator 1

Package Java.util Classe générique

BASE DE DONNÉES XML NATIVE

Programmation Web. Madalina Croitoru IUT Montpellier

Projet de programmation (IK3) : TP n 1 Correction

Java Licence Professionnelle CISII,

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

Tp 1 correction. Structures de données (IF2)

Programmation Objet Java Correction

Auto-évaluation Programmation en Java

Architecture Orientée Service, JSON et API REST

Corrigés des premiers exercices sur les classes

4. Groupement d objets

Générer du code à partir d une description de haut niveau

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

Création d objet imbriqué sous PowerShell.

Langage Java. Classe de première SI

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

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Cours 14 Les fichiers

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TD3: tableaux avancées, première classe et chaînes

JavaServer Pages (JSP)

Application web de gestion de comptes en banques

RMI le langage Java XII-1 JMF

Synchro et Threads Java TM

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Java DataBaseConnectivity

Les arbres binaires de recherche

Tutoriel d installation de Hibernate avec Eclipse

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

TP1 : Initiation à Java et Eclipse

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Développement Logiciel

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Programmation en Java IUT GEII (MC-II1) 1

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Programmation par les Objets en Java

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

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

Plan du cours. Historique du langage Nouveautés de Java 7

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

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

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

Alfstore workflow framework Spécification technique

Exercices sur les interfaces

PDO : PHP Data Object 1/13

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

L'API DOM : Document Object Model

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

Le Modèle de Sécurité dans JAVA

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

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

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

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Flux de données Lecture/Ecriture Fichiers

Chapitre VI- La validation de la composition.

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Dis papa, c est quoi un bus logiciel réparti?

Transcription:

Espaces de noms, DOM, SAX Dan VODISLAV Université de Cergy-Pontoise Licence Informatique L3 Plan Espaces de noms Interfaces de programmation DOM SAX UCP, Licence L3: Espaces de noms, DOM/SAX 2

Espaces de noms Espace de noms («namespace») Collection de noms d éléments ou noms d attributs, identifiée par un URI Idée: rajouter un préfixe afin de rendre "uniques" et identifiables les noms de ses propres balises Unicité du préfixe: à travers l'uri associée Partage: on peut utiliser des espaces de noms «standard» (Dublin Core, FOAF, etc.) <document xmlns:dc='http://purl.org/dc/elements/1.1/'> <art:film xmlns:art='http://www.pariscope.fr/ dc:title='décalage horaire' dc:creator='danièle Thompson'> <com:acteur xmlns:com='http://www.comedie.fr/' com:nom='juliette Binoche' /> </art:film> </document> UCP, Licence L3: Espaces de noms, DOM/SAX 3 Nom qualifié et nom universel Nom qualifié = nom "visible" dans le document Composé d un préfixe (optionnel) et du nom de l élément (nom local) Nom universel = vrai nom, vraie "signification" Obtenu à partir du nom qualifié en remplaçant le préfixe par l'uri Composé d une URI (optionnelle) et du nom de l élément (nom local) <document xmlns:dc='http://purl.org/dc/elements/1.1/'> <art:film xmlns:art='http://www.pariscope.fr/ dc:title='décalage horaire' dc:creator='danièle Thompson'> <com:acteur xmlns:com='http://www.comedie.fr/' com:nom='juliette Binoche' /> </art:film> </document> Nom qualifié art:film com:acteur dc:title dc:creator Nom universel http://www.pariscope.fr/:film http://www.comedie.fr/:acteur http://purl.org/dc/elements/1.1/:title http://purl.org/dc/elements/1.1/:creator UCP, Licence L3: Espaces de noms, DOM/SAX 4

Espaces de nom sans préfixe Dans l utilisation d un espace de noms le préfixe n est pas obligatoire Espaces de noms définis par xmlns=uri au lieu de xmlns:pre=uri Signification Si un espace de noms sans préfixe est défini dans un élément A, tous les éléments inclus dans A font partie de l espace de noms (pas les attributs!) <document xmlns='http://www.pariscope.fr/'> <film titre='décalage horaire'> <acteur>juliette Binoche</acteur> </film> </document> Nom qualifié document film acteur titre Nom universel http://www.pariscope.fr/:document http://www.pariscope.fr/:film http://www.pariscope.fr/:acteur titre UCP, Licence L3: Espaces de noms, DOM/SAX 5 Attribution d un nom universel pour un nom qualifié Problème: étant donné un nom d'élément avec ou sans préfixe, quel est son nom universel? Espaces de noms sans préfixe Un élément sans préfixe appartient à l espace de noms défini par l attribut xmlns de l ancêtre le plus proche. Si aucun ancêtre n a d attribut xmlns, l élément n appartient à aucun espace de noms. Un attribut sans préfixe n appartient à aucun espace de noms Espaces de noms avec un préfixe pre L élément (ou l attribut) avec le préfixe pre appartient à l espace de noms défini par l attribut xmlns:pre de l ancêtre le plus proche. Il y a erreur si aucun ancêtre n a d attribut xmlns:pre. UCP, Licence L3: Espaces de noms, DOM/SAX 6

Exemples L'absence de préfixe dans un nom ne signifie pas que le nom universel n'a pas d'uri <?xml version="1.0"?> <A> <B/> <C xmlns="http://a.b.c/"> <D/> </C> </A> UCP, Licence L3: Espaces de noms, DOM/SAX 7 Exemples (suite) Deux éléments avec le même préfixe peuvent appartenir à des espaces de noms différents <?xml version="1.0"?> <A xmlns:p="http://a.b.c/"> <p:b/> <p:b xmlns:p="http://x.y.z/"> <p:c/> </p:b> </A> UCP, Licence L3: Espaces de noms, DOM/SAX 8

Interfaces de programmation pour XML Interfaces de programmation (API) Utilisation de données XML dans les programmes Opérations: recherche, transformation, validation, sérialisation, etc. Deux approches: Utilisation de la forme arborescente XML: DOM Avantage: utilisation très générale et simple, la plus utilisée Inconvénient: stockage en mémoire de la structure d arbre Utilisation de la forme sérialisée XML (chaîne de caractères): SAX Avantage: pas besoin de stocker le document en mémoire, rapidité Inconvénient: programmation complexe, parfois le stockage est nécessaire UCP, Licence L3: Espaces de noms, DOM/SAX 9 DOM et SAX Modèle + API basée sur ce modèle Les deux produisent une forme arborescente DOM: arbre stocké en mémoire SAX: arbre «virtuel», parcouru à la volée Niveau d abstraction SAX: niveau plus bas (événements de début/fin de balise) Fonction principale: parseur XML paramétrable avec des actions DOM: niveau plus haut (nœuds d arbre) Parseur, mais aussi parcours de l arbre, modification, etc. Un parseur DOM peut être écrit en SAX! Disponibles dans plusieurs langages de programmation Java, C++, Perl, etc. UCP, Licence L3: Espaces de noms, DOM/SAX 10

DOM DOM = Document Object Model Modèle de type arbre pour les documents XML API de programmation XML basée sur ce modèle Construit et manipule des arbres XML en mémoire Application Forme sérialisée parseur Forme arborescente sérialisation Forme sérialisée UCP, Licence L3: Espaces de noms, DOM/SAX 11 Arbres DOM Un parseur DOM: document XML arbre formé de nœuds chaque nœud est un objet implémentant l interface Node des opérations sur ces objets permettent de créer, modifier, détruire des nœuds, ou de naviguer dans le document Nœuds de plusieurs types (sous-interfaces de Node) Racine: type Document Les autres types de nœuds: Element, Attribute, Text, Comment, etc. Structure d arbre Nœuds feuilles («Leaf») Nœuds containeurs («Container»): nœuds pouvant avoir des descendants Nœuds attribut («Attribute»): statut particulier similaires aux feuilles, mais avec quelques différences UCP, Licence L3: Espaces de noms, DOM/SAX 12

Types de nœuds DOM UCP, Licence L3: Espaces de noms, DOM/SAX 13 Représentation textuelle Exemple <?xml version="1.0" encoding="iso-8859-1"?> <!-- Commentaire --> <A>Le texte de A <B>Le texte de B</B> <D attr1="1" attr2="azerty"> <C/> </D> <![CDATA[2x < y]]> </A> UCP, Licence L3: Espaces de noms, DOM/SAX 14

Représentation DOM UCP, Licence L3: Espaces de noms, DOM/SAX 15 Types de programmation DOM Node: interface commune pour tous les nœuds DOM + interfaces spécifiques pour chaque type de nœud (élément, texte,...) Deux façons de programmer le parcours d'un arbre DOM Voir tous les nœuds comme des objets de type Node Avantage: arbre homogène, plus simple pour un parcours complet Inconvénient: méthodes simples (communes) ou comportement variable Voir chaque nœud avec son type spécifique Avantage: méthodes spécifiques pour chaque type, plus puissantes Inconvénient: arbres hétérogènes, plus difficile à programmer En pratique: deux méthodes principales Parcours de l arbre DOM comme un arbre d objets Node + actions en fonction du type du nœud courant Parcours des nœuds Element (balises) guidé par leur nom et accès à leurs attributs, contenus textuels, etc. UCP, Licence L3: Espaces de noms, DOM/SAX 16

Principales propriétés de Node Propriété Type Propriété Type nodetype short (int) nodename String nodevalue String parentnode Node firstchild Node lastchild Node childnodes NodeList previoussibling Node nextsibling Node attributes NamedNodeMap NodeList: liste (tableau) de Node propriété lengthint méthode item(int) Node NamedNodeMap: table d association par nom pareil que NodeList + méthode getnameditem(string) Node aussi setnameditem, removenameditem UCP, Licence L3: Espaces de noms, DOM/SAX 17 Méthodes de Node par rapport à ses enfants insertbefore (Node nouveau, Node enfant) Insère le nouveau nœud en tant que nouvel enfant, juste avant enfant appendchild (Node nouveau) Insère le nouveau nœud en tant que nouvel enfant, en dernière position replacechild (Node nouveau, Node ancien) Remplace l ancien enfant avec le nouveau removechild (Node enfant) Supprime le nœud enfant en question boolean haschildnodes () Vérifie si c est un nœud feuille UCP, Licence L3: Espaces de noms, DOM/SAX 18

Méthodes de Document pour la création de nœuds Le nœud Document: le premier créé dans un arbre DOM Joue le rôle de fabrique de nœuds pour l arbre dont il est la racine Méthodes createelement() : crée et retourne un nœud Element createtextnode() : crée et retourne un nœud Text createcommentnode() : crée et retourne un nœud Comment UCP, Licence L3: Espaces de noms, DOM/SAX 19 Programmation DOM en Java JAPX: Java API for XML Processing Incluse dans Java 1.6 (version JAPX 1.4) import javax.xml.parsers.* import org.w3c.dom.* Idée générale Parseur DOM ("Document Builder") qui transforme un document XML en arbre DOM Le parseur est produit par une fabrique de parseurs L arbre DOM est manipulé à l aide des méthodes de parcours, modification, de l API UCP, Licence L3: Espaces de noms, DOM/SAX 20

Obtenir un arbre DOM A mettre dans un try catch try{ // création d'une fabrique de parseurs DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance(); fabrique.setvalidating(true); //si l on veut vérifier une DTD // création d'un parseur DocumentBuilder parseur = fabrique.newdocumentbuilder(); // transformation d'un fichier XML en DOM File xml = new File("exemple.xml"); Document document = parseur.parse(xml);... catch(parserconfigurationexception pce){ System.out.println("Erreur de configuration du parseur DOM"); catch(saxexception se){ System.out.println("Erreur lors du parsing du document"); catch(ioexception ioe){ System.out.println("Erreur d'entrée/sortie"); UCP, Licence L3: Espaces de noms, DOM/SAX 21 Méthodes Java pour Node Pour chaque propriété de Node une méthode get getnodetype(), getnodevalue(), getfirstchild(), Type: Node.ELEMENT_NODE, Node.TEXT_NODE, Node.DOCUMENT_NODE, Node.ATTRIBUTE_NODE, Valeur: pour les nœuds de type attribut, texte, commentaire, Attributs: pour élément Nom: pour attribut, élément, entité, En plus: getlocalname(), getprefix(), getnamespaceuri() Texte gettextcontent(): concaténation du texte dans tout le sous-arbre Des méthodes de modification setnodevalue, settextcontent, insertbefore, appendchild, replacechild, removechild UCP, Licence L3: Espaces de noms, DOM/SAX 22

Méthodes Java pour Element Informations sur l'élément String gettagname () : nom de l'élément boolean hasattribute (String anom) : existence d'un attribut appelé anom Accès aux sous-éléments NodeList getelementsbytagname(string nom) : liste des sous-éléments appelés nom (à n'importe quel niveau de profondeur!) Accès aux attributs String getattribute (String anom) : valeur de l'attribut appelé anom Attr getattributenode (String anom) : nœud attribut appelé anom void setattribute (String anom, String val) : modifie/ajoute l'attribut anom void setattributenode (Attr node) : ajoute le nœud attribut node void removeattribute (String anom) : supprime l'attribut anom Attr removeattributenode (Attr node) : supprime le nœud attribut node UCP, Licence L3: Espaces de noms, DOM/SAX 23 Parcourir un arbre DOM de nœuds Node Parcours récursif à partir de l élément racine Document document = parseur.parse(xml); //obtenir l élément racine Node racine = document.getdocumentelement(); //explorer par appel récursif TypeRésultat res = explorer(racine,...); Le parcours peut: Calculer un résultat: nombre de nœuds, d éléments, représentations variées sous forme de chaîne de caractères, etc. Modifier l arbre DOM: ajout, suppression, modification de nœuds Réaliser des actions: affichage, appels d autres programmes UCP, Licence L3: Espaces de noms, DOM/SAX 24

Exploration récursive Forme générale de la méthode d exploration static TypeRésultat explorer(node noeud,...){ //initialisation résultat TypeRésultat resultat =...; //traitement nœud courant if (noeud.getnodetype() == Node.TEXT_NODE){... //action pour les nœuds texte else if (noeud.getnodetype() == Node.ELEMENT_NODE){... //action pour les nœuds élément... //parcours récursif if (noeud.haschildnodes()){ NodeList enfants = noeud.getchildnodes(); for(int i=0; i<enfants.getlength(); i++){ TypeRésultat resenf = explorer(enfants.item(i),...);... //combiner resenf avec resultat return resultat; UCP, Licence L3: Espaces de noms, DOM/SAX 25 enfant 1..... noeud enfant n Exemple: modifier chaque nœud texte On rajoute la chaîne " (modifié)" à la fin de chaque texte static void explorer(node noeud){ //traitement nœud courant seulement s il est un texte if (noeud.getnodetype() == Node.TEXT_NODE){ String modif = noeud.getnodevalue() + " (modifié)"; noeud.setnodevalue(modif); //parcours récursif if (noeud.haschildnodes()){ NodeList enfants = noeud.getchildrennodes(); for(int i=0; i<enfants.getlength(); i++){ explorer(enfants.item(i)); UCP, Licence L3: Espaces de noms, DOM/SAX 26

Parcourir un arbre DOM d'éléments Element On part de l'élément racine et on descend jusqu'à l'élément souhaité à l'aide de getelementsbytagname Avantage: on n'a pas à s'occuper du type des nœuds, on ne traite que des éléments Exemple: compter les éléments A dans le document, qui ont un attribut a Document document = parseur.parse(xml); Element racine = document.getdocumentelement(); int compteur = 0; //liste des descendants qui s'appellent A NodeList listea = racine.getelementsbytagname("a"); //parcours liste à la recherche d attributs a for(int i=0; i<listea.getlength(); i++){ Element e = listea.item(i); if (e.hasattribute("a")) compteur++; UCP, Licence L3: Espaces de noms, DOM/SAX 27 SAX SAX = Simple API for XML Document XML parcouru sous forme sérialisée (chaîne de caractères, flux) séquence d événements Événements générés pour: Début et fin du document Début et fin d un élément Commentaire, instruction de traitement, UCP, Licence L3: Espaces de noms, DOM/SAX 28

Programmation SAX Déclencheurs spécifiques à chaque événement Partagent un même espace mémoire («accumulateur») Programmation SAX: écrire des gestionnaires d événements («handlers») UCP, Licence L3: Espaces de noms, DOM/SAX 29 Utilisation Packages à importer dans JAPX import javax.xml.parsers.* import org.xml.sax.* import org.xml.sax.helpers.* Création d un parseur SAX try{ // création d'une fabrique de parseurs SAX SAXParserFactory fabrique = SAXParserFactory.newInstance(); fabrique.setvalidating(true); //si l on veut vérifier une DTD // création d'un parseur SAX SAXParser parseur = fabrique.newsaxparser(); // lecture d'un fichier XML avec un DefaultHandler File xml = new File("exemple.xml"); DefaultHandler gestionnaire = new DefaultHandler(); parseur.parse(xml, gestionnaire); catch(parserconfigurationexception pce){ System.out.println("Erreur de configuration du parseur DOM"); catch(saxexception se){ System.out.println("Erreur lors du parsing du document"); catch(ioexception ioe){ System.out.println("Erreur d'entrée/sortie"); UCP, Licence L3: Espaces de noms, DOM/SAX 30

Les gestionnaires (handlers) Le parseur gère plusieurs gestionnaires De contenu: éléments, texte, attributs, De DTD D entités D erreurs DefaultHandler Ne fait rien Toutes les méthodes des gestionnaires sont null UCP, Licence L3: Espaces de noms, DOM/SAX 31 Programmer un gestionnaire public class MonHandler extends DefaultHandler{ //variables locales ("accumulateur") private...; //constructeur public MonHandler(){ super();... //initialisation des variables locales //détection d'ouverture de balise public void startelement(string uri, String localname, String qname, Attributes attributes) throws SAXException{ if(qname.equals("..."))... //détection de fin de balise public void endelement(string uri, String localname, String qname) throws SAXException{ if(qname.equals("..."))... //suite page suivante... UCP, Licence L3: Espaces de noms, DOM/SAX 32

Programmer un gestionnaire (suite) //... suite //détection de caractères public void characters(char[] ch, int start, int length) throws SAXException{ String texte = new String(ch,start,length);... //détection début document public void startdocument() throws SAXException {... //détection fin document public void enddocument() throws SAXException {... Utilisation DefaultHandler mongestionnaire = new MonHandler(); parseur.parse(xml, mongestionnaire); UCP, Licence L3: Espaces de noms, DOM/SAX 33 Exemple d application Flux XML à insérer dans une BD <FILMS>... <FILM> <TITRE>Alien</TITRE> <ANNEE>1979</ANNEE> <AUTEUR>Ridley Scott</AUTEUR> <GENRE>Science-fiction</GENRE> <PAYS>USA</PAYS> </FILM>... </FILMS> Début de document : connexion à la base et début de transaction Balise <FILM> : initialisation en mémoire d un enregistrement Film Balise <TITRE> : affectation Film.titre, Balise </FILM> : insertion de l enregistrement dans la base Fin de document : fin de transaction et déconnexion de la base UCP, Licence L3: Espaces de noms, DOM/SAX 34