Langage de balisage extensible (XML)

Les principes du XML

La première version de la norme XML a été publiée par le W3C le 10 février 1998. Le langage de balisage extensible (Extensible Markup Language) est un sous-ensemble de SGML. 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 peut l'être le HTML.

Le XML décrit une classe d'objets de données appelés documents XML et décrit partiellement le comportement des programmes destinés à les traiter. Le XML est un profil d'application ou une forme restreinte de SGML, le langage normalisé de balisage généralisé. Par construction, les documents XML sont donc des documents conformes à la norme SGML.

L'application SGML la plus connue et la plus utilisée est le HTML. Mais cette dernière va plutôt à l'encontre de la philosophie SGML qui vise à séparer le balisage du contenu d'un document du balisage de son apparence. Le HTML comporte en effet un mélange de balises de présentation et de balises décrivant le contenu : la structure.

Le SGML représente la solution aux principaux désavantages du HTML, mais cette solution se fait au détriment des principaux avantages du HTML. Le SGML n'est pas simple, les textes doivent être validés, les liens hypertextes sont plus riches mais utilisent plusieurs méthodes, encore là plus complexes. Enfin la portabilité SGML est plus problématique sur Internet : on doit installer un logiciel accessoire pour visualiser un document SGML et on doit transmettre la DTD en même temps que le document.

Malgré les merveilles que peut réaliser le SGML, on doit constater que 12 ans après sa reconnaissance comme norme ISO, le SGML n'a pas atteint une masse critique chez les millions d'usagers du Web.

Les origines du XML

Le XML a été développé par un groupe de travail appelé XML Working Group constitué par le W3C (Consortium du World Wide Web) vers la fin de l'année 1996. Le groupe de travail était présidé par l'honorable Jon Bosak de la société Sun Microsystems.

L'intention du W3C était de chercher un juste milieu entre la simplicité du HTML et la complexité de SGML. Les noms qui ont été suggérés pour ce nouveau langage révèlent bien l'esprit dans lequel travaillaient ses développeurs :

  • MGML (Minimal Generalized Markup Language),
  • SLIM (Structured Language for Internet Markup),
  • MAGMA (Minimal Architecture for Generalized Markup Applications).

Finalement c'est l'acronyme XML (eXtensible Markup Language), probablement plus marketting, qui emporta le plus grand nombre de votes parmi les membres du comité.

Le XML combine les points forts de SGML à la simplicité du HTML. La norme SGML comporte plus de 300 pages ; XML en a seulement 32.

Le XML, c'est quoi ?

Principe d'un parseur XML

Les documents XML se composent d'unités de stockage, appelées entités, qui contiennent des données encadrées  par des balises. Le balisage décrit les structures logiques et les structures de stockage du document. La norme XML fournit un mécanisme pour imposer des contraintes à ces structures.

Un module logiciel appelé parseur XML est utilisé pour lire les documents XML et pour accéder à leur contenu et à leur structure. On imagine bien qu'un parseur XML ne travaille pas dans le vide mais effectue son travail pour le compte d'un autre module, appelé l'application. Cette spécification décrit le comportement requis d'un parseur XML, c'est à dire la manière dont il doit lire des données XML et les informations qu'il doit transmettre à l'application.

Le cahier des charges confié au groupe de travail XML était le suivant :

  1. Le XML devrait pouvoir être utilisé facilement sur Internet ;
  2. Il est souhaitable que le XML puisse soutenir une grande variété d'applications ;
  3. Le XML devra impérativement être compatible avec le SGML ;
  4. Il faudrait que l'écriture des programmes traitant les documents XML soit simple ;
  5. Le nombre d'options dans le XML doit être réduit au minimum, idéalement à aucune ;
  6. Les documents XML devraient être facilement lisibles par l'homme et raisonnablement clairs ;
  7. La conception de documents XML devrait être préparée rapidement ;
  8. La conception de documents XML sera formelle et concise ;
  9. Il faudrait que ce soit facile de créer des documents XML ;
  10. La concision dans le balisage XML n'a que peu d'importance, c'est à dire que le XML peut être « verbeux ».

