XML (eXtensible Markup Language) The eXtensible Markup Language W3C (World Wide Web Consortium) http://www.w3C.org
Un exemple en HTML extrait de « XML expliqué aux débutants » d’Emmanuel Lazinier Le « source » avec balises de mise en page : <H2>Bibliographie XML</H2> <UL> <LI> Jean-Christophe Bernadac et François Knab, <I>Construire une application XML</I>, Paris, Eyrolles, 1999</LI> <LI> Alain Michard, <I>XML, Langage et Applications</I>, Paris, Eyrolles, 1998 </LI> <LI> William J. Pardi, <I>XML en Action</I>, Paris, Microsoft Press, 1999, adapté de l'anglais par James Guerin</LI> </UL>
Visualisation dans un navigateur Aucune indication de sémantique par les balises
Problèmes dus en partie à HTML Les balises HTML sont prédéfinies, Un seul type de document, Structuration et contenu non séparés, Une seule vue du même document, Sémantique des liens rudimentaire, Adaptation en utilisant des scripts, Interopérabilité limitée (échanges d'informations limité)
Même si... Facilité d'apprentissage de HTML, disponibilités d'outils (de création, de visualisation), génération dynamique de documents, langages de scripts pour des comportements dynamiques, ...
En XML : <?xml version="1.0" encoding="ISO-8859-1"?> <BIBLIO SUBJECT="XML"> <BOOK ISBN="9782212090819" LANG="fr" SUBJECT="applications"> <AUTHOR> <FIRSTNAME>Jean-Christophe</FIRSTNAME> <LASTNAME>Bernadac</LASTNAME> </AUTHOR> <AUTHOR> <FIRSTNAME>François</FIRSTNAME> <LASTNAME>Knab</LASTNAME> <TITLE>Construire une application XML</TITLE> <PUBLISHER> <NAME>Eyrolles</NAME> <PLACE>Paris</PLACE> </PUBLISHER> <DATEPUB>1999</DATEPUB> </BOOK> <BOOK ISBN="9782212090529" LANG="fr" SUBJECT="général"> …. </BIBLIO>
Différences ? Sémantique Hiérarchie Aucune balise de présentation Balises : firstname, lastname Attributs Hiérarchie Biblio Book Author Translator Title … Firstname Lastname Aucune balise de présentation
Ce que XML permet (ou va permettre ?) Taper une seule fois le contenu, sans se soucier de la présentation de ce contenu Visualiser/Exploiter ce contenu de plusieurs manières
Le contenu sans se soucier de la présentation ou des traitements futurs ; sans avoir à saisir des libellés tels que'"auteur", "année de parution : à la manière dont on alimenterait une base de données.
La présentation de multiples présentations (en tableau, en texte suivi…), avec éventuellement tris, sélections, réorganisations, génération automatique de libellés, tables des matières, index, etc. et ce sur de multiples médias (écran, papier, terminal Braille, réfrigérateur, PDA, etc.)
Le code XML est intégré à une page HTML et exploité par un script => interactivité.
L’exploitation Comprendre/exploiter au mieux le contenu de ces pages, grâce au balisage spécifique, indépendant de toute application.
Les apports d'XML
Au départ : l'arbre d'éléments Un élément est un composant identifiable d'un document (paragraphe, numéro de partie, date, listes, titre, …) Un élément : peut avoir un contenu (données, autres éléments), peut être un pointeur sur de l'information (lien hypertexte), doit être "contigu" : un début –une fin … sans "trou"
L'arbre d'éléments (suite) Chaque élément est délimité par des crochets (balise de fermeture obligatoire sauf pour les éléments vides exemple : <foo att1="val1" /> ), Un élément peut avoir plusieurs attributs pour décrire ses propriétés exemple de balise ouvrante : <rapport langue="FR" version="v2">
Exemple Section Chapître livre Section Chapître
Exemple Rmq : le document est un arbre : les éléments ne doivent donc pas se chevaucher !
HTML : Description physique et structurelle mêlées Durée de vie courte (= celle des technologies qui donnent un sens aux éléments de mise en page) Plusieurs formes d'un même document => plusieurs versions de ce document !
Contrôle de validité Doc. XML Doc. HTML Présentation Présentation Contenu Structure Présentation Contenu Structure Contrôle de validité
Doc. bien formé - doc. valide Bien formé : Règles syntaxiques de XML respectées = bonne formulation. Valide : c'est un document bien formé qui respecte une DTD ou un schéma.
Modularité et réutilisation Structure définie à part, dans une "Document Type Definition" (DTD) ou dans un Schéma Utilisation de structures normalisées, publiques (ex : pour un tableau, une liste de références bibliographiques, …) Définition de nouveaux types de documents
Extensibilité et structure <DATE> <ANNEE>1999</ANNEE> <MOIS>Octobre</MOIS> <JOUR>14</JOUR> </DATE> ou <date format="ISO-8601">1999-10-14</date>
Sémantique dans les balises <PERSON ID="p1100" SEX = "M"> <NAME> <GIVEN> Hubert </GIVEN> <SURNAME> McDaniel </SURNAME> </NAME> <BIRTH><DATE>20 Fev 1923</DATE> </BIRTH> <DEATH><DATE>9 Oct 2000</DATE> </DEATH> </PERSON> Des données auto-documentées
Autres avantages Reste indépendant des constructeurs Norme du W3C Codage universel (UNICODE)
Ce qu'XML n'est pas Ce n'est pas un langage de programmation, Ce n’est pas un protocole réseau, Ce n'est pas un format propriétaire, Ce n'est pas une base de données, … mais XML permet le stockage d'informations "semi structurées".
Pour plus de détails… quelques éléments de syntaxe
Structure d’un document XML Le prologue Le corps Une racine unique, L’arbre d’éléments
Le prologue La déclaration XML La déclaration de la DTD ou du schéma La version de la spécification utilisée, Le type de codage (le jeu de caractères) La déclaration de la DTD ou du schéma Des commentaires (<!-- … -->) Les instructions de traitement (pour traiter le contenu non xml) La déclaration d’entités
Déclaration de type On indique le type du document (titlepage) SYSTEM permet de définir la ressource qui contient la DTD : une URL (<!doctype rapport SYSTEM "rapport.dtd" [déclarations]>) La référence à une DTD ou à un schéma n'est pas obligatoire… mais recommandée !!! (<!doctype lettre [déclarations]>)
Le corps d'un doc XML Une racine unique, L’arbre d’éléments.
Une racine unique <?xml version "1.0" ?> <!-- livre est la racine unique de ce document--> <livre> <chapître> <section>... </section> </chapître> ... </livre>
L'arbre d'éléments Un élément se compose: D’une balise d’ouverture Un contenu Une balise de clôture Si l’élément est vide il peut s’écrire uniquement avec la balise d’ouverture et un "slash" avant le chevron fermant exemple : <position/> Un élément peut contenir d'autres éléments imbriqués.
Un doc bien formé Cela signifie : Une racine unique, début et fin explicites pour chaque élément, Pas de superposition de définitions d'éléments, Les attributs respectent les règles suivantes :
Balises et attributs : règles des noms Les noms commencent par une lettre ou _ (caractère souligné) les noms peuvent contenir : des lettres de tous les alphabets (Unicode), des chiffres et les 3 caractères _ - .
Balises et attributs : règles des noms Les noms ne peuvent pas contenir : d'autres ponctuation (sauf :) des blancs ou des retours à la ligne) La "casse" (majuscule/minuscule) est importante.
Règles sur les attributs un espace sépare un attribut d'un élément ou deux attributs entre-eux, les attributs sont nommés, utilisation de l'égalité et des quotes (simples ou doubles)
Erreurs "classiques" de "bonne formation" Absence de déclaration XML mauvaise formation des noms XML mauvaise syntaxe des balises pas d'élément racine caractères spéciaux mal utilisés
Validité d'un doc XML Après le test de "bonne formation" Test de la conformité à la structure définie dans la DTD ou le schéma associé.
Document Type Definition
DTD Permet de définir un modèle d'un type de document, appelé aussi "Doctype": message email, article de journal, livre …
DTD (suite) Un ensemble de règles de définition de la structure d'un document, En général dans un fichier à part, Permet de connaître la structure d'un document sans accéder à son contenu, Une DTD peut être partagée par plusieurs documents et plusieurs sites Web.
DTD (suite) Un exemple de définition d’une liste qui est constituée d’items : <!ELEMENT list (item)+> <!ELEMENT item (#PCDATA)> les items contiennent du texte (parsable character data)
DTD (suite) Pas nécessairement incluse dans un fichier unique : sections internes et sections externes. Plusieurs sections externes (mais pas de déclaration du même élément dans 2 sections différentes : conflit de noms) domaines nominaux…
Quelles déclarations ? Eléments types, listes d'attributs, entités, notations, (des commentaires)
Eléments types Exemple : <!ELEMENT livre (préface?, avant-propos?, introduction, partie+, chapitre+, conclusion)> introduction, partie, chapitre et conclusion obligatoires, préface et avant-propos facultatives au moins une fois : partie, chapitre une seule fois : introduction, conclusion
Eléments déclarés "ANY" Le contenu est : un groupe ou répétable, il peut contenir : des chaînes (#PCDATA) ou tout autre élément de la DTD.
Eléments déclarés "EMPTY" Le contenu est vide On lui associe des attributs.
Les attributs Il est associé à un élément, Il fournit des informations supplémentaires sur l'élément, Il est limité à un ensemble de valeurs définies.
Les attributs (suite) Il contient en général : des informations de sécurité, de contrôle (version, statut, diffusion, …) des compléments d'information (date, langue, …) des informations de formattage.
Les attributs prédéfinis à la norme ISO 3166 par défaut xml:lang <p xml:lang='fr'> essai </p> <!-- la langue peut être privée --> <p xml:lang='iserois'>Quein même</p> xml:space pour indiquer à l'application si le contenu d'un élément doit être traité en préservant les espaces (xml:space='preserve') ou application du traitement par défaut (xml:space='default').
Exemple
Listes d'attributs Un attribut : une paire (nom, valeur) associée à un élément <ATTLIST nom-élément nom-att1 type-att1 déclaration-de-défaut> Types d'attributs : CDATA, ID ou IDREF ou IDREFS, ENTITY ou ENTITIES, NMTOKEN ou NMTOKENS, NOTATION
Exemple Dans la DTD : Dans le document XML :
Un exemple
Attributs ID, IDREF Un attribut de type ID affecte un identificateur unique à un élément XML, t.q. : Le parser peut tester s'il est unique à l'interieur du document, Un attribut IDREF peut référencer un élément nommé par ID les paires ID/IDREF sont utilisées pour : des références croisées et des liens internes. référencer des objets dans le document.
Exemple Exemple de déclarations pour ID/IDREF dans la DTD : <!ELEMENT para (#PCDATA | figure | figref)* > <!ELEMENT figure (title?, graphic) > <!ATTLIST figure name ID #REQUIRED > <!ELEMENT graphic EMPTY > <!ATTLIST graphic filename CDATA #REQUIRED > <!ELEMENT figref (#PCDATA) > <!ATTLIST figref pointer IDREF #REQUIRED >
Exemple (suite) Dans le document : <para> <figure name="fishes"> <title>Fish come in many sizes</title> <graphic filename="fisheatfish.jpg"/> </figure> As we see in the figure above (<figref pointer="fishes"> </figref>) we must consider size when selecting a fishtank. </para>
Les déclarations d'entités Celles déclarées dans un document : entités générales, Celles déclarées dans une DTD pour être utilisées dans la DTD : entités paramètres
Exemple : les entités d'un livre <?xml version="1.0"?> <!doctype livre SYSTEM "livre.dtd" [ <!ENTITY toc SYSTEM 'toc.xml'> <!ENTITY chap1 SYSTEM 'chap1.xml'> <!ENTITY chap2 SYSTEM 'chap2.xml'> ]> <livre> <titre>Ceci est le titre</titre> &toc; &chap1; &chap2; </livre> Les entités seront remplacées par leur valeur (ici, le contenu des fichiers)
Entité paramètre exemples : <!ENTITY % ent1 SYSTEM 'val1'> <!ENTITY % ent2 SYSTEM 'http://foo.fr/xxx.xml'> <!ENTITY % ent3 PUBLIC '-//US//TEXT texte//FR' 'http://foo.fr/secours.xml'> Déclaration dans la partie interne ou externe d'une DTD Dans la partie interne d'une DTD (entre les crochets ouvrant et fermant de la déclaration DOCTYPE) : utilisables en pratique pour inclure le contenu d'un fichier externe
Adressée par identificateur public FPI (Formal Public Identifier) Pas toujours gérés par les applications Hérité de SGML Indirection entre le nom symbolique donné à l'entité et son URL de la forme : <!ENTITY nom PUBLIC FPI URL> Utilisé si l'application ne peut pas résoudre l'identificateur public
Quelques règles d'écriture Modulariser / réutiliser
Quelques règles d'écriture Ordonner Les déclarations d'entités se placent en tête
Les outils nécessaires Un éditeur adapté (vision arborescente, indentation, etc…) Un "parseur", pour vérifier la bonne formulation : il peut être validant ou non. Une "visionneuse" : qui permet d'appliquer une feuille de style à un document XML et d'afficher le document formaté.
En résumé : Editeur Écrit le Document Vérifié par le "Parseur" Chargé dans le Navigateur Montré au Lecteur
Une vue d'ensemble d'XML
Les origines d'XML 1997 XML 1992 HTML WWW 1986 SGML GM Internet 1960 Generalized Markup
XML c'est (1/2) Des recommandations du W3C (XML 1.1 le 4 février 2004 : http://www.w3.org/TR/2004/REC-xml11-20040204/ X : eXtensible / Ouvert ML : Markup Language (comme HTML) Métalangage pour créer d'autres langages
XML c'est (2/2) Séparation du contenu, de la structure et de la forme Ajout de sémantique Internationalisation : Unicode
SGML ? Trop complexe (beaucoup d'options différentes, …), omission possible de balises : pb de lisibilité, "XML = 80% des fonctionnalités de SGML et 20% de sa difficulté" d'après J.C. Bernadac et F. Knab
Sous ses apparences… Ressemble au premier abord à du HTML Est un sous-ensemble de SGML (Standard Generalised Markup Language) Offre plus de flexibilité que HTML pour personnaliser et gérer des documents du Web
...trompeuses un méta-langage et non un langage de marquage sans liste d'éléments prédéfinis : tout élément possible utilisation optionnelle d'une DTD (Document Type Definition) ou d'un schéma contrôle possible de la structure logique du document écrit en SGML
De nouveaux enjeux Edition collaborative, Diffusion ciblée, Personnalisation, Adaptation Échange de données Partage de ressources, …
Les documents Des gisements d'information (veille, analyse, …), En énorme quantité (Web, mises en ligne,…) Hétérogénéité des origines, des logiciels utilisés (Word, LateX, ps, pdf, numérisé,…)
Quels traitements ? Recherche d’information (pb de la lecture séquentielle), Filtrage, Tri, Transformation, mise à jour, Traitements complexes (traitements conditionnels, extraction de données, changements simultanés dans plusieurs fichiers, …)
Prise en compte d’Unicode Codage sur deux octets. Comment écrire du XML en unicode ? Rédaction d’un texte avec un jeu de caractères puis conversion (Framemaker le gère automatiquement) Insertion de références à des caractères Unicode (é pour le é)
Unicode : à quoi sert-il ? Actuellement, environ 137000 symboles issus d’au moins 24 alphabets internationaux (près de 20000 pour les idéogrammes du han (Chine), et 11000 pour les syllabes du hangul coréen). Permet de représenter pratiquement toutes les langues de la planète « The unicode standard » ISBN 0-201-48346-9 d’Addison-Wesley ou http://www.unicode.org
Unicode, quelques outils "recode" http://www.gnu.org/directory/recode.html "native2ascii" dans le java development kit : Converts a file with native-encoded characters (characters which are non-Latin 1 and non-Unicode) to one with Unicode-encoded characters. dans le parser XML : RXP (option –c) (http://www.cogsci.ed.ac.uk/~richard/rxp.html)
Les problèmes liés au Web Quantité d'informations "Infinie " > Pb de recherche d'informations (pertinence, "Invisible Web", déterminisme, …) > Comment retrouver ? Structuration des informations Certification des informations
Les problèmes liés au Web (suite) Pérennité des informations Adaptation à l'utilisateur "Privacy", copyright, ... Limites du protocole HTTP Toujours de nouvelles normes
Le(s) "successeur(s)" d’HTML XML (Extensible Markup Language, ou Langage Extensible de Balisage) Comme HTML (Hypertext Markup Language) c'est un langage de balisage (markup), c'est-à-dire un langage qui présente de l'information encadrée par des balises.
Contrairement à HTML HTML : un jeu limité de balises orientées présentation (titre, paragraphe, image, lien hypertexte, etc.) XML est un métalangage, Permet d'inventer à volonté de nouvelles balises pour isoler toutes les informations élémentaires (titre d'ouvrage, prix d'article, numéro de sécurité sociale, référence de pièce…), ou agrégats d'informations élémentaires, que peut contenir une page Web.