Sunteți pe pagina 1din 27

Bases de donnes avances

Bases de donnes XML


Dan VODISLAV

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

Indexation XML Interrogation XML


SQL/XML

XML dans Oracle

Cours BDA (UCP/M1): Bases de donnes XML

Bases de donnes XML


Base de donnes XML = base de donnes qui s'appuie sur un modle logique de donnes XML
Reprsentation XML des donnes stockes / retournes par les requtes Langage de dfinition de donnes (LDD) spcifique XML Langage de requtes / manipulation des donnes (LMD) spcifiques XML Stockage physique et indexation spcifiques XML

Modles de donnes
Relationnel: tables Objet: objets persistants Semi-structur: arbres et texte

XML

Cours BDA (UCP/M1): Bases de donnes XML

Rappels XML
XML: eXtensible Markup Lanuage
Langage de description de documents structurs Utilisation de balises (balisage structurel)

Standard W3C pour lchange/publication de donnes sur le web Hritage:


HTML: documents publis sur le web, mais ensemble de balises fix, ddies la prsentation du contenu difficile exploiter le contenu Donnes structures: bases de donnes, contenu structur, mais mal adapt la structure des documents web (texte, structure irrgulire) XML dcrit le contenu de faon (semi-)structure, flexible, adapte aux documents du web

Cours BDA (UCP/M1): Bases de donnes XML

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>

Cours BDA (UCP/M1): Bases de donnes XML

Formes srialise et arborescente


Forme srialise dun document/lment
Chane de caractres (texte) incluant balises et contenu textuel Exemple
<lettre type='court'><salutation>Bonjour!</salutation><fin>Au revoir</fin></lettre>

ou avec un peu de mise en forme


<lettre type='court'> <salutation>Bonjour!</salutation> <fin>Au revoir</fin> </lettre>

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])

Axe: optionnel (par dfaut child)


Spcifie un ensemble des nuds par rapport au nud contexte + un ordre

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

Cours BDA (UCP/M1): Bases de donnes XML

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

Attributs: seul laxe attribute dsigne des nuds attribut !


Cours BDA (UCP/M1): Bases de donnes XML 8

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)

Par leur type


text(), comment(), processing-instruction() * : nuds de type lment ou attribut node() : tous les types de nud

Prdicat: tests connects par les oprateurs logiques "ET" et "OU"


Ngation: par la fonction not()

Test = expression boolenne lmentaire: comparaison, fonction boolenne


Expression de chemin convertie en boolen : false si lensemble est vide, sinon true

Cours BDA (UCP/M1): Bases de donnes XML

Fonctions XPath
Pour nuds
count(expr): nombre de nuds dans lensemble produit par lexpression name(): nom du nud contexte

Pour chanes de caractres


concat(ch1, ch2, ): concatnation contains(ch1, ch2): vrifie si ch1 contient ch2 substring(ch, pos, l): extrait la sous-chane de ch de longueur l, commenant la position pos (les positions dmarrent 1) string-length(ch): longueur de la chane

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()

Cours BDA (UCP/M1): Bases de donnes XML

11

XQuery
Langage de requtes pour bases de donnes XML
Langage fonctionnel typ, sans effets de bord

Modle de donnes XDM bas sur des squences ordonnes


Valeur = squence ordonne (liste) ditems Item = nud (tout type DOM) ou valeur atomique
Document, lment, attribut, texte, + valeurs atomiques de diffrents types

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

Cours BDA (UCP/M1): Bases de donnes XML

12

Squences
Pas de distinction entre item et squence de longueur 1
Ex: 39 = (39)

Une squence peut contenir des valeurs htrognes


Ex: (39, "toto", <toto/>)

Pas de squences imbriques


Ex: (39, (1, 2), "toto", <toto/>) = (39, 1, 2, "toto", <toto/>)

Une squence peut tre vide


Ex: ()

Lordre est important


Ex: (1, 2) (2, 1)

Cours BDA (UCP/M1): Bases de donnes XML

13

Expressions XQuery simples


Valeurs atomiques littrales (des types simples XML Schema)
Ex: 39, "toto", 3.9, etc.

Nuds XML sous forme littrale


Ex: <film annee="2007"> <titre>La mme</titre> </film>

Valeurs obtenues par des constructeurs simples


