BDAV - APIs XML. BDAV - APIs XML. E.Coquery. emmanuel.coquery@liris.cnrs.fr http://liris.cnrs.fr/ ecoquery/



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

Master d Informatique Corrigé du partiel novembre 2010

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

OpenPaaS Le réseau social d'entreprise

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

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)

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

34. DOM (Document Object Model)

BASE DE DONNÉES XML NATIVE

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

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Structure fonctionnelle d un SGBD

Introduction à JDBC. Accès aux bases de données en Java

< _155_0>

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

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

Java DataBaseConnectivity

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

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

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Java et les bases de données

Application web de gestion de comptes en banques

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

Faculté Polytechnique de Mons. Le processus d Extraction, Transformation et Load (ETL) dans des entrepôts de données XML

Bases de données et sites WEB Licence d informatique LI345

Programmer en JAVA. par Tama

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Bases de Données relationnelles et leurs systèmes de Gestion

A QUOI SERVENT LES BASES DE DONNÉES?

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

Bases de données avancées Introduction

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

4 Exemples de problèmes MapReduce incrémentaux

C-JDBC. Emmanuel Cecchet INRIA, Projet Sardes.

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Accès à l'information XML par des requêtes XQuery au travers de son XSchema

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

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

A QUOI SERVENT LES BASES DE DONNÉES?

Notes de cours : bases de données distribuées et repliquées

BD et XML : Exercices

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

Langage SQL : créer et interroger une base

XML avec Oracle. Par Christian Soutou. Maître de conférences, IUT de Blagnac, Université de Toulouse Le Mirail

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Accès aux bases de données

Information utiles. webpage : Google+ : digiusto/

PHP. PHP et bases de données

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Bases de Données NoSQL

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

I4 : Bases de Données

NFE204 Bases de données avancées

BASE DE DONNÉES XML NATIVE

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

as Architecture des Systèmes d Information

Module BD et sites WEB

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

PROJET 1 : BASE DE DONNÉES REPARTIES

Bases de données - Modèle relationnel

Programmation d application Bases de données avec Java

Bases de données Outils de gestion

SQL Historique

Gestion distribuée (par sockets) de banque en Java

1. Base de données SQLite

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

Certificat Big Data - Master MAthématiques

Le langage SQL Rappels

PHP 4 PARTIE : BASE DE DONNEES

Bases de données relationnelles

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Synchro et Threads Java TM

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

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

BIRT (Business Intelligence and Reporting Tools)

Bases de données et fournisseurs de contenu

Les bases de données

Optimisation des échanges et traitements XML

TP Bases de données réparties

Cours 8 Not Only SQL

Cours Bases de données

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

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

IFT3030 Base de données. Chapitre 1 Introduction

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

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Django et PostgreSQL sous la charge

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

Corrigé des exercices sur les références

BASES DE DONNÉES. CNAM Centre associé de Clermont-Ferrand Cycle A Année J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES

ACTIVITÉ DE PROGRAMMATION

SQL MAP. Etude d un logiciel SQL Injection

Bases de données et sites WEB

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Transcription:

BDAV - APIs XML E.Coquery emmanuel.coquery@liris.cnrs.fr http://liris.cnrs.fr/ ecoquery/

DOM Document Object Model Modèle objet pour représenter les arbres XML et aussi plein d autres choses... événements, styles, validation, interrogation, etc on peut tirer une API de ce modèle Pourquoi faire? Parcourir un document Modifier un document Créer un document En général, une implémentation de DOM sont fournies avec des parseurs et des fonction pour écrire les documents.

DOM Le DOM en Dans la bibliothèque standard : Paquet org.w3c.dom Un ensemble d interfaces représentant les différents types de noeuds : Node Attr Element CharacterData CDATASection Comment Text...

DOM Digression : usines (factories) Mécanisme très utilisé dans J2EE Classe ou objet avec des méthodes servant à créer des objets Finalité différente d un constructeur : Le but n est pas d initialiser l objet Objectif fournir un objet qui est implémentation d une interface La classe réelle de l objet créé est cachée Permet d avoir des mechanismes d implémentation par défaut et de choix d implémentation

