et son environnement PARTIE 1/3 Présentation de la norme XML 1.0 Définition de Type de Document Introduction aux Schémas XML 1 Jérôme Lehuen - version du 15/09/13 Étude de cas : fiche BU (1) Exemple de requête envoyée au serveur d une bibliothèque : http://bu.univ-lemans.fr/cgi-bin/visu.pl?26392 2
Étude de cas : fiche BU (2) Code HTML correspondant à cette fiche : 3 Étude de cas : fiche BU (3) Constat sur le document obtenu : Difficile d identifier les informations relevantes dans un tel document La structure logique du document et sa présentation ne sont pas dissociées Le modèle HTML associe étroitement la structure, le contenu et la présentation Le document obtenu n est ni portable, ni exploitable par un logiciel Pour être exploitable, le document obtenu doit tout d abord être analysé Le modèle HTML n est pas conçu en fonction d une quelconque réutilisabilité 4 Contenu informatif de cette fiche : Les auteurs de ce livre sont : Grigori Medvedev (auteur principal) Andrei Dimitrievitch Sakharov (collaborateur) Laetitia Lys (collaborateur) Le titre de ce livre est «La Vérité sur Tchernobyl» L éditeur de ce livre est «Albin Michel» etc.
Étude de cas : fiche BU (4) Construction d une représentation arborescente : Les noeuds sont : livre, auteur, collaborateur, titre, éditeur, etc. Les relations entre les noeuds sont : Un livre possède des auteurs, un titre, un éditeur, etc. Parmi les auteurs, il y a un auteur principal et des collaborateurs Les relations entre les noeuds et les feuilles sont : L auteur principal du livre est Grigori Medvedev Le titre du livre est La Vérité sur Tchernobyl 5 livre auteurs titre La Vérité sur Tchernobyl auteur principal collaborateur collaborateur Grigori Medvedev Andrei Dimitievitch Sakharov Laetitia Lys Étude de cas : fiche BU (5) Passage à un formalisme de type texte balisé : La relation «B est le fils de A» se note <A><B> </B></A> <livre> La relation «xxxxxx est un B» se note <B>xxxxxx</B> <auteurs> </auteurs> <principal>grigori Medvedev</principal> <collaborateur>andrei Dimitrievitch Sakharov</collaborateur> <collaborateur>laetitia Lys</collaborateur> <titre>la Vérité sur Tchernobyl</titre> <date>1990</date> <editeur>albin Michel</editeur> <collection>domaine Russe: 0298-2242</collection> <pagination>318</pagination> <isbn>2-226-04031-5</isbn> </livre> 6
XML (extensible Markup Language) Prise en compte des besoins : Pour optimiser la portabilité d un document, il est primordial que sa structure, son contenu informatif et sa mise en forme soit clairement dissociés et identifiables permettre la réutilisation, l indexation, la recherche, la transformation, etc. pouvoir visualiser les informations quelque soit le terminal employé Prise en compte de l existant : Des «standards» spécifiques existent dans plusieurs domaines : Gestion documentaire : SGML + DTD + DSSL Publication sur le web : HTML + CSS Formatage de texte, typographie : LaTeX, RTF, PDF Ces standards ne présentent pas un niveau de généricité satisfaisant Constitution en 1996 du XML Working Group : Impulsé et présidé par Jon Bosak de la société Sun Microsystems Sous les bons auspices du W3C (World Wide Web Consortium) 7 La genèse d XML (1) GML (1970) IBM (Goldfarb, Mosher & Lorie) SGML (1986) Normalisation ISO 8879 Recherches sur les systèmes de gestion de l'information juridique Normalisation de GML 8 HTML (1990) Recommandation W3C XHTML (1998) Recommandation W3C XML (1998) Recommandation W3C et HTML devient une instance de XML et l aventure continue
La genèse d XML (2) Le modèle de référence : SGML Standard : normalisé depuis 1986 (ISO 8879) Fondé sur des technologies éprouvées (sérialisation, parsing, etc.) Generalized : langage généraliste de haut niveau d abstraction Utilisé dans le monde de la gestion documentaire et de la publication Permet d établir une distinction claire entre l information (mots, images, etc.) et la présentation de l information (polices, couleurs, organisation, etc.) Markup : fondé sur la définition et l utilisation de balises Syntaxe permissive (balises non refermées, attributs vides, etc.) Language : décrit des informations relatives au contenu du document Repose sur la définition de structures (DTD) pour normaliser la rédaction 9 Inconvénients de SGML (que XML doit corriger) : Grande complexité de la syntaxe (raccourcis, omissions, ambiguïtés) Processeurs complexes à écrire en raison du laxisme du formalisme Orienté gestion électronique de document (GED) plutôt que «données» La genèse d XML (3) HTML (HyperText Markup Language) est un langage dédié : Application de SGML pour la présentation de documents sur le web La syntaxe (DTD) est «câblée» dans les applications (navigateurs) HTML est permissif : les navigateurs sont codés pour afficher à tout prix HTML est empoisonné par la course aux extensions entre navigateurs La vocation de XML n est pas de se substituer à HTML : Structuration versus présentation HTML répond à la question comment présenter des données? XML répond à la question comment structurer des données? Fond versus forme HTML s intéresse à la forme XML s intéresse au fond XML et HTML sont complémentaires : L évolution du web va vers une séparation du fond et de la forme Il faudra conserver un langage de mise en forme style HTML 10
La genèse d XML (4) Les principales normes du W3C datent du début des années 2000 : XML 1.0 : Socle de base XHTML : Reformulation des éléments HTML 4.01 en éléments XML XSLT : Langage de manipulation (à base de règles) de documents XML Xpath : Localisation de groupes de nœuds dans un document XML Xquery : Langage de requête dans des bases de données XML XML Schema : Définition en XML de modèles de documents XML Namespaces : Préfixation pour les éléments et attributs synonymes SAX (Simple API for XML) : API orienté événement (tout langages) DOM (Document Object Model) : API orienté objet (tout langages) CSS2 : Définition de feuilles de style pour les documents XML Xinclude / Xpointer / Xlink : Gestion les liens et les inclusions etc. 11 La galaxie XML 12
Notion de méta-modèle Au fait, c est quoi un «méta-modèle»? Méta-modèle XML Langage XML Un ensemble de règles syntaxiques très générales modèle générique est une instance du méta-modèle XML Un lexique et un ensemble de contraintes d organisation (DTD) modèle de document Exemples : XHTML, WML, RDF, SVG, etc. est une instance d un modèle de document 13 Document XML Des informations inscrites dans un fichier (ou un flot de données) structuré selon une DTD donnée Caractéristiques d XML (1) Un document (ou fichier) XML : est structuré de façon arborescente Les nœuds contiennent l information (un nœud est défini par une balise) La racine est le point d entrée (la racine est défini par la première balise) est caractérisé par son état Il est «bien formé» lorsque sa structure respecte la syntaxe XML Il est «valide» lorsqu en plus, il respecte un modèle de document (DTD) 14 La syntaxe XML comprend des règles strictes : Dans un document XML bien formé (well-formed) Il doit y avoir une balise racine (qui englobe toutes les autres) Toute balise ouvrante doit être associée avec une balise fermante Il ne doit pas y avoir d entrelacement de balises : <a><b></a></b> La casse (majuscules/minuscules) doit être respectée (case sensitive) Les noms des attributs doivent être notés en minuscule Les valeurs des attributs doivent être notés entre guillemets ou apostrophes
Caractéristiques d XML (2) Les balises ne sont pas prédéfinies en XML : Le concepteur d un document doit : Définir les balises utilisées dans son document (ainsi que leur sémantique) Définir ou préciser le modèle de son document (organisation des balises) Définir les types des données contenues dans son document Toutes ces spécifications définissent un type de document : Un document XML est souvent associé à une DTD Une DTD permet de valider un document XML (rôle du parseur) Un document valide respecte sa DTD 15 Aide à la conception et à la rédaction de documents XML : Le concepteur et le rédacteur disposent d un environnement logiciel : Éditeurs, parseurs validants, processeurs, navigateurs, etc. Sites web dédiés, FAQ, forums, listes de diffusion, etc. Environnement logiciel Les éditeurs et environnements de développement XML : Permettent d éditer facilement les documents XML et de les manipuler : Du simple éditeur en mode texte à l environnement graphique complexe Il est souhaitable que l éditeur puisse valider un document par DTD ou XSD XML Notepad, XML Writer, XML Spy, XMLmind, Stylus Studio, oxygen, Jaxe 16
Des éléments et des attributs (1) Les données d un document XML sont : Soit encadrées par des balises ouvrantes et fermantes : <balise> </balise> (cette structure est définie sous le nom d élément) Les éléments peuvent contenir du texte ou d autres éléments (éléments fils) Les éléments vides sont permis : <balise/> équivaut à <balise></balise> Un document comporte un élément «racine» qui contient tous les autres Soit placées à l intérieur des balises ouvrantes : <balise attrib="valeur"> (attrib est un attribut qui a pour valeur "valeur") Qualifie l élément indépendamment de son contenu (identifications, liens ) On peut insérer autant de paires attribut-valeur que l on veut Soit définies sous forme d entités (constantes) : &entity; (cette notation renvoie à une constante préalablement définie) Une entité peut représenter également un fichier XML en entier Un fichier XML peut contenir des fichiers XML externes Plusieurs unités sont prédéfinis dans la norme (comme en HTML) : & (&) < (<) > (>) ' ( ) " ( " ) é (é) 17 Des éléments et des attributs (2) Guillemets ou apostrophes? Les guillemets ou les apostrophes peuvent être utilisés indifféremment : <personne sexe="féminin"> <personne sexe='féminin'> On préfèrera les guillemets mais on utilisera les apostrophes lorsque la valeur de l attribut contient lui-même des guillemets : 18 <personne nom='georges "Dobeliou" Bush'> Éléments ou attributs? Les données peuvent être stockées dans des éléments ou des attributs L information reste la même, la syntaxe change (voir exemple suivant) Il y a les partisans des éléments et les partisans des attributs Il n y a pas de règle stricte, c est plutôt une question de bon sens
Des éléments et des attributs (3) Éléments ou attributs? (suite) Ces deux codes véhiculent exactement les mêmes informations : <personne sexe="féminin"> <prénom>amélie</prénom> <nom>poulain</nom> </personne> <personne> <sexe>féminin</sexe> <prénom>amélie</prénom> <nom>poulain</nom> </personne> 19 Arguments en faveur des attributs : La DTD donne un meilleur contrôle sur le type et les valeurs Établissent une relation plus «étroite» avec leur père que les éléments Arguments en faveur des éléments : Plus simple de les repérer et de les modifier dans un document Possible d appliquer des styles CSS aux éléments, pas aux attributs Et surtout, ON PEUT DÉCOMPOSER L INFORMATION DES ÉLÉMENTS Des éléments et des attributs (4) Éléments ou attributs? (suite) <note date="2001-11-01"> <to>... </to> <from>... </from> <header>... </header> <body>... </body> </note> <note> <date>2001-11-01</date> <to>... </to> <from>... </from> <header>... </header> <body>... </body> </note> 20 <note day="01" month="11" year="2001"> <to>... </to> <from>... </from> <header>... </header> <body>... </body> </note> <note> <date> <day>01</day> <month>11</month> <year>2001</year> </date> <to>... </to> <from>... </from> <header>... </header> <body>... </body> </note>
Des éléments et des attributs (5) Éléments ou attributs? (suite) Bien sûr, on peut aussi tout mettre dans des attributs : <note day="01" month="11" year="2001" to="pierre" from="marie" header="..." body="..."/> On perd une dimension de XML : la hiérarchisation des informations On perd notamment l information : date = day + month + year 21 Les attributs peuvent «contextualiser» le texte de l élément : <prix devise="euros">200</prix> Les attributs peuvent contenir des identifiants uniques : <note ID="REF_3051">... </note> Autres notations (1) La déclaration de version et de codage (optionnel mais conseillé) : Permet de préciser la version de XML et une norme de codage Les codage qui permettent d utiliser les accents sont ISO-8859-1 et UTF-8 <?xml version="1.0" encoding="utf-8"?> <note>... </note> 22 La déclaration de type de document (optionnel mais conseillé) : Permet de déclarer une grammaire qui «valide» la structure XML Indispensable si on veux être certain que le document soit vérifiable Le nom de la racine du document doit concorder avec le nom du DOCTYPE <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note SYSTEM "note.dtd"> <note>... </note>
Autres notations (2) La déclaration de feuille de style (optionnel) : Contient les informations de présentation ou de transformation Un fichier XSL contient des règles d extraction et de transformation Indispensable pour publier les données en HTML (par exemple) <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="note.xsl"?> <!DOCTYPE note SYSTEM "note.dtd"> <note>... </note> 23 Les lignes de commentaire : Ignorées par les parseurs et processeurs XML <?xml version="1.0" encoding="utf-8"?>... <!-- Ceci est un commentaire --> Autres notations (3) Les sections CDATA (character data) : Permet de placer des caractères qui ne seront pas interprétés Tous les caractères sont reproduits «littéralement» Très utile lorsque les données contiennent des caractères < et & <?xml version="1.0" encoding="utf-8"?>... <msxsl:script language="jscript" implements-prefix="user"> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) then { return 1 } else { return 0 } } ]]> </msxsl:script> 24
Introduction aux DTD (1) Définition de la DTD (Définition de Type de Document) : Un document XML peut être associé à une DTD qui décrit la structure d une classe de documents (structure générique / modèle) : Contraintes sur les éléments : noms, séquence, hiérarchie Contraintes sur les attributs : noms, types de données Une DTD est une grammaire non contextuelle dont les règles ont des expressions régulières dans la partie droite Exemple de DTD : 25 <!ELEMENT note (to,from,header,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT header (#PCDATA)> <!ELEMENT body (#PCDATA)> La ligne 1 défini un élément note qui contient quatre sous-éléments (ou éléments fils) : to, from, header et body (dans cet ordre) Les lignes 2 à 5 définissent ces quatre sous-éléments de type #PCDATA Introduction aux DTD (2) Où trouver la DTD d un document XML? Soit dans le document (DTD embarquée) soit à côté (DTD externe) : <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note [ <!ELEMENT note (to,from,header,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT header (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note>... </note> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note SYSTEM "note.dtd"> <note>... </note> <!ELEMENT note (to,from,header,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT header (#PCDATA)> <!ELEMENT body (#PCDATA)> 26 Soit une partie dans le document et une autre à côté (DTD mixte) : <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note SYSTEM "note.dtd" [ <!ENTITY notes SYSTEM "notes.xml"> ]> <note> ¬es;... </note>
Déclaration des éléments (1) Éléments vides (ne contiennent ni sous-élément, ni texte) : Syntaxe : <!ELEMENT nom-élément EMPTY> Exemple : <!ELEMENT séparateur EMPTY> Codage XML : <séparateur/> Éléments ayant tout type de contenu : 27 Syntaxe : Exemple : Codage XML : <!ELEMENT nom-élément ANY> <!ELEMENT date ANY> <date>... </date> Peut contenir n importe quelle combinaison de données analysables par le processeur XML ; c est à dire que tous les éléments sont autorisés Assez utile lorsque la DTD est laxiste ou en cours de définition Déclaration des éléments (2) Éléments contenant uniquement du texte : Syntaxe : <!ELEMENT nom-élément (#PCDATA)> Exemple : <!ELEMENT from (#PCDATA)> Codage XML : <from>marie</from> Éléments contenant une séquence de sous-éléments : 28 Syntaxe : <!ELEMENT nom-élément (e1, e2, e3,... )> Exemple : Codage XML : <!ELEMENT date (day, month, year)> <date> <day>... </day> <month>... </month> <year>... </year> </date>
Déclaration des éléments (3) Éléments contenant un ou plus éléments de même nom : Syntaxe : Exemple : Codage XML : <!ELEMENT nom-élément (nom-fils+)> <!ELEMENT destinataires (personne+)> <destinataires> <personne>... </personne> <personne>... </personne> </destinataires> Éléments contenant zéro ou plus éléments de même nom : 29 Syntaxe : Exemple : Codage XML : <!ELEMENT nom-élément (nom-fils*)> <!ELEMENT destinataires (personne*)> <destinataires> </destinataires> Déclaration des éléments (4) Éléments contenant zéro ou un élément : Syntaxe : Exemple : Codage XML : <!ELEMENT nom-élément (nom-fils?)> <!ELEMENT note (to, from, header?, body) <note> <to>... </to> <from>... </from> <body>... </body> </note> 30 Éléments contenant un élément ou un autre (disjonction) : Syntaxe : Exemple : Codage XML : <!ELEMENT nom-élément (nom-fils-1 nom-fils-2)> <!ELEMENT note (to, from, (header body))> Voir exemple précédent
Déclaration des éléments (5) Éléments à contenu mixte (texte et balises) : Syntaxe : <!ELEMENT nom-élément (#PCDATA élément... )> Exemple : Codage XML : <!ELEMENT body (#PCDATA strong)*> <!ELEMENT strong (#PCDATA)> <body> RV le <strong>mardi 5 juin</strong> à 10h </body> Le type #PCDATA doit être positionné en tête de déclaration 31 Déclaration des modèles de contenu (synthèse) : A un exactement A? zéro ou un A* zéro ou plus A+ au moins un A B A ou B A, B A suivi de B ( A, B )+ A suivi de B au moins une fois #PCDATA contenu textuel ANY contenu non défini EMPTY contenu vide Déclaration des attributs (1) Syntaxe de déclaration des attributs : <!ATTLIST nom-élément [ nom-attr type-attr valeur-défaut ]+ > CDATA Uniquement du texte (character data) ID Identificateur unique (ne peux pas être dupliqué dans le fichier XML) IDREF(S) Référence(s) à identificateur(s) de type ID (séparateur = blanc) ENTITY(IES) Référence(s) à entité(s) définie(s) dans la DTD (séparateur = blanc) NMTOKEN(S) Un seul mot (sans blancs) NOTATION Identification de format de données non-xml (NDATA) peu utilisé (a b...) Type énuméré (doit prendre l une des valeurs énumérées) 32 #IMPLIED #REQUIRED #DEFAULT #FIXED La valeur de l attribut n est pas obligatoire La valeur de l attribut est obligatoire L attribut possède une valeur par défaut : #DEFAULT "valeur" La valeur de l attribut est fixée à l avance : #FIXED "valeur"
Déclaration des attributs (2) Attributs de type CDATA (texte libre) : Exemple : Codage XML : <!ELEMENT poème (#PCDATA)> <!ATTLIST poème titre CDATA #REQUIRED auteur CDATA #REQUIRED> <poème titre="chanson d Automne" auteur="verlaine"> Les sanglots longs des violons de l automne... </poème> 33 Attributs de type NMTOKEN (mot sans espaces) : Des lettres, des chiffres, et les symboles [. ] [ - ] [ _ ] [ : ] Exemple : Codage XML : <!ELEMENT image EMPTY> <!ATTLIST image src NMTOKEN #REQUIRED hauteur NMTOKEN #REQUIRED largeur NMTOKEN #REQUIRED> <image src="logo.gif" hauteur="60" largeur="60"/> Déclaration des attributs (3) Attributs de types ID et IDREF (identificateur unique) : Exemple : Codage XML : <!ELEMENT group (student)*> <!ELEMENT student (#PCDATA)> <!ATTLIST student ident ID #REQUIRED tutor IDREF #IMPLIED> <group> <student ident="s30">wallace</student> <student ident="s31" tutor="s30">gromit</student> </group> Attribut de type énuméré (avec valeur par défaut) : 34 Exemple : Codage XML : <!ELEMENT ToDoList (tache)*> <!ELEMENT tache (#PCDATA)> <!ATTLIST tache statut (0 1 2 3) "0"> <todolist> <tache statut="2">tâche avec statut 2</tache> <tache>tâche avec statut 0</tache> </todolist>
Déclaration des entités (1) Que sont les entités? Ce sont des «raccourcis» vers des portions de code (XML ou DTD) Ces portions de code vont du simple caractère au document complet Pourquoi utiliser des entités? Pour définir des caractères difficile ou impossible à saisir Pour éviter des saisies fréquentes et fastidieuses : <!ENTITY E-aig "É"> <!ENTITY seuil "<em>&e-aig;ditions du Seuil</em>"> 35 &seuil; <em>éditions du seuil</em> Les trois codages XML suivants sont équivalents : <document> écrit en français </document> <document> écrit en français </document> <!DOCTYPE document [ <!ENTITY e-aig "é"> <!ENTITY c-ced "ç"> ] <document> &e-aig;crit en fran&c-ced;ais </document> Déclaration des entités (2) Pourquoi utiliser des entités? (suite) Pour créer des documents XML composites : <!ENTITY poème1 SYSTEM "dormeur-du-val.xml"> <!ENTITY poème2 SYSTEM "http://www.poesie.net/spleen.xml"> <document>&poème1;&poème2;</document> Pour factoriser des portions de définition dans une DTD : 36 <!ENTITY % identité "nom, prénom"> <!ENTITY % références "%identité;, téléphone?"> <!ELEMENT personne (%références;)> <!ELEMENT étudiant (%références;, promotion)> <!ELEMENT professeur (%références;, spécialité)> base.dtd <étudiant> <nom>dupont</nom> <prénom>pierre</prénom> <promotion>deug MIAS 2000-2001</promotion> </étudiant>
Déclaration des entités (3) Pourquoi utiliser des entités? (suite) Pour écrire des DTD en réutilisant des DTD existantes : <!ENTITY % base SYSTEM "base.dtd"> %base; <!ELEMENT base-de-données (étudiants,professeurs)> <!ELEMENT étudiants (étudiant)*> <!ELEMENT professeurs (professeur)*> On peut importer ainsi autant de DTD (compatibles) qu on le souhaite : 37 <!ENTITY % dtd1 SYSTEM "dtd1.dtd"> <!ENTITY % dtd2 SYSTEM "dtd2.dtd"> <!ENTITY % dtd3 SYSTEM "dtd3.dtd"> %dtd1; %dtd2; %dtd3; Validation des documents (1) Rappels : Un document XML est bien formé s il respecte la norme XML 1.0 Un document XML est valide si sa structure correspond à une DTD Exemple de fichier XML avec DTD interne : <?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to, from, header, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>tove</to> <fro>jani</from> <header>reminder</header> <body>don t forget me this weekend!</body> </note> 38
Validation des documents (2) Utilisation d un parseur validant en ligne de commande : On valide le document une fois édité grâce à un programme externe Parseur «xmllint» présent dans toute bonne distribution Unix / Mac : > xmllint --noout -valid note.xml Utilisation d un éditeur qui intègre un parseur validant : Le document est validé à la demande ou en continu pendant l édition Message affiché par le petit «XML Notepad» de Microsoft (gratuit) : 39 Validation des documents (3) Appel du parseur MSXML dans Internet Explorer : Solution évolutive dont voici la base en Javascript : <html> <body> <script type="text/javascript"> var xmldoc = new ActiveXObject("Microsoft.XMLDOM"); xmldoc.async = false; xmldoc.validateonparse = true; xmldoc.load("essai.xml"); err = xmldoc.parseerror; if (err.errorcode == 0) document.write("<br>le document est valide"); else { document.write("<br>error Code: " + err.errorcode); document.write("<br>error Reason: " + err.reason); document.write("<br>error Line: " + err.line); } </script> </body> </html> 40
Validation des documents (4) Message affiché dans la fenêtre du navigateur : 41 Utilisation d un environnement de développement : Solution permettant d éditer, de valider, de visualiser, de transformer Agréable pour les amateurs des environnements graphiques Selon les environnements, on peut choisir un parseur externe Attention : beaucoup de ces environnements utilisent MSXML de façon transparente pour l utilisateur Validation des documents (5) Utilisation de librairies Java comme JAXP ou XERCES : import org.xml.sax.xmlreader; import org.apache.xerces.parsers.saxparser; import org.xml.sax.saxexception; import org.xml.sax.saxparseexception; import java.io.ioexception; public class SAXParser { public void analyser(string uri) { try { XMLReader parser = XMLReaderFactory.createXMLReader(); parser.setfeature("http://xml.org/sax/features/validation", true); parser.parse(uri); } catch (IOException e) { // impossible de lire le document XML 42 } } } catch (SAXException e) { // impossible de créer une instance de XMLReader // ou erreur durant l analyse du document XML }
Des DTD aux schémas XML (1) Pourquoi encore un nouveau formalisme? Limites des DTD : Syntaxe non-xml (héritage de SGML vieux des années 80) Pas de typage des contenus et typage limité des valeurs d attributs Pas de modélisation partielle (la modélisation doit être complète) Pas de prise en charge des espaces de nommage (namespaces) 43 Objectifs des Schémas XML : Reprendre les acquis des DTD en termes de définition de modèles Permettre des contraintes forte sur des classes de documents (typage) Permettre des contraintes incomplètes Unifier le formalisme (un Schéma XML est un document XML) Les DTD sont appelées à disparaître au profit des Schémas XML? La syntaxe des Schémas XML est néanmoins plus difficile à maîtriser Des DTD aux schémas XML (2) Exemple de DTD : <!ELEMENT note (to, from, header, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT header (#PCDATA)> <!ELEMENT body (#PCDATA)> Schéma XML (XSD) équivalent : 44 <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="note"> <xs:complextype> <xs:sequence> <xs:element name="to" minoccurs="1" maxoccurs="1" type="xs:string"/> <xs:element name="from" minoccurs="1" maxoccurs="1" type="xs:string"/> <xs:element name="header" minoccurs="1" maxoccurs="1" type="xs:string"/> <xs:element name="body" minoccurs="1" maxoccurs="1" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element> </xs:schema>
Des DTD aux schémas XML (3) Il reste beaucoup de caractéristiques et de fonctionnalités : Utilisation d opérateurs comme les listes et les unions Utilisation d expressions régulières proches des regexp usuelles Définition de types complexes utilisant des déclarations d éléments Définition de types abstraits et de classes d équivalence Mécanismes de dérivation des types par extension ou restriction Mécanisme de contrôle des liens proche des ID/IDREFS des DTD Mécanisme de factorisation des modèles de contenu 45 État des recommandations du W3C : Page de garde de XML Schema (http://www.w3.org/xml/schema) XML Schema Part 0 : Primer (http://www.w3.org/tr/xmlschema-0) XML Schema Part 1 : Structures (http://www.w3.org/tr/xmlschema-1) XML Schema Part 2 : Datatypes (http://www.w3.org/tr/xmlschema-2) Écriture des schémas XML (1) Racine d un schéma (avec inclusion) : <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:include schemalocation="http://www.monsite.org/schema.xsd"/>.../... </xs:schema> Déclaration d éléments : 46 <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="livre" type="type-livre"/> <xs:element name="titre" type="xs:string"/> </xs:schema> L élément livre est du type type-livre (type complexe défini par l utilisateur) Un élément de type complexe peut contenir des fils ou posséder des attributs L élément titre est du type xs:string (type simple prédéfini de XML Schema) Un élément de type simple ne peut comporter ni attributs, ni éléments fils Il existe de nombreux types simples prédéfinis, mais il est également possible d en «dériver» de nouveaux
Écriture des schémas XML (2) Déclaration d attributs : <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="livre" type="type-livre"/> <xs:element name="titre" type="xs:string"/> <xs:complextype name="type-livre">.../... <xs:attribute name="isbn" type="xs:string" use="required"/> </xs:complextype> </xs:schema> 47 A la différence des éléments, les attributs ne sont que de type simple Doivent être déclarés après les définitions d un Comme dans une DTD, un attribut peut avoir une contrainte d occurrence #REQUIRED DTD use= default= "required" "blabla #REQUIRED "required" "blabla" #IMPLIED "optional" "blabla #IMPLIED "optional" "blabla" Écriture des schémas XML (3) Attributs de type énuméré : On utilise la notion de restriction de type (détaillée plus loin) : <xs:simpletype name="type-jour"> <xs:restriction base="xs:string"> <xs:enumeration value="lundi"/> <xs:enumeration value="mardi"/>.../... </xs:restriction> </xs:simpletype>.../... <xs:attribute name="jour" type="type-jour" use="required"/> Déclaration d éléments à contenu simple avec attributs : On utilise la notion d extension de type (détaillée plus loin) : <xs:complextype name="type-titre"> <xs:simplecontent> <xs:extension base="xs:string"> <xs:attribute name="lang" type="xs:string"/> </xs:extension> </xs:simplecontent> </xs:complextype> 48
Écriture des schémas XML (4) Types simples prédéfinis : 49 Écriture des schémas XML (5) Types simples définis par l utilisateur : Restriction sur un intervalle de valeurs : <xs:simpletype name="type-age"> <xs:restriction base="xs:integer"> <xs:mininclusive value="0"/> <xs:maxinclusive value="100"/> </xs:restriction> </xs:simpletype> Restriction sur un ensemble de valeurs : <xs:simpletype name="type-sexe"> <xs:restriction base="xs:string"> <xs:enumeration value="homme"/> <xs:enumeration value="femme"/> </xs:restriction> </xs:simpletype> Facettes applicables au type de base 50 <xs:restriction base="xs:string"> <xs:pattern value="homme femme"/> </xs:restriction> On reviendra sur pattern
Écriture des schémas XML (6) Restriction sur la longueur d une chaîne : <xs:simpletype name="type-password"> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpletype> Restriction sur une expression régulière : <xs:minlength value="5"/> <xs:maxlength value="8"/> 51 <xs:simpletype name="type-isbn"> <xs:restriction base="xs:string"> <xs:pattern value="[0-9]{10}"/> </xs:restriction> </xs:simpletype> <xs:simpletype name="type-email"> <xs:restriction base="xs:string"> <xs:pattern value="(.)+@(.)+"/> </xs:restriction> </xs:simpletype> Écriture des schémas XML (7) Listes (suite de types simples) : <xs:simpletype name="type-numéro"> <xs:list itemtype="xs:unsignedbyte"/> </xs:simpletype> <xs:simpletype name="type-numéro"> <xs:list> <xs:simpletype> <list restriction base="xs:unsignedbyte"/> </xs:simpletype> </xs:list> </xs:simpletype> 52 L avantage de cette seconde méthode est de pouvoir ajouter des facettes On retrouve aussi les types NMTOKEN, ENTITIES et IDREFS des DTD Unions (associer plusieurs types simples) : <xs:simpletype name="type-numéroetendu"> 18 <xs:union membertype="xs:string type-numéro"/> Pompiers </xs:simpletype>
Écriture des schémas XML (8) Types complexes : Il y a 4 sortes d éléments complexes : Les éléments vides Les éléments qui contiennent seulement d autres éléments Les éléments qui contiennent seulement du texte et des attributs Les éléments qui contiennent du texte et d autres éléments Séquences d éléments : <xs:complextype name="type-personne"> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="prénom" type="xs:string"/> <xs:element name="datedenaissance" type="xs:date"/> </xs:sequence> </xs:complextype> 53 Équivalent à la déclaration d éléments suivante dans une DTD : <!ELEMENT personne (nom, prénom, datedenaissance)> Écriture des schémas XML (9) Choix d éléments : <xs:complextype name="type-personne"> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="prénom" type="xs:string"/> <xs:element name="datedenaissance" type="xs:date"/> <xs:choice> <xs:element name="adresse" type="xsd:string"/> <xs:element name="adressemail" type="xsd:string"/> </xs:choice> </xs:sequence> </xs:complextype> Ensembles d éléments : <xs:complextype name="type-adresse"> <xs:all> <xs:element name="adresse" type="xsd:string"/> <xs:element name="adressemail" type="xsd:string"/> </xs:all> </xs:complextype> Les éléments peuvent apparaître dans n importe quel ordre 54
Écriture des schémas XML (10) Indicateurs d occurrence : Dans les trois structures (séquence, choix, ensemble) on peut spécifier des indicateurs d occurrence mini et maxi pour chaque élément : <xs:complextype name="type-personne"> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="prénom" type="xs:string"/> <xs:element name="enfant" type="xs:string" minoccurs="0" maxoccurs="10"/> <xs:all> <xs:element name="adresse" type="xsd:string"/> <xs:element name="adressemail" type="xsd:string" minoccurs="0"/> </xs:all> </xs:sequence> </xs:complextype> 55 Écriture des schémas XML (11) Éléments vides (avec attributs) : <xs:complextype name="type-produit"> <xs:attribute name="id" type="xs:positiveinteger"/> </xs:complextype> Éléments textuels : <xs:complextype name="type-pointure"> <xs:simplecontent> <xs:extension base="xs:integer"> <xs:attribute name="pays" type="xs:string"/> </xs:extension> </xs:simplecontent> </xs:complextype> Éléments à contenu mixte : <xs:complextype name="type-lettre" mixed="true"> <xs:all> <xs:element name="nom" type="xs:string"/> <xs:element name="date" type="xs:date"/> </xs:all> </xs:complextype> 56
Écriture des schémas XML (12) Groupes d éléments et d attributs : Ressemble aux entités utilisées dans les DTD : <xs:group name="base-livre"> <xs:sequence> <xs:element name="titre" type="xs:string"/> <xs:element name="auteur" type="xs:string"/> </xs:sequence> </xs:group> <xs:attributegroup name="attributs-livre"> <xs:attribute name="isbn" type="type-isbn" use="required"/> <xs:attribute name="disponible" type="xs:string"/> </xs:attributegroup> 57 <xs:complextype name="type-livre"> <xs:sequence> <xs:group ref="base-livre"/> <xs:element name="personnage" type="xs:string" minoccurs="0" maxoccurs="unbounded"/> </xs:sequence> <xs:attributegroup ref="attributs-livre"/> </xs:complextype> Trois approches de la modélisation Style «poupées russes» : Consiste à suivre la structure du document XML et de définir chaque élément au moment où nous le rencontrons Imbrication de balises xs:element et xs:complextype Avantage = proche de la structure du document XML modélisé Inconvénient = manque de déclarativité (difficile à lire et à maintenir) Style DTD : Consiste à énumérer les éléments en précisant pour chacun la liste de ses attributs et de ses fils Première partie = succession d éléments xs:element à type simple Deuxième partie = succession d éléments xs:element à type complexe Style le plus typé : Consiste à définir des types de données (simples et complexes) et de les nommer, avant de définir les éléments et les attributs Première partie = succession d éléments xs:simpletype et xs:complextype Deuxième partie = succession d éléments xs:element à type nommé 58