Extensible Markup Language

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Xml)
Aller à : navigation, rechercher
Extensible Markup Language
Image illustrative de l'article Extensible Markup Language

Extension .xml
Type MIME application/xml, text/xml
Développé par World Wide Web Consortium
Type de format Langage de balisage
Standard(s) 1.0 (5e édition)

1.1 (2e édition)

Spécification Format ouvert

L'Extensible Markup Language (XML[note 1], « langage de balisage extensible » en français) est un langage informatique de balisage générique qui dérive du SGML. Cette syntaxe est dite « extensible » car elle permet de définir différents espaces de noms, c'est-à-dire des langages avec chacun leur vocabulaire et leur grammaire, comme XHTML, XSLT, RSS, SVG… Elle est reconnaissable par son usage des chevrons (< >) encadrant les balises. L'objectif initial est de faciliter l'échange automatisé de contenus complexes (arbres, texte riche…) entre systèmes d'informations hétérogènes (interopérabilité). Avec ses outils et langages associés une application XML respecte généralement certains principes :

  • la structure d'un document XML est définie et validable par un schéma,
  • un document XML est entièrement transformable dans un autre document XML.

Historique[modifier | modifier le code]

Dan Connolly ajoute le Standard Generalized Markup Language à la liste des activités du World Wide Web Consortium lorsqu'il s'y joint en 1995. Les travaux débutent à la mi-1996 lorsque l'ingénieur Jon Bosak (en) de Sun Microsystems élabore une charte et recrute des collaborateurs. Bosak se fait connaître dans la petite communauté de personnes qui avaient de l'expérience à la fois dans le SGML et dans le Web.

XML est compilé par un groupe de travail de onze membres[note 2], soutenu par environ 150 membres de divers groupes d'intérêt. Le débat technique a eu lieu sur la liste commune et les questions ont été résolues par consensus ou, lorsque cela a échoué, à la majorité des voix du groupe de travail. Un compte rendu des décisions de conception et de leurs justifications ont été compilées par Michael Sperberg-McQueen (en) de Chicago, le 4 décembre, 1997[1]. James Clark servit comme responsable technique du groupe de travail, notamment en contribuant à l'élément vide « <empty/> » et au nom « XML ». Les corédacteurs du cahier des charges étaient à l'origine Tim Bray (en), qui a notamment conduit l'informatisation du Oxford English Dictionary, et Michael Sperberg-McQueen, de l'Université de l'Illinois, qui était éditeur en chef de la DTD TEI ; accompagnés ensuite de Jean Paoli, de Microsoft, comme troisième coéditeur[2]. Tim Bray, dans son Annotated XML Specification (en) « la spécification XML annotée », explique plus longuement le contexte qui a rendu possible ce standard.

Le groupe de travail XML ne s'est jamais rencontré face-à-face, la conception a été réalisée en utilisant courrier électronique et téléconférences hebdomadaires. Les principales décisions de conception ont été prises en une vingtaine de semaines de travail intense entre juillet et novembre 1996, lorsque le premier travail de spécification XML a été publié[3]. D'autres travaux de conception sont poursuivis jusqu'en 1997, puis le XML 1.0 est devenu une recommandation W3C le .

XML et SGML[modifier | modifier le code]

L'objectif initial de XML est expliqué au début de la spécification du , la phrase est toujours d'actualité : « Son but est de permettre au SGML générique d'être transmis, reçu et traité sur le web de la même manière que l'est HTML aujourd'hui. »(fr)[4]. SGML est un langage de balisage, employé dans les industries de la documentation et de l'édition. En adoptant cette syntaxe pour HTML, Tim Berners-Lee confrontait une technologie complexe à de plus en plus d'utilisateurs. L'objectif d'XML était de définir un langage aussi générique, mais plus simple : « XML has been designed for ease of implementation »(en), « XML a été conçu pour une facilité de mise en œuvre »(fr).

À la lumière des années passées, cette spécification a rempli l'objectif qu'elle se fixait, XML a été largement suivi et favorise l'interopérabilité. La disponibilité d'une syntaxe standard et d'outils de manipulation réduit significativement le coût du cycle de développement, permettant à des programmes de modifier et de valider, sans connaissances préalables, des documents écrits dans ces langages. En effet, avant l'avènement du populaire langage généraliste de description de données qu'est XML, les concepteurs de logiciels avaient pour habitude de définir leurs propres formats de fichiers ou leurs propres langages pour partager les données entre programmes (à l'exception de quelques standards professionnels tels qu'EDIFACT). Ceci nécessitait de concevoir et de programmer des analyseurs syntaxiques spécialisés, ces tâches et bien d'autres s'effectuent désormais avec des outils XML standardisées.

Plusieurs choix ont contribué aux succès du XML.

Unicode[modifier | modifier le code]

Par défaut, SGML était en ASCII (alphabet latin sans lettre accentuée). Il apportait un système d'encodage pour les autres signes, les entités caractères que l'on trouve encore parfois en HTML (exemple : &eacute; pour é). En 1996, apparaît la version 2.0 d'Unicode. XML adopte cet encodage par défaut.

  <?xml version="1.0" encoding="UTF-8"?>
  <外语>Китайська мова</外语>

Délimitation explicite du contenu[modifier | modifier le code]

SGML était orienté pour la saisie humaine de textes structurés, sur des machines moins puissantes qu'aujourd'hui. Il autorisait beaucoup de raccourcis. HTML conserve par exemple les balises à fermeture optionnelle (exemple : <li>). Ces possibilités compliquaient l'implémentation de la norme. En XML, toute balise ouverte doit être fermée.

  <!-- Accepté en HTML4, pas en XHTML -->
  <UL Class=Defaut>
   <LI>Item 1
   <li>Item 2
  </ul>
  <!-- normalisation XHTML -->
  <ul class="Defaut">
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>

Espace de noms[modifier | modifier le code]

