Vous êtes sur la page 1sur 18

Travailler avec des

donnes de type XML


Version 1.0
Z

Grgory CASANOVA

Travailler avec des donnes de type XML 28/07/2009

Sommaire

Introduction ..................................................................................................................................... 3

Pr requis......................................................................................................................................... 4

XML typ et non typ ...................................................................................................................... 5

3.1

Non typ .................................................................................................................................. 5

3.2

Typ ......................................................................................................................................... 5

XML et DML ..................................................................................................................................... 7


4.1

Le DML Gnral ....................................................................................................................... 7

4.2

Le DML Spcifique ................................................................................................................... 9

4.2.1

Query()............................................................................................................................. 9

4.2.2

Value() ............................................................................................................................. 9

4.2.3

Exist() ............................................................................................................................. 10

4.2.4

Nodes() .......................................................................................................................... 11

4.2.5

Modify() ......................................................................................................................... 12

4.2.6

Les requtes XQuery et XPath ....................................................................................... 13

4.3

FOR XML ................................................................................................................................ 13

4.4

OpenXML ............................................................................................................................... 15

4.5

OPENROWSET........................................................................................................................ 16

INDEX et XML................................................................................................................................. 17

Conclusion ..................................................................................................................................... 18

Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009

1 Introduction
Le type de donnes XML est apparu dans SQL Server la premire fois pour la version 2000. Ce
rsultat est d une volution des types de stockages pour les entreprises. Le type de donnes XML
tant de plus en plus utilis, il tait vident que Microsoft sadapte dans son SGBDR. Dans le cas
prsent, ce qui nous intresse nest pas de pouvoir stocker les donnes au format XML, mais de les
exploiter directement et de faon optimale grce SQL Server 2008. Il sera donc possible, grce
SQL Server, dintgrer des donnes contenues dans un document XML, aux tables dans un schma
relationnel, ou inversement, de produire un document XML, grce aux donnes relationnelles dune
ou plusieurs tables dans une base de donnes. Le but de lintgration du XML dans SQL Server, est de
pouvoir stocker les donnes dans leur format natif, cest pourquoi il est possible dintgrer des
donnes dans un schma relationnel, aussi bien que dans leur format XML dorigine. Il nest pas
difficile de comprendre que Microsoft a considrablement augment sa capacit de gestion des
donnes XML depuis la version 2000, dans le sens ou il ntait avant possible que de produire un
document XML partir de donnes relationnelles alors que dsormais il est possible de travailler
directement dessus dans leur forme native. De faon gnrale, les types de donnes, quils soient
relationnel ou typs XML, ne sont pas en concurrence dans votre base de donnes. Chacun possde
ses avantages et ses inconvnients. En effet, le XML sera particulirement adapt lorsque nous
aurons besoin de faire de lchange dinformation ou encore de lenvoie de messages. Le type XML
tant organis de faon hirarchique, Il est donc simple, du moment que la hirarchie est connue, de
retrouver des donnes. Les donnes sont types en UTF-16 par SQL Server. Dans SQL Server, il est
possible dassocier une colonne de type XML une collection de schma pour satisfaire les exigences
du W3C en matire de XML. Dans le cas o la colonne qui contient les documents est attache des
collections de schma, on dira que le XML est typ, sinon il sera non typ. Pour ce cours, nous allons
utiliser une table, qui possdera une seule colonne type XML, dont le script est le suivant :
CREATE TABLE Donnees_XML
(Colonne_XML XML)

Nous nallons pas pouvoir traiter le langage XML dans sa totalit dans ce cours, cest pourquoi, si
ce langage vous intresse, il vous est possible de trouver de la documentation sur celui-ci, ladresse
suivante : http://www.w3.org/TR/REC-xml/ .

Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009

2 Pr requis
Pour pouvoir comprendre ce chapitre au mieux, vous devez connaitre :
-

Les diffrentes oprations possibles sur une base de donnes, grce au T-SQL (Chapitre 4).

Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009

3 XML typ et non typ


3.1 Non typ
Le XML, tel quil est dfinit par la norme ISO SQL-2003, se doit daccueillir des documents XML
1.0 bien forms. Comme dit plus haut, un document non typ sera un document qui nest pas
rattach une collection de schmas, et donc, qui se doit daccueillir des documents XML bien
forms. Vous laurez compris, les donnes XML non typs doivent tre utilises lorsquil nest pas
possible de dfinir une collection de schmas.

