Vous êtes sur la page 1sur 34

XML et Bases de données

XMLType
Oracle XML DB

S. Magnier - 19/06/2008
Oracle XML DB

 Depuis la version 9i et de façon enrichie dans la


version 10g, Oracle propose des outils pour gérer
des documents XML

 Depuis la 10g il n'y a plus d'extraction car


auparavant il fallait extraire les fichiers avant de
pouvoir les analyser. Pour l'utilisateur, ça n'a
aucune incidence sauf le temps de traitement.

S. Magnier - 19/06/2008
Oracle XML DB

 Un type de données XMLType a été


introduit pour faciliter la gestion
« native » de documents XML

S. Magnier - 19/06/2008
Oracle XML DB
 Cette technologie étend les possibilités de la base de données
relationnelle d'Oracle en proposant toutes les fonctionnalités
d'une base de donnée XML. Le module Oracle XML DB offre une
structure indépendante de stockage et de gestion de données
XML. Il propose les fonctionnalités suivantes :

 Un type de données W3C qui est utilisé pour stocker et gérer du contenu
XML.
 Une collection de méthodes et des opérateurs SQL permettant d'agir sur du
XML.
 La possibilité d'enregistrer un schéma conforme au W3C dans la base de
données Oracle.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Le type XMLType permet de représenter un document XML


dans la base de données et il est accessible en SQL
(XML/SQL)

 Le type de données XMLType possède des méthodes pour


créer, extraire et indexer les données XML stockées dans la
base.

 Ces fonctionnalités sont aussi disponibles via des API PL/SQL


et Java.

 Le type XMLType peut aussi être utilisé dans des procédures


stockées PL/SQL.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Le type XMLType peut être utilisé comme type


pour les colonnes d’une table ou d’une vue.

 L’API XMLType fournit plusieurs


fonctionnalités pour « travailler » sur le
contenu d’un document XML.

 Plusieurs de ces méthodes sont aussi fournies en


fonctions SQL.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType
 Le type XMLType permet le stockage persistant de
documents XML et :

 L’interrogation via des requêtes SQL d’une partie ou de la


totalité du document

 XML/SQL fonctions exitsNode, extract

 L’utilisation du langage XPath pour accéder à des parties du


document dans les fonctions XML/SQL (existNode, extract)

 Un typage « contrôlé » des données de type XMLType

 Des méthodes d’indexation des documents (XPath)

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Le XMLType offre une meilleure séparation


des applications et des modèles de
stockage.

 L’utilisation de XMLType au lieu d’un CLOB


ou d’un stockage relationnel permet une
meilleure évolution des bases de données.

 D’autres fonctionnalités sont en cours de


développement pour améliorer/optimiser la
gestion de documents XML.
S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Le type XMLType peut être stocké de deux


façons:

 Dans des gros objets (LOBs). Le document XML


« original » est conservé.
 On parle de « fidélité au document »

 De façon structurée, dans des tables et des vues.


Le stockage conserve la structure du document.
 On parle de « fidélité DOM (Document Object Model) »

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Avantages et inconvénients des 2 modes de stockage.

 Intégrité des données


 LOB -> maintien du document original, mode structuré -> maintien de la
structure DOM

 Performances
 LOB -> médiocres pour DML, mode structuré-> excellentes performances

 SQL Accès
 LOB -> quelques méthodes, mode structuré -> bon accès via SQL
fonctions, index, contraintes, …

 Espace
 LOB -> espace important, mode structuré -> espace plus optimisé

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 On utilise un stockage en CLOB,

 Si il est seulement nécessaire de stocker


et d’accéder au document en entier
 Quelques méthodes de recherche
 S’il n’est pas nécessaire de faire des
mises à jour de parties de documents
seulement

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Créationd’une table avec une colonne


de type XMLType
 CREATE TABLE table_with_xml_column
(filename VARCHAR2(64),
xml_document XMLType);

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Chargement d’un document XML


 En utilisant SQL ou PLSQL

 Les constructeurs de type XMLType permettent la


création d’instances à partir de différentes sources
 Varchar, CLOB ou BFILE

 Le type d’encodage peut être précisé lors du


chargement du document XML
 « Character set id (csid) »

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Exemple d’insertion d’un document XML avec un


gros objet de type BFILE
 Création du répertoire Oracle
 CREATE DIRECTORY xmldir AS
path_to_folder_containing_XML_file';

 Insertion
 INSERT INTO table_with_xml_column (filename,
xml_document) VALUES ('test.xml',
XMLType(bfilename('XMLDIR', 'test.xml'),
nls_charset_id('AL32UTF8')));

 Le dernier paramètre indique le mode d’encodage du fichier


à lire.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Exemple d’insertion directement avec une


chaîne de caractères

 INSERT INTO table_with_xml_column


