XML est un langage de balise dérivé d’HTML et SGML, utilisé à partir de la fin des années 90. L’un des buts de ce langage est de décrire n’importe quel type de données d’une façon qui soit la plus portable possible. Ce langage a été rendu indispensable par l’expansion rapide de l’utilisation des serveurs web, bases de données, et autres serveurs de fichiers. Ces systèmes distribués peuvent vivre à de très grandes distances les uns des autres, et doivent malgré cela communiquer et échanger leurs données de façon parfaitement fiable.
Le XML a donc été créé pour répondre à ce besoin : assurer l’interopérabilité de systèmes d’information, quels que soient les systèmes et logiciels qui les gèrent.
Les spécifications du XML sont indépendantes de Java et sont gérées par le W3C (http://www.w3c.org/).
Il était logique que Java, dont la portabilité est l’un des premiers buts, s’intéresse immédiatement au support d’XML. Les premières API sont sorties quasiment en même temps qu’XML devenait largement utilisé.
La définition de la gestion des fichiers et flux XML est géré par un jeu d’interfaces, de classes abstraites et d’implémentations par défaut dans le package
javax.xml
. Certaines fonctionnalités telles que JAXB sot disponibles dans le package
javax.xml.bind
.
On distinguera deux parties dans ce document : la première s’intéresse à la définition des formats des fichiers XML : DTD et XML Schema. La seconde portera sur la gestion du contenu XML des fichiers, et décrira les API SAX, DOM et JAXB.
Enfin, on donnera des éléments sur le fonctionnement de XPath, qui permet d’interroger un fichier XML, un peu à la façon d’une base de données, et sur XSL, langage de transformations permettant de changer la structure d’un fichier XML, ou de le transformer en HTML ou PDF.
Les implémentations des spécifications écrites par le W3C sont assez nombreuses. Citons ici :
-
Xercès, implémentation de SAX et DOM de l’ASF (Apache Software Fondation), utilisé comme implémentation par défaut dans J2SE. C’est une API très complète, mais aussi très volumineuse et lourde à mettre en œuvre. Xalan est l’API qui implémente le XSL.
-
JDom, qui est une implémentation alternative (http://www.jdom.org/).
-
Dom4J, qui implémente également SAX, DOM et XSL. L’API est plus légère, et plus rapide sur la plupart des opérations (http://dom4j.github.io/).
Le support de XML dans le JDK est distribué entre plusieurs API et implémentations. Passons-les rapidement en revue.
-
JAXP : permet de traiter des documents XML, en offrant un support SAX, DOM et XSLT ;
-
JAXB : permet d’établir un lien entre des définitions de documents XML (supporte XML Schema) et des objets Java. Ce lien est décrit dans un document XML, ou directement dans le code Java sous forme d'annotations. JAXB est disponible sous forme d’extension en Java 4, puis intégré au JDK en version 5. La version 6 de Java intègre la version 2 de JAXB. Particulièrement utile pour développer des services REST, JAXB propose également le support de JSON.
-
JAXM : permet d’échanger des messages XML en utilisant SOAP (Simple Object Access Protocol).
-
JAXR : fournit un moyen pour interagir avec les bases de registres XML de type UDDI et ebXML.
-
JAX-RPC : permet d’appeler des procédures distantes (RPC : Remote Procedure Calls) via un protocole SOAP 1.3 ou 2.
-
JAX-WS : joue le même rôle que JAX-RPC. La différence réside dans le modèle de programmation. JAX-WS permet de décalrer des services web en annotant des classes Java, sans écrire de descripteur XML associé.
Nous examinerons JAXP et son implémentation de référence : Xerces. Xerces est développé par l’ASF, et est utilisé dans de très nombreux produits, commerciaux ou non.
Nous verrons ensuite un processeur XSLT, également celui de référence, développé aussi par l’ASF : Xalan. Xalan a besoin d’un processeur XML pour fonctionner, et Xerces lui convient parfaitement. Xalan est un ensemble d’API très complet, nous n’en verrons ici qu’une toute petite partie.