NFE204 - Bases documentaires et NoSQL Partie XML Enseignant : Philippe Rigaux Équipe Vertigo Laboratoire CEDRIC Conservatoire National des Arts & Métiers, Paris, France
Structuration de documents : XML Plan du cours 1 Structuration de documents : XML 2 3 Syntaxe XML : compléments
Structuration de documents : XML Quelques généralités XML en bref XML est un standard défini par le World-Wide-Web Consortium (W3C). Les documents XML peuvent être sérialisés dans un encodage normalisé (typically iso-8859-1, ou utf-8), et transmis sur le réseau sans perte d information. XML est un format générique qui peut être spécialisé en dialectes conçus pour des domaines spécifiques (e.g., XHTML). Le W3C normalise des standards associés : DOM le modèle XML), XSchema (typage), XPath (chemins), XSLT (restructuration), XQuery (interrogation), et beaucoup d autres. Remarque 1. XML est une version simplifiée de SGML, utilisé depuis longtemps pour les documents techniques. 2. HTML, jusqu à la version 4.0, est aussi une variante de SGML. XHTML est un dialecte XML.
Structuration de documents : XML Quelques généralités Forme sérialisée, forme arborescente Une application reçoit typiquement un document sous forme sérialisée, l analyse (parsing) pour le en forme arborescente, puis le sérialise pour le sauvegarder. serialized form parser Application tree form serializer serialized form FIGURE 1: Parcours d un document XML La forme sérialisée est un codage séquentiel de l arbre qui obéit à une syntaxe particulière. La forme arborescente est définie par un modèle, le DOM. Remarque Dans ce qui suit, on s attache à l essentiel. L accessoire sera découvert ensuite quand l occasion se présentera.
Structuration de documents : XML Quelques généralités Les documents XML sont des arbres Les applications manipulent les documents XML comme des arbres ordonnés. entry name work purpose fn ln INRIA address email like to teach Jean Doe city zip j@inria.fr Cachan 94235 Remarque Une exception : le parseur SAX (Simple Api for XML)
Structuration de documents : XML Quelques généralités Représentation sérialisée d un document XML La forme sérialisée est la plus connue pour XML : <entry><name><fn>jean</fn><ln>doe</ln></name><work>inria<adress><city> Cachan</city><zip>94235</zip></adress><email>j@inria.fr</email> </work><purpose>like to teach</purpose></entry> La structure hiérarchique est partiellement rendue par l indentation : <entry> <name> <fn>jean</fn> <ln>doe</ln> </name> <work> INRIA <adress> <city>cachan</city> <zip>94235</zip> </adress> <email>j@inria.fr</email> </work> <purpose>like to teach</purpose> </entry>
Structuration de documents : XML Quelques généralités XML describes structured content Un texte sans aucune stucture est difficile à interpréter pour une application. The book Fundations of Databases, written by Serge Abiteboul, Rick Hull and Victor Vianu, published in 1995 by Addison-Wesley XML permet d introduire de la structure. <bibliography> <book> <title> Foundations of Databases </title> <author> Abiteboul </author> <author> Hull </author> <author> Vianu </author> <publisher> Addison Wesley </publisher> <year> 1995 </year> </book> <book>...</book> </bibliography> On peut accéder aux auteurs, réorganiser le contenu, etc.
Plan du cours 1 Structuration de documents : XML 2 3 Syntaxe XML : compléments
Un document XML <?xml version="1.0" encoding="utf 8"?> <! Auteur : M. Philippe Rigaux > <cours code="nfe204"> <formation name="cnam Paris"></formation> <titre> NFE204 Bases de données documentaires </titre> <notion>xml</notion> <notion>dtd</notion> <notion>xslt</notion> <notion>dox</notion> </cours> Listing 1 Un simple fichier XML
Un document XML (suite) Un document XML est composé de : 1 Un prologue 1 déclaration de document XML <?xml version = "1.x" [encoding = "norme" ]? > 2 suivie éventuellement (sans contrainte d ordre) 2 Un corps : d une déclaration ou (exclusif) une référence à une DTD <!DOCTYPE element racine [schema racine ] > ou <!DOCTYPE element racine SYSTEM "uri schema racine" > de commentaires <!-- texte --> d instructions de traitement (par ex. appel à XSLT) <?instruction attribut1 = "valeur"... attribut n ="valeur"? > une imbrications d éléments et de textes des commentaires
Quelques exemples de base Remarque : les retours à la ligne n ont aucune signification. <document/> <document> Hello World! </document> <document> <salutation> Hello World! </salutation> </document> <?xml version="1.0" encoding="utf-8"?> <document> <salutation color="blue"> Hello World! </salutation> </document> Le dernier exemple est le seul complètement correct : il comprend le prologue.
Forme hiérarchique des documents : le modèle DOM Un document XML est interprété comme un arbre. Cette interprétation est fixée par un modèle, le DOM (Document Object Model) normalisé par le W3C. Dans le DOM, chaque nœud de l arbre a un type, et une description. Par exemple : 1 le nom du nœud, 2 la valeur du nœud. 3 le contenu d un nœud. Remarque La description exacte dépend du type du nœud.
Principaux types : Element et Text Les nœuds de type Element correspondent au balisage dans la forme sérialisée. 1 ils définissent la structure du document. 2 ils ont un nom mais pas de valeur. 3 ils ont un contenu : le sous-arbre dont ils sont racine. Les nœuds de type Text correspondent au contenu du document. 1 ils constituent les feuilles de l arborescence (un nœud Text n a pas de fils) et n ont donc pas de contenu. 2 ils ont une valeur mais pas de nom
Correspondance forme sérialisée - forme DOM Ce document représenté en DOM : chaque nœud a un type, soit Document soit Text. Voici un élément contenant du texte. <monel> Le contenu textuel. </monel> Element monel Text Contenu textuel
Imbrication des élémennts Le contenu d un élément est 1 tout ce qui est compris entre la balise ouvrante et la balise fermante (dans la forme sérialisée). 2 le sous-arbre dont le nœud est la racine (dans la forme DOM). Ce contenu comprend d autres élément, des nœuds Text, et autres gadgets de moindre importance (commentaires, etc.) Element elt1 Exemple d éléments imbriqués <elt1> Contenu texte <elt2> Autre contenu </elt2> </elt1> Text Contenu texte Element elt2 Text Autre contenu
Encore un exemple Un autre document, pas beaucoup plus compliqué. 1 <les_genies> 2 <genie> 3 Alan Turing 4 </genie> 5 <genie> 6 Kurt Godel 7 </genie> 8 </les_genies> Le vocabulaire à employer : <genie> est une balise ouvrante (tag ouvrant) </genie> est une balise fermante (tag fermant) Kurt Godel est un contenu texte <genie>alan Turing</genie> est un élément et un sous-élément de les_genies Test 1 Donnez la forme arborescente de ce document. 2 Quel est le contenu de l élément les_genies? 3 Quel est le contenu textuel de l élément les_genies?
Quelques remarques en vrac (anecdotique) Les sous-éléments sont ordonnés. Pas de caractères spéciaux (mais -,_,.,/ autorisés) dans les noms des éléments, pas d espaces. Un élément peut être vide : <nom_elt></nom_elt> Notation abrégée : <nom_elt/> (Exemples d éléments vides (XHTML) : <br/> ou <img width="100" height="57" src="logocnam.jpg"/>) (Contrairement à HTML,) XML est case sensitive donc <genie> <Genie> Les caractères spéciaux non autorisés peuvent être remplacés par une référence : & doit être remplacé par sa référence & (version numérique : ) < devient < (ou <) > devient > (ou >) " devient " (ou ') devient ' (ou ")
Un peu plus loin : les attributs Les attributs sont des paires clé/valeur attachées à un élément. 1 on les place dans la balise ouvrante (forme sérialisée) ; 2 ce sont des noeud-fils spéciaux du nœud Element dans la forme DOM. Un attribut a une valeur : un chaîne de caractères. Un élément avec deux attributs. <elt1 att1= 12 att2= fr > Du texte </elt1> Element elt1 Les attributs ne sont par ordonnés, et on ne peut pas avoir deux attributs avec le même nom dans un élément. Attr. att1 : 12 Attr. att2 : fr Text Du texte
Autre exemple 1 <les_genies> 2 <genie date_naiss="1912 06 23" date_deces="1954 06 07"> 3 Alan Turing 4 </genie> 5 <genie date_naiss="1906 04 28" date_deces="1978 01 14"> 6 Kurt Godel 7 </genie> 8 </les_genies> date_naiss est un attribut du premier élément <genie> 1912-06-23 est sa valeur On aurait très bien pu utiliser des noeuds Text plutôt que des attributs. Remarque Les attributs sont (en principe) utilisés pour des "méta-données" qualifiant le contenu (auteur, date de création). Peu important.
Pour compléter l essentiel : la racine du doument Un document XML sous forme sérialisée commence toujours par un prologue : <?xml version="1.0"encoding="utf 8"?> et le contenu d un document est toujours contenu dans un unique élément, appelé l élément racine. Un document avec son prologue et l élément racine. <?xml version="1.0" \end{remark} encoding="utf-8" Document?> <elt> Contenu du document. </elt> Remarque Le prologue peut contenir d autres informations (DTD, etc.) Dans la représentation DOM, le prologue est représenté par un nœud Document a Document node, called the root node. Element elt Text Contenu du document
Résumé de l essentiel Forme sérialisée Un document débute par un prologue Le contenu est enclos dans une unique balise ouvrante/fermante. Chaque balise ouvrante <nom> doit avoir une balise fermante </nom> ; tout ce qui est entre les deux est soit du texte, soit du balisage correctement ouvert/fermé. Forme arborescente (DOM) Un document est un arbre avec une racine (du document) de type Document La racine du document a un seul élément fils, de type Element, appelé l élément racine. Chaque Element est un sous-arbre représentant du contenu structuré.
Document bien formé Un document est bien formé s il respecte la syntaxe XML. à tout tag ouvrant est associé un tag fermant, les éléments sont imbriqués (pas de superposition), présence d un seul élément racine, etc (se référer à la syntaxe XML). Un document XML se doit d être bien formé (sinon inexploitable). i Pour tester si l un de vos documents est bien formé : un vérificateur syntaxique est disponible à l adresse http://www.w3schools.com/xml/xml_validator.asp. Vous pouvez également ouvrir votre fichier XML avec un navigateur web, intégrant généralement un parser XML (pour pouvoir être parsé, un document doit être bien formé).
Une petite mise en jambes : structuration d information Voici quelques informations en vrac : Le britannique Alan Turing est né le 23 juin 1912 à Londres (au Royaume-Uni). Il obtient sa thèse effectuée sous la direction d Alonzo Church en 1938 à l université de Princeton, thèse intitulée Systems of logic defined by ordinals. Il est célèbre pour ses travaux sur le problème de l arrêt, les machines de Turing, la Cryptanalyse d Enigma (pendant la seconde guerre mondiale), le test de turing, la conception et la réalisation de l ACE (Automatic Computing Engine) réalisé entre 1945 et 1948, au National Physical Laboratory, situé à Teddington au Royaume-Uni. Il reçu d ailleurs deux distinctions : l ordre de l Empire britannique (en 1945, au rang d officier, officiellement pour ses travaux scientifiques, officieusement pour le décryptage de Enigma), il a est également membre de la Royal Society (élu en 1951, pour ses travaux sur les machines de turing). Il est à l origine du prix Turing (informatique), attribué tous les ans depuis 1966. Il est décédé le 7 juin 1954 (à 41 ans) d un empoisonnement au cyanure, à Wilmslow (Royaume-Uni). Kurt Gödel est né le 28 avril 1906 à Brno (Autriche-Hongrie). Il était de nationalité austrau-américaine. Il obtient son doctorat en philosophie en 1930. Il y prouve la complétude de la logique classique du premier ordre. Il est particulièrement célèbre pour son théorème d incomplétude publié en 1931. Il est à l origine du prix Gödel (informatique théorique), attribué tous les ans depuis 1992. Il est décédé le 14 janvier 1978 de cachexie, à Princeton (états-unis). Test Réorganisez ces informations afin de les structurer et les présenter sous la forme d un arbre (ou d un fichier) XML.
Syntaxe XML : compléments Plan du cours 1 Structuration de documents : XML 2 3 Syntaxe XML : compléments
Syntaxe XML : compléments Les entités et les références Les entités sont des symboles qui désignent des fragments. Utile pour réutiliser du contenu, sans le répéter. Une entité est déclarée (dans le prologue), puis référencée. <?xml version="1.0" encoding="iso 8859 1"?> <!DOCTYPE a [ <!ENTITY monnom "Charles Martel"> <!ENTITY masignature SYSTEM "signature.xml"> ]> <a> Mon nom est &monnom;. &masignature; </a>
Syntaxe XML : compléments Entités prédéfinies Tout un ensemble de symboles qui sont interprétées comme du marquage / balisage si on les utilise directement. Si on les veut littéralement, il faut utiliser des références d entités. Déclaration Référence Symbole. <!ENTITY lt "<"> < < <!ENTITY gt ">"> > > <!ENTITY amp "&"> & & <!ENTITY apos "'"> ' <!ENTITY quot """> " "
Syntaxe XML : compléments Commentaires et instructions de traitement Les commentaires peuvent être placés n importe où dans la forme sérialisée. <! C est un commentaire > Ils apparaissent dans l arbre DOM comme des nœuds de type Comment. Remarque Très peu d intérêt : on n est pas censé lire un document XML. Peut être remplacé par un élément de type element et de nom comment. Instructions de traitements : commandes spécifiques à une application particulière. Typiquement, on demande à un processeur XSLT d utiliser un programe prog.xslt : <?xml stylesheet href="prog.xslt"type="text/xslt"?>
Syntaxe XML : compléments Sections litérales Un analyseur (parseur) XML cherche à analyser tout le contenu pour détecter du marquage structurel. Problème : et si on ne veut pas que le contenu soit analysé? <?xml version= 1.0?> <program> if ((i < 5) && (j > 6)) printf("error"); </program> Solution : soit on utilise des entités (lourd), soit on insère la texte à protéger dans une section littérale. <?xml version= 1.0?> <program> <![CDATA[if ((i < 5) && (j > 6)) printf("error"); ]]> </program>
Syntaxe XML : compléments C est tout pour l instant! Ce qui précède suffit pour produire et comprendre à peu près tout les documents XML. Autres aspects qui peuvent (quand même) s avérer importants : 1 Validation d un document. Comme déclarer qu un document doit être conforme à une structure donnée? Comment le vérifier? typage de documents XML, avec les DTD ou XML Schéma (horreur!) 2 Conflits de nom. Comment bien interpréter une balise (nom d élément) quand on assemble plusieurs documents? les namespaces (espaces de noms). 3 et autres aspects exotiques...