P
'
t
i
t
e
C
h
a
t
t
e
 
spacer~ EXPERIENCE IS SOMETHING YOU DON'T GET UNTIL JUST AFTER YOU NEED IT Articles | Connexion
 
~Le DOM pour XML

Précédent  
  XML-XSLT  
  Suivant
 Présentation

Le World Wide Web Consortium définit depuis la validation de XML 1.0 des recommendations sous le nom de DOM. Cet acronyme signifie Document Object Model et se targue de décrire les arbres XML sous forme objet.
 Sommaire


 Introduction

Au vu de la nature des documents XML, et HTML, le W3C a imaginé d'offrir un modèle objet pour leur représentation. Ce modèle objet se nomme le DOM. Il s'agit d'un modèle dont les spécifications sont édictées par le W3C. La tâche première du DOM se veut donc la description d'arbres XML. Cependant, le modèle objet proposé offre de nombreuses méthodes utilisables pour parcourir avec aisance les arbres de données. Il existe différentes recommendations relatives au DOM. Chacune d'entre elles correspond à un niveau, ou level.

Avant de décrire les niveaux existants, il convient de savoir de quoi est composé le DOM. L'architecture DOM se subdivise en modules. Chacun de ces modules apporte une extension au module "DOM Core". Ce premier module permet la description objet effective d'un arbre de données.

Voici la liste des autres modules :
  • DOM XML : ajoute au Core des spécificités relatives à XML telles que les entités ou les sections CDATA
  • DOM HTML : extension du Core simplifiant la "traversée" de document HTML
  • DOM Events : inclu les événements XML tels que la modification d'arbre ou les événements utilisateurs pour HTML (souris, clavier...)
  • DOM CSS : extension du Core pour la manipulation de feuilles de style CSS
  • DOM Load and Save : module d'importation ou d'exportation d'arbres DOM depuis ou vers un fichier XML
  • DOM Abstract Schemas : module d'accès aux informations relatives au schéma du document (DTD, XML Schema...)
  • DOM XPath : recèle les fonctions d'interrogation des arbres DOM par le langage XPath 1.0

Ces modules n'existent pas nécessairement depuis la première version du DOM, ainsi que nous allons le vérifier.


 Les niveaux DOM

Actuellement, deux niveaux de DOM se sont vus officialisés par le W3C. Le DOM Level 3 reste à l'étude avant de devenir une recommandation officielle du W3C. Le premier niveau de DOM, le DOM Level 1, date d'octobre 1998. Le support offert alors ne concernait que XML 1.0 et HTML. La figure un vous montre le schéma de l'architecture de ce niveau. Vous remarquerez sa simplicité.



Figure 1. L'architecture de DOM Level 1

Le second niveau du DOM, le DOM Level 2, a été officialisé en novembre 2000. En sus de l'adjonction du support des espaces de nommage pour XML 1.0, les événements font leur apparition. Enfin, les feuilles de style CSS se voient supportées. La figure numéro deux retranscrit ces changements. Le DOM Level 2 reste celui actuellement utilisé dans les navigateurs Internet ou au sein des parsers XML.



Figure 2. L'extension du DOM Level 1, ou DOM Level 2

Le DOM Level 3 représente le dernier niveau existant à l'heure actuelle. Il a pour but d'apporter le support de XPath au sein du DOM et d'étendre les fonctionnalités de certains modules avec par exemple la gestion événementielle du clavier. Un changement d'une importance capitale réside dans les fonctionnalités de gestion des schémas de définition des documents tels que les DTD.

Le groupe d'étude en charge du DOM Level 3 prévoit de l'offrir en tant que recommendation officielle W3C pour la fin de l'année 2001.

Ces recommendations officielles jouent un rôle extrêmement important dans de nombreuses situations. Elles définissent notamment les implémentations des différentes API des parsers XML. Un parser ne se doit certes pas de proposer une implémentation DOM. Néanmoins, lorsque vous utilisez un parser compatible avec un niveau du DOM donné, vous pouvez être certains quant aux fonctionnalités offertes. Pour réaliser les définitions des API du DOM, le W3C fait appel à l'OMG IDL (ou Object Management Group Interface Definition Language).

