1 xml et bases de données. 2 bilan modèle relationnel modèle simple, puissant avec des fondements...
TRANSCRIPT
1
XML et bases de données
2
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
3
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
4
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
5
XML et BD relationnelles
SQL XSLT, XPATH, XQUERY
Modèle relationnel Modèle XPATH
JDBC/ODBC/SQL-CLI
DOM et SAX API
Bases de données relationnelles
Document XML
6
Introduction
• Modèle de données et langages de requêtes XML
• Publication XML de données relationnelles
• Stockage de documents XML
7
Langages de requêtes XML
8
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
9
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
10
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)
11
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>
12
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>
13
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
14
Guide de données de Guide
Guide
Restaurant
Epicerie
Nom
Adresse
Telephone
Prix
Manager
No
Rue
Ville
Nom
Manager
Telephone
Specialite
X
X
X
X
Code
0,2
15
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>
16
Guide de données répertoire
Repertoire X X XHotel
Nom
Adresse
Commentaire
Prix
Rue
Ville
Code
Num
17
Fonctionnalités de XQUERY• Navigation• Support XPATH• Sélection• Jointure• Tri• Construction• Recherche textuelle• Fonction• Imbrication• agrégat
18
Expression XPATH
• Lister les noms des restaurants du guide normanddocument("http://gnormand.fr")//Restaurant/Nom/text()
• Lister les noms des restaurants de la forêt Guidecollection("Guide")//Restaurant/Nom/text()
19
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
20
Flux de données FLWR
Forlet
where return
Liste ordonnéeDe tuplesDe variables liées
Liste élaguéeDe tuplesDe variables liées
Instances XML
21
Exemples (1)
• Q1 : nom des restaurants de Cabourg (liste triée)for $R in collection("Guide")/Restaurantwhere $R/Adresse/Ville="Cabourg"
return $R/Nomsortby Nom descending
• Q2 : Nom et adresse des restaurants deux étoilesfor $R in collection("Guide")/Restaurantwhere $R/@categorie="**"
return <Restau2E>{$R/Nom}<Adresse>{$R/Adresse//text()}</Adresse></Restau2E>
22
Exemples (2)
• Q3 : Rechercher toutes les valeurs des attributs des restaurants ayant un managerfor $R in collection("Guide")/Restaurant
where $R/Manager
return <RestauAM>
{for $A in $R//@* return $A}
</RestauAM>
23
Exemples (3)
• Q4 : Noms et téléphones des restaurants situés dans la même ville que l’hotel Napoléonfor $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>
24
Exemples (4)
• Q5 : nombre de restaurants dans la collection Guidelet $R := collection("Guide")/RestaurantReturn <NbRest> {count($R)}</NbRest>
• Q6 : noms et adresses des restaurants dont la rue contient la chaine « Quai »for $R in collection("Guide")/Restaurantwhere contains($R//Rue, "Quai")return <Res>$R/Nom
<Adr>{$R/Adresse//text()} </Adr> </Res>
25
Exemples (5)
• Q7 : Noms des restaurants par villefor $V in distinct-values (collection ("Guide")
/Restaurant/Ville)return
<Restauparville><Ville>$V/text()</Ville><Restaus>{ for $R in collection("Guide")/Restaurantwhere $R//Ville=$V return $R/Nom }</Restaus>
</Restauparville>
26
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>
27
Exemples (7)
• Q9 : Nom de chaque restaurant avec le prix moyen proposéfor $R in collection("Guide")/Restaurantlet $A := $R//Prixreturn <res>
{$R/Nom}<MoyPrix>{avg($A)}</MoyPrix>
</res>
28
Exemples (8)
• Q10 : noms et adresses des restaurants ayant au moins un prix supérieur à 200for $R in collection("Guide")/Restaurant
where some $P in $R/Prix satisfies (number(200)<$P)
return
<RestC>{$R/Nom}{$R/Adresse}</RestC>
29
Exemples (9)
• Q11 : noms et adresses des restaurants ayant tous les prix inférieurs à 100for $R in collection("Guide")/Restaurant
where every $P in $R/Prix satisfies (number(100)>$P)
return
<RestPC>{$R/Nom}{$R/Adresse}</RestPC>
30
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)
31
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)
32
Publication XML de données relationnelles
33
Objectifs
BDrelationnelles
XPATH,XQUERY
XML
Vues XML
SQL données
34
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
35
Format canonique
Nom Catégorie Adresse prix
Napoléon 3 Paris 600
Gare 2 Evry 300
HOTELS <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>
36
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
37
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é
38
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>...
39
Relation universelleA.nom, A.prenom, F.titre, F.annéeDepardieu, Gérard, Astérix, 2001Depardieu, Gérard, Vatel, 2000<SQL_stmt>
Select A.nom, A.prenom, F.titre, F.anneeFrom Acteur A, Film F, Distribution DWhere A.idact=D.idact and D.idfilm=F.idfilm</SQL_stmt>
<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>...
+ template annoté par lescolonnes de la relation universelle<element_node Acteur> <element_node Nom>
<text_node><Column name="A.nom"/></text_node>
...
40
Relation universelle (2)
• Support des vendeurs :– IBM DB2 XML extender– SqlServer2000 Universal XML
• Peut être complexe selon la nature des transformations souhaitées
41
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>
42
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>
43
<xs:annotation><xs:appinfo><sql:relationship name=ActDist
parent=Acteur parent-key=idactchild=Distribution child-key=idact
</sql:relationship></xs:appinfo></xs:annotation>
Schéma annoté SqlServer (2)
<xs:annotation><xs:appinfo><sql:relationship name=DistFilm
parent=Distribution parent-key=idfilmchild=Film child-key=idfilm
</sql:relationship></xs:appinfo></xs:annotation>
44
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!
45
Stockage de données XML
46
Système XML
XPATH XQUERY DOMXML
Niveaulogique
Niveauphysique
SGBDR
SGBD OO
LDAP SGF Systèmenatif
47
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, ...
48
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)
49
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
50
Différents mappings
APPLI
ENTETE LISTE_FORM
FORMULAIRETITRE UID
NOM_TABLE
ATTRIBUT
MonAppli Citcom/citcom@MICA
producteurs
MODE@INS
vins
MODE@NOR
ANNEE CRU
FORMULAIRE
NOM_TABLE
ATTRIBUT
51
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)
52
Quelques systèmes natifsorigine 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
GoXML ? O O Y
53
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
54
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)
55
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
56
Stockage générique (arcs)
attribut
modenom_table
attribut
formulaire
nom_table mode
formulaire
&0
&1 &2
&3 &4
&5
&6 &7
&8
@valeur @valeur
&9 &10
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
ARCS
Noeud valeur
&3 producteurs
&5 INS
&6 vins
&8 NOR
&9 ANNEE
&10 CRU
VALEURS
Select V.valeurFrom Valeurs V, Arcs A1,Arcs A2Where A1.élément=« formulaire »And A1.cible=A2.source and A2.élément=« nom_table »And A2.cible=V.noeud
57
Stockage générique (éléments)
attribut
modenom_table
attribut
formulaire
nom_table mode
formulaire
&0
&1 &2
&3 &4
&5
&6 &7
&8
@valeur @valeur
&9 &10
Select N.cibleFrom Formulaire F, Nom_table NWhere F.cible=N.source
Source cible
&0 &1
&0 &2
FORMULAIRE
Source Cible
&1 Producteurs
&2 Vins
NOM_TABLE
58
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
59
SGBDR commerciauxSGBD Stockage Chargement Requête
Oracle9i CLOB
Canonique
User-defined
SQL Loader
Par programme
Full-text,
XPATH, SQL
DB2 CLOB
User-defined DAD
Via DAD SQL+full-text, SQL
SQL Server ARCS
User-defined++
OpenXML
Schéma annoté
SQL+full-text, XPATH
Pas de support XQUERY, MAJ via DOM
60
Conclusion
• Nombreux travaux pour le support XML et SGBD
• Produits encore en forte évolution
• Pas de standard
• Manque encore XQUERY et langage de MAJ
61
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