(filename, xml_document) VALUES
('test.xml', XMLType('
<etudiant>
<nom>Magnier</nom> </etudiant> '));
S. Magnier - 19/06/2008
XML et Bases de données
XMLType
 La commande suivante va insérer dans une colonne de type
XMLType un document XML :

insert into COMMANDES (comm) values


(sys.XMLTYPE.createXML ('<commande>…</commande>'));

 La fonction createXML() va convertir les balises passées en


paramètre en un contenu de type XMLType.

INSERT INTO mytable2 VALUES


(XMLType(bfilename('XMLDIR',
‘test.xml'),nls_charset_id('AL32UTF8')));

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Opérations disponibles XMLType (quel


que soit le mode de stockage)

 Les méthodes getClobVal(), getStringVal()


et getBlobVal(csid)

 Permettent de récupérer des données


XML respectivement comme un CLOB,
VARCHAR, BLOB
S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Récupération du document XML

 SELECT x.OBJECT_VALUE.getCLOBVal()
FROM xml_table x;

 SELECT x.xml_document.getCLOBVal() FROM


table_with_xml_column x;

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Il est possible d’interroger des données XML


et d’en extraire des parties en utilisant les
fonctions SQL
 existsNode,
 extract et extractValue

 Ces méthodes utilisent un sous ensemble


du langage XPath du W3C Consortium pour
naviguer dans le document.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 EXISTSNODE (XMLType_instance,
XPath_string [, namespace_string ] )

 Cette
fonction vérifie si le chemin
XPath donné, référence au moins un
nœud élément ou texte du document
XML

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Exemple
 Récupération de tous les documents XML
ayant un noeud ‘Etudiant/Nom’ avec la
valeur = "Magnier" dans la table Etudiants
(de type XMLType)

 SELECT OBJECT_VALUE FROM Etudiants


WHERE existsNode(OBJECT_VALUE,
'/Etudiant[Nom="Magnier"]') = 1;

S. Magnier - 19/06/2008
XML et Bases de données
XMLType
 Mise à jour de XMLType
 SELECT Nom,
EXTRACT(Credit, '/Etudiant/Credit')
"Nombre de Credits"
FROM Etudiants
WHERE Nom = 'Magnier' AND Prenom='Sebastien' ;

Nom Nombre de Credits


-------------------- --------------------
Magnier <Credit>1</Credit>

S. Magnier - 19/06/2008
XML et Bases de données
XMLType
 UPDATE Etudiants SET Credit =
UPDATEXML(Credit,
'/Etudiant/Credit/text()',4)
WHERE Nom = 'Magnier' AND
Prenom = 'Sebastien';

1 row updated.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType
 SELECT Nom,
EXTRACT(Credit, '/Etudiant/Credit')
"Nombre de Credits"
FROM Etudiants
WHERE Nom = 'Magnier' AND
Prenom='Sebastien' ;

Nom Nombre de Credits


-------------------- --------------------
Magnier <Credit>4</Credit>

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 On constate donc que c’est une fonction


assez compliquée d’utilisation.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Création d’un index pour optimiser


l’utilisation de la fonction existNode
 CREATE INDEX table_index1_XML ON
xml_table (OBJECT_VALUE) INDEXTYPE
IS CTXSYS.ctxxpath;

 CREATE INDEX table_index2_XML ON


table_with_xml_column (xml_document )
INDEXTYPE IS CTXSYS.ctxxpath;
S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Lafonction Extract est similaire à la


fonction existsNode mais peut
retourner un fragment du document
XML.

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Récupération uniquement des références des documents XML


sélectionnés
 SELECT extract(OBJECT_VALUE,
'/Etudiant/NIP') "NIP"
FROM Etudiants
WHERE existsNode(OBJECT_VALUE,
'/Etudiant[Nom="Magnier"]')=1;

 Résultat de la forme
 NIP ----------------------------
<NIP>10502216</NIP>
<NIP>10542356</NIP>

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 La fonction extractValue permet de récupérer la valeur d’un noeud


décrit par le chemin XPath.

 Elle retourne un résultat de type VARCHAR2 par défaut sauf avec


des documents qui ont un schéma associé.

 EXTRACTVALUE (XMLType_instance, XPath_string [,


namespace_string ] )

S. Magnier - 19/06/2008
XML et Bases de données
XMLType

 Récupération des valeurs des références des documents


sélectionnés
SELECT extractValue(OBJECT_VALUE,
'Etudiant/NIP') "NIP"
FROM Etudiants
WHERE existsNode(OBJECT_VALUE,
'/Etudiant [Nom="Magnier"]')=1;

 Résultats de la forme
 NIP ----------------------------
10502216
10542356

S. Magnier - 19/06/2008
Oracle XML DB
 Oracleoffre une architecture complète
qui permet
 La gestion de documents XML avec des
fonctionnalités de stockage, recherche,
indexation, mise à jour.
 Le développement d’applications avec des
accès http ou ftp à la base de données.

S. Magnier - 19/06/2008
Oracle XML DB
 Quand des schémas XML sont enregistrés avec
Oracle XML DB,
 un ensemble de tables par défaut est créé et
utilisé pour stocker les documents
 Ces documents peuvent vus et accéder via un
répertoire (repository)
 Les tables et colonnes XMLType peuvent être
stockées comme :
 Des gros objets

 Des ensembles d’objets structurés

S. Magnier - 19/06/2008
Oracle XML DB
 Les vues peuvent être stockées dans des tables
locales ou distantes (remote)

 Les tables et les vues peuvent être indexées


 B*Tree, Oracle Text, …

 Le répertoire (repository) peut être accédé via


 Des connexions http et ftp,

 SQL avec des services Oracle (incluant jdbc)

S. Magnier - 19/06/2008
Conclusion
 Oracle fournit de plus en plus d’outils (type de
données, API, architecture complète, …)
 Pour la manipulation de documents XML

 Plusieurs technologies sont disponibles soit


directement via la base de données, soit par des
applications.
 Le développement important de ces outils confirme
l’importance de XML comme format d’échanges
d’informations avec une gestion de plus en plus
performantes des documents.

S. Magnier - 19/06/2008