XML, un format de données extensible et universel

XML, "eXtended Markup Language" est un successeur de SGML, de même que HTML, mais qui est plus général, il incorpore les données dans les noms de balises elles-même et comporte donc des possibilités descriptives illimitées.
Le format d'affichage est indépendant et dépend d'une structure associée, le XSLT. Les balises sont créées et validées selon des règles données par le DTD (Data type dictionary) qui décrit la grammaire (les balises), ou par Schema, un autre outils de validation écrit lui-même en XML.

XML, comme HTML, est traité par de nombreux langages de programmation, et surtout JavaScript, par l'intermédiaire de l'interface DOM (Modèle Objet Document). Le document est entièrement chargé en mémoire et sa structure est stockée de façon à pourvoir accéder à toute balise, ou tout ensemble de balises, grâce aux procédures de recherche interne.
Pour les documents de taille plus importante, on recourt plutôt au mode SAX, et dans ce cas le code XML est ligne par ligne dans le fichier et chaque balise est traitée une fois chargée en mémoire.

Accès au contenu d'un document XML

XML se caractérise par des balises significatives, créés selon les données du document. Le rôle des balises dépend de leur contenu et de l'outil qui parse le document XML. Le nom des balises est choisi pour la lisibilité du document, leur rôle dépend entièrement des outils qui accèderont à celui-ci.

Exemple de code, enregistrer une facture en XML:

<?xml version="1.0" ?>
<!- facture de Scriptol Corp. ->
<facture>
  <commande>000156</order> 
    <date timezone="Greenwhich">
         Jan 1, 2003 14:30:00                
    </date>
    <addresse> 
        <nom>Sherlock</nom>                
        <prenom>Holmes</prenom>                
        <rue>5 Baker St.</rue>
         <ville>London</ville>
         <pays>England</pays>
         <code>75004</code>
     </addresse>
     <montant> 270 </montant>
   </commande>
 </facture>

Un document de présentation et de test de validité associé sont nécessaire. Les navigateurs reconnaissent plusieurs doctypes qui décrivent une version du code XHTML ou HTML, et savent traiter le langage de présentation CSS pour chaque version.

Au delà du document textuel

XML n'est jamais qu'une sémantique, un langage à la syntaxe élémentaire qu'un outil sait "parler", autrement dit convertir des mots en actions. Il ne sert pas qu'à contenir du texte.

Commençons par regarder quelques applications du langage SVG. Elles sont étonnantes, faites de graphismes vectoriels que l'on peut même animer. Pourtant SVG n'est rien d'autre qu'un sous-ensemble de XML auquel on associe une API. Les balises deviennent des rectangles ou des formes diverses et leurs attributs des paramètres que l'on fait varier pour obtenir des animations. SVG est le langage compris par le navigateur (ou l'outil de rendu SVG) pour représenter des images de taille variable.

Un autre exemple est le format RSS. Une fois attribué un rôle à chaque balise, une liste de liens et de descriptions devient une revue de presse.

Dans le dialecte XHTML chaque balise à un rôle de mise en forme. C'est un sous-ensemble de XML équivalent sémantiquement à HTML, qui indique aux navigateurs comment présenter son contenu multimedia.

XML ou JSON?

On aurait pu exprimer les pages Web également en fichiers JSON, cela aurait réduit la taille des fichiers, mais sans doute ralenti le développement du Web car le code HTML reste nettement plus accessible aux non programmeurs.

Pour une application le choix du format est détailé dans l'article JSON ou XML, quel format choisir? Mais faut-il vraiment choisir? Ce sont deux façon de présenter la même chose, un contenu structuré et convertir un format dans l'autre n'est pas compliqué. En fait, une fois le contenu chargé en mémoire et traduit en objets et attributs, le sérialiser sous forme de fichier XML ou JSON est juste une question de convenance personnelle.
Le but de l'article est donc surtout de décider quand l'un ou l'autre format convient le mieux pour stocker des données, en fonction du langage ou du système qui les utilise.

Outils XML

Que ce soit pour accéder aux données contenues ou pour modifier le document, ou encore le transformer dans un autre format, plusieurs classes d'outils sont utilisables.

Les parseurs

Il en existe deux types de parseurs. Un parseur arborescent charge le document XML entièrement en mémoire, et l'on peut alors accéder au contenu par le Document Object Model, concrètement avec des instructions telles que getElementsByTagName.
Un parseur évènementiel au contraire, selon l'API SAX, charge le contenu progressivement et stocke soit l'ensemble des données, soit celles que l'on demande.

On n'a pas besoin de parseur XML dans l'environnement JavaScript + Node + HTML. Cela est intégré au navigateur. Ces parseurs sont donc seulement utiles pour les langages C++, Java ou autre.

Si vous voulez seulement vérifier qu'un code XML est bien formé, téléchargez ici XCheck pour Windows.

XQuery

XQuery est un langage d'interrogation de base de données XML, que ce soit sous forme d'un fichier ou d'une base de données dont la structure arborescente est similaire à celle de XML comme XIndice d'Apache.
Il permet donc de créer une base de données XML et l'utiliser. Téléchargez l'implémentation du GNU.

XSLT

Un langage XSL est composé de règles de transformations. Le XSLT convertit un document XML en un autre format tel que HTML et peut être utilisé pour accéder aux données. Xalan, transforme un document XML en HTML. Il existe en version Java et C++.

Editeurs

Doctored. Editeur simplifié pour XML et DocBook 5, qui présente le code sans les crochets. Schémas multiples. Open source sur GitHub.

Machine virtuelle

Xmlvm est une sorte de bytecode en XML. Il peut être compilé en Objective C, JavaScript, bytecode Java.