Un tel langage a pour but de servir à définir d'autres langages ou des interfaces de programmation contextuellement neutre. Pour les lecteurs curieux, le listing numéro un est extrait de la définition IDL du module XPath du DOM Level 3. Les spécifications des niveaux du DOM proposent, outre les définitions IDL, les défitions de l'API en Java et ECMAScript. Le document de travail du W3C offre ainsi le listing numéro deux pour faire la correspondance Java avec la définition IDL précédente.

interface XPathNamespace : Node {
  // XPathNodeType
  const unsigned short XPATH_NAMESPACE_NODE = 13;
  readonly attribute Element ownerElement;
};
       
      
JextCopier dans Jext | Jext | Plugin Codegeek
package org.w3c.dom.xpath;

import org.w3c.dom.Element;
import org.w3c.dom.Node;

public interface XPathNamespace extends Node {
  // XPathNodeType
  public static final short XPATH_NAMESPACE_NODE = 13;
  public Element getOwnerElement();
}
       
      
JextCopier dans Jext
Notez que le World Wide Web Consortium ne propose jamais quelque implémentation que ce soit. Toutes les spécifications sont présentées sous forme d'interface. Il incombe ainsi aux développeurs de créer leurs propres implémentations. Pour nous en convaincre, intéressons-nous à la définition du W3C de l'objet org.w3c.dom.NodeList. Cet objet s'emploie communément pour parcourir la liste des noeuds descendant d'un noeud donné. Comme le montre bien le listing numéro trois, aucun implémentation réelle ne se voit offerte.

package org.w3c.dom;

public interface NodeList {
  public Node item(int index);
  public int getLength();
}
       
      
JextCopier dans Jext
Néanmoins, si nous lisons attentivement le code source du parser Xerces 2.0 de la fondation Apache, nous découvrons l'objet org.apache.xerces.dom.NodeImpl qui contient la définition suivante :

public abstract class NodeImpl implements Node,
  NodeList, EventTarget, Cloneable, Serializable
       
      
JextCopier dans Jext
La classe NodeImpl constitue donc l'implémentation de l'interface org.w3c.dom.NodeList.


 Les parsers, DOM et tout SAX

Le W3C comme nous l'avons vu énonce des recommendations. Les fournisseurs de solutions logicielles XML ne sont aucunement tenus de respecter ces recommendations. Pourtant, la plupart tentent de les respecter. En réalité, seuls les parsers possédant une vocation particulière (grande vélocité, occupation mémoire réduite) ne se tournent pas vers l'application des recommendations du W3C. Même si les recommendations se voient appliquées, elles ne le sont pas nécessairement entièrement.

Ainsi, le parser Xerces 2.0 de la fonction Apache promet un support de DOM Level 2... mais seulement pour les modules Core, Events et Transversal and Range. En vous référant au schéma du DOM Level 2, vous noterez l'abscence de HTML et des CSS. Bien entendu, seuls les événements de type Mutation sont pris en compte.



Figure 3. Ce dernier niveau n'existe que sous forme de documents de travail

En outre, les parsers peuvent offrir des API supplémentaires. Xerces 2.0 contient également une implémentation de la Simple API for XML 2.0 (SAX 2) ainsi qu'une implémentation des Java APIs for XML Processing de Sun (JAXP 1.1). Le cas de JAXP reste un peu particulier car il repose sur DOM Level 2 et SAX 2.

Beaucoup de programmeurs se retrouvent confrontés un jour au l'autre à un cruel dilemme : DOM ou SAX ? Une grosse différence existe entre ces deux API. La premier se destine à la création et à la manipulation de données représentant un arbre. Les méthodes proposées permettent de manipuler l'arbre ou de le parcourir efficacement. SAX par contre ne se destine qu'à la lecture de documents XML, et non à leur création. Cette API représente ce que l'on appelle un système de flux événementiel. Lors de la lecture d'un flux XML, des événements sont émis vers l'application. L'API SAX se rencontre souvent au sein des parsers de petite taille.



par Romain Guy
romain.guy@jext.org
http://www.jext.org
Dernière mise à jour : 14/10/2006


Précédent  
  XML-XSLT  
  Suivant

 
#ProgX©2005 Mathieu GINOD - Romain GUY - Erik LOUISE