BD et XML

publicité
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
Téléchargement