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 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 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 B. Defude - INT Evry - 2003 1
SQL Modèle relationnel JDBC/ODBC/SQL- CLI Bases de données relationnelles XSLT, XPATH, XQUERY Modèle XPATH DOM et SAX API Document XML Modèle de données et langages de requêtes XML Publication XML de données relationnelles Stockage de documents 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! % B. Defude - INT Evry - 2003 2
" "#$ " "#$ 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 EXPR Expression conditionnelles If EXPR then EXPR else EXPR Expressions quantifiées Some every VAR in EXPR satisfies EXPR XQUERY 1.0 = XPATH 2.0 + For-let-where- (FLWR) : SQL like Sort-by Construction de XML Opérateurs sur les types Fonctions définies par le programmeur Typage fort (statique ou dynamique) & ' ()* 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> <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> <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> 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> <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> <Prix menu="midi">150</prix> <Prix menu="soir">250</prix> <Telephone>0234142189</Telephone> <Specialité>Fruits de Mer</Specialite> </Restaurant> </Guide> B. Defude - INT Evry - 2003 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 Guide X Restaurant Epicerie X Nom Adresse Telephone Prix 0,2 Manager X X No Rue Code Ville Nom Manager Telephone Specialite 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> <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> <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> <Commentaire>Proche restaurant celebre</commentaire><prix >300</Prix> </Hotel> </Repertoire> (+ Repertoire X Hotel X Nom Adresse X Commentaire Prix Num Rue Ville Code B. Defude - INT Evry - 2003 4
,-./0.1+2345 Navigation Support XPATH Sélection Jointure Tri Construction Recherche textuelle Fonction Imbrication agrégat 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()! %.1+6/ 16/ for $var in <forêt> [, $var in <forêt>]... // itération let $var := <sous-arbre> // assignation where <condition> // élagage <résultat> // construction For let Liste ordonnée De tuples De variables liées where Liste élaguée De tuples De variables liées Instances XML & ' B. Defude - INT Evry - 2003 5
.1+)*.1+)* Q1 : nom des restaurants de Cabourg (liste triée) where $R/Adresse/Ville="Cabourg" $R/Nom sortby Nom descending Q2 : Nom et adresse des restaurants deux étoiles where $R/@categorie="**" <Restau2E>{$R/Nom} <Adresse>{$R/Adresse//text()} </Restau2E> Q3 : Rechercher toutes les valeurs des attributs des restaurants ayant un manager where $R/Manager <RestauAM> {for $A in $R//@* $A} </RestauAM>.1+)*.1+)* Q4 : Noms et téléphones des restaurants situés dans la même ville que l hotel Napoléon, $H in collection("repertoire")/hotel where $R//Ville=$H//Ville and $H//Nom="Napoleon" <RestauHRN> <Nom>{$R/Nom/text()} </Nom> <Tel> {$R/Telephone/text()} </Tel> </RestauHRN> 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» where contains($r//rue, "Quai") <Res>$R/Nom <Adr>{$R/Adresse//text()} </Adr> </Res> B. Defude - INT Evry - 2003 6
.1+)*.1+)* Q7 : Noms des restaurants par ville for $V in distinct-values (collection ("Guide") /Restaurant/Ville) <Restauparville> <Ville>$V/text()</Ville> <Restaus> { where $R//Ville=$V $R/Nom } </Restaus> </Restauparville> Q8 : Adresse et deuxième prix des restaurants parisiens (pour ceux qui en ont deux) for $R in (for $S in collection("guide")/restaurant where $S/Prix[2] $S) where $R/Ville="Paris" <AdPrix2>{$R/Adresse}{$R/Prix[2]}</Adprix2>.1+)!*.1+)%* Q9 : Nom de chaque restaurant avec le prix moyen proposé let $A := $R//Prix <res> {$R/Nom} <MoyPrix>{avg($A)}</MoyPrix> </res> Q10 : noms et adresses des restaurants ayant au moins un prix supérieur à 200 where some $P in $R/Prix satisfies (number(200)<$p) <RestC>{$R/Nom}{$R/Adresse}</RestC>! % B. Defude - INT Evry - 2003 7
.1+)&* 3",-./0 Q11 : noms et adresses des restaurants ayant tous les prix inférieurs à 100 where every $P in $R/Prix satisfies (number(100)>$p) <RestPC>{$R/Nom}{$R/Adresse}</RestPC> une algèbre a été définie pour Xquery Permet le support d optimisations Assez complexe (sur-ensemble de l algèbre relationnelle) & ' -234. " + 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) 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 B. Defude - INT Evry - 2003 8