20 Donnes semistructures et XML 28102020 Robert Godin
20 Données semistructurées et XML 28/10/2020 © Robert Godin. Tous droits réservés. 1
Pourquoi XML n HTML – – n Langage de balisage pour la présentation Balise définit format XML (e. Xtensible Markup Language) – – Balisage flexible en fonction de l’application Balise peut servir à spécifier structure et sémantique des données n – – Présentation à part (XSL) Représentation de données semi-structurées n – n Conformité optionnelle à un schéma Facilite le traitement informatique et humain Format normalisé d’échange – – n Facilite l’interprétation des données (par programme ou humain) couplage faible entre systèmes SOAP : sérialisation des objets en XML Schémas – 28/10/2020 DTD, XML schéma © Robert Godin. Tous droits réservés. 2
20. 1 28/10/2020 Introduction à XML © Robert Godin. Tous droits réservés. 3
Références 28/10/2020 © Robert Godin. Tous droits réservés. 4
Intégrité d’un document XML n Document XML bien formé (wellformed) – – n entête correcte un seul élément racine balises sont correctement imbriquées éléments non vides doivent avoir une balise de début et de fin (contrairement à HTML) Document XML valide – 28/10/2020 respecte sa grammaire © Robert Godin. Tous droits réservés. 5
20. 2 Espace de nom XML (XML namespace) 28/10/2020 © Robert Godin. Tous droits réservés. 6
20. 3 XML schema n Limites des DTD – – – 28/10/2020 Types de base Intégration faible de la notion d’espace de noms Support faible de clé et d’intégrité référentielle Ordre significatif Le nom d’un élément est global Syntaxe non conforme à XML © Robert Godin. Tous droits réservés. 7
Exemple de schéma XML : http: //www. info 2. uqam. ca/~godin/XML/schema. Commandes. XML. xsd 28/10/2020 © Robert Godin. Tous droits réservés. 8
Exemple d’instance du schéma : http: //www. info 2. uqam. ca/~godin/XML/Commandes. Avec. Schema. xml 28/10/2020 © Robert Godin. Tous droits réservés. 9
20. 4 Langage de requête XPath /Commandes. XML/Liste. Commandes/Commande[1] /child: : Commandes. XML/child: : Liste. Commandes/child: : Commande[position()=1] 28/10/2020 © Robert Godin. Tous droits réservés. 10
20. 5 XPointer 28/10/2020 © Robert Godin. Tous droits réservés. 11
20. 6 Contraintes de clé 28/10/2020 © Robert Godin. Tous droits réservés. 12
Exemple d’instance valide 28/10/2020 © Robert Godin. Tous droits réservés. 13
20. 7 Langage de requête XML Query (XQuery) Contient XPath n Input : ensemble de documents XML n Sources diverses n Peut produire du XML en sortie n 28/10/2020 © Robert Godin. Tous droits réservés. 14
Expressions XQuery n Expression primaire – n Séquence – n n « , » est le constructeur Expression XPath Expression FLWOR – n litéral, variable, fonction FOR, LET, WHERE, ORDER BY, RETURN Expression conditionnelle, arithmétique, relationnelle, régulière, quantifiée, … 28/10/2020 © Robert Godin. Tous droits réservés. 15
20. 8 Traitement d’un document XML avec Java API for XML Processing (JAXP) http: //java. sun. com/xml/jaxp/index. jsp n Interface Document Object Model (DOM) – 28/10/2020 instance XML -> arbre de Node Java © Robert Godin. Tous droits réservés. 16
Java Architecture for XML Binding (JAXB) http: //java. sun. com/xml/jaxb/ n Schéma XML -> classes métier Java n – n Java binding compiler Instance XML -> objets métier Java 28/10/2020 © Robert Godin. Tous droits réservés. 17
20. 9 Système de Gestion de XML n Application centrée donnée – n XML = format d’échange avec BD Application centrée document – XML stocké dans SGXML natif – Modèle BD = XML n Extension SGBD – 28/10/2020 Au dessus du modèle relationnel © Robert Godin. Tous droits réservés. 18
20. 10 Oracle et XML : Oracle XML DB n Application centrée données – – Mécanismes de transformation SQL<->XML SQL Utility (XSU) : API Java/JDBC SQL/XML Type XMLType avec stockage objet-relationnel n n Application centrée documents (SGXML) – – n XMLType avec conformité facultative à un schéma XML Stockage CLOB ou binaire (11 g, après parsage) ou hybride Requêtes sur XMLType – n Fonctions SQL pour XPath et XQuery XML DB repository – Vue des documents sous forme de répertoire hiérarchique n n Conversion selon annotations du schéma XML Accès HTTP, FTP, Web. DAV APIs Java/JDBC, PL/SQL, . NET/C# 28/10/2020 © Robert Godin. Tous droits réservés. 19
XML SQL Utility (XSU) : exemple de transformation SQL->XML 28/10/2020 © Robert Godin. Tous droits réservés. 20
Fonctions SQL/XML (SQLX) de génération de XML 28/10/2020 © Robert Godin. Tous droits réservés. 21
Fonctions SGXML Stockage natif CLOB par défaut - requêtes traitées par conversion DOM à la volée 28/10/2020 © Robert Godin. Tous droits réservés. 22
Requête XPath sur XMLType avec extract. Value() Fonction qui retourne la valeur de l’élément XML sélectionné Instance XMLType (conversion en scalaire SQL) Expression XPath SQL> SELECT extract. Value(value(C), '/Commande/no. Commande') 2 FROM Commandes. XML C 3 WHERE extract. Value(value(C), '/Commande/no. Client') = 10 4 / EXTRACTVALUE(C), '/COMMANDE/NOCOMMANDE') ----------------------------------------1 5 28/10/2020 © Robert Godin. Tous droits réservés. 23
Fonction extract() SQL> SELECT extract(value(C), '/Commande/no. Commande/text()') 2 FROM Commandes. XML C 3 WHERE extract(value(C), '/Commande/no. Client/text()'). getnumberval() = 10 4 / EXTRACT(VALUE(C), '/COMMANDE/NOCOMMANDE/TEXT()') ----------------------------------------1 5 28/10/2020 © Robert Godin. Tous droits réservés. 24
Fonction exists. Node() SQL> SELECT extract(value(C), '/Commande/no. Commande/text()') 2 FROM Commandes. XML C 3 WHERE exists. Node(value(C), '/Commande[no. Client="10"]') = 1 4 / EXTRACT(VALUE(C), '/COMMANDE/NOCOMMANDE/TEXT()') ----------------------------------------1 5 SQL> SELECT extract(value(C), '/Commande/no. Commande') 2 FROM Commandes. XML C 3 WHERE exists. Node(value(C), '/Commande[no. Client="10"]') = 1 4 / EXTRACT(VALUE(C), '/COMMANDE/NOCOMMANDE') ----------------------------------------<no. Commande>1</no. Commande> <no. Commande>5</no. Commande> 28/10/2020 © Robert Godin. Tous droits réservés. 25
Fonction SQL/XML : XMLQuery Séquence XQuery SQL> SELECT XMLQuery('(1, 2+3, "ABC", <tag>blabla</tag>)' RETURNING CONTENT) AS Output FROM DUAL 2 / OUTPUT ----------------------------------------1 5 ABC<tag>blabla</tag> 28/10/2020 © Robert Godin. Tous droits réservés. 26
Requête FLWOR La variable $c itère sur chacun des éléments spécifiés par le chemin (ici un seul élément Commande) Contexte de la requête est la SQL> SELECT XMLQuery( valeur de l’objet XMLType 2 'for $c in /Commande 3 where $c/no. Client = "10" de la table d’objets 4 return $c/no. Commande' 5 PASSING OBJECT_VALUE RETURNING CONTENT) AS Output 6 FROM Commandes. XML 7 / OUTPUT ----------------------------------------<no. Commande>1</no. Commande> <no. Commande>5</no. Commande> 28/10/2020 © Robert Godin. Tous droits réservés. 27
Itération sur les éléments ligne. Commande SQL> SELECT XMLQuery( 2 'for $l in /Commande/ligne. Commande 3 where $l/no. Article > 20 4 return $l/no. Article' 5 PASSING OBJECT_VALUE RETURNING CONTENT) 6 FROM Commandes. XML 7 / XMLQUERY('FOR$LIN/COMMANDE/LIGNECOMMANDEWHERE $L/NOARTICLE>20 RETURN$L/NOARTICLE'P ----------------------------------------<no. Article>70</no. Article><no. Article>90</no. Article> <no. Article>70</no. Article> 28/10/2020 © Robert Godin. Tous droits réservés. 28
Construction explicite de XML en output SQL> SELECT XMLQuery( {} demande l’évaluation 2 'for $l in /Commande/ligne. Commande 3 where $l/no. Article > 20 4 return <numero. Article>{$l/no. Article/text()}</numero. Article>' 5 PASSING OBJECT_VALUE RETURNING CONTENT) 6 FROM Commandes. XML 7 / XMLQUERY('FOR$LIN/COMMANDE/LIGNECOMMANDEWHERE$L /NOARTICLE>20 RETURN<NUMEROARTICLE ----------------------------------------<numero. Article>70</numero. Article><numero. Article>90</numero. Article> <numero. Article>70</numero. Article> 28/10/2020 © Robert Godin. Tous droits réservés. 29
Où est l’erreur ? SQL> SELECT XMLQuery( 2 'for $c in /Commande 3 where $c/ligne. Commande/no. Article > 20 4 return $c/ligne. Commande/no. Article' 5 PASSING OBJECT_VALUE RETURNING CONTENT) 6 FROM Commandes. XML 7 / XMLQUERY('FOR$CIN/COMMANDEWHERE$C/LIGNECOMMANDE/NOA RTICLE>20 RETURN$C/LIGNECOMMAN ----------------------------------------<no. Article>10</no. Article><no. Article>70</no. Article><no. Article>90</no. Article > <no. Article>10</no. Article><no. Article>70</no. Article><no. Article>20</no. Article > 28/10/2020 © Robert Godin. Tous droits réservés. 30
Indexage avec stockage CLOB ou binaire n n Plusieurs types d’index supportés Indexage sur chemin XPath particulier – – n Indexage systématique de tous les chemins – – – n n create unique index Index. No. Commande on Commandes. XML (extract. Value(object_value, '/Commande/No. Commande')) la balise doit être unique dans le document create index Index. Commandes. XML on Commandes. XML (object_value) indextype is CTXSYS. CTXXPATH réécriture en HASPATH/INPATH (voir indexage Context au chap. 21) plus coûteux que sur fonction XPath Indexage plein texte des valeurs textuelles (voir chap. 21) 11 g : XMLIndex remplace CTXXPATH 28/10/2020 © Robert Godin. Tous droits réservés. 31
Support de schéma XML 28/10/2020 © Robert Godin. Tous droits réservés. 32
Stockage objet-relationnel Annotations XML pour stockage objetrelationnel n Vue XMLType sur stockage objetrelationnel n Attributs xdb: SQLName, xdb: SQLType dans le schéma XML n Réécriture des requêtes XPath par l’optimiseur n – 28/10/2020 Exploitation de l’optimiseur relationnel © Robert Godin. Tous droits réservés. 33
BD de documents n n Modèle (clé, document) API de base – n Document semi-structuré – – n n n Put(clé, document), Get(clé), Update(clé), Delete(clé) Sans schéma Attribut : valeur, XML, JSON, … Requêtes simples sur le contenu Support d’index Scalabilité élastique Transactions limitées Couch. DB, Mongo. DB, Simple DB, … 28/10/2020 © Robert Godin. Tous droits réservés. 34
- Slides: 34