Les documents XML

Définition

Un ensemble de données est un document XML s'il est bien formé, tel que précisé dans la spécification du XML. De plus, un document XML bien formé peut être valide s'il obéit à certaines autres contraintes.

Chaque document XML a une structure logique et une structure physique. Physiquement, le document se compose d'unités appelées entités. Une entité peut appeler d'autres entités pour causer leur inclusion dans le document. Un document commence à la « racine », il s'agit de l'entité document. Logiquement, le document se compose de déclarations, d'éléments, de commentaires, de caractères et d'instructions de traitement, qui sont indiqués dans le document par du balisage explicite. Les structures logiques et physiques doivent s'imbriquer correctement.

Données textuelles et balisage

Un document XML est composé de données textuelles et de balisage.

Le balisage se compose essentiellement de balises ouvrantes et de balises fermantes. Mais on peut rencontrer d'autres types de balises tels que des balises d'éléments vides, des balises d'appels d'entité ou d'appels de caractère, des  commentaires, des délimiteurs de section CDATA, des balises de déclarations de type de document, et des balises d'instructions de traitement.

Tout le texte qui n'est pas du balisage constitue les données textuelles du document.

Le Prologue et l'encodage des caractères

Les documents XML peuvent, et devraient toujours, commencer par une déclaration XML qui indique la version de XML utilisée. On l'appelle le prologue. L'exemple suivant est un document XML contenant un prologue ; il est bien formé mais non valide :

<?xml version="1.0"?>
<accueil>Bonjour!</accueil>


Le prologue est également utilisé pour spécifier l'encodage des caractères, comme ceci :

<?xml version="1.0" encoding="UTF-8"?>
<accueil>Hello!</accueil>

La déclaration de type de document

La fonction du balisage dans un document XML est de décrire sa structure de stockage et sa structure logique et d'associer des valeurs à ses structures logiques. Le XML fournit également un mécanisme, la déclaration de type de document, pour définir des contraintes sur la structure logique et pour gérer l'utilisation d'unités de stockage prédéfinies. Un document XML est valide si une déclaration de type de document y est associée et si le document est conforme aux contraintes qu'elle impose.

La déclaration de type de document doit apparaître avant le premier élément dans le document, donc avant la première entité de donnée.

La déclaration de type de document XML associe un document XML avec une déclaration de balisage qui fournit une grammaire pour la classe de documents de ce type. Cette grammaire est connue sous le nom de DTD (Déclaration de Type de Document). La déclaration de type de document peut désigner un sous-ensemble externe contenant des déclarations de balisage, peut contenir des déclarations de balisage directement dans un sous-ensemble interne ou peut faire les deux. 

Une déclaration de balisage est une déclaration de type d'élément, une déclaration de liste d'attributs, une déclaration d'entités ou une déclaration de notation.

Exemple de la déclaration de type de document pour un fichier sitemap.xml :

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">

Structures logiques

Chaque document XML contient un ou plusieurs éléments, dont les limites sont marquées par des balises ouvrantes et fermantes. Il existe également des balises d'élément vide. Chaque élément possède un type, identifié par son « identificateur ». On peut lui associer un jeu d'attributs. Chaque spécification d'attribut comprend un nom et la valeur qui lui est associée.

Balises ouvrantes, balises fermantes et balises d'élément vide

Le début de chaque élément XML non vide est marqué d'une balise ouvrante.
Exemple de balise ouvrante :
<motdef>

La fin de chaque élément qui commence par une balise ouvrante doit être marqué d'une balise fermante contenant l'identificateur de l'élément spécifié dans la balise de début.
Exemple de balise fermante :
</motdef>

Le texte qui est compris entre les deux balises s'appelle le contenu.