3.2 Typ
Des donnes XML types seront, comme nonc prcdemment, des documents lis une
collection de schmas. Puisque dans SQL Server, nous stockons les documents XML dans les colonnes
types XML, il est possible de rattacher directement une collection de schmas une colonne
particulire, afin que tous les documents devant tre stocks dans la colonne soient concerns par la
collection de schmas. Il ne sera donc pas possible, si une collection de schma est li une colonne,
dinsrer un document ne respectant pas le schma dfinit. On peut donc dfinir les schmas comme
des contraintes dintgrit concernant les documents XML.
La gestion des collections de schmas XML se font par les mots cl CREATE XML SCHEMA
COLLECTION, ALTER XML SCHEMA COLLECTION ET DELETE XML SCHEMA COLLECTION. Chaque
collection va pouvoir contenir un ou plusieurs schmas XML, et va pouvoir tre modifi aprs sa
cration, ce qui va nous permettre de sadapter au fait de devoir ajouter ou supprimer des schmas
dans la collection. La gestion des collections sera alors bien plus simple et flexible. La cration dun
schma se fait ainsi :
CREATE XML SCHEMA COLLECTION Schema_XML
AS
N'<?xml version="1.0" encoding="UTF-16"?>'+
'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">'+
'<xs:complexType name="Client">'+
'<xs:sequence>'+
'<xs:element name="Nom"/>'+
'<xs:element name="Prenom"/>'+
'</xs:sequence>'+
'</xs:complexType>'+
'</xs:schema>';

Dans cet exemple, la colonne laquelle sera rattach le schma devra comporter le mme
schma que dfinit aprs la clause AS. Dsormais pour rattacher ce schma une colonne, il faut le
dfinir la cration de la table, comme ceci :
CREATE TABLE Donnees_XML
(Colonne_XML XML (Schema_XML))

La colonne ou est dsormais dfini le schma ne pourra accepter que des valeurs formates
ce schma.
Note : Pour des donnes de type XML, il nest pas toujours possible de dfinir lavance tout
ce quelles vont contenir. Par exemple, on pourra ajouter un numro de tlphone pour le
complter. Dans ce cas, le mot cl any nous aide dans cet objectif.

Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009

CREATE XML SCHEMA COLLECTION Schema_XML


AS
N'<?xml version="1.0" encoding="UTF-16"?>'+
'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">'+
'<xs:complexType name="Client">'+
'<xs:sequence>'+
'<xs:element name="Nom"/>'+
'<xs:element name="Prenom"/>'+
'<xs:any namespace="autre" processContents="skip" minOccurs="0"
maxOccurs="unbounded"/>'+
'</xs:sequence>'+
'</xs:complexType>'+
'</xs:schema>';

Le mot cl any est suivit des attributs suivants :


- Namespace : lespace de nom utilis pour la validation des lments de ce type.
- processContents : indique la manire dont les lments doivent tre valids par SQL Server.
Trois valeurs sont possibles pour cet attribut :
- skip : les lments ne sont pas valids par rapport un schma.
- strict : les lments sont valids ncessairement par un schma.
- lax : les lments sont valids par un schma seulement si celui-ci existe dans la
base.
- minOccurs : nombre minimal dlments de ce type.
- maxOccurs : nombre maximal dlments de ce type.

Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009

4 XML et DML
Pour rendre plus simple la comprhension de cette partie, nous allons supprimer la table que
nous avons cre avant, puis la recrer de faon ce quelle ne soit plus lie au schma.
DROP TABLE Donnees_XML
GO
CREATE TABLE Donnees_XML
(catalogue XML)
GO

Dcouvrons maintenant les diffrentes instructions du DML appliques la manipulation du type de


donnes XML.

4.1 Le DML Gnral


Dans un premier temps, il est ncessaire de bien comprendre certaines choses. Tout dabord,
lorsque nous appliquons une instruction du DML une colonne de type XML, tout le contenu de
lenregistrement est manipul, on peu donc considrer quon ne peut pas mettre jour seulement
une balise du document XML. Voici les rsultat des quatre instructions du DML sur une colonne de
type XML :
-

INSERT :

INSERT INTO [Entreprise].[dbo].[Donnees_XML]


