# Model d'Objectes del Document

El Model d'Objectes de Document (o també Model d'Objectificació de Document, DOM en anglès i emprat ací com a referència acrònima) és una Interfície de Programació d'Aplicacions (API) per a documents HTML i XML, una convenció multiplataforma i independent del llenguatge de programació que serveix per a representar documents HTML, XHTML i XML i interaccionar-hi a través d'objectes. Proporciona una representació de l'estructura del document, la qual cosa permet al programador de modificar-ne el contingut i la presentació visual. En essència, comunica pàgines web amb guions (scripts) o llenguatges de programació. La historia del Model d'Objectes de Document està estretament relacionada amb la història de la “Guerra de navegadors” de finals dels anys 1990 entre el Netscape Navigator i Microsoft Internet Explorer, i també amb la de JavaScript i JScript.
Totes les propietats, mètodes i esdeveniments disponibles per a la manipulació i creació de pàgines web estan organitzats en objectes (per exemple, l'objecte de document que representa el document en si, l'objecte de taula que representa un element de taula HTML, i així successivament). En la majoria dels últims navegadors web aquests objectes són accessibles a través de llenguatges de script. El DOM s'utilitza molt sovint en combinació amb JavaScript. No obstant això, com ja s'ha indicat, el DOM va ser dissenyat per ser independent de qualsevol llenguatge de programació en particular, a fi de proporcionar una representació estructural del document a partir d'una API única i consistent. Les implementacions del DOM, doncs, es poden fer per a qualsevol llenguatge de programació.

## Història
### El DOM antiquat

El llenguatge JavaScript fou publicat per Netscape Communications Corporation el 1996 dins del Navegador de Netscape 2.0. El mateix any, el competidor de Netscape, Microsoft, va treure, amb l'Internet Explorer 3.0, un port del llenguatge de programació JavaScript, anomenat JScript. JavaScript i JScript van permetre als desenvolupadors de programari crear pàgines web amb una interactivitat de tipus Costat-client. Les limitades capacitats per a detectar esdeveniments generats per l'usuari i per a modificar el document HTML en la primera generació d'aquests llenguatges de programació aviat varen ser conegudes com a "DOM Level 0" o “DOM antiquat (legacy, en anglès)". No es va desenvolupar cap estàndard independent per al DOM Level 0, però en part va ser descrit en l'especificació d'HTML 4.
El DOM antiquat era limitat quant als tipus d'elements a què es podia accedir. Els elements formulari web, enllaç i imatge es referenciaven amb un nom jeràrquic que començava amb el document objecte arrel. Aquest nom jeràrquic podia fer ús tant dels noms dels elements recorreguts com de llur índex seqüencial. Per exemple, es podia accedir a l'element caixa de text bé com a "document.formName.inputName" ("document.nomDeLaCaixa.nomDeLEntrada") o bé com a “document.forms[0].elements[0]" ("document.caixes[0].elements[0]").
El DOM antiquat permetia la validació de formularis des del costat client i també el popular efecte "rollover".

### El DOM Intermedi

El 1997 Netscape i Microsoft van llençar, respectivament, la versió 4.0 del Netscape Navigator i Internet Explorer afegint-hi funcionalitat de tipus Dynamic HTML (DHTML), cosa que permetia fer canvis a un document HTML un cop carregat. El DHTML requeria unes extensions addicionals al rudimentari objecte document ofert per les implementacions del DOM antiquat. Tot i que les implementacions del DOM antiquat eren en gran manera compatibles, per tal com JScript es basava en JavaScript, cada fabricant va desenvolupar pel seu compte les extensions DHTML del DOM per al seu propi navegador, les quals van resultar incompatibles. Aquestes versions del DOM van ser conegudes com a "DOM intermedi (intermediate, en anglès)".

### Estandardització

