Documente Academic
Documente Profesional
Documente Cultură
Universit de Cergy-Pontoise
Master Informatique M1 Cours BDA
Plan
Rappels XML: format, XPath, XQuery Bases de donnes XML Stockage XML
Stockage relationnel Stockage natif
Modles de donnes
Relationnel: tables Objet: objets persistants Semi-structur: arbres et texte
XML
Rappels XML
XML: eXtensible Markup Lanuage
Langage de description de documents structurs Utilisation de balises (balisage structurel)
Exemple
HTML
<h1>Bibliographie</h1> <ul><li>G. Gardarin, <i>XML : Des Bases de Donnes aux Services Web</i>, Dunod, 2003 <li>S. Abiteboul, N. Polyzotis, <i>The Data Ring</i>, CIDR, 2007 </ul>
XML
<bibliographie> <ouvrage anne="2003"> <auteur>G. Gardarin</auteur> <titre>XML : Des Bases de Donnes aux Services Web</titre> <diteur>Dunod</diteur> </ouvrage> <ouvrage anne="2007"> <auteur>S. Abiteboul</auteur> <auteur>N. Polyzotis</auteur> <titre>The Data Ring</titre> <confrence>CIDR</confrence> </ouvrage> </bibliographie>
Forme arborescente
Utilise par les applications, modle DOM (W3C)
lettre type court
Cours BDA (UCP/M1): Bases de donnes XML
salutation Bonjour!
fin Au revoir
6
XPath
Langage de slection dun ensemble de nuds dans un document XML
Utilise des expressions de chemin pour dsigner des nuds dans larbre
Une expression de chemin XPath: suite dtapes partir d'un nud contexte
[/]tape1/tape2//tapen
tape = axe::filtre[prdicat1][prdicatn]
Exemple: child::B[position()=1] (abrviation: B[1])
Filtre: obligatoire, dcrit le sous-ensemble de nuds de laxe retenu Prdicats: optionnels, dcrivent les conditions satisfaire par les nuds
Combins par loprateur "ET" logique
Axes XPath
Douze types daxes
child (axe par dfaut): enfants directs du nud contexte parent (..): nud parent attribute (@): nuds attribut du nud contexte descendant (//): nuds descendants du nud contexte descendant-or-self: descendants, y compris le nud contexte ancestor: nuds anctres du nud contexte ancestor-or-self: anctres, y compris le nud contexte following: nuds suivants dans lordre du document following-sibling: frres suivants dans lordre du document preceding: nuds prcdents dans lordre du document preceding-sibling: frres prcdents dans lordre du document self (.): le nud contexte lui-mme
Filtres et prdicats
Filtres: deux faons de filtrer les nuds dun axe:
Par leur nom
Pour les nuds qui ont un nom (Element, Attribute, ProcessingInstruction)
Fonctions XPath
Pour nuds
count(expr): nombre de nuds dans lensemble produit par lexpression name(): nom du nud contexte
Pour boolens
true(), false(): les valeurs vrai/faux not(expr): ngation de lexpression logique
Pour numriques
sum(expr): somme des valeurs des nuds produits par lexpression avg(expr): moyenne des valeurs des nuds produits par lexpression
Cours BDA (UCP/M1): Bases de donnes XML 10
Exemples
D D/text() descendant::node() .. following::node() preceding-sibling::node() //@att1 /A//D /comment() ../* /A/B//text()[1] /A//text()[1] //B[@att1="a2"]/D /A/B[last()] //B[count(D)>1] /A/B[D="Texte2"]/D/text()
11
XQuery
Langage de requtes pour bases de donnes XML
Langage fonctionnel typ, sans effets de bord
Chaque nud et chaque valeur atomique a un type (XML Schema) Rsultat de requte XQuery = valeur = squence d'items
valeur * item noeud valeur atomique item
12
Squences
Pas de distinction entre item et squence de longueur 1
Ex: 39 = (39)
13
Squences construites
Ex: (1, 2, 3, 4, 5), 1 to 5, (1 to 3, 4, 5)
Variables
Nom prcd du signe $ ($x, $toto, etc.) + valeur (squence d'items)
Cours BDA (UCP/M1): Bases de donnes XML 14
Expressions FLWOR avec dfinition de variables Tests (If-Then-Return-Else-Return) Fonctions prdfinies et fonctions utilisateur Mlange de littraux et d'expressions complexes
Chaque expression doit tre place entre {} pour qu'elle soit value Ex. <comedies> {document("films.xml")//film[@genre="comedie"]} </comedies>
15
Exemple
Document bib.xml
<bib> <book year="2003" title="Comprendre XSLT"> <author><name>Amann</name><country>FR</country></author> <author><name>Rigaux</name><country>FR</country></author> <publisher>OReilly</publisher> <price>28.95</price> </book> <book year="2001" title="Spatial Databases"> <author><name>Rigaux</name><country>FR</country></author> <author><name>Scholl</name><country>FR</country></author> <author><name>Voisard</name><country>FR</country></author> <publisher>Morgan Kaufmann Publishers</publisher> <price>35.00</price> </book> <book year="2000" title="Data on the Web"> <author><name>Abiteboul</name><country>FR</country></author> <author><Buneman</name><country>UK</country></author> <author><name>Suciu</name><country>US</country></author> <publisher>Morgan Kaufmann Publishers</publisher> <price>39.95</price> </book> </bib>
16
Expressions FLOWR
Une expression FLOWR ("flower")
Itre sur des squences (for) Dfinit des variables (let) Trie les rsultats (order by) Applique des filtres (where) Construit et retourne un rsultat (return)
Exemple
for $b in document("bib.xml")//book order by $b/@year let $al := $b/author where $b/publisher = "Morgan Kaufmann Publishers" return <livre nb_auteurs="{count($al)}"> <title>{$b/@title/string()}</title> {$al} </livre>
Cours BDA (UCP/M1): Bases de donnes XML 17
Principe
Une variable par nud de jonction Conditions dans le "where" Rsultats dans le "return"
quivalent en XQuery
for $b in document("bib.xml")//book, $a in $b/author where $a/country="FR" return <resultat> {$a/name} {$b/@title} </resultat>
Cours BDA (UCP/M1): Bases de donnes XML 18
BD XML
Limitations du modle de donnes relationnel
Modle trs simple: tables
Cette simplicit a favoris le dveloppement des SGBD bass sur ce modle
Inconvnients
Difficile de reprsenter des donnes complexes: attributs avec plusieurs valeurs, structures irrgulires, texte, images, etc. Difficults dfinir l'identit des donnes Traitements et donnes sont spars
Nom de la Relation
Proprietaire Loic Nadia Loic Julien Marie
Nom dAttribut
Type Espace Espace R5 R25 ZX
VEHICULE
nuplet
19
20
Application
Application
XML
Application
BDR
BD XML
22
Stockage XML
Deux catgories de BD XML
Natives: le stockage est spcifique au modle XML Non-natives: le stockage se fait au-dessus d'un autre modle
Trs utilis cause de la prdominance des SGBD relationnels
<Acteurs> Parmi les acteurs prsents cette avant-premire on peut citer <nom>Daniel Auteuil</nom> (<pays>France</pays>) ou <nom>Julia Roberts</nom> (<pays>tats Unis</pays>), ainsi que ... </Acteurs>
23
Problmes
Trouver le schma relationnel pour stocker du XML Traduire du XQuery en SQL Construire des rsultats XML partir des tables
25
Cinema(id) Film(id, parentId, titre, mes) Acteur(id, parentId, acteur) select f.titre from Film f, Acteur a where a.parentId=f.id and a.acteur="S. Weaver"
27
//film[acteur="S. Weaver"]/titre
Exemple: Natix
Un arbre XML est dcoup en articles (sous-arbres) Une page = un ou plusieurs articles + liens vers les pages suivantes Utilisation de nuds proxy/hub pour crer les liens entre pages
f: nuds de donnes p: nuds proxy h: nuds hub
Indexation XML
Particularits
Requtes de chemin Requtes sur le texte indexation de la structure d'arbre indexation des mots du texte
29
film
(3,3,2) (6,6,2) (10,10,2)
film
(13,14,2)
titre
(4,1,3) (5,2,3) (7,4,3)
realisateur
(8,5,3) (11,8,3)
titre
(12,9,3) (14,11,3)
realisateur
(15,12,3) (16,13,3)
Marie
Antoinette
Sofia
Coppola
Le Parrain
Francis Ford
Coppola
Identifiants structurels pour tous les nuds de l'arbre et pour tous les mots du texte
n2 aprs n1 : pre(n1) < pre(n2) n2 descendant de n1 : pre(n1) < pre(n2) post(n1) > post(n2) n2 enfant de n1 : n2 descendant de n1 niv(n2) = niv(n1)+1 n contient mot : mot descendant de n n contient directement mot : mot enfant de n
30
Retrouver les listes d'IS pour chaque balise/mot de la requte Combiner ces listes par rapport aux relations de chemin
cinema film titre realisateur Coppola Sofia doc1 1,16,0 doc1 2,7,1 9,15,1 doc1 3,3,2 10,10,2 doc1 6,6,2 13,14,2 doc1 8,5,3 16,13,3 doc1 7,4,3
realisateur: (6,6,2), (13,14,2) "Sofia": (7,4,3) realisateur ftcontains "Sofia": (6,6,2) film: (2,7,1), (9,15,1) film[] : (2,7,1) titre: (3,3,2), (10,10,2) film[]/titre: (3,3,2)
31
Interrogation XML
Langages d'interrogation
W3C: XQuery, XPath SQL: SQL/XML
XQuery, XPath
Langages spcifiques XML Modle XDM (squences de nuds typs) Extensions XQuery Full Text, XQuery Update
SQL/XML
Extension de SQL pour manipuler du XML dans un SGBD relationnel Mlange de SQL, XQuery et oprateurs des passage relationnel XML
32
SQL/XML
Partie du standard SQL (ISO/IEC 9075)
SQL partie 14: "XML related specifications" (ISO/IEC 9075-14) Plusieurs versions successives: 2003, 2006, 2008
Caractristiques SQL/XML
Construction de fragments XML partir de tables relationnelles
"Fonctions" spcifiques XML rajoutes SQL: XMLELEMENT, XMLATTRIBUTES, XMLAGG, XMLFOREST, etc.
33
Table ARTISTE
AID 1 2 3 4 5 NOM Stewart Hitchcock Scott Depp Cameron PRENOM James Alfred Ridley Johnny James ANNEENAISS 1908 1899 NULL NULL 1954
34
XMLELEMENT
Cration d'lments XML
XMLELEMENT cre un lment XML dans le rsultat
Ex. Produire des lments XML avec les titres des films
SELECT XMLELEMENT(NAME "film", TITRE) AS "Films" FROM FILM
Rsultat:
Films ----<film>Vertigo</film> <film>Alien</film> <film>Titanic</film>
Remarque: par dfaut les noms d'attributs en SQL sont en majuscules, pour
avoir un nom d'lment XML en minuscules il faut le mettre entre guillemets
Cours BDA (UCP/M1): Bases de donnes XML 35
XMLATTRIBUTES
Dfinition d'attributs pour un lment
XMLATTRIBUTES: seulement en second paramtre de XMLELEMENT
XMLAGG
Regrouper une squence d'lments en un seul lment
XMLAGG: par exemple regrouper les rsultats d'une requte en un seul lment
Ex. Produire des lments XML avec les titres des films
SELECT XMLELEMENT(NAME "films", XMLAGG(XMLELEMENT(NAME "film", TITRE) ORDER BY TITRE) ) AS "Films" FROM FILM
Films ----<films> <film>Alien</film> <film>Titanic</film> <film>Vertigo</film> </films>
37
XMLFOREST
Crer plusieurs lments
Produit une squence XML partir de valeurs SQL XMLFOREST: plus simple et flexible que plusieurs XMLELEMENT
Ex. Les informations sur les artistes dont le prnom commence par 'J'
1. Avec XMLELEMENT
SELECT XMLELEMENT(NAME "artiste", XMLELEMENT(NAME "nom", NOM), XMLELEMENT(NAME "prenom", PRENOM), XMLELEMENT(NAME "naissance", ANNEENAISS)) ) AS "Artistes" FROM ARTISTE WHERE PRENOM LIKE 'J%'
Artistes ----<artiste> <nom>Stewart</nom><prenom>James</prenom><naissance>1908</naissance> </artiste> <artiste> <nom>Depp</nom><prenom>Johnny</prenom><naissance></naissance> </artiste> <artiste> <nom>Cameron</nom><prenom>James</prenom><naissance>1954</naissance> </artiste>
Cours BDA (UCP/M1): Bases de donnes XML 39
XMLFOREST (suite)
2. Mme requte avec XMLFOREST
SELECT XMLELEMENT(NAME "artiste", XMLFOREST(NOM AS "nom", PRENOM AS "prenom", ANNEENAISS AS "naissance") ) AS "Artistes" FROM ARTISTE WHERE PRENOM LIKE 'J%'
Artistes ----<artiste> <nom>Stewart</nom><prenom>James</prenom><naissance>1908</naissance> </artiste> <artiste> <nom>Depp</nom><prenom>Johnny</prenom> </artiste> <artiste> <nom>Cameron</nom><prenom>James</prenom><naissance>1954</naissance> </artiste>
40
XMLCONCAT
Regrouper plusieurs lments XML en une squence
la diffrence de XMLFOREST, produit une squence XML partir de valeurs XML (pas SQL)
Ex. Les informations sur les artistes dont le prnom commence par 'J'
SELECT XMLCONCAT( XMLELEMENT(NAME "nom", NOM), XMLELEMENT(NAME "prenom", PRENOM), XMLELEMENT(NAME "naissance", ANNEENAISS)) ) AS "Artistes" FROM ARTISTE WHERE PRENOM LIKE 'J%'
Artistes ----<nom>Stewart</nom><prenom>James</prenom><naissance>1908</naissance> <nom>Depp</nom><prenom>Johnny</prenom><naissance></naissance> <nom>Cameron</nom><prenom>James</prenom><naissance>1954</naissance>
41
Autres oprateurs
XMLCOMMENT: produit un commentaire XMLPI: produit une instruction de traitement XMLPARSE: transforme une chane de caractres en XML XMLSERIALIZE: transforme du XML en chane de caractres etc.
42
Syntaxe: XML(contenu(type))
Seul le mot XML est obligatoire, le contenu et le type sont optionnels
Contenu
DOCUMENT : document XML bien form CONTENT : fragment XML "enrob" sous forme de document XML (peut avoir plusieurs lments racine) SEQUENCE : squence de tous types de nuds XML
Type
UNTYPED: pas de schma XML XMLSCHEMA description : avec schma XML spcifi par description ANY: pas de prcision (a peut tre n'importe lequel des deux)
Cours BDA (UCP/M1): Bases de donnes XML 43
Table FILMS_XML
FID
1
FILM
<film annee='1958'> <titre>Vertigo</titre> <genre>Drame</genre> <mes>Alfred Hitchcock</mes> </film> <film annee='1979'> <titre>Alien</titre> <genre>SF</genre> <mes>Ridley Scott</mes> </film> <film annee='1997'> <titre>Titanic</titre> <genre>Drame</genre> <mes>James Cameron</mes> </film>
44
Interrogation en XQuery
On peut interroger le contenu des attributs XML avec des requtes XQuery Principales commandes
Commande XMLQUERY tre utilise dans la clause SELECT
Interrogation des donnes dans les attributs XML
45
XMLQUERY
Interrogation de contenu XML
Dans la clause SELECT, attributs XML passs sous forme de variables
Remarque: l'attribut XML FILM est transmis en tant que variable $attr
Cours BDA (UCP/M1): Bases de donnes XML 46
XMLQUERY (suite)
Ex. Utilisation de la rponse avec des fonctions agrgat SELECT MIN(XMLCAST( XMLQUERY( 'for $f in $attr/film return $f/@annee' PASSING FILM AS "attr" RETURNING CONTENT NULL ON EMPTY ) AS integer ) AS "AnneeDuPlusAncien" FROM FILMS_XML
AnneeDuPlusAncien ---------------1958
Remarque: XMLCAST permet de transformer le rsultat de la requte XQuery (texte ici) en entier, afin de lui appliquer la fonction agrgat (MIN)
Cours BDA (UCP/M1): Bases de donnes XML 47
48
XMLTABLE
Ex. Donner les titres des films
SELECT Titres.* FROM FILMS_XML, XMLTABLE( 'for $f in $attr/film return $f/titre' PASSING FILM AS "attr" ) AS "Titres"
COLUMN_VALUE -----------<titre>Vertigo</titre> <titre>Alien</titre> <titre>Titanic</titre>
Remarques:
Le mme effet que le premier exemple avec XMLQUERY, mais en utilisant XMLTABLE On est obligs de mettre aussi FILMS_XML dans le FROM!
Cours BDA (UCP/M1): Bases de donnes XML 49
XMLTABLE (suite)
Ex. Produire une table avec le titre, l'anne et le ralisateur des films sortis avant 1980
SELECT Films.* FROM FILMS_XML, XMLTABLE( 'for $f in $attr/film return $f' PASSING FILM_XML.FILM AS "attr" COLUMNS "titre" VARCHAR(40) PATH 'titre', "annee" INTEGER PATH '@annee', "realisateur" VARCHAR(40) PATH 'mes' ) AS "Films" WHERE Films.annee < 1980
titre annee realisateur ---------- ----- ----------------Vertigo 1958 Alfred Hitchcock Alien 1979 Ridley Scott
50
XMLTABLE (suite)
Ex. L'anne du film le plus ancien
SELECT MIN(Films.annee) AS "AnneeDuPlusAncien" FROM FILMS_XML, XMLTABLE( 'for $f in $attr/film return $f' PASSING FILM_XML.FILM AS "attr" COLUMNS "titre" VARCHAR(40) PATH 'titre', "annee" INTEGER PATH '@annee', "realisateur" VARCHAR(40) PATH 'mes' ) AS "Films"
AnneeDuPlusAncien ---------------1958
51
XMLEXISTS
Test d'une condition sur un contenu XML
Utilis la clause WHERE
Exemple
create table FILMS_XML( FID:integer primary key, FILM: sys.XMLType); create table ARTISTES_XML of sys.XMLType;
Insertion
insert into FILMS_XML values(1, XMLTYPE('<film titre="Alien"> <acteur>S. Weaver</acteur> </film>'));
Cours BDA (UCP/M1): Bases de donnes XML 53
54