20 Donnes semistructures et XML 09012022 Robert Godin
20 Données semistructurées et XML 09/01/2022 © 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 – 09/01/2022 DTD, XML schéma © Robert Godin. Tous droits réservés. 2
20. 1 09/01/2022 Introduction à XML © Robert Godin. Tous droits réservés. 3
Références 09/01/2022 © 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 – 09/01/2022 respecte sa grammaire © Robert Godin. Tous droits réservés. 5
20. 2 Espace de nom XML (XML namespace) 09/01/2022 © Robert Godin. Tous droits réservés. 6
20. 3 XML schema n Limites des DTD – – – 09/01/2022 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 09/01/2022 © 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 09/01/2022 © 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] 09/01/2022 © Robert Godin. Tous droits réservés. 10
20. 5 XPointer 09/01/2022 © Robert Godin. Tous droits réservés. 11
20. 6 Contraintes de clé 09/01/2022 © Robert Godin. Tous droits réservés. 12
Exemple d’instance valide 09/01/2022 © 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 09/01/2022 © 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, … 09/01/2022 © 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) – 09/01/2022 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 09/01/2022 © 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 n SGXML – natif Modèle BD = XML n Extension – 09/01/2022 SGBD 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# 09/01/2022 © Robert Godin. Tous droits réservés. 19
XML SQL Utility (XSU) : exemple de transformation SQL->XML 09/01/2022 © Robert Godin. Tous droits réservés. 20
Fonctions SQL/XML (SQLX) de génération de XML 09/01/2022 © 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 09/01/2022 © 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é (conversion en scalaire SQL) Instance XMLType 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 09/01/2022 © 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 09/01/2022 © 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> 09/01/2022 © 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> 09/01/2022 © 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 5 6 7 return $c/no. Commande' PASSING OBJECT_VALUE RETURNING CONTENT) AS Output FROM Commandes. XML / OUTPUT ----------------------------------------<no. Commande>1</no. Commande> <no. Commande>5</no. Commande> 09/01/2022 © 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> 09/01/2022 © 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> 09/01/2022 © 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 > 09/01/2022 © 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 09/01/2022 © Robert Godin. Tous droits réservés. 31
Support de schéma XML 09/01/2022 © 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 – 09/01/2022 Exploitation de l’optimiseur relationnel © Robert Godin. Tous droits réservés. 33
BD de documents n n Modèle (clé, document) API simple – n n Requêtes simples sur le contenu Scalabilité élastique Transactions limitées Document – n Put(clé, document), Get(clé), Update(clé), Delete(clé) Attribut : valeur, XML, JSON Couch. DB, Mongo. DB, Simple DB © Robert Godin. Tous droits réservés. 09/01/2022 34
- Slides: 34