Langage de balisage extensible (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 ?
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 :
- Le XML devrait pouvoir être utilisé facilement sur Internet ;
- Il est souhaitable que le XML puisse soutenir une grande variété d'applications ;
- Le XML devra impérativement être compatible avec le SGML ;
- Il faudrait que l'écriture des programmes traitant les documents XML soit simple ;
- Le nombre d'options dans le XML doit être réduit au minimum, idéalement à aucune ;
- Les documents XML devraient être facilement lisibles par l'homme et raisonnablement clairs ;
- La conception de documents XML devrait être préparée rapidement ;
- La conception de documents XML sera formelle et concise ;
- Il faudrait que ce soit facile de créer des documents XML ;
- 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.