DOM définit, sous la forme d'une API orientée objet et indépendante des langages de programmation et de script, les outils nécessaires à l'accès et à la manipulation de documents structurés sous forme d'arbres d'objets typés. Les documents peuvent être typés selon le vocabulaire HTML, en utilisant une syntaxe XML ou toute autre forme de syntaxe.

Ce sont les niveaux d'implémentation qui définissent le type de structure qu'ils reconnaissent :

  • DOM niveau 1 prend en compte les documents HTML et XML ;
  • DOM niveau 2 ajoute à cette liste les CSS ;
  • DOM niveau 3 permettra aussi l'accès aux modèles (structurés sous forme de DTD, de Schema ou tout autre formalisme).
Recommandations (attention, cette partie est maintenue de façon occasionnelle)
pictos/enflag.gif 
Document Object Model Level 1 Specification
- Recommandation, 01-10-1998, version 1.0
- accès à l'historique des versionsnouveau
pictos/enflag.gif 
pictos/enflag.gif 
Document Object Model Level 3 Events Specification
- Projet en cours, 08-09-2009, version 20090908
- accès à l'historique des versions
pictos/enflag.gif 
Document Object Model Level 3 XPath Specification
- Recommandation Candidate, 31-03-2003, version 1.0
- accès à l'historique des versions
pictos/enflag.gif 
Document Object Model Requirements
- Projet en cours, 19-04-2001, version 20010419
- accès à l'historique des versions
Objectifs

L'objectif de cet ensemble de recommandations est de fournir des outils de haut niveau permettant d'accéder et de manipuler un document XML. Ces outils étant définis selon un spécification formelle, indépendante des langages et des systèmes, cette spécification permet de réaliser des développements portables, dans différents environnements.

Au départ, l'objectif était de permettre la mise en oeuvre de programmes dans un logiciel de consultation du Web, de façon indépendante de son éditeur ; aujourd'hui, les recommandations vont beaucoup plus loin, pour s'intéresser à toute activité de programmation, basée sur un arbre d'objets typés et valués : une différence notable avec SAX, qui s'intéresse aux évènements rencontrés dans un document, lors de sa lecture.

Les différents niveaux de DOM élargissent le champ d'action de la spécification : en ajoutant plus de méthodes à des objets ou en définissant de nouvelles classes d'objets. Cependant, les outils logiciels peuvent décider de n'implémenter qu'un niveau particulier. Toutefois, s'ils implémentent le niveau 2, il implémentent par là-même le premier niveau de la recommandation.

Principes

DOM est la définition d'une API (Application Programming Interface) orientée objet. La spécification est organisée en différentes parties, différenciant des niveaux que doit supporter une implémentation de DOM.

Pour chaque niveau, les spécifications différencient ce qui est fondamental (et qui doit donc être implémenté pour être conforme) de ce qui est optionnel (les extensions). Par ailleurs, chaque spécification s'intéresse au "coeur" (core) qui est générique, pour n'importe quel document XML et à des interfaces spécifiques, pour des types de documents donnés (tels des documents XML, des CSS, voire des objets plus génériques comme des feuilles de styles).

Le "coeur" (core) de DOM définit les éléments ci-après :

  • ce que sont une implémentation DOM et les nature d'erreurs reconnues ;
  • les interfaces de gestion d'un document XML pour deux objectifs : y accéder (fonction d'accès à des éléments, attributs, etc.) ou le construire (fonctions de création de documents, d'éléments, d'attributs, etc.). Le niveau 2 prend notamment en compte les notions d'espace de noms ;
  • les extensions au coeur, qui sont optionnelles dans les implémentations, ajoutent : les notions de sections CDATA et la gestion des entités externes (niveau 1), ainsi que les notions de DTD, de processing instructions, de notation (niveau 2).

Le niveau de 1, complété ensuite par le niveau 2, définissent les fonctionnalités nécessaires à la manipulation de documents HTML (il s'agit bien de HTML et non pas d'XHTML : voir annexe C.11 de la recommandation XHTML). Ce sont surtout des objets nouveaux qui apparaissent, comme les frame, les images ou les ancres. Les fonctionnalités de manipulation sont minimes, celles du core étant a priori souvent suffisantes. À noter que presque tout est défini dans le niveau 1 et que la spécification de niveau 2 n'ajoute que quelques détails.

Toutes les nouvelles interfaces sont ensuite définies dans le niveau 2, elles concernent des :

  • fonctionnalités de manipulation des CSS, les feuilles de styles associées aux documents HTML. À noter que la spécification est prévue pour prendre en compte d'autres feuilles de styles, plus tard (par exemple, XSL). Pour ce faire, elle définit au préalable les notions de vues (Document Object Model Views) associées à un document et les notions de feuilles de styles (Document Object Model StyleSheets) ;
  • fonctionnalités d'accès à des événements liées à des changements d'état d'un document ou à des actions de l'utilisateur sur un document (ou un objet contenu dans un document) ;
  • fonctionnalités de parcours de document XML, avec ou sans filtre ;
  • fonctionnalités d'identification de portion de document, basées sur les informations de structure ou sur des contenus quelconques, identifiés par leur ordre séquentiel. À noter que ces fonctionnalités sont essentielles, pour prendre en compte les notions de position associées à la recommandation XPointer.

Aujourd'hui, seuls les niveaux 1 et 2 ont le statut de recommandation. Le niveau 3 est en cours de validation. Si l'utilisation de DOM ne concerne que le fait de pouvoir manipuler un document dans un outil de consultation du Web, le niveau 1 apporte alors suffisamment de fonctionnalités pour mettre en place bon nombre d'applications, pas trop complexes.

Si DOM doit être utilisé comme langage généralisé de manipulation de documents XML, il est alors nécessaire d'utiliser le niveau 2.

Exemple

Voici, en Java, comment pourrait s'écrire un programme DOM dont le seul objectif serait de créer un document XML simple.

Document doc = new DocumentImpl();

Element outElem = doc.createElement("object");

outElem.setAttribute("identifier", "A020");

Node subjNode = doc.createElement("subject");

outElem.appendChild(subjNode);

subjNode.appendChild("du texte dans le subject");

dumpSubTree(outElem, out); // une fonction qui génrère la forme sérialisée

Ce simple exemple créera le fichier XML suivant :

<object identifier="A020">

<subject>du texte dans le subject</subject>

</object>

FR EN
puce 
Le DOM Document Object Model, Didier Ferment, 09/01/2001, édité par Université de Picardie Jules Vernes, France
puce 
Free Library, édité par PerfectXML.com
Extraits d'ouvrages publiés sur le sujet
puce 
Should I use SAX or DOM?, Nazmul Idris, 05/1999, édité par developerlife.com

Valid XHTML + RDFa