XML

Un article de Agora2ia.


Sommaire

Présentation

  • entre chevrons
  • attribut="valeur"

XML (pour eXtensible Markup Language) est, comme son nom l'indique, un langage extensible à base de balises rigoureux.


Un document XML est avant tout un fichier texte, et peut donc être édité avec n'importe quel éditeur. Cependant, l'utilisation massive de XML, la manipulation de document complexes ou encore l'utilisation conjointe de diverses technologies XML sont autant d'arguments pour utiliser un éditeur orienté XML, tel que XmlSpy.


La méthaphore

On peut voir ce document XML comme une boîte contenant :

  • Soit d'autres boîtes (les balises),
  • Soit des papiers (le texte).

Un peu d'histoire

XML a émergé en 1996 pour devenir une norme du W3C en 1998. Au delà de ces dates officielles, et de ces quelques années d'ancienneté, il faut savoir que les concepteurs de XML ont simplement pris le meilleur de SGML et profité de l'expérience sur HTML pour produire une technologie qui n'est pas moins puissante que SGML, mais assurément plus simple et rigoureuse. Datant du début des années 80 et devenu norme ISO en 1986, SGML était utilisé dans des projets de documentation de taille importante.


Beaucoup de rigueur

Pour être correct, un document XML doit être forcément bien formé, et éventuellement valide.


Pour être bien formé il doit comprendre :

  • Un prologue sans déclaration de type de document.
  • Des elements (ou balises), avec une racine unique.
  • Une imbrication correcte des balises :
    • Les noms d'attributs doivent être en minuscules.
    • Toute balise ouverte doit être refermée.
    • Toute balise fille ouverte après sa mère doit être refermée avant cette mère.
  • La valeur des attributs doivent être encadrées de guillemets.
  • Eventuellement des commentaires.


Pour être valide, un document XML doit être conforme au document qui spécifie sa grammaire, à savoir quelles balises il peut contenir et selon quel agencement. Il faut ici comprendre qu'il peut y avoir autant de grammaires possibles que de besoins ou d'esprits créatifs...


La méthaphore

Pour filer la métaphore de la boîte, la balise racine correspond à la boîte principale qui contient toutes les autres. De plus, sur chaque boîte, on peut coller des étiquettes en y écrivant des informations : ce sont les attributs des balises.


Comparaison avec HTML

Pour bien assimiler cela, nous allons rapprocher XML à l'un de ses proches cousins : HTML.

En [[HTML], nous pouvons écrire tout ou partie des balises en majuscules, certaines peuvent ne pas être refermées (<img>, <br>...), les attributs peuvent ne pas être entre guillemets, et il est parfois toléré d'enchevêtrer les balises (<i><b>bla bla</i></b>) : un document HTML n'est donc pas un document XML bien formé. Le HTML est trop permissif, trop laxiste. Vous allez me dire qu'il suffit de faire un petit effort pour respecter ces règles dans un document HTML et devenir conforme à XML. C'est justement ce que spécifie xHTML, qui permet de réaliser des documents HTML conformes aux spécifications XML.


De plus, pour être correct, un document HTML ne peut contenir de balises non prévues, telle que <address> ou <brice-de-nice> par exemple. Dans le cas contraire, il ne sera pas valide. En effet, la grammaire HTML définie un nombre précis de balises qui respectent un agencement tout aussi précis (<HTML><HEAD></HEAD><BODY><P>blabla</P></BODY></HTML>). C'est ce qui permet aux différents navigateurs Internet de fonctionner. C'est aux qui savent d'après les spécifications commetn assurer le rendu des balises (en gras pour <b>, afficher une image pour <img>...).


L'extensibilité...

Nous touchons là une force d'XML. XML ne spécifie en effet que quelques règles syntaxiques (définissant le caractère bien formé), et laisse libre recours à la grammaire (qui définit elle la validité d'un document) qui pourra donc être déterminée en fonction du besoin. Une fois cette grammaire établie, elle pourra être consignée dans un document prévu à cet effet (au format DTD ou SchemaXml) puis être attaché au document XML, pour guider son édition ou valider son contenu.


Il faut savoir que dans l'industrie, selon les problématiques et les domaines métiers, des grammaires émergent. On peut par exemple citer DocBook, HrXml, XUL, WSDL...

Du fait qu'il soit non figé, XML est souvent considéré comme un méta-langage, qui permet de créer d'autres langages, dialectes, grammaires, par la définition de nouvelles balises.


La guerre des mondes XML

Dans certains cas on assite même à une véritable guerre au standard.

Le choix d'un dialecte implique souvent de sélectionner un éditeur et impose donc de choisir son camp !

La difficulté réside donc dans le fait de ne pas ou peu s'engager.

Autour de XML

Enfin, au fil des années et des besoins, tout comme les DTD et les Schéma XML, d'autres technologies connexes sont apparues autour de XML, plus ou moins complexes, certaines dérivant de XML, toutes vouées à faciliter son usage. On peut par exemple citer : XSL, XLink, XPath, XQuery, XPointer...