DOM Parsing et création import j a v a x. xml. p a r s e r s. ; import org. w3c. dom. ; DocumentBuilder db = DocumentBuilderFactory. n e w I n s t a n c e ( ). newdocumentbuilder ( ) ; Document doc = db. newdocument ( ) ; Document doc2 = db. p a r s e ( t o t o. xml ) ; // On peut u t i l i s e r n i m p o r t e q u e l l e u r l i c i

DOM Création et ajout de noeuds Element p r i n c i p a l = doc. c r e a t e E l e m e n t ( c a r n e t ) ; Element personne1 = doc. c r e a t e E l e m e n t ( p e r s o n n e ) ; Comment commentaire = doc. createcomment ( un commentaire ) ; Text t e x t e = doc. createtextnode ( 8 bvd N. Bohr, V i l l e u r b a n n e ) ; doc. appendchild ( p r i n c i p a l ) ; p r i n c i p a l. appendchild ( personne1 ) ; p r i n c i p a l. appendchild ( commentaire ) ; personne1. appendchild ( t e x t e ) ; personne1. s e t A t t r i b u t e ( nom, Toto ) ;

DOM Parcours d arbre XML p u b l i c void printxmlelements ( Element e l ) { System. out. p r i n t ( e l. gettagname ( ) ) ; NamedNodeMap nnm = e l. g e t A t t r i b u t e s ( ) ; f o r ( i n t i = 0 ; i < nnm. getlength ( ) ; i ++) System. out. p r i n t ( [ + nnm. item ( i ). getnodename ( ) + : + nnm. item ( i ). getnodevalue ( ) + ] ) } System. out. p r i n t l n ( ) ; NodeList n l = e l. g e t C h i l d N o d e s ( ) ; f o r ( i n t i = 0 ; i < n l. getlength ( ) ; i ++) i f ( n l. item ( i ). getnodetype ( ) == Node.ELEMENT NODE) printxmlelements ( ( Element ) n l. item ( i ) ) ;

DOM Écriture dans un fichier : pas de méthode write import org. w3c. dom. ; import j a v a x. xml. t r a n s f o r m. ; import j a v a x. xml. t r a n s f o r m. dom. ; import j a v a x. xml. t r a n s f o r m. stream. ; T r a n s f o r m e r F a c t o r y t f = T r a n s f o r m e r F a c t o r y. n e w I n s t a n c e ( ) ; Transformer copy = t f. newtransformer ( ) ; copy. t r a n s f o r m ( new DOMSource ( doc ), new S treamresult ( m o n F i c h i e r. xml ) ) ;

SAX SAX Simple API for XML API pour lire des fichiers XML Gère l aspect lexical (découpage en tag, attributs,...) Ne gère pas la structure arborescente Pas besoin de stocker tout le document en mémoire Principe du push parsing : Le programmeur fournit les actions à effectuer sur chaque objet lexical (élément, commentaire, texte, etc) Le parseur appelle les actions correspondantes lorqu il rencontre un élément, du texte, etc... Style de programmation événementielle.

SAX interface org.xml.sax.contenthandler Méthodes (à implémenter) utilisées par un parseur sax pour gérer les objets lexicaux : void startdocument() void enddocument() void startelement(string uri, String localname, String qname, Attributes atts) void endelement(string uri, String localname, String qname) void characters(char[] ch, int start, int length)... Possibilité d étendre la classe org.xml.sax.helpers.defaulthandler Nécessaire pour les méthodes parse de la classe SAXParser

SAX Exemple d extension de DefaultHandler p u b l i c c l a s s E l e m e n t P r i n t e r extends D e f a u l t H a n d l e r { p u b l i c void s t a r t E l e m e n t ( S t r i n g u r i, S t r i n g localname, S t r i n g name, A t t r i b u t e s a t t s ) throws SAXException { System. out. p r i n t ( localname ) ; f o r ( i n t i = 0 ; i < a t t s. getlength ( ) ; i ++) System. out. p r i n t ( [ + a t t s. getlocalname ( i ) + : + a t t s. g e t V a l u e ( i ) + ] ) ; } }

SAX Utilisation import org. xml. sax. h e l p e r s. import j a v a x. xml. p a r s e r s. ; SAXParserFactory s p f = SAXParserFactory. n e w I n s t a n c e ( ) ; SAXParser sp = s p f. newsaxparser ( ) ; D e f a u l t H a n d l e r myhandler = new E l e m e n t P r i n t e r ( ) ; sp. p a r s e ( f i c h i e r, myhandler ) ;

