Les requêtes Oracle XML DB Du modèle relationnelle au modèle Hiérarchique
Sommaire Rappel des modèles Le modèle relationnel Le modèle hiérarchique Leurs différences Oracle XML DB Les types de XMLType Les requêtes sur le XMLType Et pour l avenir
Rappel des modèles Relationnel et hiérarchique
Rappel des modèles Un modèle définis la gestion des données Exemples Modèle relationnel Modèle hiérarchique Modèle objet Modèle déductif Modèle réseaux.
Le modèle relationnel Système de table (Attributs / Tuples) Algèbre relationnel (théorie des ensembles) la notion de domaine la notion de produit cartésien Application : BDD
Le modèle hiérarchique Système d arborescence descendante un point d entrée un ordre de lecture Hiérarchie du modèle 1 2 3 Application : première BDD, XML
Hiérarchique vs. Relationnel Cours etudiant 0..* 1..* cours Dep1 (étudiants) Dep2 (professeur) notes Dep1a (notes)
Oracle XML DB Passage du modèle hiérarchique au relationnel
XMLType Depuis la version 9i d'oracle, un nouveau type de données appelé XMLType a fait son apparition. Il possède un certain nombre de fonctions permettant de créer, extraire et indexer des données XML stockées dans le SGBD Oracle. Depuis la11g, Oracle propose 3 types de stockages avec XML Type : CLOB (8, 8i, 9i, 10g, 11g) : stockage du fichier XML «brut» Object Relational (9i, 10g, 11g) : stockage du shéma XML Binary XML (11g) : stockage binaire, solution à mi-chemin entre le LOB et Object Relational On définis le type de stockage XML à la création de la table contenant le XML
XMLType
XMLType - CLOB CLOB : Character Large Object Permet de stocker des chaines de caractéres (donc du XML) jusqu à 4 Go. L'utilisation des CLOB en SQL est très simple. L'insertion et la récupération d'un CLOB en SQL ne sont en rien différentes d'une colonne de type standard. create table xml_test ( id_clob NUMBER(5) PRIMARY KEY, texte CLOB ); INSERT INTO xml_test VALUES (1,'Hello World'); INSERT INTO xml_test VALUES (2,rpad('*',32000,'*')); SELECT * FROM xml_test; ID_CLOB TEXTE ---------------------------------------------------------------------------------------------- 1 Hello World 2 *************************************************************
XMLType - CLOB Commande création d un XMLType en CLOB CREATE TABLE xml_test ( identifiant NUMBER(5) PRIMARY KEY, Nom VARCHAR2(64) NOY NULL, Doc_xml XMLType ) XMLType Doc_xml STORE AS CLOB INSERT INTO xml_test VALUES ( 1, doc xml 1, XMLType('<?xml version="1.0"?> <cours> <étudiant id= 10 > <nom>dupont</nom> <note>10</note> </étudiant> </cours>' ) );
XMLType - Object Relational objet structuré Génère un objet structuré grâce au schéma XML CREATE TABLE xml_test ( id NUMBER(5) PRIMARY KEY, Doc_xml XMLTYPE ) XMLTYPE Doc_xml STORE AS OBJECT RELATIONAL XMLSCHEMA http://localhost/monschema.xsd ELEMENT «cours»; Certains caractères non significatifs ne sont pas stockés (saut de ligne, espaces de fin,etc.). Nécessite moins d'espace de stockage. Permet de manipuler le XML.
XMLType - Object Relational <schema targetnamespace=http://loacalohost/monschema.xsd xmlns:cmd=http://localhost/monschema.xsd xmlns="http://www.w3.org/2001/xmlschema"> <complextype name="cours"> <sequence> <element name="etudiant"> <complextype> <sequence> <element name="nom"> <simpletype> <restriction base="string"> <maxlength value="255"/> </restriction> </simpletype> </element> <element name="note" type="float"/> </sequence> </complextype> </element> </sequence> </complextype> </schema>'; INSERT INTO xml_test VALUES ( 1, doc xml 1, XMLType('<?xml version="1.0"?> <cours> <étudiant id= 10 > <nom>dupont</nom> <note>10</note> </étudiant> </cours>' ) );
XMLType - Binary XML Utilisation d une structure de donnée binaire dédié au XML (plus efficace que le CLOB) Utilisation d un schéma non obligatoire mais possible. Permet de manipuler le XML. CREATE TABLE xml_test ( id NUMBER(5) PRIMARY KEY, Doc_xml XMLTYPE ) XMLTYPE Doc_xml STORE AS BINARY XML
Les différents XMLType
Les requêtes sur le XMLType Le SQL/XML
Le SQL/XML Un certain nombre de sociétés se sont réunies durant l année 2000 pour standardiser des extensions XML au langage SQL. SQL/XML introduit des types de données XML et ajoute un certain nombre de fonctions à SQL de telle façon qu il soit possible de construire des éléments et des attributs XML à partir de données relationnelles. Le SQL/XML comprend : Type de donnée XMLType Fonctions d extraction XPath Intégration de fonctionnalités XQuery à SQL
Fonctions d extraction XPath ExtractValue reçoit en argument une instance XMLType et une expression XPath et retourne la valeur scalaire des nœuds sélectionnés ExtractXML SELECT extractvalue(doc_xml, '/cours/etudiant/note') as note" FROM xml_test reçoit en argument une instance XMLType et une expression XPath et retourne une instance XML représentant les nœuds sélectionnés Note ----------------------- 10 2 19 15 SELECT extractxml(doc_xml, '/cours/etudiant/note') as note" FROM xml_test Note ----------------------- <note>10</note> <note>2</note> <note>19</note>
Une alternative aux fonctions Xpath Des fonctions propres à oracle Fonction Rôle XMLAgg prend en argument une collection de fragments et retourne un document XML agrégé ; XMLConcat XMLElement reçoit en argument une série d instances XMLType correspondant aux valeurs d une colonne pour les lignes d une table et retourne les instances concaténées ; prend en argument un nom d élément, une collection d attributs optionnels, un contenu d élément et retourne une instance XMLType ; XMLForest convertit la suite de ses argument en XML et retourne un fragment XML concaténation des arguments convertis ; XMLColAttVal converti une valeur de colonne en XML ; XMLSequence transforme une suite de lignes référencées par un curseur en séquence XML ; XMLTransform applique une feuille de style XSL à une instance XMLType et retourne une instance XMLType ;
Intégration de fonctionnalités XQuery à SQL La fonction XMLQuery Permet d'utiliser les résultats obtenus pour créer un nouveau XML select xmlquery ( FROM xml_test; '<nouvelelement>{$note}</nouvelelement>' PASSING extractvalue(doc_xml, '/cours/etudiant/note') as note" RETURNING CONTENT ) <nouvelelement>10</nouvelelement> <nouvelelement>19</nouvelelement> <nouvelelement>2</nouvelelement>
Conclusion Une technologie jeune et encore peu utilisée. En constante évolution. Abordant de nombreuses notions xml: xpath, xquery, schema XML... Très peu documentées dû à la technologie propriétaire.