Pour plus d'information voir la page des TechnologiesXml, qui reprend notamment le dictionnaire paru dans 01 Informatique... TODO

Il faudra être vigilent ici: les différences de maturité et d'ancienneté de ces technologies font que certaines sont plus achevées, plus abouties, plus stables. D'autres au contraire n'en sont qu'a l'état larvaire. Et lorsqu'une technologie est suffisamment élaborée pour répondre au besoin, il faudra encore faire attention pour ne pas tomber dans l'effet de mode, les tehnologies pouvant rapidement tomber en désuiétude.

Utilisation

XML permet avant tout de structurer les données, que ça soit pour les échanger (JMS), ou pour les stocker (fichiers de paramétrage ou BasesDeDonnées natives XML). Par opposition aux traditionnels fichiers CSV (fichiers tabulaires avec un séparateur texte du type « ; »), les fichiers XML ne souffrent pas de ce manque d'expressivité qui fait la hantise des développeurs en termes d'utilisation, de maintenance et d'extensibilité.


Autre interêt de l'utilisation de XML est l'effort d'abstraction qu'il implique pour extraire le contenu du contenant. En effet, le simple fait de regrouper uniquement les données au sein d'un même document, assure que son utilisation, son traitement est décoréllé, qui plus est souvent dans un autre langage.

Par opposition à HTML par exemple, XML ne contient que des données brutes, sans aucune information quand à la façon de les afficher.


XML peut tout autant être compris par l'Homme que traité par la machine. Mais il faut garder à l'esprit que sa vocation première est le traitement.

Ces traitements peuvent alors se faire de deux façons différentes :

  • Soit à l'aide d'un parseur et d'un autre document qui décrit comment transformer et / ou afficher le document XML : c'est le cas de XSL.
  • Soit via programmation, en utilisant l'API DOM et / ou SAX, selon le besoin. Il y a quelques années j'aurais dit « Attention, la plupart des langages supportent mal ou en partie l'utilisation de XML ! », maintenant, il est clair qu'il faudrait vraiment manquer de chance pour utiliser un tel langage.


