Articulo de referencia

Modelo de objetos de documento

All versioning refers to W3C DOM only. "},"version_date":{"wt":"{{Start date and age|2015|11|19}}"},"preview":{"wt":""},"preview_date":{"wt":""},"organization":{"wt":"[[World Wi...

El Modelo de Objetos del Documento ( DOM ) es una API multiplataforma [ 2 ] e independiente del lenguaje que trata un documento HTML o XML como una estructura de árbol donde cada nodo es un objeto que representa una parte del documento. El DOM representa un documento con un árbol lógico. Cada rama del árbol termina en un nodo, y cada nodo contiene objetos. Los métodos del DOM permiten el acceso programático al árbol; con ellos se puede cambiar la estructura, el estilo o el contenido de un documento. [ 2 ] Los nodos pueden tener controladores de eventos (también conocidos como oyentes de eventos) asociados. Una vez que se activa un evento, se ejecutan los controladores de eventos. [ 3 ]

La estandarización principal del DOM estuvo a cargo del Consorcio World Wide Web (W3C), que elaboró ​​su última recomendación en 2004. El Grupo de Trabajo sobre Documentos Web ( WTHWG ) asumió el desarrollo del estándar y lo publicó como un documento vivo . Actualmente, el W3C publica versiones estables del estándar del WHATWG.

En el DOM (Modelo de Objeto de Documento) de HTML, cada elemento es un nodo : [ 4 ]

  • Un documento es un nodo de documento.
  • Todos los elementos HTML son nodos de elementos.
  • Todos los atributos HTML son nodos de atributo.
  • El texto insertado en los elementos HTML son nodos de texto.
  • Los comentarios son nodos de comentarios.

Historia

La historia del Modelo de Objetos del Documento (DOM) está entrelazada con la historia de las " guerras de navegadores " de finales de la década de 1990 entre Netscape Navigator y Microsoft Internet Explorer , así como con la de JavaScript y JScript , los primeros lenguajes de scripting que se implementaron ampliamente en los motores JavaScript de los navegadores web .

JavaScript fue lanzado por Netscape Communications en 1995 dentro de Netscape Navigator 2.0. El competidor de Netscape, Microsoft , lanzó Internet Explorer 3.0 al año siguiente con una reimplementación de JavaScript llamada JScript. JavaScript y JScript permitieron a los desarrolladores web crear páginas web con interactividad del lado del cliente . Las limitaciones para detectar eventos generados por el usuario y modificar el documento HTML en la primera generación de estos lenguajes se conocieron posteriormente como "DOM Nivel 0" o "DOM heredado". No se desarrolló ningún estándar independiente para DOM Nivel 0, pero se describió parcialmente en las especificaciones de HTML 4 .

El DOM heredado tenía limitaciones en cuanto a los tipos de elementos a los que se podía acceder. Los elementos de formulario , enlace e imagen podían referenciarse con un nombre jerárquico que comenzaba con el objeto raíz del documento. Un nombre jerárquico podía utilizar los nombres o el índice secuencial de los elementos recorridos. Por ejemplo, se podía acceder a un elemento de entrada de formulario como document.myForm.myInputo document.forms[0].elements[0].

El DOM heredado permitía la validación de formularios del lado del cliente y una interactividad de interfaz sencilla, como la creación de información sobre herramientas .

En 1997, Netscape y Microsoft lanzaron la versión 4.0 de Netscape Navigator e Internet Explorer, respectivamente, añadiendo compatibilidad con la funcionalidad de HTML dinámico (DHTML), que permitía realizar cambios en un documento HTML cargado. DHTML requería extensiones del objeto de documento básico disponible en las implementaciones del DOM heredado. Si bien estas implementaciones eran en gran medida compatibles, dado que JScript se basaba en JavaScript, las extensiones de DHTML para el DOM fueron desarrolladas en paralelo por cada fabricante de navegadores y permanecieron incompatibles. Estas versiones del DOM se conocieron como el "DOM intermedio".

Tras la estandarización de ECMAScript , el Grupo de Trabajo DOM del W3C comenzó a elaborar una especificación DOM estándar. La especificación finalizada, conocida como "DOM Nivel 1", se convirtió en una Recomendación del W3C a finales de 1998. Para 2005, gran parte del DOM del W3C era compatible con los navegadores comunes que admiten ECMAScript, incluidos Internet Explorer 6 (desde 2001), Opera , Safari y los navegadores basados ​​en Gecko (como Mozilla , Firefox , SeaMonkey y Camino ).

Estándares

WHATWG DOM

El Grupo de Trabajo DOM del W3C publicó su recomendación final y posteriormente se disolvió en 2004. Los esfuerzos de desarrollo migraron al WHATWG , que continúa manteniendo un estándar vivo. [ 5 ] En 2009, el grupo de Aplicaciones Web reorganizó las actividades DOM en el W3C. [ 6 ] En 2013, debido a la falta de progreso y el inminente lanzamiento de HTML5 , la especificación DOM Nivel 4 fue reasignada al Grupo de Trabajo HTML para acelerar su finalización. [ 7 ] Mientras tanto, en 2015, el grupo de Aplicaciones Web fue disuelto y la administración de DOM pasó al grupo de Plataforma Web. [ 8 ] A partir de la publicación de DOM Nivel 4 en 2015, el W3C crea nuevas recomendaciones basadas en instantáneas del estándar WHATWG.

  • El nivel 1 del DOM proporcionaba un modelo completo para un documento HTML o XML completo , incluyendo los medios para modificar cualquier parte del documento.
  • DOM Nivel 2 se publicó a finales del año 2000. Introdujo la getElementByIdfunción, así como un modelo de eventos y compatibilidad con espacios de nombres XML y CSS.
  • DOM Nivel 3, publicado en abril de 2004, añadió compatibilidad con XPath y el manejo de eventos de teclado , así como una interfaz para serializar documentos como XML.
  • HTML5 se publicó en octubre de 2014. Parte de HTML5 reemplazó el módulo HTML DOM de nivel 2.
  • El DOM Nivel 4 se publicó en 2015 y se retiró en noviembre de 2020. [ 9 ]
  • DOM 2020-06 se publicó en septiembre de 2021 como una Recomendación del W3C. [ 10 ] Es una instantánea del estándar de vida de WHATWG.

Aplicaciones

navegadores web

Para renderizar un documento, como una página HTML, la mayoría de los navegadores web utilizan un modelo interno similar al DOM. Los nodos de cada documento se organizan en una estructura de árbol , denominada árbol DOM , cuyo nodo superior se llama "Objeto Documento". Cuando un navegador renderiza una página HTML, descarga el HTML en la memoria local y lo analiza automáticamente para mostrar la página en pantalla. Sin embargo, el DOM no necesariamente tiene que representarse como un árbol, [ 11 ] y algunos navegadores han utilizado otros modelos internos. [ 12 ]

JavaScript

Cuando se carga una página web, el navegador crea un Modelo de Objetos del Documento (DOM) de la página, que es una representación orientada a objetos de un documento HTML que actúa como interfaz entre JavaScript y el propio documento. Esto permite la creación de páginas web dinámicas , [ 13 ] porque dentro de una página JavaScript puede:

  • agregar, cambiar y eliminar cualquiera de los elementos y atributos HTML
  • cambiar cualquiera de los estilos CSS
  • reaccionar a todos los eventos existentes
  • crear nuevos eventos

Estructura de árbol DOM

Un árbol del Modelo de Objetos del Documento (DOM) es una representación jerárquica de un documento HTML o XML . Consta de un nodo raíz, que es el documento en sí, y una serie de nodos hijos que representan los elementos, atributos y el contenido textual del documento. Cada nodo del árbol tiene un nodo padre, excepto el nodo raíz, y puede tener varios nodos hijos.

Elementos como nodos

Los elementos de un documento HTML o XML se representan como nodos en el árbol DOM. Cada nodo de elemento tiene un nombre de etiqueta y atributos, y puede contener otros nodos de elementos o nodos de texto como hijos. Por ejemplo, un documento HTML con la siguiente estructura:

<html> <head> <title> Mi sitio web </title> </head> <body> <h1> Bienvenido a DOM </h1> <p> Este es mi sitio web . </p> </body> </html>

se representará en el árbol DOM como:

- Documento (raíz) - html - cabeza - título - "Mi sitio web" - cuerpo - h1 - "Bienvenido a DOM" - pag - "Esta es mi página web." 

Nodos de texto

El contenido de texto dentro de un elemento se representa como un nodo de texto en el árbol DOM. Los nodos de texto no tienen atributos ni nodos hijos y, por lo tanto, siempre son nodos hoja en el árbol. Por ejemplo, el texto "Mi sitio web" en el elemento title y "Bienvenido" en el elemento h1 se representan como nodos de texto.

Atributos como propiedades

Los atributos de un elemento se representan como propiedades del nodo del elemento en el árbol DOM. Por ejemplo, un elemento con el siguiente HTML:

<a href="https://example.com"> Enlace </a>

se representará en el árbol DOM como:

- a - href: "https://example.com" - "Enlace" 

Manipulación del árbol DOM

El árbol DOM se puede manipular usando JavaScript u otros lenguajes de programación. Las tareas comunes incluyen navegar por el árbol, agregar, eliminar y modificar nodos, y obtener y establecer las propiedades de los nodos. La API DOM proporciona un conjunto de métodos y propiedades para realizar estas operaciones, como getElementById, createElement, appendChild, y innerHTML.

// Crea el elemento raíz var root = document . createElement ( "root" );// Crea un elemento hijo var child = document . createElement ( "child" );// Agrega el elemento hijo al elemento raíz root.appendChild ( child ) ;

Otra forma de crear una estructura DOM es utilizando la propiedad innerHTML para insertar código HTML como una cadena, creando los elementos y sus hijos en el proceso. Por ejemplo:

documento . getElementById ( "root" ). innerHTML = "<child></child>" ;

Otro método consiste en utilizar una biblioteca o framework de JavaScript como jQuery , AngularJS , React , Vue.js , Svelte , etc. Estas bibliotecas proporcionan una forma eficiente de crear, manipular e interactuar con el DOM.

También es posible crear una estructura DOM a partir de datos XML o JSON, utilizando métodos de JavaScript para analizar los datos y crear los nodos correspondientemente.

La creación de una estructura DOM no implica necesariamente que se mostrará en la página web; solo existe en la memoria y debe añadirse al cuerpo del documento o a un contenedor específico para su renderizado.

En resumen, la creación de una estructura DOM implica la creación de nodos individuales y su organización en una estructura jerárquica utilizando JavaScript u otros lenguajes de programación, y puede realizarse mediante diversos métodos dependiendo del caso de uso y de las preferencias del desarrollador.

Implementaciones

Debido a que el DOM admite la navegación en cualquier dirección (por ejemplo, padre y hermano anterior) y permite modificaciones arbitrarias, las implementaciones suelen almacenar el documento en búfer. [ 14 ] Sin embargo, un DOM no tiene por qué originarse en un documento serializado, sino que puede crearse directamente con la API del DOM. Incluso antes de que surgiera la idea del DOM, existían implementaciones de una estructura equivalente con representación persistente en disco y acceso rápido, como el modelo de DynaText descrito en [ 15 ] y diversos enfoques de bases de datos.

Motores de diseño

Los navegadores web dependen de motores de renderizado para analizar el HTML y convertirlo en un DOM. Algunos motores de renderizado, como Trident/MSHTML , están asociados principalmente o exclusivamente a un navegador en particular, como Internet Explorer. Otros, como Blink , WebKit y Gecko , son compartidos por varios navegadores, como Google Chrome , Opera , Safari y Firefox . Los diferentes motores de renderizado implementan los estándares DOM con distintos grados de cumplimiento.

Bibliotecas

Implementaciones DOM:

  • libxml2
  • MSXML
  • Xerces es una colección de implementaciones DOM escritas en C++, Java y Perl.
  • xml.dom para Python
  • XML para <SCRIPT> es una implementación DOM basada en JavaScript [ 16 ]
  • PHP.Gt DOM es una implementación DOM del lado del servidor basada en libxml2 y aporta compatibilidad con DOM de nivel 4 [ 17 ] al lenguaje de programación PHP.
  • Domino es una implementación del DOM del lado del servidor (Node.js) basada en dom.js de Mozilla. Domino se utiliza en la pila de MediaWiki con el editor visual.
  • SimpleHtmlDom es un modelo de objeto de documento HTML simple en C#, que puede generar cadenas HTML mediante programación.

API que exponen implementaciones del DOM:

  • JAXP (Java API for XML Processing org.w3c.dom) es una API para acceder a proveedores DOM.
  • Lazarus ( IDE de Free Pascal ) contiene dos variantes del DOM: con formato UTF-8 y ANSI.

Herramientas de inspección:

Véase también

Referencias

  1. Todo el control de versiones se refiere únicamente al DOM de W3C.
  2. 1 2 "Modelo de objetos de documento (DOM): definición, estructura y ejemplo" . IONOS Digitalguide . Consultado el 21 de abril de 2022 .
  3. "Modelo de Objetos de Documento (DOM)" . W3C . Consultado el 12 de enero de 2012. El Modelo de Objetos de Documento es una interfaz independiente de la plataforma y del lenguaje que permitirá a los programas y scripts acceder y actualizar dinámicamente el contenido, la estructura y el estilo de los documentos.
  4. "JavaScript HTML DOM" .
  5. "Estándar DOM" . Consultado el 23 de septiembre de 2016 .
  6. "Modelo de objetos de documento del W3C" . Consultado el 23 de septiembre de 2016 .
  7. (plh@w3.org), Philippe Le Hegaret. "Nueva Carta para el Grupo de Trabajo de HTML de Philippe Le Hegaret el 30 de septiembre de 2013 (public-html-admin@w3.org desde septiembre de 2013)" . Recuperado el 23 de septiembre de 2016 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  8. "PubStatus - WEBAPPS" . Archivado del original el 10 de junio de 2017. Consultado el 23 de septiembre de 2016 .
  9. "Historial de publicaciones de W3C DOM4" . 3 de noviembre de 2020. Consultado el 10 de agosto de 2024 .
  10. "Historial de publicaciones del DOM" . 28 de septiembre de 2021. Consultado el 10 de agosto de 2024 .
  11. "¿Qué es el Modelo de Objetos del Documento?" . W3C . Consultado el 12 de septiembre de 2021 . Sin embargo, el DOM no especifica que los documentos deban implementarse como un árbol o un bosque, ni tampoco especifica cómo deben implementarse las relaciones entre los objetos. El DOM es un modelo lógico que puede implementarse de cualquier manera conveniente.
  12. "Modernización del árbol DOM en Microsoft Edge" . Microsoft. 19 de abril de 2017. Consultado el 12 de septiembre de 2021 .
  13. "JavaScript HTML DOM" . Consultado el 23 de septiembre de 2016 .
  14. Kogent Solutions Inc. (2008). Ajax Black Book, Nueva edición (con CD) . Dreamtech Press. pág. 40. ISBN  978-8177228380.
  15. EE. UU. Expired 5557722A , Steven DeRose y Jeffrey Vogel, "Sistema y método de procesamiento de datos para representar, generar una representación y renderizar mediante acceso aleatorio documentos electrónicos", publicado el 17 de septiembre de 1996. 
  16. "XML para <script> Analizador XML multiplataforma en JavaScript" . Consultado el 23 de septiembre de 2016 .
  17. "La API DOM moderna para proyectos PHP 7" . 5 de diciembre de 2021.

Referencias generales

  • Flanagan, David (2006). JavaScript: La guía definitiva . O'Reilly & Associates. pp. 312–313 . ISBN  0-596-10199-6.
  • Koch, Peter-Paul (14 de mayo de 2001). "El modelo de objeto de documento: una introducción" . Revista web digital . Archivado del original el 27 de abril de 2017. Recuperado el 10 de enero de 2009 .
  • Le Hégaret, Philippe (2002). "El modelo de objetos de documento (DOM) del W3C" . Consorcio World Wide Web . Recuperado el 10 de enero de 2009 .
  • Guisset, Fabian. "¿Qué aporta cada nivel DOM?" . Centro de desarrolladores de Mozilla . Proyecto Mozilla. Archivado del original el 2 de marzo de 2013 . Recuperado el 10 de enero de 2009 .
  • Estándar de vida DOM según WHATWG
  • Centro DOM original del W3C, creado por el Grupo de Trabajo DOM del W3C (obsoleto).
  • Últimas instantáneas del estándar de vida WHATWG publicadas por el Grupo de Trabajo HTML del W3C
  • Grupo de Trabajo de Plataformas Web (actual responsable del DOM del W3C)