Le langage XML
Définition
Le langage XML (pour eXtensible Markup Language) est un langage de balisage défini par le W3C et dérivé du SGML.
Le but premier de ce langage est de permettre le stockage et l'échange de données grâce à une syntaxe lisible à la fois par une machine pour un traitement automatisé, mais également par un être humain.
Comme son nom l'indique (langage de balisage extensible), le XML fonctionne avec un système de balises que l'on ouvre et ferme. Il est extensible dans le sens où il n'y a pas un nombre défini de balises pouvant être utilisées et le développeur peut créer à sa guise n'importe quelle balise. Ainsi, le langage XML peut servir de base pour créer d'autres langages de balisage : c'est le cas par exemple pour les langages XHTML ou RSS.
A ce jour (février 2012) il existe deux versions du langage XML : La version 1.0 du 10 février 1998 et la version 1.1 du 4 février 2003. Le W3C, qui écrit et promeut ces normes, recommande aux systèmes utilisant XML de reconnaître les deux versions. Cependant, la majorité des systèmes utilisent encore la version 1.0.
Format
Un fichier XML suit quelques règles très simple et les principes de fonctionnement du langage peuvent être compris très rapidement :
- Un fichier XML ne contient qu'un seul élément « racine » contenant tous les autres.
- Toute balise ouverte doit être fermée
- Les balises ne doivent pas « s'enchevêtrer » : si l'on ouvre une balise A puis une balise B, il faut fermer la balise B avant de fermer la balise A.
Concernant la syntaxe, XML fonctionne comme suit :
- On ouvre une balise en écrivant son nom entre chevrons (<>). Par exemple : <aaa>, <livre> ou <bibliothèque>
- On ferme une balise de la même manière, mais en ajoutant une barre oblique (/) devant le nom : </aaa>, </livre> ou </bibliothèque>.
- Il est possible d'ouvrir et fermer une balise en même temps, si celle ci ne contient aucun élément. Pour cela, on ouvre la balise normalement mais l'on ajoute une barre oblique après le nom : <aaa/>, <livre/> ou <bibliothèque/>.
- On peut définir des « attributs » pour chaque balise. Pour cela, on indique le nom de l'attribut et sa valeur lors de l'ouverture de la balise : <aaa attribut1= « a »>, <livre auteur="J.Smith" titre="Ma vie, mon oeuvre"> ou encore <bibliothèque thème="philosophie">.
Ce qui nous donne finalement un fichier XML comme celui-ci :

