REC-DOM-Level-1-19981001


Qu'est ce que le Modèle Objet de Document ?

Éditeurs
Jonathan Robie, Texcel Research

Introduction

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.

Ce qu'est le Modèle Objet de Documents

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 :


DOM representation of the example table
Représentation DOM d'un exemple de tableau

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.

Ce que le Modèle Objet de Documents n'est pas

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 :


Quelle est l'origine du Modèle Objet de Document

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.

Les entités et le noyau de 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 &amp; a cat</p>        
      
L'entité "&amp;" 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é "&amp;" 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.

Interfaces et Implémentations de DOM

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,

  1. Les attributs définis dans l'IDL n'impliquent pas que les objets concrets doivent avoir des membres de données spécifiques - dans les représentations du langage, ils sont transformés en une paire de fonctions get()/set(), et non en données membres de l'objet. (Les fonctions en lecture seule n'ont qu'une fonction get() dans la représentation du langage).
  2. Les applications de DOM peuvent fournir des interfaces et des objets supplémentaires qui n'existent pas dans cette spécification et continuer d'être considérées comme conformes à DOM.
  3. Puisque nous spécifions des interfaces et non les véritables objets qu'il faut créer, DOM ne peut savoir quels constructeurs d'objets appeler pour une implémentation donnée.. En général, les utilisateurs de DOM appellent la méthodecreateXXX() 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().

Limitations du niveau 1

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 :

  1. Un modèle structural pour les sous-ensembles internes et externes.
  2. La validation par rapport à un schéma.
  3. Le contrôle des représentations visuelles des documents par le biais de feuilles de style.
  4. Les contrôles d'accès.
  5. Sécurité des processus.
  6. Les évènements.