StAX StAX Streaming API for XML ( SE 6) Permet de lire et de créer des documents XML Peut être vu comme un compromis entre DOM et SAX Principe du pull parsing Le programmeur contrôle la boucle de lecture Style de programmation plus classique que SAX

StAX javax.xml.stream.xmlstreamreader Méthode int next() passe à l objet syntaxique suivant renvoie un entier spécifiant le type d objet lu : XMLStreamReader.START ELEMENT XMLStreamConstants.END ELEMENT XMLStreamConstants.START DOCUMENT XMLStreamConstants.END DOCUMENT XMLStreamConstants.CHARACTERS XMLStreamConstants.CDATA XMLStreamConstants.COMMENT... Méthode boolean hasnext()

StAX javax.xml.stream.xmlstreamreader Méthodes d accès : String getlocalname() int getattributecount() String getattributelocalname(int index) String getattributevalue(int index) String gettext()...

StAX Utilisation de XMLStreamReader p u b l i c void printstax ( S t r i n g f i c h i e r ) throws XMLStreamExcepti XMLInputFactory x i f = XMLInputFactory. n e w I n s t a n c e ( ) ; XMLStreamReader s r = x i f. createxmlstreamreader (new StreamSource ( f i c h i e r ) ) ; w h i l e ( s r. hasnext ( ) ) { i n t code = s r. n e x t ( ) ; switch ( code ) { case XMLStreamReader. START ELEMENT : System. out. p r i n t l n ( ) ; System. out. p r i n t ( s r. getlocalname ( ) ) ; f o r ( i n t i = 0 ; i < s r. g e t A t t r i b u t e C o u n t ( ) ; i ++) { S t r i n g a t t = [ + s r. g e t A t t r i b u t e L o c a l N a m e ( i ) + : + s r. g e t A t t r i b u t e V a l u e ( i ) + ] ; System. out. p r i n t ( a t t ) ; } } } x i f. c l o s e ( ) ; }

StAX StAX : Création de document Interface javax.xml.stream.xmlstreamwriter void writestartelement(string localname) void writeattribute(string localname, String value) void writeendelement() void writecharacters(string text) void writecomment(string data) void writestartdocument() void writeenddocument()

StAX Utilisation de XMLStreamWriter XMLOutputFactory x o f = XMLOutputFactory. n e w I n s t a n c e ( ) ; XMLStreamWriter xsw = x o f. createxmlstreamwriter ( System. out ) ; xsw. writestartdocument ( ) ; xsw. w r i t e S t a r t E l e m e n t ( c a r n e t ) ; xsw. w r i t e S t a r t E l e m e n t ( p e r s o n n e ) ; xsw. w r i t e A t t r i b u t e ( nom, Toto ) ; xsw. w r i t e S t a r t E l e m e n t ( a d r e s s e ) ; xsw. w r i t e C h a r a c t e r s ( 8 Bvd N i e l s Bohr ) ; xsw. writeendelement ( ) ; xsw. writeendelement ( ) ; xsw. writeendelement ( ) ; xsw. writeenddocument ( ) ; xsw. c l o s e ( ) ;

Comparatif DOM, SAX, StAX? DOM SAX StAX Lecture Oui Oui (push) Oui (Pull) Ecriture Indirecte Non Oui Modification Oui Non Non Parcours non ordonné Oui Non Non Conso. Mémoire Élevée Basse Basse

Validation Validation Classes javax.xml.validation.schema Représente un schema, une XML, etc javax.xml.validation.validator Objet effectuant la validation SchemaFactory s f = SchemaFactory. n e w I n s t a n c e ( XMLConstants. W3C XML SCHEMA NS URI ) ; Schema schema = s f. newschema ( monschemaxml. xsd ) ; V a l i d a t o r v a l i d a t o r = schema. n e w V a l i d a t o r ( ) ; v a l i d a t o r. v a l i d a t e (new StreamSource ( f i c h i e r. xml ) )