SGML insiste surtout sur la validation, sur la conformité à un modèle contraignant. XML prévoit un usage plus souple de l'information structurée. Il spécifie un moyen de faire cohabiter plusieurs vocabulaires de balises dans un même document.

  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:transform  version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:tei="http://www.tei-c.org/ns/1.0"
  >
  <!-- Transformation XSLT (instructions XML avec le préfixe “xsl:”) qui prend en entrée
  du TEI (noms avec préfixe “tei:”) et donne en sortie du html (noms sans préfixe). -->
    <xsl:template match="tei:abbr">
      <abbr>
        <xsl:apply-templates/>
      </abbr>
    </xsl:template>
  </xsl:transform>

Bilan[modifier | modifier le code]

Paradoxalement, il reste un domaine où SGML persiste, les “HTML”. Le W3C ne développe plus XHTML (version de HTML plus stricte, avec par exemple des balises obligatoirement fermées), et se consacre plutôt à HTML5, successeur d'HTML4, qui ajoute quelques balises sans imposer la conformité à XML. L'échec de l'XHTML et le retour à HTML s'expliquent par la force des habitudes et la très importante base HTML installée[5].

Au-delà de HTML, le W3C avait d'autres projets exigeant une syntaxe plus facilement extensible. Ces directions ont permis une grande plasticité de XML lui offrant de nombreux usages. SGML était une technique de niche, Internet l'a simplifié et largement répandu. Précisons en quoi.

Versions[modifier | modifier le code]

La version 1.0 d'XML a été publiée le .

