SAX est une recommandation de fait (issue des listes de discussion Monthly Archives for xml-dev), qui permet d'interfacer des programmes avec un "reader XML" fournissant, au travers d'un API, un séquence d'événements issus des objets rencontrés dans le fichier XML.
Ces événements sont de type : début d'élément, attribut, fin d'élément. SAX repose donc, à la différence de DOM et de XSLT qui présupposent un arbre d'objets typés et valués, sur une vision séquentielle et événementielle de l'information.
L'objectif de SAX est de fournir une API simple, permettant d'accéder au contenu d'un document XML. Pour ce faire, la liste de discussion xml-dev, a défini une spécification, basée sur une lecture séquentielle de ces documents, permettant d'agir sur chaque événement rencontré lors de cette lecture.
Dans sa version 2, SAX propose un ensemble d'interfaces permettant d'accéder à tous les événements disponibles lors de la lecture séquentielle d'un document XML. On y trouve des notions de début et de fin de document ou d'élément, d'attributs et de valeurs d'attribut, de contenus textuels, d'entités, de processing instructions, etc. On y trouve aussi un certain nombre de fonctionnalités permettant de contrôler le comportement du "reader".
Par nature événementiel, le gros intérêt d'une telle spécification est d'être adapté au traitement de gros documents XML. En effet, les approches DOM, voire XSLT, reposent sur la manipulation d'arbres et, du coup, nécessitent toutes deux de charger tout le document en mémoire, avant de pouvoir effectuer quelle que manipulation que ce soit.
La communauté des développeurs et des éditeurs de logiciels ne s'y est pas trompée, qui utilise alternativement DOM ou SAX, en fonction du type de manipulation à réaliser.
D'un point de vue technique, un regret est que les acteurs SAX ne fasse pas la différence entre une spécification et une implémentation d'une spécification. En effet, sur les sites dédiés à SAX, on ne trouve pas de spécification en tant que telle : on trouve des interfaces SAX pour Java, pour Python, pour... Le risque est alors que les spécifications évoluent en parallèle et qu'il existe autant de SAX que d'implémentations.
Working with XML, The Java API for XML Parsing (JAXP) Tutorial (Eric Armstrong) Juillet 2000, tutorial mis à jour en décembre 2001 |
SAX "parseur" XML, Didier Ferment, 22/12/2000, édité par Université
de Picardie Jules Vernes, France |
The Book of SAX : The Simple API for XML, W. Scott Means, Michael A. Bodie, 07/2002, édité par No Starch Press |