Si un élément est vide, il devrait être indiqué soit par une balise ouvrante suivie immédiatement d'une balise fermante, soit par une balise d'élément vide. Une balise d'élément vide se formule d'une manière particulière :
<motdef/>

Les balises ne peuvent pas se chevaucher, c'est-à-dire qu'on ne peut pas avoir la structure logique suivante :
<motdef>
   <balise2>
</motdef>
   </balise2>

Déclaration d'attributs

On utilise des attributs pour associer des couples nom-valeur aux éléments. Les spécifications d'attributs ne peuvent apparaître qu'au sein de balises ouvrantes et de balises d'élément vide.

Exemple de déclaration d'attributs :
<motdef id="dt-chien" mot="chien">

Souplesse du XML

L'une des principales caractéristique de la norme XML est son côté extensible et flexible. Contrairement à un fichier à plat qui possède des enregistrements de longueur fixe, eux-mêmes composés de colonnes de longueur fixe, le XML n'a pas ce genre de limitations. La taille de chaque élément est fixée par la longueur de la donnée, c'est à dire par le nombre de caractères qui se trouvent entre les balises ouvrantes et fermantes. De même, chaque enregistrement aura une longueur variable et, encore mieux, les données optionnelles n'ont pas à être indiquées. On peut même avoir des éléments différents en fonction de la valeur d'un autre élément.

Quelques exemples :
<personne>
   <civilite>M.</civilite>
   <nom>Durand</nom>
   <prenom>Jean</prenom>
</personne>
<personne>
   <civilite>Mme</civilite>
   <prenom>Jeanne</prenom>
   <nom>Durand</nom>
   <nomjeunefille>Dupont</nomjeunefille>
</personne>

Dans cet extrait d'un document XML on peut voir que l'élément "nomjeunefille" n'apparait que lorsque la civilité est "Mme" mais pas pour une civilité qui serait "M.". On peut aussi voir que pour une personne donnée, l'ordre des éléments sous-jacents n'a pas d'importance car chaque donnée est encadrée par une balise ouvrante et une balise fermante. Il est donc parfaitement clair que "Jeanne" est le prénom de Mme Durand. Dans un fichier à plat, si on inverse deux champs le système comprendrait alors que "Durand" est le prénom de Mme Jeanne, ce qui n'est pas du tout la même chose.

<article>
   <categorie>vetement</categorie>
   <nom>Robe de soirée</nom>
   <couleur>Noire</couleur>
   <taille>38</taille>
</article>
<article>
   <categorie>Disque Dur</categorie>
   <nom>Western Digital</nom>
   <capacite>2To</capacite>
</article>


Dans cet autre exemple on voit que les éléments varient en fonction de la catégorie de l'article. Pour un vêtement on précise son coloris et la taille alors que pour un disque dur on précise sa capacité.

Utilisation du XML

L'une des principales utilisation du XML se retrouve dans les échanges interbancaires. Depuis 2014, tous les virements et prélèvements au sein de la zone euro se font avec la norme SEPA (Single Euro Payments Area). La norme SEPA c'est essentiellement du XML. Toutes les spécifications de ces fichiers XML sont regroupées dans la norme ISO 20022.

La zone SEPA ne s'arrête pas aux 17 pays de la zone euro (Allemagne, Autriche, Belgique, Espagne, Estonie, Finlande, France, Grèce, Italie, Irlande, Luxembourg, Pays-Bas, Portugal, Slovénie, Chypre, Malte, Slovaquie) mais englobe également les 10 autres pays de l'Union Européenne qui sont la Bulgarie, le Danemark, la Hongrie, la Lituanie, la Lettonie, la Pologne, la République Tchèque, la Roumanie, le Royaume-Uni et la Suède. Il faut ajouter à ça les 3 pays de l’Espace Economique Européen : Islande, Liechtenstein et Norvège, ainsi que la Suisse et Monaco.

Les échanges interbancaires représentent une masse importante de l'information circulant sur les réseaux.

Glossaire informatique... Cette page est listée dans le Glossaire Informatique      Plus...