|
Qu'est ce qu'un parseur XML ? |
XML est uniquement un langage de structuration et de représentation de données. Il ne comporte pas d'instructions de contrôle et ne permet donc pas d'exploiter directement les données. Pour réaliser des applications XML, il faut donc avoir recourt aux langages de programmation classiques (Java, Perl, C++, Python...). Un analyseur syntaxique XML (ou parseur), permet de récupérer dans une structure XML, des balises, leur contenus, leurs attributs et de les rendre accessibles.
Il existe deux types de parseurs :
Nous l'avons déjà signalé, et vous avez pu le constater par vous-même, lorsque l'on ouvre un fichier XML dans un navigateur web récent, les données sont présentées sous la forme d'un arbre dont il est possible de plier ou de déplier les différentes branches. C'est tout simplement car les browsers intègrent un parseur XML (MSXML par exemple pour Internet Explorer de Micro$oft).
Le parseur sert donc à "découper" le fichier de données en un ensemble de"mots" (tokens) et à les mettre à disposition d'applications. Il est associé à un module de traitement qui a lui un rôle plus important : le processeur XML.
Il en existe deux types :
Nous allons maintenant présenter succintement, chacune de ces surcouches des parsers.
Les processeurs SAX |
SAX fournit une interface événementielle pour parcourir un document XML. Cette API renvoie en effet à l'application qui manipule le document XML des "événements" (ouverture de balise, fermeture de balise, contenu textuel...). Elle permet donc de traiter à la volée l'occurence de telle ou telle balise.
SAX est bien adapté pour les traitements qui ne nécessitent qu'une seule passe sur le document, ou dans le cas de gros volumes de données, s'il n'est pas nécessaire d'avoir une représentation complète des données en mémoire.
SAX existe en plusieurs versions suivant le langage utilisé : version Java (2.0), Perl, C++ et Python. Nous nous intéresserons ici à la version Java.
L'interface SAX est composée de deux packages de classes : org.xml.sax et org.xml.sax.helpers . Parmi ces classes, org.xml.sax.ContentHandler contient les méthodes qui permettrent la gestion des événements (startDocument(), endDocument(), startElement(..), endElement(..) ...).
C'est grâce à cela que SAX génère un événement à chaque fois qu'une partie du document précis est rencontrée (début ou fin de document, début d'un élément...). On peut dès lors associer une fonction à un événement.
Les processeurs SAX présentent une interface de plus bas niveau que les processeurs DOM mais ils sont plus performants (les processeurs DOM utilisent souvent un processeur SAX en interne).
Les processeurs DOM |
Le modèle DOM est une recommandation du W3C depuis octobre 1998. Les processeurs DOM, à la différence des processeurs SAX, utilisent une approche hierarchique. Ce sont les plus souvent rencontrés. Ils permettent une navigation aisée dans un document mais nécessite le chargement complet en mémoire de sa structure arborescente. On stocke ainsi un arbre DOM.
Il existe trois niveaux de spécifications de DOM, chacune apportant des améliorations par rapport au niveau précédent :
Un parseur utilisant DOM prend en entrée un document XML et construit, à partir de cela, un arbre formé d’objets : chaque objet appartient à une sous-classe de Node et des opérations sur ces objets permettent de créer de nouveaux noeuds, ou de naviguer dans le document.
A noter qu'une version de DOM spécifique à Java existe (mais est encore en version béta) : l'API JDOM .
Toutes les applications XML passent donc par une phase préalable d'analyse.
Signalons qu'il existe une surcouche à DOM, JDOM et SAX : l'API JAXP (Java API for XML Parsing) dévelopée par Sun. Elle permet de rendre plus accessibles et manipulables certaines fonctionnalités dont DOM ou SAX s'acquittent plutôt difficilement.
Enfin citons l'un des parseurs les plus connus et utilisé à l'heure actuelle : Xerces d'Apache. Il supporte à la fois DOM et SAX.
<< Page Précédente Les espaces de noms |
Page Suivante >> Les DTD |