On remarque donc que grâce à quelques règles simples et peu nombreuses, le format XML définie une structure précise qui permet de représenter les données sous forme d'arbre : il existe un noeud racine (sommet de l'arbre) qui possède un certain nombre d'enfants, qui eux-mêmes possèdent des enfants etc. C'est cette structure qui permet l'automatisation des traitements sur les fichiers XML.
Parsing
Les traitements automatisés des fichiers XML se font à l'aide de « parsers » XML. Un parser permet le découpage de fichiers en « tokens » et transmet l'information à l'application qui l'utilise. En d'autres mots, un programme traitant des fichiers XML utilisera un parser afin de récupérer les informations du document qui lui sont utiles. Ces parsers utilisent eux même des processeurs XML : il s'agit de programmes informatiques chargés de lire le document et de repérer où s'ouvre les balises, ce qu'elles contiennent etc...
Il existe principalement deux sortes de processeurs XML différents, aux fonctionnements radicalements différents :
Les processeurs SAX : ces processeurs utilisent une approche évènementielle. Le processeur parcours le fichier du début vers la fin, et créé un « évènement » à chaque moment important du parcours : un événement est créé lorsqu'une balise s'ouvre, un autre lorsqu'une balise se ferme etc. Ces processeurs sont très utiles lors de traitement en une seule passe. Par exemple si l'on recherche le contenu d'une balise en particulier. Il suffit d'attendre l'évènement correspondant et récupérer les informations voulues. Ces processeurs sont également très utiles lorsque l'on traite de gros volumes. En effet, le processeur ne garde finalement en mémoire que la « branche » de l'arbre sur laquelle il se situe, il n'est pas nécessaire de garder plus d'informations.
Les processeurs DOM : l'approche ici est tout à fait différente, car comme leur nom l'indique les processeurs DOM utilisent le modèle DOM, également définie par le W3C. Il s'agit ici d'une approche hierarchique ; on représente entièrement en mémoire l'arbre décrit par le document XML. Cette approche est donc idéale lors de traitements multiples : comme l'arbre de données est stocké en mémoire il est aisé de récupérer une information, revenir en arrière pour chercher une donnée concernant les noeuds parents ou même les noeuds frères etc. La navigation dans le document est beaucoup plus simple. Cependant, il est facile de comprendre qu'en cas de traitements sur des volumes importants les processeurs DOM se montreront vite inneficaces : représenter en mémoire des arbres de tailles gigantesques est impossible.
Validation
Un fichier XML peut être « bien formé » : il respecte les règles syntaxiques de la norme XML vues plus haut. Il peut donc être lu par un processeur XML.
Mais un fichier XML peut être également « valide ». Cela signifie que le fichier respectes des règles définies dans un schéma de validation. Plusieurs langages permettent de définir un schéma de validation : DTD, XSD ou encore RelaxNG. Un développeur peut donc définir des règles précises à respecter : nombre d'éléments présents dans le fichier, présence de tel ou tel noeud fils pour tel noeud parent, valeur des attributs d'un élément etc. Le fichier XML ne sera valide que si il respecte l'ensemble des règles précisées dans le schéma de validation.
Ces schémas peuvent donc être utiles pour créer son propre langage dérivé du XML. On précise dans un fichier DTD par exemple les règles à respecter pour être conforme à la syntaxe de notre langage. Ainsi, il suffit de faire passer une validation à un fichier xml pour vérifier si celui-ci est syntaxiquement correct.
Conclusion
Pour conclure, ce rapide tour d'horizon sur le format XML nous montre que ce dernier possède de nombreux avantages qui expliquent sa popularité mais également quelques désavantages :
Avantages :
- Le XML est un format OUVERT, il est facile pour n'importe qui de créer ses propres règles basées sur XML et ainsi inventer un nouveau langage dérivé. En 2009 on comptait plusieurs centaines de langages basés sur XML.
- Le XML utilise des règles strictes qui facilitent l'automatisation : les données représentées en arbre permettent l'utilisation de processeurs XML pour rechercher et manipuler rapidement l'information.
- C'est un format portable. Si une application utilise des fichiers XML pour stocker des données, peu importe si l'on utilise une version pour Windows sous processeur Intel ou une version Linux pour Solaris le fichier XML sera toujours exactement le même.
- Enfin, il s'agit d'un format lisible pour un humain. Malgré la structure permettant des traitements automatisés, un être humain est tout à fait capable de comprendre la structure d'un fichier XML et de modifier ou récupérer les informations qui y sont stockées et cela même sans connaître la norme en elle même.
Utilisation :
Ces multiples avantages font du langage XML un excellent choix pour divers applications : les fichiers de configurations par exemple, car le format est éditable « à la main » par un humain et lisible directement par l'application. XML est aussi le format de prédilection pour des échanges d'informations entre système indépendants : inutile d'effectuer une quelconque conversion, le XML est portable et utilisable sur n'importe quel système possédant un processeur XML.
Néanmoins XML souffre également de quelques désavantages :
Il s'agit d'un format lourd : il est nécessaire de respecter la syntaxe XML (ouvrir/fermer les balises etc) ce qui implique parfois d'écrire des documents XML long pour finalement peu d'informations utiles.
De même, XML n'est pas du tout optimisé pour la taille ou la performance.