Ex: true(), false(), date("2006-12-08")

Collections de documents, documents


document(uri-document) retourne un item de type nud Document collection(uri-collection) retourne une squence de nuds Document Ex: document("biblio.xml"), collection("cinema/films")

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 XQuery complexes


Expressions de chemin (XPath 2.0)
Toute expression produisant une squence de nuds peut tre une tape

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>

Cours BDA (UCP/M1): Bases de donnes XML

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>

Cours BDA (UCP/M1): Bases de donnes XML

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

Requtes motif d'arbre


Les requtes les plus courantes
Correspondent aux requtes relationnelles de slection/projection

Exemple : noms des auteurs franais


et titres des livres qu'ils ont publis

document("bib.xml") book @title author name country ="FR"

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

Annee 1988 1989 1978 1989 1993

nuplet

Cours BDA (UCP/M1): Bases de donnes XML

19

Modle semi-structur / XML


Modle pour le contenu du web
Mlange de texte et de structure complexe: arbres ordonns
Plus complexe que le relationnel ou l'objet

Faiblement typ et auto-descriptif (schma facultatif) Flexible pour grer l'htrognit

Langage de requtes XQuery/XPath


Expressions de chemin, rcursivit, requtes texte

Cours BDA (UCP/M1): Bases de donnes XML

20

Comparaison relationnel - XML


Modle conceptuel
Acteur nom pays joue dans Film titre anne

Traduction en modle relationnel


Acteur (nom, pays) Film (titre, anne) Joue (nom, titre)

Traduction en modle XML


Plus proche du modle conceptuel
<Acteurs> <Acteur nom="Daniel Auteuil"> <pays>France</pays> <Film anne="1986">Jean de Florette</Film> <Film anne="1993">La Reine Margot</Film> <Film anne="1996">Le Huitime Jour</Film> </Acteur> ... </Acteurs>
Cours BDA (UCP/M1): Bases de donnes XML 21

Pourquoi des bases de donnes XML?


XML est un format d'change, pourquoi le stocker?
viter les (coteuses) transformations de modle
Application
XML

Application

Application
XML

Application

BDR

BD XML

Pourquoi ne pas stocker les documents XML dans des fichiers?


Possible: fichiers texte auto-descriptifs, un fichier par document, mais
Fonctionnalits limites offertes par le systme de fichiers, pas d'accs rapide des parties du document, pas de support pour concurrence, reprise, Trs lent quand le nombre de fichiers augmente

Obtenir de bonnes performances

optimiser l'organisation physique

Stockage adapt la navigation dans les arbres, indexation

Cours BDA (UCP/M1): Bases de donnes 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

Types de documents XML


Orients donnes: contenu structur, ordre peu important Orients documents: proche de documents consultables, ordre important
Beaucoup de texte et de contenu mixte (style HTML)
<Acteurs> <Acteur> <nom>Daniel Auteuil</nom> <pays>France</pays> </Acteur> <Acteur> <nom>Julia Roberts</nom> <pays>tats Unis</pays> </Acteur> </Acteurs>
Cours BDA (UCP/M1): Bases de donnes XML

<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

Stockage de XML dans le relationnel


Distance assez grande entre les modles
Tables non ordonnes arbres ordonns Mieux adapt aux documents XML orients donnes

Problmes
Trouver le schma relationnel pour stocker du XML Traduire du XQuery en SQL Construire des rsultats XML partir des tables

Deux faons de stocker du XML dans le relationnel


Dans des tables: contenu dcompos entre plusieurs tables
Adapt l'XML orient donnes Avantage: accs des parties du document

Dans des LOB: contenu stock comme un bloc


Adapt l'XML orient documents Avantage: reconstitution rapide du document
Cours BDA (UCP/M1): Bases de donnes XML 24

Stockage relationnel gnrique


Mthode simple, valable pour n'importe quel document
Une table pour l'arbre, une autre pour les valeurs Inconvnient: beaucoup de jointures pour accder aux fragments XML
A
<cinema> <film> <titre>Titanic</titre> <acteur>L. di Caprio</acteur> <acteur>K. Winslett</acteur> </film> <film> <titre>Alien</titre> <mes>R. Scott</pays> <acteur>S. Weaver</acteur> </film> </cinema>
Id 1 2 3 4 5 6 7 8 9 Id 3 4 5 7 8 9 Libell cinema film titre acteur acteur film titre mes acteur Pos 1 1 1 2 3 2 1 2 3 Type ref ref cdata cdata cdata ref cdata cdata cdata Parent 0 1 2 2 2 1 6 6 6

