Xerces est l’implémentation de référence de l’API JAXP. JAXP est une API Java qui définit la lecture d'un document XML, son analyse, et éventuellement sa transformation en un autre format. Le support XSL n’est pas présent dans cette API.
Cette API est divisée en trois hiérarchies :
-
javax.xml
: contient les spécifications de JAXP, principalement sous forme de classes abstraites et d’interfaces. Cette hiérarchie est divisée en deux :
parsers
, qui concerne l’analyse des documents et les standards DOM et SAX, et
transform
, qui contient le support XSLT permettant de transformer un document XML en un autre format, notamment en HTML ou en PDF.
-
org.w3c.dom
: contient un jeu d’interfaces qui représente la spécification DOM.
-
org.xml.sax
: contient les spécifications SAX. Cette hiérarchie est divisée en deux :
sax
et
sax.ext
, qui contient les interfaces des spécifications, ainsi que deux classes
HandlerBase
(classe qui supporte SAX 1, maintenant obsolète) et
InputSource
.
Les deux classes de base par lesquelles le travail peut commencer sont
SAXParserFactory
, qui permet de construire un objet de type
SAXParser
, et
DocumentBuilderFactory
, par lequel on peut obtenir un objet de type
Document
, qui supporte le standard DOM.
Pour comprendre la façon dont il faut utiliser SAX, il faut bien comprendre ce que l’on entend par
event driven
, c’est à dire géré par événements.
Conceptuellement, SAX reçoit un document XML comme s’il était sur un flux. À chaque fois qu’une balise ouvrante est rencontrée, un événement est généré, capté par une certaine méthode d’une certaine classe. L’objet événement transmis à cette méthode permet d’accéder aux attributs de l’élément. Quand un contenu de type
caractères non analysés
(PCDATA) est rencontré, une certaine méthode, différente, est appelée. Enfin, quand une balise fermante est appelée, une troisième méthode est appelée.
Ces méthodes particulières sont bien sûr des call-backs, fournis dans des classes par l’utilisateur, qui doivent implémenter certaines interfaces précises, définies par SAX.
Ces méthodes, plus quelques autres, sont définies dans une interface :
ContentHandler
, qui se trouve dans le package
org.xml.sax
. Le travail du développeur consiste donc à construire une implémentation de cette interface, et à la passer en paramètre à l’analyseur SAX au moment de sa construction.
Utiliser un analyseur SAX consiste donc à écrire des callbacks, implémentations de
ContentHandler
, et à les enregistrer auprès de l'analyseur. Si conceptuellement les choses peuvent paraître plus abstraites que de manipuler un DOM, techniquement elles sont beaucoup plus simples.
L’approche de DOM est différente de celle de SAX. Là où SAX propose une gestion par événement de l’analyse d’un document XML, DOM a pour but de construire une structure d’objets représentant le document XML. Cette structure en arbre contient des nœuds, qui sont en général soit des éléments XML, soit des éléments textuels.