34
26/06/22 © Robert Godin. Tous droits réservés. 1 20 Données semi- structurées et XML

27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Embed Size (px)

Citation preview

Page 1: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 1

20 Données semi-structurées et XML

Page 2: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 2

Pourquoi XML HTML

– Langage de balisage pour la présentation– Balise définit format

XML (eXtensible Markup Language)– Balisage flexible en fonction de l’application– Balise peut servir à spécifier structure et sémantique des données

Facilite l’interprétation des données (par programme ou humain)– Présentation à part (XSL)– Représentation de données semi-structurées

Conformité optionnelle à un schéma– Facilite le traitement informatique et humain

Format normalisé d’échange– couplage faible entre systèmes– SOAP : sérialisation des objets en XML

Schémas– DTD, XML schéma

Page 3: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 3

20.1 Introduction à XML<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <!-- Catalogue de la pépinière Plein de Foin --> <!DOCTYPE Catalogue [ <!ELEMENT Catalogue (Article)+> <!ELEMENT Article (noArticle,description,prixUnitaire)> <!ELEMENT noArticle (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT prixUnitaire (#PCDATA)>]> <Catalogue> <Article> <noArticle>10</noArticle> <description>Cèdre en boule</description> <prixUnitaire>10.99</prixUnitaire> </Article> <Article> <noArticle>20</noArticle> <description>Sapin</description> <prixUnitaire>12.99</prixUnitaire> </Article> … </Catalogue>

<C ata logue>

<A rtic le>

<noA rtic le> <descrip tion> <prixU n ita ire>

10 C èdre en bou le 10,99

<A rtic le>

<noA rtic le> <descrip tion> <prixU n ita ire>

20 S apin 12,99

...

Page 4: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 4

Références<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> … <CommandesXML> <ListeCommandes> <Commande> <noCommande>1</noCommande> <dateCommande>01/06/2000</dateCommande> <noClient>10</noClient> <ligneCommande idLigneCommande="idLig1" leIdArticle="idArt1"> <quantite>10</quantite> </ligneCommande> <ligneCommande idLigneCommande="idLig2" leIdArticle="idArt6"> <quantite>5</quantite> </ligneCommande> <ligneCommande idLigneCommande="idLig3" leIdArticle="idArt9"> <quantite>1</quantite> </ligneCommande> </Commande> </ListeCommandes> <Catalogue> <Article idArticle="idArt1" lesIdCommande="idLig1 idLig4"> <noArticle>10</noArticle> <description>Cèdre en boule</description> <prixUnitaire>10.99</prixUnitaire> </Article> … </Catalogue> </CommandesXML>

<C ata logue>

<A rtic le>

<noA rtic le> <descrip tion> <prixU n ita ire>

10 C èdre en bou le 10,99

...

<ListeC om m andes>

<C om m ande>

idA rtic le lesIdC om m ande

idA rt1 idL ig1 idL ig4

<noC om m ande>

1

<dateC om m ande>

01/06/2000

<noC lient>

10

<ligneC om m ande>

idL igneC om m ande

idL ig1

le IdA rtic le

idA rt1

<quantite>

10

...

...

Page 5: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 5

Intégrité d’un document XML

Document XML bien formé (well-formed)– 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– respecte sa grammaire

Page 6: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 6

20.2 Espace de nom XML (XML namespace)

<?xml version="1.0"?> <CommandesXML xmlns="http:/ / www.pleindefoin.com/ espaceDeNomCommande" xmlns:catns="http:/ / www.pleindefoin.com/ espaceDeNomCatalogue"> <ListeCommandes> <Commande> <noCommande>1</ noCommande> <dateCommande>01/06/ 2000</ dateCommande> … </ ligneCommande> </ Commande> < catns:Catalogue> <catns:Article idArticle = "idArt1" commandeDans = "idLig1" > <catns:noArticle>10</ catns:noArticle> <catns:description>Cèdre en boule</ catns:description> <catns:prixUnitaire>10.99</ catns:prixUnitaire> </ catns:Article> … </ catns:Catalogue> </ CommandesXML>

Page 7: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 7

20.3 XML schema

Limites des DTD– 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

Page 8: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 8

Exemple de schéma XML :

http://www.info2.uqam.ca/~godin/XML/schemaCommandesXML.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:comm="http://www.info.uqam.ca/~godin/XML/schemaCommandesXML" targetNamespace="http://www.info.uqam.ca/~godin/XML/schemaCommandesXML" elementFormDefault="qualified"> <xsd:element name="CommandesXML" type="comm:TypeCommandesXML"/> <xsd:complexType name="TypeCommandesXML"> <xsd:sequence> <xsd:element name="ListeCommandes" type="comm:TypeListeCommandes"/> <xsd:element name="Catalogue" type="comm:TypeCatalogue"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="TypeListeCommandes"> <xsd:sequence> <xsd:element name="Commande" type="comm:TypeCommande" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="TypeCommande"> <xsd:sequence> <xsd:element name="noCommande" type="xsd:positiveInteger"/> <xsd:element name="dateCommande" type="xsd:date"/> <xsd:element name="noClient" type="xsd:positiveInteger"/> <xsd:element name="ligneCommande" minOccurs="1" maxOccurs="unbounded"> … </xsd:schema>

Page 9: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 9

Exemple d’instance du schéma :http://www.info2.uqam.ca/~godin/XML/CommandesAvecSchema.xml

<?xml version="1.0"?> <CommandesXML xmlns="http://www.info.uqam.ca/~godin/XML/schemaCommandesXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.info.uqam.ca/~godin/XML/schemaCommandesXML http://www.info.uqam.ca/~godin/XML/schemaCommandesXML.xsd"> <ListeCommandes> <Commande> <noCommande>1</noCommande> <dateCommande>2000-06-01</dateCommande> <noClient>10</noClient> <ligneCommande idLigneCommande="idLig1" leIdArticle="idArt1"> <quantite>10</quantite> </ligneCommande> <ligneCommande idLigneCommande="idLig2" leIdArticle="idArt6"> <quantite>5</quantite> </ligneCommande> <ligneCommande idLigneCommande="idLig3" leIdArticle="idArt9"> <quantite>1</quantite> </ligneCommande> </Commande> … </CommandesXML>

Page 10: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 10

20.4 Langage de requête XPath

<ListeC om m andes>

<C om m ande>

...

<C om m andesXM L>

/CommandesXML/ListeCommandes/Commande[1]

/child::CommandesXML/child::ListeCommandes/child::Commande[position()=1]

Page 11: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 11

20.5 XPointer

<link xmlns:xlink="http://www.w3.org/2000/xlink" xlink:type="simple" xlink:href="http://www.info.uqam.ca/~godin/XML/CommandesAvecSchema.xml#xpointer(//Commande[1])"> </link>

Page 12: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 12

20.6 Contraintes de clé

<?xml version="1.0"?> <!-- Exemple de schéma avec contraintes de clé --> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:comm="http://www.info.uqam.ca/~godin/XML/schemaCommandesAvecKey" targetNamespace="http://www.info.uqam.ca/~godin/XML/schemaCommandesAvecKey" elementFormDefault="qualified"> <xsd:element name="CommandesXML" type="comm:TypeCommandesXML"> <xsd:key name="CPpourCatalogue"> <xsd:selector xpath="Catalogue/Article"/> <xsd:field xpath="noArticle"/> </xsd:key> <xsd:keyref name="CEnoArticleDansLigneCommande" refer="comm:CPpourCatalogue"> <xsd:selector xpath="ListeCommandes/Commande/ligneCommande"/> <xsd:field xpath="noArticle"/> </xsd:keyref> </xsd:element> … </xsd:schema>

Page 13: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 13

Exemple d’instance valide<?xml version="1.0"?> <CommandesXML xmlns="http://www.info.uqam.ca/~godin/XML/schemaCommandesAvecKey" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.info.uqam.ca/~godin/XML/schemaCommandesAvecKey http://www.info.uqam.ca/~godin/XML/schemaCommandesAvecKey.xsd"> <ListeCommandes> <Commande> <noCommande>1</noCommande> <dateCommande>2000-06-01</dateCommande> <noClient>10</noClient> <ligneCommande> <noArticle>10</noArticle> <quantite>10</quantite> </ligneCommande> … <Catalogue> <Article> <noArticle>10</noArticle> <description>Cèdre en boule</description> <prixUnitaire>10.99</prixUnitaire> </Article> … </CommandesXML>

Page 14: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 14

20.7 Langage de requête XML Query (XQuery) Contient XPath Input : ensemble de documents

XML Sources diverses Peut produire du XML en sortie

Page 15: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Expressions XQuery

Expression primaire– litéral, variable, fonction

Séquence– « , » est le constructeur

Expression XPath Expression FLWOR

– FOR, LET, WHERE, ORDER BY, RETURN Expression conditionnelle, arithmétique,

relationnelle, régulière, quantifiée, …

11/04/23 © Robert Godin. Tous droits réservés. 15

Page 16: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 16

20.8 Traitement d’un document XML avec Java

API for XML Processing (JAXP)http://java.sun.com/xml/jaxp/index.jsp

Interface Document Object Model (DOM)– instance XML -> arbre de Node Java DocumentBuilderFactory unDocBuildFact = DocumentBuilderFactory.newInstance();

unDocBuildFact.setValidating(true); unDocBuildFact.setIgnoringElementContentWhitespace(true); / / Création d'un DocumentBuilder DocumentBuilder unDocumentBuilder = unDocBuildFact.newDocumentBuilder(); / / Parsage du document Document unDocument = unDocumentBuilder.parse("C:/ forte4j/ Development/ LivreJava/ Articles.xml"); Vector vecteurDeArticles = new Vector(); Node unElementCatalogue = unDocument.getDocumentElement(); / / racine <Catalogue> / / Itérer sur les noeuds <Article> qui sont les enfants de <Catalogue> NodeList listeNodeArticles = unElementCatalogue.getChildNodes(); int tailleListe = listeNodeArticles.getLength(); for (int i = 0; i < tailleListe ; i++) { Node unNodeArticle = listeNodeArticles.item(i); / / ELEMENT <Article>

Page 17: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 17

Java Architecture for XML Binding (JAXB) http://java.sun.com/xml/jaxb/ Schéma XML -> classes métier

Java– Java binding compiler

Instance XML -> objets métier Java

Page 18: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 18

20.9 Système de Gestion de XML Application centrée donnée

– XML = format d’échange avec BD Application centrée document

– XML stocké dans SGXML SGXML natif

– Modèle BD = XML Extension SGBD

– Au dessus du modèle relationnel

Page 19: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 19

20.10 Oracle et XML : Oracle XML DB Application centrée données

– Mécanismes de transformation SQL<->XML– XML SQL Utility (XSU) : API Java/JDBC– SQL/XML– Type XMLType avec stockage objet-relationnel

Conversion selon annotations du schéma XML

Application centrée documents (SGXML)– XMLType avec conformité facultative à un schéma XML – Stockage CLOB ou binaire (11g, après parsage) ou hybride

Requêtes sur XMLType– Fonctions SQL pour XPath et XQuery

XML DB repository– Vue des documents sous forme de répertoire hiérarchique

Accès HTTP, FTP, WebDAV APIs Java/JDBC, PL/SQL, .NET/C#

Page 20: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 20

XML SQL Utility (XSU) : exemple de transformation SQL->XMLimport java.sql.*; import java.math.*; import oracle.xml.sql.query.*; import oracle.jdbc.*; import oracle.jdbc.driver.*; public class ExempleSelectEnXML { public static void main(String args[]) throws Exception { UsineConnection uneUsineConnection = new UsineConnection(); Connection uneConnection = uneUsineConnection.getConnectionSansAutoCommit( "oracle.jdbc.driver.OracleDriver", "jdbc:oracle:thin:@localhost:1521:ora9i", "godin","oracle"); // Création de la requête OracleXMLQuery OracleXMLQuery unOracleXMLQuery = new OracleXMLQuery(uneConnection,"SELECT * FROM Article" ); // Paramétrage du XML document unOracleXMLQuery.setRowsetTag("Catalogue"); // Spécifie la balise racine unOracleXMLQuery.setRowTag("Article"); // Balise pour chacune des lignes // Extraction du document XML sous forme de String String stringXML = unOracleXMLQuery.getXMLString(); System.out.println(" Document XML:\n"+stringXML); } }

Page 21: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 21

Fonctions SQL/XML (SQLX) de génération de XML

SQL> SELECT XMLELEMENT("Article", 2 XMLELEMENT("noArticle", a.noArticle), 3 XMLELEMENT("description", a.description), 4 XMLELEMENT("prixUnitaire", a.prixUnitaire)) AS "Catalogue" 5 FROM Article a 6 / Catalogue -------------------------------------------------------------------------------- <Article> <noArticle>10</noArticle> <description>Cèdre en boule</description> <prixUnitaire>10,99</prixUnitaire> </Article> <Article> <noArticle>20</noArticle> <description>Sapin</description> <prixUnitaire>12,99</prixUnitaire> </Article> …

Page 22: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 22

Fonctions SGXMLSQL> CREATE TABLE CommandesXML OF XMLType 2 / Table created.

SQL> INSERT INTO CommandesXML VALUES (XMLType(' 2 <Commande> 3 <noCommande>1</noCommande> 4 <dateCommande>2000-06-01</dateCommande> 5 <noClient>10</noClient> 6 <ligneCommande> 7 <noArticle>10</noArticle> 8 <quantite>10</quantite> 9 </ligneCommande> 10 <ligneCommande> 11 <noArticle>70</noArticle> 12 <quantite>5</quantite> 13 </ligneCommande> 14 <ligneCommande> 15 <noArticle>90</noArticle> 16 <quantite>1</quantite> 17 </ligneCommande> 18 </Commande> 19 ')) 20 / 1 row created.

Stockage natif CLOB par défaut

- requêtes traitées par conversion DOM à la volée

Page 23: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 23

Requête XPath sur XMLType avec extractValue()

Instance XMLType Expression XPath

Fonction qui retourne la valeur de l’élément XML sélectionné (conversion en scalaire SQL)

SQL> SELECT extractValue(value(C),'/Commande/noCommande') 2 FROM CommandesXML C 3 WHERE extractValue(value(C),'/Commande/noClient') = 10 4 / EXTRACTVALUE(VALUE(C),'/COMMANDE/NOCOMMANDE')--------------------------------------------------------------------------------15 

Page 24: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Fonction extract()

11/04/23 © Robert Godin. Tous droits réservés. 24

SQL> SELECT extract(value(C),'/Commande/noCommande/text()') 2 FROM CommandesXML C 3 WHERE extract(value(C),'/Commande/noClient/text()').getnumberval() = 10 4 / EXTRACT(VALUE(C),'/COMMANDE/NOCOMMANDE/TEXT()')--------------------------------------------------------------------------------15 

Page 25: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Fonction existsNode()

11/04/23 © Robert Godin. Tous droits réservés. 25

SQL> SELECT extract(value(C),'/Commande/noCommande/text()') 2 FROM CommandesXML C 3 WHERE existsNode(value(C),'/Commande[noClient="10"]') = 1 4 / EXTRACT(VALUE(C),'/COMMANDE/NOCOMMANDE/TEXT()')--------------------------------------------------------------------------------15 SQL> SELECT extract(value(C),'/Commande/noCommande') 2 FROM CommandesXML C 3 WHERE existsNode(value(C),'/Commande[noClient="10"]') = 1 4 / EXTRACT(VALUE(C),'/COMMANDE/NOCOMMANDE')--------------------------------------------------------------------------------<noCommande>1</noCommande><noCommande>5</noCommande>

Page 26: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Fonction SQL/XML : XMLQuery

11/04/23 © Robert Godin. Tous droits réservés. 26

SQL> SELECT XMLQuery('(1,2+3,"ABC",<tag>blabla</tag>)' RETURNING CONTENT) AS Output FROM DUAL 2 /

OUTPUT--------------------------------------------------------------------------------1 5 ABC<tag>blabla</tag>

Séquence XQuery

Page 27: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Requête FLWOR

11/04/23 © Robert Godin. Tous droits réservés. 27

SQL> SELECT XMLQuery( 2 'for $c in /Commande 3 where $c/noClient = "10" 4 return $c/noCommande' 5 PASSING OBJECT_VALUE RETURNING CONTENT) AS Output 6 FROM CommandesXML 7 /

OUTPUT--------------------------------------------------------------------------------<noCommande>1</noCommande><noCommande>5</noCommande>

Contexte de la requête est la valeur de l’objet XMLType de la table d’objets

La variable $c itère sur chacun des éléments spécifiés par le chemin (ici un seul élément Commande)

Page 28: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Itération sur les éléments ligneCommande

11/04/23 © Robert Godin. Tous droits réservés. 28

SQL> SELECT XMLQuery( 2 'for $l in /Commande/ligneCommande 3 where $l/noArticle > 20 4 return $l/noArticle' 5 PASSING OBJECT_VALUE RETURNING CONTENT) 6 FROM CommandesXML 7 /

XMLQUERY('FOR$LIN/COMMANDE/LIGNECOMMANDEWHERE$L/NOARTICLE>20RETURN$L/NOARTICLE'P--------------------------------------------------------------------------------<noArticle>70</noArticle><noArticle>90</noArticle><noArticle>70</noArticle>

Page 29: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Construction explicite de XML en output

11/04/23 © Robert Godin. Tous droits réservés. 29

SQL> SELECT XMLQuery( 2 'for $l in /Commande/ligneCommande 3 where $l/noArticle > 20 4 return <numeroArticle>{$l/noArticle/text()}</numeroArticle>' 5 PASSING OBJECT_VALUE RETURNING CONTENT) 6 FROM CommandesXML 7 /

XMLQUERY('FOR$LIN/COMMANDE/LIGNECOMMANDEWHERE$L/NOARTICLE>20RETURN<NUMEROARTICLE--------------------------------------------------------------------------------<numeroArticle>70</numeroArticle><numeroArticle>90</numeroArticle><numeroArticle>70</numeroArticle>

{} demande l’évaluation

Page 30: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

Où est l’erreur ?

11/04/23 © Robert Godin. Tous droits réservés. 30

SQL> SELECT XMLQuery( 2 'for $c in /Commande 3 where $c/ligneCommande/noArticle > 20 4 return $c/ligneCommande/noArticle' 5 PASSING OBJECT_VALUE RETURNING CONTENT) 6 FROM CommandesXML 7 /

XMLQUERY('FOR$CIN/COMMANDEWHERE$C/LIGNECOMMANDE/NOARTICLE>20RETURN$C/LIGNECOMMAN--------------------------------------------------------------------------------<noArticle>10</noArticle><noArticle>70</noArticle><noArticle>90</noArticle><noArticle>10</noArticle><noArticle>70</noArticle><noArticle>20</noArticle>

Page 31: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 31

Indexage avec stockage CLOB ou binaire Plusieurs types d’index supportés Indexage sur chemin XPath particulier

– create unique index IndexNoCommande on CommandesXML (extractValue(object_value,'/Commande/NoCommande'))

– la balise doit être unique dans le document Indexage systématique de tous les chemins

– create index IndexCommandesXML on CommandesXML (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) 11g : XMLIndex remplace CTXXPATH

Page 32: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 32

Support de schéma XMLSQL> DECLARE 2 schemaXML varchar2(5000) := 3 '<?xml version="1.0"?> 4 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:comm="http://www.info.uqam.ca/~g odin/XML/schemaCommandesXML" targetNamespace="http://www.info.uqam.ca/~godin/XML/schemaCommandesXML" elementFormDefault="qualified"> 5 <xsd:element name="CommandesXML" type="comm:TypeCommandesXML"/> 6 … 94 </xsd:schema>'; 95 BEGIN 96 dbms_xmlschema.registerSchema('http://www.info.uqam.ca/~godin/XML/schemaCommandesXML.xsd', schemaXML); 97 END; 98 / PL/SQL procedure successfully completed. SQL> CREATE TABLE CommandesAvecSchema OF XMLTYPE 2 XMLSCHEMA "http://www.info.uqam.ca/~godin/XML/schemaCommandesXML.xsd" ELEMENT "CommandesXML"; Table created.

Page 33: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

11/04/23 © Robert Godin. Tous droits réservés. 33

Stockage objet-relationnel

Annotations XML pour stockage objet-relationnel

Vue XMLType sur stockage objet-relationnel

Attributs xdb:SQLName, xdb:SQLType dans le schéma XML

Réécriture des requêtes XPath par l’optimiseur– Exploitation de l’optimiseur relationnel

Page 34: 27/04/2014© Robert Godin. Tous droits réservés.1 20Données semi- structurées et XML

BD de documents

Modèle (clé, document) API de base

– Put(clé, document), Get(clé), Update(clé), Delete(clé) Document semi-structuré

– Sans schéma– Attribut : valeur, XML, JSON, …

Requêtes simples sur le contenu Support d’index Scalabilité élastique Transactions limitées CouchDB, MongoDB, Simple DB, …

11/04/23 © Robert Godin. Tous droits réservés. 34