Le Modèle Objet de Document (DOM) est une interface de programmation d'applications (API) pour 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, à quelques exceptions près - en particulier, l'interface DOM pour les sous-ensembles XML interne et externes n'a pas encore été défini.
En tant que spécification du W3C, un objectif important du Modèle Objet de
Document est de fournir une interface de programmation standard qui puisse
être utilisée dans une grande variété d'environnements et d'applications. DOM
est conçu pour être utilisé avec n'importe quel langage de programmation.
Afin de fournir une
spécification des interfaces DOM précise et indépendante de tout langage, nous
avons choisi d'utiliser le formalisme IDL de l'OMG, tel que
défini dans la spécification
CORBA 2.2. En plus de la spécification en IDL OMG, nous fournissons les
équivalences en Java et ECMAScript (langage de script standard de l'industrie
basé sur JavaScript et JScript). Note : IDL de L'OMG est utilisé
uniquement comme moyen pour spécifier des interfaces indépendamment de tout
langage spécifique ou d'implantation particulière. D'autres versions d'IDL
auraient pu être utilisés. En général, les IDL sont conçus pour des
environnements informatiques spécifiques. Le Modèle Objet de Document peut
être implémenté
dans n'importe quel environnement informatique, et ne requiert pas la
présence des programmes libres de droits ("runtime") assurant les
correspondances d'objets généralement associées avec ces IDL.
DOM est une interface de programmation (API) pour des documents. Cette interface ressemble étroitement à la structure des documents qu'elle modélise. Par exemple, si l'on considére le tableau suivant, extrait d'un document HTML :
<TABLE>
<TBODY>
<TR>
<TD>Shady Grove</TD>
<TD>Aeolian</TD>
</TR>
<TR>
<TD>Over the River, Charlie</TD>
<TD>Dorian</TD>
</TR>
</TBODY>
</TABLE>
DOM le représente comme ceci :
Dans DOM, les documents ont une structure logique comparable à un arbre; pour être plus précis, c'est comme une forêt ou un bosquet, pouvant contenir plus d'un arbre. Toutefois, DOM ne précise pas que les documents doivent être représentés par des arbres ou des bosquets, il ne précise pas non plus la manière dont doivent être réalisées les relations entre objets. DOM est un modèle logique pouvant être implémenté par n'importe quel moyen approprié aux développeurs. Dans cette spécification, nous utilisons le terme structure modèle pour décrire la représentation d'un document sous la forme d'une arborescence; nous évitons volontairement les termes tels que "arbre" ou "bosquet" afin d'éviter d'influer sur des implémentations particulières. Une propriété importante des modèles de structure DOM est l'isomorphisme structural : si deux implémentations distinctes du Modèle Objet de Documents sont utilisées pour créer une représentation du même document, elles créeront le même modèle structurel, avec très précisément les mêmes objets et les mêmes relations entre ces objets.
Le nom "Modèle Objet de Documents" a été choisi parce qu'il s'agit d'un "modèle objet" au sens traditionnel de la conception orientée objet : les documents sont modélisés en utilisant des objets, et le modèle ne contient pas uniquement la structure du document mais également son comportement et celui des objets dont il est composé. En d'autres termes, les noeuds du dessin ci-dessus ne représentent pas une structure de données, ils représentent des objets ayant des fonctions et une identité. En tant que modèle objet, DOM identifie :
La structure des documents SGML a traditionnellement été représentée par un modèle abstrait de données, et non par un modèle objet. Dans un modèle abstrait de données, le modèle est centré autour des données. Dans les langages de programmation orientés objets, la donnée elle-même est encapsulée dans des objets qui masque la donnée, la protégeant de toute manipulation externe directe. Les fonctions associées à ces objets déterminent comment les objets peuvent être manipulés, et elles font parties du modèle objet.
Le Modèle Objet de Documents est actuellement constitué de deux parties, le
noyau de DOM et une partie dédiée à HTML. Le noyau de DOM représente les
fonctionnalités utilisées pour des documents XML, il sert également de base pour DOM HTML.
Une
réalisation conforme de DOM doit
implémenter toutes les interfaces fondamentales du noyau
avec la sémantique définie dans le chapitre correspondant. Au delà,
l'implémentation doit au moins comprendre HTML DOM et les interfaces étendus
(XML) avec la sémantique telle que définie.
Cette section est conçue pour donner une meilleure compréhension de DOM en permettant de distinguer les différences qui existent avec d'autres systèmes qui pourraient lui ressembler :
L'origine de DOM en tant que spécification est de permettre la portabilité
des scripts JavaScript et des programmes Java entre les navigateurs WEB. Le
"HTML dynamique" fut l'ancêtre immédiat du Modèle Objet de Document, et
fut, à l'origine, pensé essentiellement pour
les navigateurs. Toutefois, quand le groupe de travail sur DOM fut formé au
W3C, il fut rejoint par des éditeurs spécialisés dans d'autres
domaines, y compris les éditeurs HTML ou XML et les référentiels
documentaires. Plusieurs d'entre eux avaient travaillé sur SGML avant qu'XML
soit développé; En conséquence, DOM a été influencé par le concept de
"bosquet" de
SGML et le standard HyTime. Quelques uns d'entre eux avaient
également développé leur propre modèle objet de documents afin de fournir une
API aux éditeurs SGML/XML ou les référentiels documentaires, et ces modèles
objet ont également influencé DOM.
Dans l'interface DOM fondamental, il n'existe aucun objet pour représenter les entités. Les références à des caractères (références numériques) et les références à des entités HTML et XML pré-définies, sont remplacées par un caractère unique se substituant à l'entité. Par exemple, dans :
<p>This is a dog & a cat</p>
L'entité "&" sera remplacée par le caractère "&", et le texte de
l'élément P sera constitué d'une séquence continue de
caractères. Les références numériques à des caractères et les entités pré-définies ne sont pas interprétées en tant que telles dans les zones de type CDATA, les éléments
SCRIPT et STYLE de HTML, elles ne sont
alors pas remplacés par leur caractères de substitution. Si l'exemple ci-dessus était encadré par une section
CDATA, l'entité
"&" ne serait pas remplacée par le
caractère "&"; de même la
séquence de
caractères <p> ne serait pas
reconnue comme balise de début. La représentation des entités
générales, tant internes qu'externes, est définie dans le chapitre sur les
interfaces étendus (XML) de la spécification niveau 1.
Note : quand la représentation DOM d'un document est linéarisée sous la
forme d'un texte XML ou HTML, les applications doivent contrôler chaque
caractère du texte pour déterminer si il doit être représenté en utilisant une
entité numérique ou
pré-définie. L'omission de cette vérification peut entraîner des
instances HTML ou XML invalides. Aussi, les
implémentations doivent
elles faire attention à ce que la
représentation des caractères se fasse selon un jeu de caractères qui couvre
complètement l'ISO 10646; sinon, la sérialisation pourrait échouer
dans le cas où des caractères se trouvant dans les balises ou des
sections CDATA n'ont pas d'équivalent dans le jeu de caractère couvrant l'encodage du
document.
DOM spécifie des interfaces qui peuvent être utilisés pour gérer des documents XML ou HTML. Il est important de comprendre que ces interfaces sont une abstraction - proche des "classes abstraites de base" de C++, elles sont un moyen pour spécifier comment accéder et manipuler la représentation interne d'un document par une application. Les interfaces ne sous entendent pas une implémentation concrète particulière. Chaque application DOM est libre de maintenir les documents dans n'importe quelle représentation adaptée, aussi longtemps que les interfaces spécifiées dans ce document sont supportées. Quelques implémentation de DOM seront certainement des programmes utilisant les interfaces DOM pour accéder à des logiciels écrits avant que la spécification DOM n'existe. En conséquence, DOM est conçu pour éviter les dépendances relatives à son implantation; en particulier,
createXXX() sur
la classeDocument pour créer des structures de documents, et
lesimplémentations
de DOM créent leur propres représentations internes de ces
structures dans leur implantation de la fonction
createXXX().La spécification DOM Niveau 1 est volontairement limitée aux méthodes nécessaires pour représenter et manipuler des structures et des contenus de documents. Les prévisions sont de fournir pour les prochains niveaux de spécification :