XML et bases de données 1 Bilan Modèle relationnel • Modèle simple, puissant avec des fondements théoriques bien connus • Modèle figé • Importance du schéma de BD – Utilisé pour le stockage efficace, la définition et l’optimisation de langage de requêtes, la cohérence, … – Tout doit rentrer dans ce moule 2 Modèle des Fichiers • Information pas ou peu structurée • Structure est implicite et tolérante • Pas de schéma des données – Pas de langage de requêtes, pas d’optimisation, de cohérence – Beaucoup de souplesse 3 Modèles de données semi-structurés • Intermédiaire entre modèle relationnel (BD) et modèle de fichier • Présence d’un schéma mais souple • Possibilité de langages de requêtes • Différentes propositions – Modèle OEM – XML 4 XML et BD relationnelles SQL XSLT, XPATH, XQUERY Modèle relationnel Modèle XPATH JDBC/ODBC/SQL- DOM et SAX API CLI Bases de données relationnelles Document XML 5 Introduction • Modèle de données et langages de requêtes XML • Publication XML de données relationnelles • Stockage de documents XML 6 Langages de requêtes XML 7 Langages de requêtes XML • XPATH (1.0 puis 2.0) – langage commun de navigation, sélection, extraction – Utilisé dans XSLT, XQUERY, XPOINTER, … • XSLT 2.0 : XML vers XML, HTML, texte – Langage à typage faible, orienté transformation • XQUERY 1.0 : XML vers XML – Langage fonctionnel à typage fort (entrées et sorties) – Orienté accès BD 8 Langages de requêtes • XPATH 2.0 = XPATH 1.0 + – Typage XML schema – Séquences ordonnées de nœuds typés et de valeurs atomiques • For VAR in EXPR return EXPR – Expression conditionnelles • If EXPR then EXPR else EXPR – Expressions quantifiées • Some | every VAR in EXPR satisfies EXPR 9 Langages de requêtes • XQUERY 1.0 = XPATH 2.0 + – – – – – – For-let-where-return (FLWR) : SQL like Sort-by Construction de XML Opérateurs sur les types Fonctions définies par le programmeur Typage fort (statique ou dynamique) 10 BD Guide (1) GuideExotique : <?xml version="1.0" encoding="ISO-8859-1" ?> <Guide region="exotique" version="2.0"> <Restaurant type="indhou" categorie="**"> <Nom>Le passage Brady</Nom> <Adresse> <No>43</No><Rue>Faubourg Saint-Denis</Rue><Ville>Paris 10</Ville> </Adresse> <Telephone>0142112310</Telephone> </Restaurant> <Restaurant type="thibetain" categorie="**"> <Nom>Le Lhassa</Nom> <Adresse> <No>13</No><Rue>Montagne Sainte-Genevieve</Rue><Ville>Paris 5</Ville> </Adresse> <Telephone>0144122112</Telephone><Manager>Dicky</Manager> </Restaurant> <Epicerie type="egyptienne"> <Nom>Le Caire</Nom> <Telephone>0146134582</Telephone><Manager>Ali Moussa</Manager> <Specialité>falavel</Specialite> </Epicerie> </Guide> 11 BD Guide (2) GuideNormand: <?xml version="1.0" encoding="ISO-8859-1" ?> <Guide region="normandie" version="2.0"> <Restaurant type="francais" categorie="***"> <Nom>Le Grand Hotel</Nom> <Adresse> <Rue>Promenade M. Proust</Rue><Ville>Cabourg</Ville> </Adresse> <Prix menu="midi">200</Prix> <Prix menu="soir">300</Prix> </Restaurant> <Restaurant type="francais" categorie="**"> <Nom>L’absinthe</Nom> <Adresse> <No>10</No><Rue>Quai Quarantaine</Rue><Ville>Honfleur</Ville> </Adresse> <Prix menu="midi">150</Prix> <Prix menu="soir">250</Prix> <Telephone>0234142189</Telephone> <Specialité>Fruits de Mer</Specialite> </Restaurant> </Guide> 12 BD Guide (3) • BD XML = forêt de documents XML • Schéma de BD = – Schéma XML si existant – Guide de données : • Schéma faible généré à partir d’un ensemble de documents par union des arbres de structure décrivant tous les cheminements possibles dans la collection et par typage des données en texte – Schéma plus flexible que schéma relationnel 13 Guide de données de Guide Nom No Restaurant X Adresse X Rue Code Telephone Guide X Prix0,2 Manager Ville Nom Manager Telephone Epicerie X Specialite 14 BD Répertoire (1) <?xml version="1.0" encoding="ISO-8859-1" ?> <Repertoire> <Hotel categorie="***"> <Nom>California</Nom> <Adresse><Num>32</Num> <Rue>Rue des Ecoles</Rue><Code>75005</Code><Ville>Paris</Ville> </Adresse> <Commentaire>Charmant hotel pres du centre</Commentaire><Prix>150</Prix> </Hotel> <Hotel categorie="****"> <Nom>Napoleon</Nom> <Adresse><No>40</No> <Rue>Avenue de Friedland</Rue><Code>75008</Code><Ville>Paris</Ville> </Adresse> <Commentaire>Hotel Art Deco</Commentaire><Prix >500</Prix> </Hotel> <Hotel categorie="***"> <Nom>Le Saint Simon</Nom> <Adresse><No>32</No> <Rue>Rue Saint Simon</Rue><Code>75005</Code><Ville>Paris</Ville> </Adresse> <Commentaire>Proche restaurant celebre</Commentaire><Prix >300</Prix> </Hotel> </Repertoire> 15 Guide de données répertoire Num Nom Repertoire X Hotel X Adresse Rue X Ville Code Commentaire Prix 16 Fonctionnalités de XQUERY • • • • • • • • • • Navigation Support XPATH Sélection Jointure Tri Construction Recherche textuelle Fonction Imbrication agrégat 17 Expression XPATH • Lister les noms des restaurants du guide normand document("http://gnormand.fr")//Restaurant/Nom/text() • Lister les noms des restaurants de la forêt Guide collection("Guide")//Restaurant/Nom/text() 18 Expression FLWR for $var in <forêt> [, $var in <forêt>]... // itération let $var := <sous-arbre> // assignation where <condition> // élagage return <résultat> // construction 19 Flux de données FLWR For let return where Liste ordonnée De tuples De variables liées Liste élaguée De tuples De variables liées Instances XML 20 Exemples (1) • Q1 : nom des restaurants de Cabourg (liste triée) for $R in collection("Guide")/Restaurant where $R/Adresse/Ville="Cabourg" return $R/Nom sortby Nom descending • Q2 : Nom et adresse des restaurants deux étoiles for $R in collection("Guide")/Restaurant where $R/@categorie="**" return <Restau2E>{$R/Nom} <Adresse>{$R/Adresse//text()}</Adresse> </Restau2E> 21 Exemples (2) • Q3 : Rechercher toutes les valeurs des attributs des restaurants ayant un manager for $R in collection("Guide")/Restaurant where $R/Manager return <RestauAM> {for $A in $R//@* return $A} </RestauAM> 22 Exemples (3) • Q4 : Noms et téléphones des restaurants situés dans la même ville que l’hotel Napoléon for $R in collection("Guide")//Restaurant, $H in collection("Repertoire")/Hotel where $R//Ville=$H//Ville and $H//Nom="Napoleon" return <RestauHRN> <Nom>{$R/Nom/text()} </Nom> <Tel> {$R/Telephone/text()} </Tel> </RestauHRN> 23 Exemples (4) • Q5 : nombre de restaurants dans la collection Guide let $R := collection("Guide")/Restaurant Return <NbRest> {count($R)}</NbRest> • Q6 : noms et adresses des restaurants dont la rue contient la chaine « Quai » for $R in collection("Guide")/Restaurant where contains($R//Rue, "Quai") return <Res>$R/Nom <Adr>{$R/Adresse//text()} </Adr> </Res> 24 Exemples (5) • Q7 : Noms des restaurants par ville for $V in distinct-values (collection ("Guide") /Restaurant/Ville) return <Restauparville> <Ville>$V/text()</Ville> <Restaus> { for $R in collection("Guide")/Restaurant where $R//Ville=$V return $R/Nom } </Restaus> </Restauparville> 25 Exemples (6) • Q8 : Adresse et deuxième prix des restaurants parsiens (pour ceux qui en ont deux) for $R in (for $S in collection("Guide")/Restaurant where $S/Prix[2] return $S) where $R/Ville="Paris" return <AdPrix2>{$R/Adresse}{$R/Prix[2]}</Adprix2> 26 Exemples (7) • Q9 : Nom de chaque restaurant avec le prix moyen proposé for $R in collection("Guide")/Restaurant let $A := $R//Prix return <res> {$R/Nom} <MoyPrix>{avg($A)}</MoyPrix> </res> 27 Exemples (8) • Q10 : noms et adresses des restaurants ayant au moins un prix supérieur à 200 for $R in collection("Guide")/Restaurant where some $P in $R/Prix satisfies (number(200)<$P) return <RestC>{$R/Nom}{$R/Adresse}</RestC> 28 Exemples (9) • Q11 : noms et adresses des restaurants ayant tous les prix inférieurs à 100 for $R in collection("Guide")/Restaurant where every $P in $R/Prix satisfies (number(100)>$P) return <RestPC>{$R/Nom}{$R/Adresse}</RestPC> 29 Algèbre XQUERY • une algèbre a été définie pour Xquery • Permet le support d’optimisations • Assez complexe (sur-ensemble de l’algèbre relationnelle) 30 XUPDATE • Il manque le support des mises à jour dans XQUERY • Il existe une proposition mais basée sur XPATH • On peut utiliser DOM ou SAX pour faire les mises à jour (mais pas déclaratif) 31 Publication XML de données relationnelles 32 Objectifs XPATH, XQUERY XML Vues XML SQL données BD relationnelles 33 Deux problèmes • Exporter une relation dans un format canonique : simple • Exporter une base de données (ensemble de relations) dans un format prédéfini – Ressemble à du stockage XML dans un SGBDR (sans maj) – complexe 34 Format canonique HOTELS Nom Catégorie Adresse prix Napoléon 3 Paris 600 Gare 2 Evry 300 <row> <nom>Napoleon</nom> <categorie>3</categorie> <adresse>Paris</adresse> <prix>600</prix> </row> <row> <nom>Gare</nom> <categorie>2</categorie> <adresse>Evry</adresse> <prix>300</prix> </row> 35 Format canonique (2) • Intéressant pour publication de données sur le web ou intégration de données • Supporté dans SQLSERVER2000 (SELECT ... FOR XML), DB2 ou ORACLE9i XML SQL Utility 36 Exporter dans un format prédéfini • Spécification du mapping – Besoin d’un langage – Pas de standard (un par vendeur) – À stabiliser • Deux grandes approches – Relation universelle – Schéma annoté 37 Exemple Acteur(idact, nom, prénom) <1, ‘Depardieu’, ‘gérard’> <2, ‘Clavier’, ‘christian’> Film(idfilm, titre, année) <11, ‘Astérix’, 2001> <12, ‘Vatel’, 2000> Distribution(idfilm, idact) <11,1> <11, 2>, <12, 1> <Acteur> <Nom>Depardieu</Nom> <Prenom>Gérard</Prenom> <Film annee="2001">Astérix</Film> <Film annee="2000">Vatel</Film> </Acteur> <Acteur> <Nom>Clavier</Nom> <Prenom>Christian</Prenom> <Film annee="2001">Astérix</Film> </Acteur> ... 38 Relation universelle A.nom, A.prenom, F.titre, F.année Depardieu, Gérard, Astérix, 2001 Depardieu, Gérard, Vatel, 2000 <SQL_stmt> Select A.nom, A.prenom, F.titre, F.annee From Acteur A, Film F, Distribution D <Acteur> Where A.idact=D.idact and D.idfilm=F.idfilm <Nom>Depardieu</Nom> </SQL_stmt> <Prenom>Gérard</Prenom> <Film annee="2001">Astérix</Film> + template annoté par les <Film annee="2000">Vatel</Film> colonnes de la relation universelle </Acteur> <element_node Acteur> <Acteur> <element_node Nom> <Nom>Clavier</Nom> <text_node> <Prenom>Christian</Prenom> <Column name="A.nom"/> <Film annee="2001">Astérix</Film> </text_node> </Acteur> ... ... 39 Relation universelle (2) • Support des vendeurs : – IBM DB2 XML extender – SqlServer2000 Universal XML • Peut être complexe selon la nature des transformations souhaitées 40 Schéma annoté • Spécification du schéma de sortie souhaité annoté par la provenance des données <xs:element name="Acteur"> <xs:complexType> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="prenom" type="xs:string"/> <xs:element ref="Film"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Film"> <xs:attribute name="annee" type="xs:dateTime"/> </xs:element> 41 Schéma annoté en SqlServer2000 <xs:element name="Acteur" sql:relation="Acteur"> <xs:complexType><xs:sequence> <xs:element name="nom" type="xs:string" sql:field="nom"/> <xs:element name="prenom" type="xs:string" sql:field="prenom"/> <xs:element ref="Film" sql:relationship="ActDist" sql:relationship="DistFilm"/> </xs:sequence></xs:complexType> </xs:element> <xs:element name="Film" sql:relation="Film" sql:field="titre"> <xs:attribute name="annee" type="xs:dateTime" sql:field="annee"/> </xs:element> 42 Schéma annoté SqlServer (2) <xs:annotation> <xs:appinfo> <sql:relationship name=ActDist parent=Acteur parent-key=idact child=Distribution child-key=idact </sql:relationship> <xs:annotation> </xs:appinfo> <xs:appinfo> </xs:annotation> <sql:relationship name=DistFilm parent=Distribution parent-key=idfilm child=Film child-key=idfilm </sql:relationship> </xs:appinfo> 43 </xs:annotation> Bilan Schéma annoté • Variations selon les vendeurs – SqlServer 2000 et IBM DB2 • Plus flexible que la relation universelle • Limitations sur les expressions SQL (pas d’unions, ...) • Encore à améliorer! 44 Stockage de données XML 45 Système XML Niveau logique Niveau physique XPATH XQUERY DOM XML SGBDR LDAP SGBD OO SGF Système natif 46 Eléments de choix • Données : – Plat vs structuré; petit ou volumineux; avec ou sans schéma, ... • Requêtes : – Avec ou sans maj; accès full-text; navigationnel; relationnel (jointures, ...) • Besoins applicatifs – Transactions, contrôle de concurrence, réplication, ... 47 Principes de stockage XML • Plat : – Un document XML est stocké dans un BLOB – Simple, mais pas de requêtes possibles et maj difficiles • Natif – Définir un nouveau SGBD adapté au stockage de documents XML – Redéfinir toutes les fonctions classiques d’un SGBD (transactions, concurrence, …) • Par conversion ou « mapping » – Utiliser un SGBD existant (souvent relationnel) pour stocker des documents XML – Nécessite certaines extensions (index spécifiques par exemple) 48 Systèmes natifs • Besoins – Représentation concise des documents – Support efficace des API XML – Possibilité de maj données et structure • Correspondance entre structure d’arbre et des pages physiques – De nombreuses possibilités 49 Différents mappings APPLI ENTETE TITRE UID LISTE_FORM FORMULAIRE MonAppli Citcom/citcom@MICA NOM_TABLE MODE @INS producteurs FORMULAIRE NOM_TABLE vins MODE @NOR ATTRIBUT ATTRIBUT ANNEE CRU 50 Indexation • Un placement physique ne peut être optimal pour toutes les requêtes possibles • Besoin de plusieurs index • XML a besoin d’index – Sur les valeurs – Sur la structure (navigation) – Full-text (mots-clés) 51 Quelques systèmes natifs origine API Full-text XPATH XQUERY XYLEME ? O O Y NATIX Bas niveau XINDICE XML:DB XML:RPC N O N eXcelon SGBDOO DOM/XSLT O O Y Tamino ADABAS DOM/SAX O O Partiel ? O O Y GoXML 52 Systèmes à base de mapping • Stockage : convertir modèle de données XML vers graphe, relations, objets • Chargement de données : convertir données XML vers arcs, tuples, objets • Réécriture de requêtes : transformer requêtes XML vers requêtes cibles • Transformation du résultat : système cible vers XML 53 Stockage de données XML vers relationnel • • • • • Défini par l’utilisateur Générique (fixe) Dirigé par les données Dirigé par le schéma Basé sur un modèle de coût (adaptation aux besoins réels de l’application) 54 Mapping défini par l’utilisateur • Supporté par la majorité des SGBDR commerciaux • Utilisateur spécifie comment transformer éléments en relations • Flexible mais – Nécessite de connaitre XML et BD Relationnelles – Beaucoup de solutions possibles (laquelle choisir ?) – Maj des données implique maj du mapping 55 Stockage générique (arcs) &0 formulaire formulaire &1 &2 nom_table mode &3 &4 @valeur VALEURS &5 nom_table mode &6 &7 attribut attribut @valeur &9 &10 &8 Noeud valeur &3 producteurs &5 INS &6 vins &8 NOR &9 ANNEE &10 CRU Select V.valeur From Valeurs V, Arcs A1, Arcs A2 Where A1.élément=« formulaire » And A1.cible=A2.source and A2.élément=« nom_table » And A2.cible=V.noeud ARCS Source cible Num fils élément &0 &1 1 formulaire &0 &2 2 formulaire &1 &3 1 nom_table &1 &4 2 mode &4 &5 1 @valeur &2 &6 1 nom_table &2 &7 2 mode &7 &8 1 @valeur &7 &9 2 attribut &7 &10 3 attribut 56 Stockage générique (éléments) &0 formulaire FORMULAIRE formulaire &1 &2 nom_table mode &3 &4 @valeur nom_table mode &6 &7 attribut attribut @valeur &5 Select N.cible From Formulaire F, Nom_table N Where F.cible=N.source &9 &10 &8 Source cible &0 &1 &0 &2 NOM_TABLE Source Cible &1 Producteurs &2 Vins 57 Bilan stockage générique • Ne tient pas compte de régularité dans la structure • Schéma relationnel canonique – Arcs : stocke tous les arcs dans la même relation – Éléments : partitionne horizontalement relation Arcs sur éléments • Interrogation : nécessite des jointures • MAJ : pas besoin de changer de schéma relationnel si le schéma des documents XML évolue 58 SGBDR commerciaux SGBD Stockage Chargement Requête Oracle9i CLOB Canonique User-defined CLOB User-defined DAD ARCS Userdefined++ SQL Loader Full-text, Par XPATH, programme SQL DB2 SQL Server Via DAD SQL+fulltext, SQL OpenXML Schéma annoté SQL+fulltext, XPATH Pas de support XQUERY, MAJ via DOM 59 Conclusion • Nombreux travaux pour le support XML et SGBD • Produits encore en forte évolution • Pas de standard • Manque encore XQUERY et langage de MAJ 60 Bibliographie • G. Gardarin; XML des bases de données aux services web, 2002, Dunod • M. Fernandez, M. Benedikt, J. Freire, A. Sahuguet; XML and Data Management, Tutorial WWW2002 Conference, Hawai • D. Chamberlin; Xquery: An XML Query Language, IBM Systems Journal, Vol41, No4, 2002 61