logo Mkadmi
Accueil            ISD            Equipe de recherche           Laboratoire Paragraphe            Enssib         ECP           Contact  

Accueil

 

 
 
 
 
   

 
 

webmaster

 
 
Chapitre 5 : Le modèle de document

1. Introduction

Le Modèle Objet de Document (DOM) est une interface de programmation d'applications (API) pour des documents HTML et XML. Il définit la structure logique des documents et la manière dont un document est accédé et manipulé.

Dans la spécification DOM, le terme "document" est utilisé au sens large - XML est de plus en plus utilisé pour représenter tout type d'informations stockées sur tout type de systèmes. La plupart d'entre elles auraient été traditionnellement vues comme des données plutôt que des documents. Cependant, XML représente ces données comme des documents, et DOM peut être utilisé pour gérer ces données.

Avec le Modèle Objet de Document, les programmeurs peuvent construire des documents, naviguer dans leur structure, et ajouter, modifier, ou supprimer soit des éléments, soit du contenu. Tout ce qui peut être trouvé dans un document HTML ou XML peut être accédé, changé, détruit, ou ajouté en utilisant le Modèle Objet de Document,

Le DOM fournit une interface de programmation objet (API) indépendante des langages de programmation, de sorte que des implémentations DOM puissent être écrites dans le langage de votre choix.

Le DOM est en général ajouté comme couche intermédiaire entre le parseur XML et l’application qui a besoin des Informations du document. Le parseur lit les données du document XML, les transmet à un DOM qui va être utilisé par une application de plus haut niveau.

Les spécifications existent en 2 versions,

• DOM level 1

- Core : interface de base et leurs applications aux documents XML

- HTML: interfaces applicables aux documents HTML (HTML 4)

• DOM level 2

- Complète la version Core pour la gestion des espaces de noms

- DOM CSS : prise en charge des feuilles de style

- DOM Events : Modèle d'événements

- DOM Filters and Iterators : filtrage d'éléments et traitements itératifs

- DOM Range : isoler et traiter des fragments de documents.

2. Le DOM et le W3C

Le W3C gère les spécifications liées au DOM

• DOM level 1 a un statut de recommandation du 01 Octobre 1998, dont les spécifications sont disponibles à:

http://www.w3.org/1998/REC-DOM-Level-1-19981001

• DOM level 2 Core, Views, Style, Event et Range ont un statut de recommandation du 13 Novembre 2000, dont les spécifications sont disponibles à: http://www.w3.org/2000/REC-DOM-Level-2-Core-20001113

http://www.w3.org/TR/2000/REC-DOM-Level-2-Views-20001113

http://www.w3.org/TR/2000/REC-DOM-Level-2-Slyle-20001113

http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113

http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113

• DOM level 3 est au statut de Working Draft.

3. La programmation du DOM

DOM représente un document XML comme un arbre d'objets, chaque noeud est un type dérivé de type Node.

• Offre les méthodes nécessaires au parcours et construction de l'arbre.

Ø      La racine de l'arbre est de type Document

• Accès au type de document et sa DTD

• Offre les méthodes nécessaires à la création des différents types d'éléments

• Contient un seul objet fils de type Element qui est la racine du document

Chaque élément est de type Element

            • Accès au nom de l'élément

            • Offre les méthodes nécessaires au traitement des attributs

            • Accès aux éléments fils par leur non

Ø      Une liste de nœuds de type NodeList

• Récupération de la taille de la liste et accès à chaque nœud

Les nœuds de type Text, Comment et CDATASection dérive du type CharacterData

• Offre les méthodes nécessaires aux traitements des chaînes de caractères

Ø      Les attributs sont du type Attr, qui n'appartiennent pas à l'arbre DOM, mais sont liés aux éléments

• Récupération du nom et de la valeur

Il existe une interface d'accès à une collection de nœud d'après un nom unique, c'est le type NamedNodeMap

• Offre les méthodes nécessaires à la lecture, écriture et suppression

Ø      Les autres types de nœuds sont :

Entity pour une entité générale

EntityReference pour une référence à une entité dans une donnée XML

Processinglnstruction pour représenter les instructions de traitement.

La spécification DOM ne propose pas de méthode pour :

-         charger en un document XML sous forme de représentation mémoire DOM,

-         sauvegarder une représentation mémoire DOM sous forme de document XML,

-         méthode pour générer un document à partir d’un arbre XML et d’un arbre XSLT.

Les interfaces des langages et outils en proposent.

Exemple de chargement en mémoire d’un document XML dans IE5

Création mémoire d’un document XML et XSLT dans IE5

            var sourceXML = "arboSPY-Deplier.xml" ;

            var styleXSLT  = "arboSPYdeplie.xslt" ;

 

            source  = new  ActiveXObject ("Microsoft.XMLDOM") ;

            style  =  new ActiveXObject ("Microsoft.XMLDOM") ;

            source.async  = false ;

            style.async  =  false ;

            source.load (sourceXML) ;

            style.load (styleXSLT) ;

Exemple de chargement de mémoire d’un document XML dans IE5

Génération d’un document HTML à partir d’un arbre XML et d’un arbre XSLT dans IE5

            If ( ! style.documentElement)

               htmlCode = "Feuille de style incorrecte  (" + source.parseError.reason + ")" ;

            elseif ( ! source.documentElement)

                htmlCode = "Document XML incorrect (" + source.parseError.reason +")" ;

            else

                htmlCode = source.transformNode (style) ;

            with (parent.resultat.document)

            {

            open() ;

            write (htmlCode) ;

            close () ;

            }

4. Interface SAX

SAX (Simple API for XML) est une recommandation de fait (plutôt qu’être une spécification développée par un organisme de standardisation, il s’agit du fruit de la collaboration de développeurs de parseurs XML, autour d'un groupe de discussion sur internet (Celle liste de diffusion est nommée XML-Dev). Son objectif est de fournir une API simple et standard pour accéder au contenu d'un document.

Contrairement à DOM, elle est basée sur une approche événementielle, et une lecture séquentielle du document XML :

• On trouve des notions de début et fin de document, d'élément, d'attribut,

• Permet de récupérer les informations lues par le parseur XML.

SAX, contrairement à DOM, n'implémente pas d'arbre en mémoire, donc orienté traitement de gros document XML.

Les spécifications de SAX, qui ne sont pas gérés par le W3C sont disponibles

http://www.megginson.com/SAX/index.html

Il existe deux versions de SAX :

• SAXI (11 Mai 1998) supportée par tous les parseurs XML en Java, mais sans espaces de noms,

• SAX2 (05 Mai 2000), ajoute espaces de noms et configuration des parseurs SAX et son utilisation en Java.

Exemple de programme SAX qui affiche le nom des balises ouvrantes et fermantes lors de la lecture séquentielle d’un document XML

5. DOM VERSUS SAX

Souvent, les parseurs DOM sont basés sur des parseurs SAX qui sont chargés de l’implémentation de l’arbre DOM en mémoire.

-         SAX est une API de plus bas niveau, orienté évènementielle, donc parfaitement bien adapté au gros document XML.

-         L’approche DOM, voire XSLT, repose sur la manipulation d’arbre, nécessitant l’instanciation de celui-ci avant tout traitement.

Le problème de SAX est qu’il n’est pas géré par le W3C, et que sur le site des spécifications SAX, on ne trouve pas des spécifications mais des implémentations : SAX pour JAVA, SAX pour Python, …

Accueil            ISD            Equipe de recherche           Laboratoire Paragraphe            Enssib         ECP           Contact