El World Wide Web Consortium (W3C), fundat el 1994 per promoure estàndards oberts per a la World Wide Web, va reunir Netscape Communications i Microsoft amb altres empreses a fi de desenvolupar un estàndard per a llenguatges de scripting destinat a navegadors, anomenat "ECMAScript." La primera versió de l'estàndard es va publicar el 1997. Les següents versions de JavaScript y JSCRIPT van incorporar l'estàndard ECMAScript per a una major compatibilitat entre navegadors.
Després de presentar l'ECMAScript, el W3C va començar a treballar en un DOM estandarditzat. El primer estàndard DOM, conegut com a “DOM Level 1”, va ser establert pel W3C a finals de 1998. Gairebé al mateix temps, l'Internet Explorer 5.0 incorporava funcionalitats limitades per al DOM Level 1. El DOM Level 1 proporcionava un model complet d'un document HTML o XML sencer, incloent-hi els mitjans per canviar qualsevol part del document. Alguns navegadors no totalment compatibles, com l'Internet Explorer 4.x i el Netscape 4.x encara es feien servir l'any 2000.
El DOM Level 2 es va publicar a finals de l'any 2000. Incloïa l'opció “getElementById" així com un model d'esdeveniments i funcionalitats per a espais de noms XML i CSS.
El DOM Level 3, la versió actual de l'especificació DOM, publicat a l'abril del 2004, permet emprar XPath i també manipular esdeveniments de teclat, així com fer servir una interfície de serialització per a documents XML.
El DOM Level 4 s'està desenvolupant en l'actualitat. El projecte de la versió 6 va sortir al desembre de 2012.

## Usos del DOM
### Navegadors web

Les representacions d'un document en forma de pàgina HTML que fa la majoria de navegadors web es duen a terme amb un model intern similar al DOM. Els nodes del document estan organitzats en una estructura arbòria, anomenat l'arbre DOM, amb el node superior anomenat "objecte Document". Quan una pàgina HTML és representada pel navegador, aquest descarrega primer el codi HTML a la memòria local i després l'analitza ("parseja") automàticament per després mostrar-ne el contingut ja formatat com una pàgina a la pantalla. El DOM és també la forma en què el JavaScript transmet l'estat del navegador a pàgines HTML.

## Implementacions
### Motors de disseny

Els Navegadors web es basen en motors de disseny per analitzar el codi HTML en un DOM. Alguns motors de disseny s'associen principalment o exclusivament amb un navegador, com ara Trident / MSHTML i Presto a Internet Explorer i l'Opera, respectivament. D'altres, com WebKit i Gecko, són compartits per més d'un navegador, com per exemple Google Chrome, Mozilla Firefox i Safari. Els diferents motors de disseny implementen els estàndards DOM amb graus de compliment diversos.

### Biblioteques

Implementacions del DOM:
* libxml2
* MSXML
* Xerces és un conjunt d'implementacions del DOM escrit en C++, Java i Perl
* XML per <SCRIPT> és una implementació del DOM basada en l'API de JavaScript que exposa implementacions DOM:
* JAXP (Java API for XML Processing) és una API per accedir als proveïdors del DOM

## Referències

* ↑ Tenint en compte que el terme anglès original és "Document Object Model", el neologisme "objectificació" fa més entenedora l'expressió per al neòfit, ja que informa/avisa de la tècnica de programació que es fa servir per a tractar amb el document. Altres alternatives de traducció que també caldria considerar són "Model Objectual de Document(s)" i també "Model d'Objecte-Document".
* Flanagan, David (2006). JavaScript: The Definitive Guide. O'Reilly & Associates. pp. 312–313. ISBN 0-596-10199-6.
* Koch, Peter-Paul (May 14, 2001). "The Document Object Model: an Introduction". Digital Web Magazine. Retrieved January 10, 2009.
* Le Hégaret, Philippe (2002). "The W3C Document Object Model (DOM)". World Wide Web Consortium. Retrieved January 10, 2009.
* Guisset, Fabian. "What does each DOM Level bring?". Mozilla Developer Center. Mozilla Project. Retrieved January 10, 2009.

## Enllaços externs

* https://developer.mozilla.org/en-US/docs/Web/Guide/DOM?redirectlocale=en-US&redirectslug=DOM%2FAbout_the_Document_Object_Model
* http://www.w3.org/DOM/
* http://xml.coverpages.org/dom.html
* http://www.quirksmode.org/dom/contents.html