Cours BDA (UCP/M1): Bases de donnes XML

Valeur Titanic L. di Caprio K. Winslett Alien R. Scott S. Weaver

25

Stockage relationnel gnrique (suite)


Requte XPath
//film[acteur="S. Weaver"]/titre

Requte SQL quivalente


select vt.Valeur from A f, A a, A t, V va, V vt where f.Libell="film" and a.Libell="acteur" and t.Libbel="titre" and a.Parent=f.Id and t.Parent=f.Id and va.Id=a.Id and va.Valeur = "S. Weaver" and vt.Id=t.Id 4 jointures et 4 slections
Cours BDA (UCP/M1): Bases de donnes XML 26

Stockage relationnel guid par le schma


Ide: utiliser le schma XML pour en dduire un modle conceptuel, traduit ensuite en relationnel
Graphe structurel dcompos en sous-arbres une table par sous-arbre Racine sous-arbre: nud ayant n1 arcs entrants ou 1 arc entrant marqu * ou +
<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT cinema (film)*> film (titre, mes?, acteur*)> titre (#PCDATA)> mes (#PCDATA)> acteur (#PCDATA)> titre(texte) cinema * film ? * mes(texte) acteur(texte)

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

Cours BDA (UCP/M1): Bases de donnes XML

Stockage XML natif


Stockage bas sur des structures d'arbre
DOM persistant mmoire virtuelle pour DOM Pages disque organises sous forme d'arbre

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

clatement d'une page par rapport un nud pivot d


Cours BDA (UCP/M1): Bases de donnes XML 28

Indexation XML
Particularits
Requtes de chemin Requtes sur le texte indexation de la structure d'arbre indexation des mots du texte

Les index relationnels (arbres B+) sont aussi utiliss


lments/attributs dont la valeur est de type "relationnel"

Exemple d'index mixte structure/texte


Schma de numrotation Dietz pour les nuds d'un arbre Identifiant structurel : IS=(pre, post, niv)
pre: position du nud dans un parcours pr-ordre de l'arbre
Suit l'ordre d'ouverture des balises dans le document

post: position du nud dans un parcours post-ordre de l'arbre


Suit l'ordre de fermeture des balises dans le document

niv: niveau du nud dans l'arbre


Permet de vrifier des relations parent-enfant entre les noeuds

Cours BDA (UCP/M1): Bases de donnes XML

29

Index XML texte/structure


cinema
(2,7,1) (1,16,0) (9,15,1)

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

Cours BDA (UCP/M1): Bases de donnes XML

Index texte/structure et requtes


Index = balise/mot liste IS groups par document
ftcontains "Sofia"]/titre

Exemple requte: //film[realisateur

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)

Cours BDA (UCP/M1): Bases de donnes XML

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

Cours BDA (UCP/M1): Bases de donnes 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.

Nouveau type de donnes XML


Type d'attribut (colonne) au mme niveau que INTEGER, VARCHAR,

Interrogation en XQuery des attributs XML


Fonction XMLQUERY

Transformation d'un rsultat XML sous forme de table


Fonction XMLTABLE

Cours BDA (UCP/M1): Bases de donnes XML

33

Construction de XML partir de tables


Exemple utilis Table FILM
FID TITRE 1 2 3 Vertigo Alien Titanic ANNEE 1958 1979 1997 GENRE Drame SF Drame MES 2 3 5

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

Cours BDA (UCP/M1): Bases de donnes XML

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

Ex. lments XML plus complexes


SELECT XMLELEMENT(NAME "film", XMLATTRIBUTES(TITRE AS "titre", ANNEE AS "annee"), XMLELEMENT(NAME "realisateur", (SELECT NOM FROM ARTISTE a WHERE f.MES=a.AID)), XMLELEMENT(NAME "genre", GENRE) ) AS "Films" FROM FILM f WHERE ANNEE<1980 Films ----<film titre="Vertigo" annee="1958"> <realisateur>Hitchcock</realisateur><genre>Drame</genre> </film> <film titre="Alien" annee="1979"> <realisateur>Scott</realisateur><genre>SF</genre> </film>
Cours BDA (UCP/M1): Bases de donnes XML 36

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>