([Colonne_XML])
VALUES
('<article>
<nom>Windows Seven</nom>
<prix>139</prix>
</article>')
GO

Ici, nous insrons un article dont la dfinition contient un nom et un prix. Il est aussi possible
dimporter les donnes XML depuis un fichier. Pour cela, crez un fichier que nous appellerons
Cours.txt, et insrez le code suivant dans celui-ci :
<article>
<nom>Windows Seven</nom>
<prix>139</prix>
</article>

Nous utilisons le code ci-dessous :


INSERT INTO [Entreprise].[dbo].[Donnees_XML] ([Colonne_XML])
SELECT informations
FROM (SELECT *
FROM OPENROWSET(BULK 'C:\Users\Grgory Casanova\Desktop\Cours.txt',
SINGLE_BLOB) AS informations)
AS fichierXML(informations)

Grce aux instructions OPENROWSET et BULK, le contenu du fichier dont le chemin est
'C:\Users\Grgory Casanova\Desktop\Cours.txt' sera pars et insr dans la colonne de
type XML de notre table.
Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009


-

UPDATE :

UPDATE [Entreprise].[dbo].[Donnees_XML]
SET [Colonne_XML] = '<article>
<nom>Windows Vista</nom>
<prix>139</prix>
</article>'
GO

Note : Il est important de noter quici, nous changeons soit lintgralit de lenregistrement, soit rien.
Tout lenregistrement doit tre redfinit dans le cas dun update simple. Il est indispensable de
rcrire la totalit du code XML.
-

SELECT :

SELECT *
FROM dbo.Donnees_XML

Lintgralit des donnes stockes dans chaque enregistrement sera slectionne. Avec une
instruction SELECT simple, il nest pas possible de slectionner seulement le prix de larticle par
exemple. Le rsultat dune instruction SELECT se prsente de cette manire :

On remarque alors que le champ est cliquable. Le rsultat Complet est accessible avec un clic sur
celui-ci. Nous somme alors redirigs vers une nouvelle fentre de requte qui nous prsente
lintgralit du code XML contenu dans le rsultat, comme ceci :

DELETE :

DELETE FROM [Entreprise].[dbo].[Donnees_XML]


GO

Dotnet France Association - CASANOVA Grgory

Travailler avec des donnes de type XML 28/07/2009

4.2 Le DML Spcifique


Dans la partie prcdente, nous avons vue que les instructions DML gnrales ne peuvent
toucher que lensemble des donnes dun fichier XML, et non pas une partie de celui-ci. Il va de sois
que la force principale du XML dans la base de donnes est de pouvoir diffrencier les informations
dans un document, sans pour autant avoir besoin de manipuler lenregistrement entier. Cest
pourquoi il existe une mthode spcifique au type de donnes XML pour manipuler les donnes. Ces
mthodes sont query(), value(), exist(), nodes() et modiify(). Voyons en dtail toutes ces mthodes de
manipulation des donnes XML.
4.2.1

Query()
Cette requte accepte en paramtre une requte de type Xquery. Elle va nous permettre de
naviguer dans notre document XML, et dappliquer une action DML sur un nud particulier de notre
document. Cette requte retourne une valeur XML non type. Prenons un exemple :

SELECT catalogue.query('article/nom')
FROM Donnees_XML

Le rsultat est le suivant :

Il est aussi possible de cliquer sur le rsultat de la requte pour afficher le rsultat complet dans
le gestionnaire de donnes XML. On retiendra que ce type de requte retourne un nud complet du
document XML et non la valeur comprise entre les balises dun nud de ce mme document.
4.2.2

Value()
Grce linstruction value(), nous allons pouvoir extraire la valeur contenue entre les balises
XML dun nud du document XML sur lequel on travaille. Prenons un exemple :
USE Entreprise
SELECT catalogue.value('(article/nom)[1]', 'nvarchar(50)')
FROM Donnees_XML

La requte value suit le nom de la colonne de type XML o nous allons oprer. Cette requte prend 2
arguments qui sont le chemin de la valeur et un singleton, et le type de retour de la requte. La
requte ci-dessus produit le rsultat suivant :

Dotnet France Association - CASANOVA Grgory

10

Travailler avec des donnes de type XML 28/07/2009


On remarque alors que les balises ont disparues, et quil ne reste que la valeur comprise dans le
nud que nous avons plac en argument dans notre requte value().
4.2.3

Exist()
Cette instruction fait partie des instructions XQuery, et retourne une valeur scalaire de type
bit. Si les donnes sont localises, sa valeur est 1, si les donnes ne peuvent pas tre localises, sa
valeur est 0 et si la valeur de linformation trouver est NULL, alors sa valeur est NULL. Ce type
dinstruction est pratique utiliser conjointement aux autres instructions XQuery disponibles, par
exemple, pour viter la leve derreurs imprvues. Pour prendre un exemple plus concret, nous
allons faire une insertion dans la table.
INSERT INTO Donnees_XML
VALUES
('<article>
<nom>Windows Seven</nom>
<prix>139</prix>
</article>'),
('<article>
<nom>Windows Vista</nom>
<prix>100</prix>
</article>'),
('<article>
<nom>Windows XP</nom>
</article>')

Cette fois-ci, nous avons ajout trois lignes dans notre colonne XML, deux contenant un prix et la
troisime nen contenant pas. Voyons maintenant le rsultat dun exemple dutilisation de
linstruction exist() :

SELECT catalogue.value('(article/nom)[1]', 'nvarchar(50)')


FROM Donnees_XML
WHERE catalogue.exist('(article/prix)[1]') = 1

Cette requte retourne toutes les lignes pour laquelle il existe une balise XML <prix> non NULL. En
voici le rsultat :

On remarque alors que llment pour lequel il manquait le prix nest pas prsent, puisque la balise
XML <prix>, nexistait pas. En revanche, si lon passe la valeur de la requte exist() 0, ce produit
sera retourn, en remplacement des deux autre contenant une balise de prix.
SELECT catalogue.value('(article/nom)[1]', 'nvarchar(50)')
FROM Donnees_XML
WHERE catalogue.exist('(article/prix)[1]') = 0

Voici le rsultat :
Dotnet France Association - CASANOVA Grgory

11

Travailler avec des donnes de type XML 28/07/2009

4.2.4

Nodes()
Linstruction nodes() va nous permettre de morceler notre rsultat, partir de nuds
particuliers, pour retourner seulement le prix par exemple. Dans notre exemple, nous allons
morceler le rsultat de rendu dun document XML contenu dans une variable de type XML. Le
rsultat retournera plusieurs lignes dans lesquelles chaque prix apparaitra. Nodes() permet par
consquent de retourner une suite de lignes de rsultats en dfinissant un nud particulier dans le
document XML.
DECLARE @XML XML = '<article>
<nom>Windows Seven</nom>
<prix>139</prix>
</article>
<article>
<nom>Windows Vista</nom>
<prix>100</prix>
</article>
<article>
<nom>Windows XP</nom>
</article>'
SELECT resultats.x.query('.')
from @XML.nodes('article/prix') AS resultats(x)

Le rsultat est le suivant :

Il est important de comprendre le fondement de cette requte. Nous aurions pue utiliser une simple
requte query() pour retourner les prix du document XML, comme ceci :
DECLARE @XML XML = '<article>
<nom>Windows Seven</nom>
<prix>139</prix>
</article>
<article>
<nom>Windows Vista</nom>
<prix>100</prix>
</article>
<article>
<nom>Windows XP</nom>
</article>'
SELECT @XML.query('article/prix')

Dotnet France Association - CASANOVA Grgory

12

Travailler avec des donnes de type XML 28/07/2009


Dont le rsultat est celui-ci :

Simplement, en utilisant une requte query() au lieu dune requte nodes(), tous les prix auraient t
dans la mme ligne de rsultat, au lieu dtre spars comme vu dans les exemples.
4.2.5 Modify()
Comme son nom lindique, linstruction XQuery modify(), permet de modifier les donnes
contenues dans un document XML, de faon cible, contrairement linstruction UPDATE qui nous
permet de mettre jour la totalit des donnes contenu dans la colonne. Pour ajouter, modifier ou
supprimer des informations dans un document XML via la mthode modify(), on utilisera les
instructions XML DML insert, replace value of et delete. Prenons un exemple :
DECLARE @XML1 XML =
'<ROOT>
<article>
<nom>Windows Seven</nom>
<prix>139</prix>
</article>
<article>
<nom>Windows Vista</nom>
<prix>100</prix>
</article>
<article>
<nom>Windows XP</nom>
</article>
</ROOT>'
DECLARE @XML2 XML ='<quategorie>informatique</quategorie>'
SET @XML1.modify('insert sql:variable ("@XML2")
as last into (/ROOT/article)[1]')
SET @XML1.modify('insert sql:variable ("@XML2")
as last into (/ROOT/article)[2]')
SET @XML1.modify('insert sql:variable ("@XML2")
as last into (/ROOT/article)[3]')

Cette instruction va permettre de rajouter aux trois lignes, une valise quategorie pour chaque nud
article du document. Voici le rsultat :

Dotnet France Association - CASANOVA Grgory

13

Travailler avec des donnes de type XML 28/07/2009

<ROOT>
<article>
<nom>Windows Seven</nom>
<prix>139</prix>
<quategorie>informatique</quategorie>
</article>
<article>
<nom>Windows Vista</nom>
<prix>100</prix>
<quategorie>informatique</quategorie>
</article>
<article>
<nom>Windows XP</nom>
<quategorie>informatique</quategorie>
</article>
</ROOT>

4.2.6

Les requtes XQuery et XPath


Il existe un langage pour excuter la plupart des requtes possible dans SQL Server pour le
format XML : Le XQuery et le XPath. Couvrir la totalit de ce langage serai trop long pour un seul
chapitre, de plus, il est entirement disponible sur le site officiel du W3C laddresse suivante :
http://www.w3.org/TR/xquery .

4.3 FOR XML


La clause for XML permet de passer un jeu de rsultat de donnes dun format relationnel en un
format XML au travers dune requte de type SELECT. Cependant, malgr le fait que les informations
soient extraites dans une forme XML, elles ne sont pas pour autant types XML. Pour typer les
donnes extraites au format XML, il faut ajouter la clause TYPE. Dans ce cas, les donnes extraites
pourront directement insres dans une colonne de type XML par exemple, car elles sont types
XML. Prenons un exemple concret :
USE Entreprise
SELECT Id_Client, Nom_client
FROM Client
FOR XML AUTO, TYPE

Le rsultat est le suivant au travers de lditeur XML:


<Client
<Client
<Client
<Client
<Client
<Client

Id_Client="1"
Id_Client="2"
Id_Client="3"
Id_Client="4"
Id_Client="5"
Id_Client="6"

Nom_client="CASANOVA" />
Nom_client="RAVAILLE" />
Nom_client="DOLLON" />
Nom_client="VERGNAULT" />
Nom_client="VASSELON" />
Nom_client="HOLLEBEC" />

Si FOR XML AUTO transcrit directement les nuds de votre format relationnel au format XML, il est
possible de dfinir ce chemin de la manire suivante :
USE Entreprise
SELECT Id_Client, Nom_client
FROM Client
FOR XML PATH('Client'), TYPE

Le rsultat est le suivant :


Dotnet France Association - CASANOVA Grgory

14

Travailler avec des donnes de type XML 28/07/2009

<Client>
<Id_Client>1</Id_Client>
<Nom_client>CASANOVA</Nom_client>
</Client>
<Client>
<Id_Client>2</Id_Client>
<Nom_client>RAVAILLE</Nom_client>
</Client>
<Client>
<Id_Client>3</Id_Client>
<Nom_client>DOLLON</Nom_client>
</Client>
<Client>
<Id_Client>4</Id_Client>
<Nom_client>VERGNAULT</Nom_client>
</Client>
<Client>
<Id_Client>5</Id_Client>
<Nom_client>VASSELON</Nom_client>
</Client>
<Client>
<Id_Client>6</Id_Client>
<Nom_client>HOLLEBEC</Nom_client>
</Client>

De plus, lune des rgles essentielle du XML est la suivante : Tout nud doit avoir un seul nud au
niveau suprieur. Cest pourquoi il existe la clause ROOT. En voici un exemple :
USE Entreprise
SELECT Id_Client, Nom_client
FROM Client
FOR XML PATH('Client'),ROOT('ROOT'), TYPE

Le rsultat est le suivant :

Dotnet France Association - CASANOVA Grgory

15

Travailler avec des donnes de type XML 28/07/2009

<ROOT>
<Client>
<Id_Client>1</Id_Client>
<Nom_client>CASANOVA</Nom_client>
</Client>
<Client>
<Id_Client>2</Id_Client>
<Nom_client>RAVAILLE</Nom_client>
</Client>
<Client>
<Id_Client>3</Id_Client>
<Nom_client>DOLLON</Nom_client>
</Client>
<Client>
<Id_Client>4</Id_Client>
<Nom_client>VERGNAULT</Nom_client>
</Client>
<Client>
<Id_Client>5</Id_Client>
<Nom_client>VASSELON</Nom_client>
</Client>
<Client>
<Id_Client>6</Id_Client>
<Nom_client>HOLLEBEC</Nom_client>
</Client>
</ROOT>

4.4 OpenXML
Cette instruction permet de traiter un document XML sous la forme dun jeu de rsultats. Il est
possible dutiliser cette instruction couple un SELECT, INSERT, UPDATE et DELETE. Pour utiliser
cette mthode, il est necessaire de retenir lutilisation de deux procdures stockes qui sont les
suivantes :
-

Sp_xml_preparedocument : permet de prparer un document texte au format XML. Cette


procdure stocke retourne un identifiant qui va servir la mthode OpenXML retrouver
les donnes XML cres.
Sp_xml_removedocument : permet de librer lespace mmoire occup par le document
prpar par la procdure stocke prcdente.

Prenons un exemple :
DECLARE @ID_XML int
DECLARE @XML1 nvarchar(500) =
'<ROOT>
<article nom="Windows Seven" prix="139"></article>
</ROOT>'
exec sp_xml_preparedocument @ID_XML OUT, @XML1
SELECT *
FROM OPENXML(@ID_XML, 'ROOT/*')
WITH (nom nvarchar(50), prix money)
exec sp_xml_removedocument @ID_XML

Le rsultat est le suivant :

Dotnet France Association - CASANOVA Grgory

16

Travailler avec des donnes de type XML 28/07/2009

On stocke dans un premier temps notre document texte dans une variable. On le prpare ensuite
grce la procdure stocke de prparation de documents XML. On applique ensuite OPENXML pour
extraire les donnes contenues dans le document au format XML. Lorsque linstruction SELECT est
termine, on utilise la procdure stocke de suppression de document XML pour librer lespace
mmoire contenant le document prpar.

4.5 OPENROWSET
Cette mthode permet de travailler facilement avec des donnes prsentes lextrieur du
serveur. La source de donnes peut tre le systme de fichier Windows ou encore une autre base
OLEDB. Prenons un exemple :
USE Entreprise
INSERT INTO Donnees_XML
SELECT INFO
FROM (SELECT *
FROM OPENROWSET (BULK 'C:\Users\Grgory Casanova\Desktop\Cours.xml',
SINGLE_BLOB) AS INFO)
AS fichierXML(INFO)

Dans cet exemple, on insre les donnes contenues dans un document XML, prsent sur le systme
de fichier Windows, dans une table contenant une colonne type XML.

Dotnet France Association - CASANOVA Grgory

17

Travailler avec des donnes de type XML 28/07/2009

5 INDEX et XML
Lors dune requte, les donnes types XML peuvent tre volumineuses ou/et nombreuses, et
donc tre couteuses en ressources au niveau serveur. Un index dit principal, sur une colonne XML,
est construit de la mme manire quun index sur une colonne dun type simple. Il existe simplement
des index dit secondaires qui vont servir acclrer la recherche de donnes. Les index secondaires
sont dfinis celons des classes de requtes frquentes :
-

PATH : Pour les requtes portant sur le chemin daccs.


PROPERTY : Pour les requtes portant sur les proprits.
VALUE : Pour les requtes portant sur des valeurs.

Tout dabord, la cration dun index primaire ncessite que la cl primaire de la table qui contient la
colonne XML contienne un index organis. On peut alors crer lindex primaire de cette faon :
CREATE PRIMARY XML INDEX nom_index ON nom_table(Colonne)

Il nest donc possible de crer un index secondaire seulement si un index primaire est dfinit sur
cette colonne. Voici la mthode de construction :
CREATE XML INDEX nom_index_secondaire ON nom_table(Colonne)
USING XML INDEX nom_index_primaire FOR (PATH|PROPERTY|VALUE)

Vous lavez compris avec la structure gnrale, la cration de lindex secondaire ncessite le
rfrencement de lindex primaire. Il est alors possible de choisir les trois options dfinis auparavent :
-

PATH : Ce genre de clause amliore sensiblement les performances dune requte contenant
une clause exist().
PROPERTY : Amliore les performances dune requte utilisant la mthode value().
VALUE : Amliore aussi sensiblement la mthode exist().

Dotnet France Association - CASANOVA Grgory

18

Travailler avec des donnes de type XML 28/07/2009

6 Conclusion
Le type de donnes XML est de plus en plus prsent dans le cadre de lentreprise, et dans le cas
gnral dans le cadre de linformation, en particulier lors de linteraction dapplications clientes avec
la base. Toutes les informations prsentes dans ce chapitre vous permettrons de transformer des
donnes relationnelles en donnes XML et linverse, aussi bien quindexer une colonne de type XML.

Dotnet France Association - CASANOVA Grgory

Vous aimerez peut-être aussi