La version 1.1 publiée le apporte des améliorations dans le support des différentes versions d'Unicode, permet l'usage de caractères de contrôle dans le texte (à l'exception du caractère 0), et organise les fins de ligne de façon compatible avec les technologies IBM[6].

Le W3C recommande aux processeurs XML de reconnaître les deux versions, bien que la première version soit beaucoup plus répandue que la seconde.

Comparaison avec d'autres formats[modifier | modifier le code]

Si le début de cet article était encodé en XML, il pourrait ressembler à ceci.

  <article xmlns="http://docbook.org/ns/docbook">
    <title>Extensible Markup Language</title>
    <para>
      <acronym>XML</acronym> (Extensible Markup Language, 
      « langage de balisage extensible »)...
    </para>
  </article>

Dans ce code, chacun peut identifier des portions de texte (exemple : Extensible, XML…) et des mots clés encadrés de chevrons (<, >) : <article>, <title>, <para>… Ces mots sont définis dans l'espace de noms Docbook. Le document est ouvert par le mot clé <article>, et clos par </article>. Notez la barre oblique, elle signifie la fermeture de la balise article. En XML, une balise doit toujours être fermée. À l'intérieur de cet article, il y a un titre <title>, un paragraphe <para>, et un acronyme <acronym>.

Ce qui est spécifique à XML, c'est le choix des chevrons pour identifier les balises, et l'obligation de les fermer. Les mots clés ne sont pas définis par la norme XML, mais par le vocabulaire choisi. En XHTML, l'élément racine aurait été html, en XSLT, cela peut être xsl:stylesheet ou xsl:transform. Ceci illustre la nature extensible d'XML. Ce n'est pas un jeu de noms réservés (exemple : echo, for, public, function, class…), mais plutôt des caractères réservés permettant de définir un « langage ».

Cet exemple illustre une autre spécificité de ce format. À part SGML, peu d'autres syntaxes permettent de séparer la définition sémantique de l'information (qu'est-ce qui est titre, lien, section…), de l'apparence qu'on lui souhaite (aujourd'hui un titre est souligné, demain on le voudra peut-être en bleu). Cela fait d'XML un excellent format pour conserver des textes ou des données. Pour s'en convaincre, regardons ce que la même information donne dans d'autres formats.

Formats binaires (un exemple Microsoft Word)[modifier | modifier le code]

Les logiciels, surtout pour le grand public, aboutissent généralement à des fichiers. Le format se soucie d'abord d'être fiable et performant, mais probablement pas de simplicité et d'interopérabilité.

Par exemple, le format d'enregistrement natif du traitement de texte Word n'est pas lisible par l'humain, le texte est difficile à extraire, le lien avec sa structuration (gras, italique…) est difficile à reconstruire. Théoriquement, seul le logiciel qui le produit est capable de le lire.

 ÐÏ à¡± á    >   þÿ !  #       þÿÿÿ  ÿÿ%    ð ¿      a     bjbj%ç%ç                  
 Extensible Markup Language
 XML  (Extensible Markup Language, « langage de balisage extensible »)
   i      8  @ñÿ  8     N o r m a l      
  CJ  _H  aJ  mH  sH  tH  N  @    N     T i t r e   1       
 ÿ
 [… beaucoup d'informations binaires supprimées]
 ÿ
 ÿÿÿÿ      À  F    Document Microsoft Word  MSWordDoc     Word.Document.8 ô9²q

RTF (Rich Text Format)[modifier | modifier le code]

Afin de favoriser l'échange avec d'autres traitements de texte, Microsoft proposa RTF Rich Text Format « format texte riche » (1987). Ce n'est pas un format binaire, les commandes sont inscrites en texte lisible, mais elles ne sont pas destinées à être écrites par un humain.

 {\rtf
 {\f2\fs36\b Extensible Markup Language}\par
 {\b XML} (Extensible Markup Language,  
 « langage de balisage extensible »)...
 \par
 }

On retrouve le besoin d'encadrer du contenu avec un marqueur (ici les accolades {}), d'attacher des propriétés à ces groupes. Ainsi, {\b XML} indique que les lettres XML sont en gras, bold : \b. Pour le titre, humains comme logiciels ne peuvent pas l'identifier par "\f2\fs36\b", ce code indique en fait l'apparence du paragraphe (gras, gros…). Ce format a montré qu'il pouvait fonctionner dans des logiciels, mais sa croissante complexité nous instruit sur ses limites. Il est difficilement extensible, et en tous cas, inutilisable pour structurer la sémantique d'un texte.

TEX[modifier | modifier le code]

Donald Knuth, auteur de The Art of Computer Programming « l'Art de la programmation », s'est un jour (1977) indigné de la qualité d'impression de ses ouvrages. Il développa TEX, une syntaxe très élaborée destinée à l'écriture humaine, spécialement puissante pour les équations mathématiques. On remarquera que RTF lui a repris ses séparateurs (\, {, }), mais pas son système de macros pour factoriser les commandes.

  \documentclass[a4paper, 11pt]{article}
  \title{Extensible Markup Language}
  \begin{document}
    \maketitle
  \end{document}

TEX reste le standard de l'édition scientifique de qualité, en particulier pour la mise en forme des équations complexes. Toutefois, cela reste un langage de programmation destiné à la mise en forme, davantage conçu pour l'apparence des documents que pour stocker ou transférer des données.

Wiki[modifier | modifier le code]

Une syntaxe wiki sait aussi séparer le contenu de la présentation.

  =={{lang|en|Extensible Markup Language}}==

  '''XML''' ({{lang|en|Extensible Markup Language}}, 
  « langage de balisage extensible »)…

Cependant, cette structuration repose ici sur des séquences de caractères particulières (==, '''). Or, le nombre de caractères sans signification n'est pas indéfini. Un tel format peut être approprié pour un seul type de document, mais ce n'est pas une syntaxe générique et facilement extensible.

XML, format textuel, structuré, et extensible[modifier | modifier le code]

Comparé aux langages plus haut, XML est une syntaxe générique et extensible. Il permet de structurer une grande variété de contenus, car son « langage » (vocabulaire et grammaire) peut être redéfini.

Composants et syntaxe d'un document XML bien formé[modifier | modifier le code]

D'un point de vue formel, un document XML est un arbre. Un tel arbre accepte différentes incarnations (objet en mémoire, flux d'événements…), et surtout, une version texte. Les composants principaux de ce modèle sont les nœuds, qui peuvent être de différents types (éléments, attributs, commentaires…) présentés dans l'exemple artificiel suivant :

  <?xml version="1.0" encoding="UTF-8"?>
  <!-- Commentaire -->
  <ex:collection
    xml:lang="fr" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ex="http://exemple.org"
  >
    <élément>Texte</élément>
    <dc:title>Astérix le Gaulois</dc:title>
    <ex:livre attribut="valeur" type="BD">
      <dc:title>Astérix chez les Belges</dc:title>
      <!-- élément répété -->
      <dc:creator>René Goscinny</dc:creator>
      <dc:creator>Albert Uderzo</dc:creator>
      <dc:description>
        <b>Astérix chez les Belges</b> est un album de 
        <a href="http://fr.wikipedia.org/wiki/Bande_dessinée">bande dessinée</a> 
        de la série Astérix le Gaulois créée par René Goscinny et Albert Uderzo.
        <br /><!-- élément vide -->
        Cet album publié en 1979 est le dernier de la série écrit par René Goscinny.
      </dc:description>
    </ex:livre>
  </ex:collection>

Le nœud document {/}[modifier | modifier le code]

Un document XML a toujours une et une seule racine, le nœud document. Dans le langage d'accès à un document XML, XPath, le nœud document est abrégé avec la barre oblique /, comme la racine de l'arborescence d'un système de fichiers Unix. La racine peut éventuellement comporter des enfants de type commentaire ou instruction de traitement, elle doit obligatoirement comporter un et un seul élément.

Les éléments <élément/> {*}[modifier | modifier le code]

Un élément est un nœud, désigné par un nom qualifié au sein d'un espace de noms (<espace:élément/>), pouvant contenir la plupart des autres nœuds : texte, éléments, attributs… (à l'exception du nœud document). Cette spécification formelle est à l'origine des particularités de XML comparé à d'autres formats :

répétable 
Une même propriété peut être répétée. L'exemple montre comment indiquer qu'un livre a plusieurs auteurs <dc:creator>. Dans un format tabulaire, avec un nombre de colonnes défini, ce n'est pas impossible, mais moins spécifié.
ordonné 
L'ordre des éléments est conservé. Quel que soit le langage employé, un outil XML doit permettre de distinguer le premier auteur du second (exemple : en XPath, /ex:collection/ex:livre/dc:creator[1] = "[[René Goscinny]]", /ex:collection/ex:livre/dc:creator[2] = "[[Albert Uderzo]]").
hiérarchique 
Les éléments XML sont imbriqués. Ceci rend ce format particulièrement adapté à représenter des arbres. L'exemple est limité à 2 niveaux (/ex:collection/ex:livre), une collection avec un titre (Astérix le Gaulois), et un exemple d'ouvrage de cette collection (Astérix chez les Belges). XML permet une récursivité complète. Par exemple, un livre, ou une thèse, peut être formaté très économiquement avec un élément <section>. La partie 2.3.5 correspondra à une structure d'imbrication XML /section[2]/section[3]/section[5].
mélangeable 
XML est plus qu'un format de données, c'est un format de document, permettant de mélanger du texte et des éléments, permettant par exemple de structurer du texte riche. Dans l'exemple, le texte de la description <dc:description> est enrichi avec des balises XHTML (gras <b>, lien <a>).
qualifié 
La qualification des noms contribue à la précision sémantique des contenus balisés. La notation xmlns="URI", ou xmlns:prefix="autre/URI", avec héritage hiérarchique, permet de rattacher tous les noms à une URI, et donc potentiellement à une documentation.

Les balises[modifier | modifier le code]

Une balise est un nom commode pour désigner les constructions entre deux chevrons <…> dans un fichier XML. On distinguera les balises ouvrantes <élément attribut="valeur">, les balises fermantes </élément> (sans attribut et avec barre oblique au début), et les balises vides <élément attribut="valeur"/> (barre oblique à la fin, attributs possibles). Il ne faut pas confondre les balises avec les éléments. Ces notations permettent de délimiter des éléments (ainsi que leurs attributs), mais les balises ne sont pas des nœuds dans le modèle abstrait du document. Le nom d'une balise ne peut pas contenir !"#$%&'()*+,/;<=>?@[\]^`{|}~ ou une espace et ne peut pas commencer par -. ou un chiffre.

Le texte {text()}[modifier | modifier le code]

Un nœud texte[XML 1] n'a pas d'enfants, il est toujours contenu dans un élément. Ainsi dans le cas de texte mêlé (exemple : <p> du texte en <b>gras</b> dans un paragraphe</p>), ce n'est pas le texte qui contient le gras, mais plutôt l'élément parent <p> qui contient plusieurs enfants : un nœud texte, un nœud élément <b>, puis nœud texte (exemple : p/node()[1]="du texte en ", p/node()[2]="<b>gras</b>", p/node()[3]=" dans un paragraphe").

encodage 
Par défaut, le texte est traité comme de l'Unicode (UTF-8). XML permet de spécifier d'autres encodages dans le prologue (ex. : <?xml version="1.0" encoding="ISO-8859-1"?>).
espaces 
En XML, espaces et sauts de lignes sont équivalents[XML 2], autrement dit, un document peut perdre son indentation en restant identique pour les traitements, sauf instructions particulières (exemple : bloc préformaté avec l'attribut @xml:space="preserve").

Les attributs, <élément attribut="valeur"/> {@*}[modifier | modifier le code]

Un attribut est un nom et une valeur. Un nom d'attribut a les mêmes possibilités de qualification qu'un nom d'élément. La valeur est un texte sans élément (ni autres nœuds). Un attribut est toujours porté par un élément. La valeur peut être vide <element attribut=""/>, mais pas nulle <element attribut> (cette écriture était permise en SGML, on la rencontre encore parfois à propos d'HTML, mais elle n'est pas acceptée en XML).

Un attribut est unique. La répétition d'un attribut de même nom sur le même élément provoquera une erreur du processeur XML. L'ordre des attributs n'est pas significatif, et peut ne pas être conservé dans certains traitements. <element attribut1="valeur1" attribut2="valeur2"/> et <element attribut2="valeur2" attribut1="valeur1"/> sont équivalents pour un processeur XML, même s'ils sont écrits différemment.

Les commentaires <!-- --> {comment()}[modifier | modifier le code]

En XML, les commentaires[XML 3] sont délimités par <!-- et -->. Le contenu d'un commentaire ne sera pas interprété.

<!-- Cet <élément> n'est pas fermé mais cela est autorisé dans un commentaire -->.

La chaîne de caractères « -- » ne peut apparaître dans le contenu du commentaire.

Le prologue[modifier | modifier le code]

En XML, le prologue[XML 4] est constitué de la déclaration XML <?xml version="1.0"?>, et de la déclaration de type de document (DOCTYPE). La déclaration XML est obligatoire à partir de la version 1.1. La déclaration DOCTYPE avait une grande importance en SGML. Elle attache le document traité par un processeur à son schéma (DTD, Document Type Definition, « Définition de Type de Document »), afin de le valider, et d'interpréter certains raccourcis (les entités). Désormais, il existe plusieurs langages de validation, et parfois plusieurs manières de les attacher. La déclaration DOCTYPE n'a plus la même importance.

Autres nœuds[modifier | modifier le code]

Afin d'être complet, on mentionnera aussi :

  • Les instructions de traitement[XML 5], <?xml-stylesheet href="transform.xsl" type="text/xsl"?> <?clé valeur?>, des nœuds destinés aux logiciels traitant le XML ;
  • Les sections d'échappement[XML 6], <![CDATA[<ceci> ne sera pas considéré comme un élément]]>.

Document bien formé[modifier | modifier le code]

Un document bien formé respecte les contraintes formelles définies ci-dessus. Certaines erreurs courantes se rencontrent particulièrement en (X)HTML, où les navigateurs sont plus tolérants qu’un processeur XML :

  • un fichier XML ne doit comporter que des caractères dans l'encodage déclaré (ex : pour un document UTF-8, certaines séquences sont interdites) ;
  • les caractères de la syntaxe (ex : <, &), doivent être échappés s'ils ne servent pas à délimiter une balise ou une entité (à remplacer par l'entité, &lt;=<, &amp;=&) ou qu'ils ne sont pas dans un champ CDATA ;
  • tout élément XML doit être fermé, les enchâssements forment un arbre strict, les chevauchements sont interdits ;
  • les éléments de commentaires et CDATA ne peuvent être enchâssés ;
  • les noms (éléments et attributs) sont sensibles à la casse ;
  • les valeurs d'attribut sont entre guillemets ;
  • un document XML n’a qu’un seul élément racine[XML 7].

Utilisations et langages dérivés[modifier | modifier le code]

Article détaillé : catégorie:XML.

SGML était une syntaxe générique, permettant de définir des langages spécialisés, comme HTML, mais il était surtout destiné au balisage de documents. En simplifiant SGML, les concepteurs d'XML prévoyaient d'élargir l'usage des chevrons (< >) à bien d'autres emplois, par exemple, la programmation. Les premiers langages basés sur XML par le W3C dessinent plusieurs directions d'utilisation.

  • 1999, RDF Resource Description Framework(en) « cadre de description de ressource »(fr). Ce modèle abstrait vise à définir un réseau de métadonnées adapté au web, représentable en XML.
  • 1999, XSLT eXtended Stylesheet Language Transformations « langage XML de feuilles de style, transformations ». Afin d'employer XML, il faut pouvoir le transformer. James Clark avait écrit un langage équivalent pour SGML (DSSSL, 1996), avec XSLT, il propose une syntaxe XML, permettant par exemple de transformer un contenu XML vers (x)HTML, ou XSL-FO.
  • 2000, XSL-FO eXtended Stylesheet Language - Formatting Object « langage XML de feuilles de style - Formatage d'objets ». XSL-FO est un langage de description de document permettant de composer un livre, ou un document PDF. C'était un complément indispensable à XML pour les industries de l'édition.
  • Enfin, il fallait une nouvelle syntaxe schéma tenant compte des espaces de noms pour remplacer les DTDs (ce qui deviendra XML Schema).

Quelques mois après sa sortie, XML est donc utilisé pour encoder des données, programmer des transformations, représenter un objet imprimable, et définir le schéma d'un document XML. Ceci annonce la variété des utilisations de cette syntaxe. Quelques années après, le catalogue est beaucoup plus important, couvrant des usages comme :

Ces catégories permettent une classification approximative des langages à base XML (ou acceptant une expression XML). La liste des langages plus bas repère quelques spécifications marquantes. Elles ont fait date dans le monde XML. Les succès, ou les critiques, permettent aussi de montrer à quoi XML est bon, et là où il est parfois discuté.

Balisage de document[modifier | modifier le code]

Le balisage de document est le métier initial d'XML. Les DTD SGML publiques comme TEI et Docbook l'ont adopté. XML aurait pu permettre l'apparition de nombreux autres schémas. On assiste plutôt à l'apparition de vocabulaires spécialisés, et combinables à l'exemple de la modularisation XHTML[7] :

Format de données[modifier | modifier le code]

XML s'est imposé comme format de référence pour l'échange de données, notamment de métadonnées. L'exemple d'un transfert d'informations entre base de données relationnelles permettra d'illustrer les avantages et limites de ce format pour cet usage.

L'exportation d'une table peut se faire en csv. Mais ce format comporte vite des limites à grande échelle (Internet). Il n'est pas auto-documenté (encodage du texte, séparateurs, ordre et nom des colonnes ?). Il demande une documentation externe rarement automatisée entre les partenaires. Que faire lorsque les tables source et destination n'ont pas des structures identiques ? Pour cette raison, on peut préférer des échanges en SQL (à la fois langage de définition de données et langage de manipulation de données). Cependant, malgré de nombreux efforts de normalisation, SQL comporte beaucoup de risques d'incompatibilité entre les implémentations[8]. XML est une solution plus robuste. On peut en constater l'efficacité sur Internet avec la syndication de contenu. Il n'y a pas d'exemple connu d'échange de métadonnées réparties sur autant de « clients » et de « serveurs ».

Verbosité ? - Comparé à l'export CSV d'une table, XML réplique le nom de la colonne pour chaque cellule (une fois pour un attribut, deux fois pour un élément). Le poids du fichier généré est supérieur à celui d'un fichier CSV. Dans des contextes où la bande passante est coûteuse (exemple : téléphonie mobile), cela n'a pas semblé poser de problème (WML), car ces répétitions se compressent très bien (zip).

Traitement lourd ? - Traiter du XML demande des bibliothèques spécialisées (processeur XML). Cela n'ajoute pas vraiment du temps de développement supplémentaire, du moins pour des équipes formées. Pour des petites tâches, un parseur ligne à ligne est parfois plus simple. Mais si la donnée se destine à se complexifier, à s'échanger plus largement, il vaut mieux choisir XML dès le départ.

XML : données ou document ? - Cette section est l'occasion de marquer la distinction entre XML données et XML document. Il ne s'agit pas d'une différence dans la syntaxe, mais dans ses usages, ses outils et ses communautés d'utilisateurs. Par SGML, XML vient du document. On lui a reproché par exemple ne pas avoir (nativement) de typage fort. On rencontre un mouvement analogue mais contraire en SQL. C'est originalement un format de données, on lui demande de plus en plus de traiter du texte. (CMS LAMP). En ce qui concerne XML, cette opposition se traduit dans la direction des efforts de spécification (types de données XML Schema, XPath 2.0, XSLT 2.0) avec des réactions du monde documentaire (Relax NG).

Langages de schéma[modifier | modifier le code]

Un processus XML complet comporte une étape de validation des documents. C'est le rôle d'un schéma de définir ces règles de validité. Faut-il que ce schéma soit en XML ? La question ne se posait pas en SGML, qui connaissait surtout les DTD, une syntaxe texte. Les limites rencontrées alors concernaient surtout la documentation des éléments et attributs déclarés (en). La documentation est très importante pour la réussite d'un standard XML. Celles de Docbook ou TEI constituent des livres complets, avec même des versions imprimées.

Ces communautés ont attendu avec impatience ce que donnerait XML Schema. Les nombreux outils de documentation automatiques qui sont apparus, avec un simple jeu d'XSLT, prouvent l'intérêt d'XML comme langage de description de format de document. Cependant, pour des choses simples, XML Schema s'est avéré difficile. Est-ce l'effet de trop de concessions ? Toujours est-il que malgré le nombre d'éditeurs derrière le W3C, la communauté est très intéressée par Relax NG, de James Clark. Ce modèle accepte une syntaxe XML, et depuis 2003, propose aussi une forme compacte, textuelle, qui n'est pas XML.

Autrement dit, il n'y a plus de réponse unique. Un schéma XML peut se définir dans un vocabulaire XML, ou autrement. L'évolution actuelle est de pouvoir combiner plusieurs langages de schémas, notamment le typage fort d'XML Schema, avec des motifs XPath pour Schematron, dans du Relax NG[9].

  • DTD Document Type Definition « définition de type de document », ISO.
  • XML Schema langage de Schéma XML, W3C, 2001.
  • Relax NG, DSDL acceptant une forme XML et une syntaxe compacte, ISO, 2001.
  • Schematron, validation par motifs, ISO, 2001.
  • LOM/ IEEE LOM, scorm 2004 spécifie que son fichier xml manifest doit être compatible avec le modèle de donnée SCORM LOM et le schéma XML .

Langages de représentation[modifier | modifier le code]

Organisation d'un document au format OpenDocument : content.xml (contenu), styles.xml (apparence), meta.xml (à propos du document)

On vante souvent XML pour sa faculté de séparer contenu, présentation et traitement. Attention, XML rend cette séparation possible, mais il n'interdit pas de tout mélanger, comme dans certaines pages XHTML sur Internet. En tous cas, ce format extensible a prouvé qu'il pouvait conserver la présentation des documents pour les applications les plus exigeantes. La variété des applications l'utilisant en est la preuve.

  • MathML - formules mathématiques, W3C, 1999, 2001, 2003.
  • Office Open XML - documents bureautiques, Microsoft Office versions 2007 et 2008.
  • OpenDocument - documents bureautiques.
  • SVG - Scalable Vector Graphics, graphiques vectoriels 2D, W3C, 2003.
  • SMIL - Synchronized Multimedia Integration Language, Intégration multimédia, W3C, 1998, 2005.
  • XSL-FO - eXtensible Stylesheet Language - Formatting Objects, langage extensible de stylage - formatage d'objets, W3C, 2001.
  • X3D - 3D multimédia, consortium Web3D.

Langages de programmation[modifier | modifier le code]

Dans de nombreuses applications, il est parfois pratique de développer un langage spécialisé, à usage local. Avec un schéma, un dialecte XML dispose d'une grammaire (un peu comme BNF). En guise de compilateur, il suffit par exemple d'une transformation XSLT qui génère du code Java, comme pour une bibliothèque de balises (taglibs). Cet exemple montre comment la syntaxe XML permet de définir des langages de programmation.

En théorie, la structure en arbre d'XML permet de représenter la hiérarchie d'un programme objets, ou l'imbrication des instructions d'un langage impératif. En pratique, les boucles sont le cas limite à partir duquel XML devient trop verbeux. Par contre, cette écriture est remarquablement adaptée aux syntaxes déclaratives (configuration, définition d'interface), et même, popularise les algorithmes fonctionnels (XSLT, logique d'une application web).

Il en résulte que l'on trouve de plus en plus d'XML dans les logiciels. Dans certains frameworks de développement web, il est possible de monter une application complète et complexe, en n'éditant que du XML.

Protocoles d'échanges[modifier | modifier le code]

Un protocole spécifie l'échange de contenus et d'instructions, entre un client et un serveur. HTTP est un modèle de protocole (qui n'est pas XML mais textuel). XML permet de baliser des contenus et d'écrire des instructions de programmation. L'universalisation de la connexion HTTP comme des processeurs XML explique pourquoi XML devient une solution courante pour créer un nouveau protocole.

Langages associés[modifier | modifier le code]

Les langages associés à XML sont des syntaxes qui ne sont pas en XML mais très attachées à XML. CSS illustrera bien la notion. Il peut être contenu dans un attribut (@xhtml:style), dans un élément (<xhtml:style>), ou relié à un document XML par une instruction de traitement (<?xml-stylesheet href="common.css" type="text/css"?>). XPath fournit un autre exemple de spécification entièrement destinée à XML, mais qui est justement sans éléments ou attributs, afin d'être associé à un langage XML (XSLT).

  • CSS (Cascading Style Sheet)
  • DTD (Document Type Definition)
  • Espace de noms (Namespace)
  • SGML
  • XPath et XQuery, langages de requête. NB: XQuery possède aussi une syntaxe XML, XQueryX.

Conclusion, étape suivante ?[modifier | modifier le code]

En 2001, on demandait à James Clark, un expert XML et SGML, What's the next step for XML? « Quelle est l'étape suivante pour XML » ? Il répondit d'abord que cela revenait à demander quelle est l'étape suivante pour le texte ASCII ou pour les fichiers à lignes délimitées. XML est en effet devenu un format aussi universel qu'Unicode pour structurer des contenus, comme un esperanto de l'informatique.

Qu'un arbre XML permette de représenter beaucoup de choses ne signifie pas que ce soit toujours la forme la plus adaptée, chaque utilisation a ses cas limites. Ainsi l'arbre bute sur un motif simple : l'intersection. Considérez ce texte tuilé : en gras et en italique. Le et appartient à deux zones, chose simulable mais pas native dans un arbre. On peut en faire une représentation XHTML comme ceci <strong>en gras <em>et</em></strong> <em>en italique</em>, dont on voit d'ailleurs qu'elle n'est pas unique, car la notion d'intersection est perdue. En XML, elle peut cependant être représentée par référence dans les propriétés d’une balise, ainsi on peut imaginer un code comme <text style="strong" id="1">en gras</text> <text héritage_style="1,2">et</text> <text id="2" style="em">en italique</text>. Ce détail se démultiplie dans les applications WYSIWYG qui produisent du XML (traitement de texte, SVG), rendant la source générée de moins en moins lisible par un humain. Ce détail amènera peut-être un nouveau format.

Selon James Clark en 2001, la nouveauté ne viendrait plus du format, mais de l'intégration applicative pour le traiter.

Outils et processus XML[modifier | modifier le code]

XML a désormais prouvé qu'il était une syntaxe très générique de balisage, propre à de nombreux usages. Cette réussite s'explique par des implémentations concurrentes de nombreuses interfaces de programmation (API) précisément spécifiées. Comment entre-t-il dans un processus applicatif ?

Pour détailler ces étapes, considérons le processus le plus simple, accessible depuis quelques années dans Internet Explorer ou Firefox. Ces navigateurs permettent de consulter des fichiers dans un XML sémantique (qui ne contient que des contenus, sans présentation), et de les voir comme des pages accompagnées de couleurs et de navigation. Ils sont transformés par le client, à l'aide d'une feuille XSLT. Prenons par exemple le site de Norman Walsh[note 3]. La source de la page servie ressemble à ceci :

  <?xml version='1.0' encoding='utf-8'?>
  <?xml-stylesheet href="/style/browser.xsl" type="text/xsl"?>
  <essay xmlns="http://docbook.org/ns/docbook" xml:lang="en" version='5.0'>
    <info>
      <title>XProc: An XML Pipeline Language</title>
  <!-- ... -->
  </xml>

Ce n'est pas du XHTML (ou du HTML) mais du DocBook. Les navigateurs ne sont pas capables de lire cette grammaire pour lui donner de la présentation. La page apparente est le résultat d'une transformation, signalée au navigateur par l'écriture <?xml-stylesheet href="/style/browser.xsl" type="text/xsl"?>. Le fichier browser.xsl explique comment transformer du DocBook en HTML. Le processus est immédiat, il est intéressant de le détailler, car on le retrouve dans des applications XML plus complexes.

  1. produire : le document DocBook doit avoir été produit ou résulter d'un import ;
  2. entrée : dans le navigateur, un parser lit le fichier XML pour construire un objet informatique, et vérifie que le document est bien formé ;
  3. transformation : le document DocBook est transformé en XHTML ;
  4. inclusions : dans certains contextes, il est possible d'inclure des fichiers qui deviendront des nœuds ;
  5. validation : le document peut être validé, pour vérifier que sa structure est conforme au schéma docbook ;
  6. sortie : le navigateur s'occupe de rendre le résultat de la transformation en une page pour un utilisateur.

Cette succession canonique d'étapes illustre ce que peut être le tuyau d'un processus XML complet. Elles vont maintenant être expliquées pour montrer comment elles peuvent apparaître dans d'autres contextes applicatifs plus complexes.

Exporter et Produire[modifier | modifier le code]

Une organisation qui a déjà son système d'informations qui n'est pas basée sur XML peut se demander comment produire du XML. Il existe de nombreuses manières d'exporter et de produire du XML, afin de rentrer dans une chaîne de processus XML.

  • Traitement de texte, la plupart des logiciels bureautiques proposent un export XML, quand ils ne sont pas nativement XML (LibreOffice, OpenOffice.org, Microsoft Word). Le plus simple est parfois d'enregistrer en HTML, récupérable moyennant un petit traitement. Il suffit de regarder les formats disponibles avec la fonctionnalité Enregistrer sous de son logiciel habituel.
  • SQL, la plupart des SGBD proposent un export XML.
  • Un éditeur XML est le meilleur moyen de faire produire par un humain un document correspondant exactement au schéma attendu.

Dans le cas en introduction, Norman Walsh utilise un simple éditeur de texte, emacs.

Parseurs et interfaces de programmation (API)[modifier | modifier le code]

Avant d'entrer dans un processus XML, un contenu doit être « xmlisé ». Cette opération est effectuée par un processeur XML. Les parseurs les plus répandus sont :

Il en existe beaucoup d'autres, en particulier en Java, adaptés à différents cas particuliers : ouvrir une API plus simple, accepter des documents mal formés comme HTML, traitements plus simples (notamment pour les documents longs).

Une fois « xmlisé », un document est accessible à différents langages, selon des interfaces de programmation standardisées. On distingue généralement l'approche DOM, modèle objet en mémoire, et l'approche SAX, génération d'événements.

  • DOM, Document Object Model, constitue un objet en mémoire de la totalité d'un document XML. Cette API permet l'accès direct à tous les nœuds de l'arbre (éléments, texte, attributs), pour les lire, ou les modifier. Il est par exemple très utilisé sur les navigateurs web avec JavaScript. Cette norme est écrite par le W3C.
  • SAX, Simple API for XML, est une alternative intéressante à DOM pour le traitement de documents longs. Quand un document entre dans un processeur XML, du code SAX peut capturer des événements, comme l'ouverture et la fermeture d'une balise, afin par exemple, d'écrire dans une base de données. À l'inverse, il est possible de générer des événements SAX, par exemple à partir de la lecture d'une base de données, afin de produire un document consommé par une autre étape d'un processus XML.

D'autres API existent, comme JDOM, dom4J (Java), ou StAX. Il n'est toutefois pas nécessaire de « programmer » pour traiter du XML, notamment avec des langages de transformation comme XSLT. Dans le cas en introduction, votre navigateur charge automatiquement le document docbook, et passe le contenu à une transformation xslt.

Transformation[modifier | modifier le code]

Article détaillé : Langage de transformation XML.

La transformation est l'étape d'un processus XML qui prend un document dans un certain schéma pour le transposer dans un autre espace de noms. L'exemple en introduction permet de bien comprendre l'opération. Soit un document textuel qui ne comporte que du contenu. Il sera nécessaire de lui ajouter au moins de la navigation avant de le diffuser sur Internet ; on en voudra aussi une version imprimée (pdf). La facilité de transformer un document XML, notamment avec XSLT, est une raison importante pour choisir ce format.

Inclusions[modifier | modifier le code]

Un document XML peut être constitué de plusieurs fichiers. Il y a deux normes actuellement concurrentes.

  • les entités externes[XML 8], issues de SGML, résolues a priori par un parseur validant, avant tout traitement du document.
  • xinclude[13], un élément XML spécial, pouvant être traité comme une étape séparée.

Les spécifications et les implémentations privilégient maintenant xinclude, bien que son adoption ait pu être discutée[14].

Considérons l'exemple d'un catalogue de produits pour voir les effets de l'un et de l'autre. On aura chaque produit sous la forme d'un document XML, et un document maître qui assemble toutes les références. En entités, cela s'explique ainsi.

  <!DOCTYPE catalogue [
    <!ENTITY article001 SYSTEM "articles/article001.xml">
    <!ENTITY article002 SYSTEM "articles/article002.xml">
  ]>
  <!-- Un exemple d'inclusion par résolution d'entité externe -->
  <catalogue xmlns="http://exemple.net/ns">
    <titre>catalogue</titre>
    &article001;
    &article002;
  </catalogue>

On remarquera que les entités sont déclarées en entête de document, puis appelées par une écriture du type &entité;. Cette syntaxe est initialement prévue pour des raccourcis, afin de factoriser l'écriture de variables comme un nom de produit ou une société. Ce mécanisme a été étendu pour résoudre les problèmes d'encodage en ASCII avant l'Unicode. Ce sont les entités caractère comme &eacute;=&#E9;=é. Pour le cas d'une inclusion d'un fichier, cela demande deux déclarations, celle du lien, celle de son appel. Ce moyen reste massivement employé par les sociétés qui ont connu SGML, d'autant que son support est beaucoup plus généralisé que celui d'xinclude.

La résolution a priori des inclusions peut avoir des inconvénients, en particulier pour des documents maître très lourds que l'on peut vouloir travailler sans leur dépendances. Xinclude permet cela, ainsi que de générer ces relations automatiquement (XSLT).

  <!-- Un exemple d'inclusion par xinclude -->
  <catalogue xmlns="http://exemple.net/ns"
    xmlns:xi="http://www.w3.org/2001/XInclude">
    <titre>catalogue</titre>
    <xi:include href="articles/article001.xml"/>
  </catalogue>

On retrouve cette évolution vers la modularisation d'XML où l'inclusion devient une étape optionnelle d'un processus.

Validation[modifier | modifier le code]

La validation est l'opération automatique qui vérifie la conformité d'un document XML à son schéma. Elle a pour but de délivrer des messages comme il n'y a pas de titre au chapitre 5, ou bien, la date de fabrication est dans le futur. La précision et la convivialité de cette vérification dépendent de la syntaxe utilisée.

En SGML, la validation s'effectuait toujours avant l'entrée d'un document XML dans un processus. On parlait de parser validant. Il n'y avait alors qu'un seul langage de validation (les DTDs) déclarés d'une seule manière à l'intérieur du document XML (la déclaration DOCTYPE, Type de document). La pratique a montré que la validation n'est pas toujours nécessaire, et même, contre performante. Dans d'autres cas, plusieurs étapes de validation peuvent être utiles, par exemple, une pour vérifier la structure de l'arbre XML, une autre pour vérifier les liens. L'évolution va vers une étape de validation distincte, déclarée à l'extérieur du document, et gérée selon les besoins du logiciel.

Les parseurs XML gardent l'ancien usage de conserver les bibliothèques logicielles de validation. Cependant la fonctionnalité peut être débranchée, ou appelée séparément. Il existe aussi des bibliothèques uniquement destinées à la validation. Le déploiement actuel rend la validation XML nativement accessible à la plupart des systèmes, et dans la plupart des langages de programmation.

Sorties[modifier | modifier le code]

Dans le cas en introduction, le navigateur est le consommateur final de XML, sous la forme de xhtml. Chaque langage XML de représentation (XSL-FO, SVG…) peut être consommé par une application utile à l'utilisateur. Certains formats peuvent être traités par plusieurs bibliothèques logicielles.

« Tuyaux » (XML Pipeline)[modifier | modifier le code]

Les étapes décrites plus haut sont en cours de normalisation par le W3C (XML Processing Model Working Group). La terminologie est officialisée. Ces idées ont déjà des implémentations concurrentes dans plusieurs frameworks (Apache Cocoon, Orbeon Presentation Server…). L'idée de tuyaux XML existe avant d'avoir été spécifiée.

Un tuyau est une entrée (Input Document), une sortie (Output Document), et une chaîne d'étapes (Step). Ces étapes traitent un flux XML (XML Information Set, Infoset[15]). La notion de flux d'information n'est pas spécifique à XML, on la retrouve à grande échelle dans l'informatique réseau, ou très simplement en ligne de commande Unix, avec la barre verticale, pipe en anglais). L'originalité réside dans la structuration propre à XML. Les octets traités par ces tuyaux sont des documents structurés. Les étapes sont standardisées et combinables. Elles sont définies par des composants (components) paramétrables (parameter), le tout en XML.

Conclusion[modifier | modifier le code]

Notes et références[modifier | modifier le code]

Notes :

  1. Ce nom est une idée de James Clark, elle est expliquée par Tim Bray (en) dans sa spécification annotée. Comme en anglais la lettre X se prononce « eks », elle peut être utilisée dans les sigles pour abréger un ou plusieurs mots commençant par ce même son comme eXtensible ou eXperience (XP). Plusieurs langages ont ainsi affiché leur parenté avec XML en s'adjoignant un X, comme XHTML.
  2. Le groupe de travail a été à l'origine appelé le «Editorial Review Board." Les membres à la première édition sont énumérés à la fin de la première recommandation XML, W3C 1998.
  3. Ou celui de Jeni Tennison et de plusieurs autres.

Références :

  1. le texte
  2. espaces vides
  3. commentaires
  4. prologue
  5. Instructions de traitement
  6. sections d'échappement
  7. There is exactly one element, called the root, or document element
  8. entités externes
  • (mul) Autres :
  1. (en) Rapports du W3C SGML ERB pour le SGML WG Et du W3C XML au XML ERB SIG, rapport compilé par C. M. Sperberg-McQueen, 4 décembre 1997
  2. (fr) interview, journal du net, septembre 2004
  3. (en) W3C Working Draft 14-Nov-96
  4. (en) « Its goal is to enable generic SGML to be served, received, and processed on the web in the way that is now possible with HTML. »(en)
  5. (en) Thinking XML: The XML flavor of HTML5
  6. Rationale and list of changes for XML 1.1
  7. (en) XHTML Modularization 1.1, W3C Working Draft 5 July 2006
  8. http://sqlzoo.net/
  9. (en) Eric van der Vlist, RELAX NG, « W3C XML Schema Type Library », O'Reilly & Associates, 2003 (ISBN 978-0-596-00421-7) [lire en ligne]
  10. http://xmlsoft.org/python.html
  11. http://fr.php.net/libxml
  12. http://libxml.rubyforge.org/
  13. (en) xinclude
  14. (en) Norman Walsh, XInclude, xml:base, and validation.
  15. http://www.w3.org/TR/xml-infoset/

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]

Sur les autres projets Wikimedia :

Autres technologies et théories intéressant XML :

Liens externes[modifier | modifier le code]

Références[modifier | modifier le code]

Divers[modifier | modifier le code]