SAX (Simple API for Xml) est une API permettant de parser un document XML de manières événementielle. Un parseur SAX traite le document sous forme de flux qu'il gère du début jusqu'à la fin. Il détecte les éléments de début (<couleur>), leurs valeurs (vert) et les éléments de fin (</couleur>), et appelle des fonctions assocées (que l'on peut définir) en respectant l'ordre.

L'API DOM (Document Object Model) quand à elle permet de charger et manipuler en mémoire un modèle objet de type « document » sous la forme d'un arbre dont les nœuds représentent les éléments et attributs du document XML. L'API DOM définit des méthodes de modification de l'arbre (ajout, suppression, renommage des nœuds...).


On comprend que l'API SAX est conseillée lorsque l'on doit manipuler quelques éléments d'un grand document XML, alors que l'API DOM sera plus adaptée à l'édition d'un document dans son ensemble, de taille limitée.


SAX

C'est l'acronyme de Simple API for XML.

Ce type de parseur utilise des événements pour piloter le traitement d'un fichier XML. Un objet (nommé handler en anglais) doit implémenter des méthodes particulières définies dans une interface de l'API pour fournir les traitements à réaliser : selon les événements, le parseur appelle ces méthodes. Pour en savoir plus sur SAX, visitez le site officiel.


DOM

C'est l'acronyme de Document Object Model. C'est une spécification du W3C pour proposer une API qui permet de modéliser, de parcourir et de manipuler un document XML. Le principal rôle de DOM est de fournir une représentation mémoire d'un document XML sous la forme d'un arbre d'objets et d'en permettre la manipulation (parcours, recherche et mise à jour).

A partir de cette représentation (le modèle), DOM propose de parcourir le document mais aussi de pouvoir le modifier. Ce dernier aspect est l'un des aspect les plus intéressant de DOM.

DOM est défini pour être indépendant du langage dans lequel il sera implémenté. DOM n'est qu'une spécification qui, pour être utilisée, doit être implémentée par un éditeur tiers. DOM n'est donc pas spécifique à Java.

Le parseur DOM pour JAVA le plus répandu est Xerces que vous pouvez trouver sur Apache.org.




L'expressivité qui fait une force de XML lui vaut également parfois l'appelation de langage verbeux. Cette force peut donc se transformer en limite.

  • Tout d'abord sur le plan des performances. Parser un long fichier XML pour en extraire quelques informations peut faire perdre du temps. Dans ce cas on privilégiera l'API SAX à DOM.
  • Ensuite, des transferts fréquents de gros volumes de données XML peut entrainer une saturation de la bande passante.
  • Enfin, selon la taille du nom des balises et de leurs attributs, sans oublier les chevrons et caractère de fermeture, un fichier XML peut être 3 à 4 fois plus volumineux que son équivalent tabulaire, voire binaire.

Il faut cependant relativiser ces aspects, la taille moyenne des mémoires (vives et de masse), la puissance des processeurs et les débits réseaux (notamment sur Internet) augmentent de façon continue.


Comme dans d'autres langages, il est possible de regrouper les symboles (balises) dans des espaces de nom, afin d'éviter les conflits de nommage et de faciliter la réutilisation et l'intégration. XSL est une belle illustration de ce principe, et XSD un moyen de le développer . Il est en effet possible dans un SchemaXml de fusionner les balises de deux espaces de noms différents au sein d'un troisième.

Conclusion

Ainsi, on peut voir au terme de cette présentation qu'il est aisé de s'égarer dans le dédale des technologies XML. Un bon moyen de ne pas perdre son chemin est de ne pas oublier que la destination finale demeure le besoin initial. XML n'étant qu'un chemin parmi d'autres pour y arriver, chemin aux nombreux détours.

XML répond mieux à certaines problématiques :

  • assurément le paramétrage,
  • les échanges et communications (entre modules applicatifs, voire entre applications différentes : on parlera alors d'interopérabilité),
  • éventuellement la persistance mais pas dans le stockage à grande échelle.

Il faut garder à l'esprit que plus l'on détourne XML de son utilisation nominale, moins il y a de solutions pre-existantes, plus il y aura de développements.

Une fois XML choisi, il faudra ensuite se demander quelle(s) technologie(s) connexe(s) utiliser : un document de petite taille ou généré nécessite-t-il la mise en place d'une DTD ? Si oui, n'existe-t-il pas déjà un standard dont s'inspirer tout ou partie ?

Enfin, dés lors que l'on choisit une technologie XML, il faut être vigilent sur sa maturité, et tout autant sur celle des outils qu'elle implique. En effet, en raison de la jeunesse de certaines d'entre elles, on peut avoir des surprises : bugs, stabilité, performances, complétudes des outils par rapport aux spécifications. Il faut d'autant plus être vigilent que les dialectes étant le plus souvent incompatibles entre eux, ils pourront difficilement être compléter avec un voisin : il faudra complètement changer de solution.

Dans la majeure partie des cas, l'utilisation de XML obligera à l'abstraction, ce qui permettra un contrôle plus aisé. Il faudra cependant être vigilent à ne pas s'arnacher de tcehnologies inutiles, propriétaires ou pas encore mures.


Notes

  • No XML, please! sur JavaWolrd.com : A small, flexible, and easy MVC Web framework with no XML.

Les technos

Précisons les choses.

On pourra donc regrouper des informations au sein d'un document XML.

Pour traiter ce document, on a :

  • Soit CSS qui permet de traiter "à la volée" un document XML. De la même façon qu'elle est utilisée par le navigateur web pour afficher une page HTML, la feuille de style CSS est utilisée à l'affichage par l'outil qui affiche le document XML afin d'assurer un rendu plus agréable. Ce mécanisme est même utiliser par certains éditeurs XML afin de rendre plus conviviale l'édition.
  • Soit XSL qui décrit les transformations (en XML). Le XML et le XSL sont ensuite passés à un parseur, par exemple Xalan, qui va générer le XML résultat.
  • Soit DSSSL qui décrit également les transformations mais selon le langage Scheme, assez proche du Lisp.
  • Soit par programmation, via l'API DOM ou SAX, via une implémentation telle que par exemple celle de la librairie Xerces (Cpp ou Java).

Dans les deux cas, on pourra utiliser les technologis connexes pour nommer er identifier les noeuds (XPath).

Pour contrôler le format de ces données on pourra utiliser une grammaire à part, au format DTD ou XSD, de son cru ou bien un standard existant, tel que DocBook pour l'édition de documents.

Au delà de la manipulation de données, on pourra utiliser des standards XML pour répondre à des problématiques :

  • SOAP et les WebServices pour l'inter-connection,
  • SVG pour définir des images vectorielles,
  • XUL ou ...clet pour créer des interfaces utilisateur
  • RSS, RDF...

Outils

Edition fonctionnelle

Langages connexes

Voici une liste non exaustive des standards dérivés de Xml :

Image:Xml-langages.gif

Ressources

  • Amaya est le navigateur/éditeur du W3C supportant nombre de spécifications XML, dont XHTML, SVG, MathML, RDF, XLink, XPointer, etc. La version 9.1 propose une nouvelle interface graphique, basée sur wxWidgets et la version 8.7.2 couvre les mêmes fonctionnalités mais avec l'ancienne interface graphique. Disponible sur le site du W3C.
  • Vex est un éditeur XML s'appuyant sur eclipse (IDE Java). Cachant la structure XML au profit d'une approche plus proche d'un traitement de texte (utilisation de DTD et de CSS), Vex est plus adapté pour l'édition de documents XHTML ou Docbook que pour l'édition de documents de données. Vex est disponible sous licence LGPL
  • XML tools d'après le W3C.