1 xml et bases de données. 2 bilan modèle relationnel modèle simple, puissant avec des fondements...

Post on 03-Apr-2015

113 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

top related