Validation Validation à la lecture Dans DocumentBuilderFactory et SAXParserFactory : setschema(schema) : schéma à utiliser pour la validation setvalidating(true) : active la validation SchemaFactory s f = SchemaFactory. n e w I n s t a n c e ( XMLConstants. W3C XML SCHEMA NS URI ) ; Schema schema = s f. newschema ( monschemaxml. xsd ) ; DocumentBuilderFactory dbf = DocumentBuilderFactory. n e w I n s t a n c e ( ) ; dbf. setschema ( schema ) ; dbf. s e t V a l i d a t i n g ( true ) ; DocumentBuilder bd = dbf. newdocumentbuilder ( ) ; Document doc = db. p a r s e ( f i c h i e r. xml ) ) ;

TrAX TrAX Transformation API for XML () Exécution d un programme XSLT en Source Représente un document à traite ou du code xsl DOMSource, SAXSource, StAXSource, StreamSource Result Représente l endroit ou mettre le résultat DOMResult, SAXResult, StAXResult, StreamResult

TrAX TrAX : exemple p u b l i c void exempletrax ( S t r i n g e n t r e e, S t r i n g s o r t i e, S t r i n g x s l ) throws T r a n s f o r m e r E x c e p t i o n { T r a n s f o r m e r F a c t o r y t f = T r a n s f o r m e r F a c t o r y. n e w I n s t a n c e ( ) ; Transformer t r a n s = t f. newtransformer (new StreamSource ( x s l ) ) ; } t r a n s. t r a n s f o r m (new StreamSource ( e n t r e e ), new StreamResult ( s o r t i e ) ) ;

BD relationnelle et XML XML et BD relationnelles Plusieurs angles d attaque Traitement XML purement au niveau applicatif (pas de lien direct) Génération de XML via la BD fonctions et types XML dans la norme SQL 2003 (Oracle, DB2, SQL Server, PostgreSQL) Stockage de (fragments de) documents XML dans la BD Brut : CLOB et assimilés Optimisé : utilisation des infos de schéma pour avoir une représentation relationnelle efficace Utilisation de XQuery (et/ou XSLT) pour les requêtes Accès à certaines relations sous forme XML.

BD relationnelle et XML Fonctions SQL de génération XML Le type XMLType représente un frament de document Représentation interne au SGBD, même si souvent sérializé textuellement au final Fonctions de génération : XMLElement(name nom-element, valeur) XMLAttributes(valeur, valeur AS nom attribut,...) utilisé dans XMLElement de manière optionnelle XMLForest(...) XMLText(...), XMLComment(...),... XMLAgg(...), XMLAgg(..., order by...)

BD relationnelle et XML Exemple SELECT XMLElement(name "carnet", XMLAttributes(CARNET ID as "id"), XMLAgg(XMLElement(name "personne", XMLForest(NOM as "nom", TELEPHONE as "tel")) order by NOM)) AS CARNET XML FROM Personne GROUP BY CARNET ID lignes produites avec un attribut relationnel CARNET XML de la forme : <carnet id="2"> <personne><nom>titi</nom><tel>01234567</tel> </personne> <personne><nom>toto</nom><tel>02345678</tel> </personne> </carnet>

BD relationnelle et XML Manipulation de données XMLType Fonctions de mise à jour : UpdateXML(XMLType instance,xpath string, value expr) DeleteXML(XMLType instance, XPath string)... XQuery : Fonctions SQL : XMLQuery(XQuery string RETURNING CONTENT) XMLQuery(XQuery string PASSING val1 as nom var1,... RETURNING CONTENT) Oracle : Commande XQUERY XQUERY... code XQuery... / Dans Oracle, la fonction XPath/XQuery ora:view(table ou vue) renvoie une représentation XML d une relation

BD relationnelle et XML Exemple de mise à jour Insérer un attribut ident dans l élément principal de chaque document, avec pour valeur l identifiant du document, dans une table DOCS(id INTEGER, doc XMLType) UPDATE DOCS SET doc := UpdateXML(doc, /*/@ident,id)

BD relationnelle et XML Exemple XQuery SELECT XMLQuery( <personne>$n$t</personne> PASSING XMLElement(name "nom", nom) AS "n", XMLElement(name "tel", telephone) AS "t" RETURNING CONTENT) FROM carnet WHERE id = 2