Remarque: clause ORDER BY possible dans XMLAGG

Cours BDA (UCP/M1): Bases de donnes XML

37

XMLAGG versus XMLELEMENT


Question: pourquoi a-t-on besoin de XMLAGG en plus de XMLELEMENT? Ex. La requte avec XMLELEMENT produit autre chose
SELECT XMLELEMENT(NAME "films", XMLELEMENT(NAME "film", TITRE)) ) AS "Films" FROM FILM
Films ----<films> <film>Vertigo</film> </films> <films> <film>Alien</film> </films> <films> <film>Titanic</film> </films>
Cours BDA (UCP/M1): Bases de donnes XML 38

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>

Remarque: syntaxe plus simple et limination des valeurs nulles

Cours BDA (UCP/M1): Bases de donnes XML

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>

Cours BDA (UCP/M1): Bases de donnes XML

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.

Cours BDA (UCP/M1): Bases de donnes XML

42

Type de donnes XML


XML: nouveau type de donnes pour un attribut SQL
Avant: il fallait stocker le XML dans des attributs de type VARCHAR, CLOB ou BLOB

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

Exemple de table avec attribut XML


create table FILMS_XML( FID integer primary key, FILM XML(DOCUMENT(UNTYPED)));

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

Cours BDA (UCP/M1): Bases de donnes XML

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

Commande XMLTABLE tre utilise dans la clause FROM


Transformation de donnes XML en table relationnelle

Commande XMLEXISTS tre utilise dans la clause WHERE


Vrification de conditions sur les attributs XML

Cours BDA (UCP/M1): Bases de donnes XML

45

XMLQUERY
Interrogation de contenu XML
Dans la clause SELECT, attributs XML passs sous forme de variables

Ex. Donner les titres des films


SELECT XMLQUERY( 'for $f in $attr/film return $f/titre' PASSING FILM AS "attr" RETURNING CONTENT NULL ON EMPTY ) AS "Films" FROM FILMS_XML
Films ----<titre>Vertigo</titre> <titre>Alien</titre> <titre>Titanic</titre>

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

Construction de tables partir de XML Commande XMLTABLE


Extrait du contenu XML avec une requte XQuery et formate le rsultat sous forme de table relationnelle Utilise dans la clause FROM Mieux adapt que XMLQUERY pour exploiter le contenu mixte relationnel-XML des tables
XMLQUERY: XML XMLTABLE: XML XML, exploitable avec des outils XML table, exploitable avec SQL

Cours BDA (UCP/M1): Bases de donnes XML

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

Cours BDA (UCP/M1): Bases de donnes XML

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

Cours BDA (UCP/M1): Bases de donnes XML

51

XMLEXISTS
Test d'une condition sur un contenu XML
Utilis la clause WHERE

Ex. Donner les identifiants des films aprs 1970


SELECT FID FROM FILMS_XML WHERE XMLEXISTS( '/film[@annee>1970]' PASSING BY VALUE FILM)
FID ----2 3

Remarque: le rsultat de XMLEXISTS est faux seulement si le rsultat de


la requte XQuery est la squence vide
Cours BDA (UCP/M1): Bases de donnes XML 52

XML dans Oracle


Type d'attribut/table XML: XMLTYPE
Stockage sous forme de LOB ou de tables Utilisation des attributs XML indpendante du mode de stockage Langage SQL/XML assez proche de la norme

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

Diffrences par rapport au standard


La norme SQL/XML a beaucoup vari et les diffrentes versions d'Oracle l'ont adopte au fur et mesure
Version 10.1: pas de XMLQuery, XMLTable, Version 10.2: pas de XMLExists, XMLCast
XMLExists fonction existsNode(attribut, XPath), qui retourne 1 si l'expression XPath applique la valeur de l'attribut produit une squence non vide

Version 11: proche de la norme SQL/XML actuelle

Modification d'un attribut XML


Fonction updateXML(attribut, XPath, valeur)
update FILMS_XML set FILM = updateXML(FILM, 'film[@titre="Alien"]/acteur/text()', 'Sigourney Weaver');

Cours BDA (UCP/M1): Bases de donnes XML

54

S-ar putea să vă placă și