lunes, 9 de junio de 2014

DOM Core Level 1

El Document Object Model (DOM) Core Level 1 define un conjunto de objetos e interfaces necesarias para el acceso y manipulación de los objetos del documento el cual es representado como una jerarquía de objetos Nodo (Node objects) de distintos tipos. Algunos de estos Nodos pueden contener otros nodos de uno o más tipos formando una jerarquía completa para el documento. Los tipos de nodos y la definición de que hijos pueden contener cada uno de ellos se describe a continuación:


Nodo Tipos de nodos que puede contener
Document Element (máximo uno), ProcessingInstruction, Comment, DocumentType
DocumentFragment Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
DocumentType Ninguno
EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Element Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference
Attr Text, EntityReference
ProcessingInstruction Ninguno
Comment Ninguno
Text Ninguno
CDATASection Ninguno
Entity Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Notation Ninguno

La mayoría de las API's definidas en la especificación son interfaces en lugar de clases, esto significa que en una implementación real solo es encesario exponer los métodos con los nombres definidos y la operación especificada. Lo anterior es totalmente transparente para el programador, así que vamos a empezar a describir generalmente cada una de las interfaces, anotando sus atributos y métodos.

Interfaz Document


La interfaz document representa el documento HTML o XML completo. El document es la raíz del documento dese la cual se puede acceder a todos los demás datos del mismo.

Atributos doctype, implementation, documentElement
Métodos createElement(tagName), createDocumentFragment(), createTextNode(data), createComment(data), createCDATASection(data), createProcessingInstruction(target, data), createAttribute(name), createEntityReference(name), getElementsByTagName(tagname)

Interfaz DocumentFragment


El DocumentFragment representa un objeto mínimo de un documento. Es generalmente utilizado para la manipulación de partes del árbol del documento, el cual no debe estar necesariamente bien formado. Un DocumentFragment puede ser insertado en el documento o en otros nodos para seguir siendo manipulado en el árbol DOM. Esta interfaz actúa de intermediaria cuando se crean por ejemplo dos nodos (de la interfaz Node) y se juntan en un nodo padre (DocumentFragment) para luego ser insertado en el documento.

Interfaz Node


La interfaz Node representa el tipo de datos principal del modelo de objetos del documento (DOM). Aunque todos los nodos implementan los métodos para agregar otros nodos dentro de sí, hay que resaltar que no todos los nodos pueden tener hijos, por ejemplo el Text o Comment. Si se intenta agregar un nodo hijo en uno nodo que no pueda tenerlo se lanzará una excepción de la interfaz DOMException.


ConstantesNombreTipo de nodo
ELEMENT_NODE
ATTRIBUTE_NODE
TEXT_NODE
CDATA_SECTION_NODE
ENTITY_REFERENCE_NODE
ENTITY_NODE
PROCESSING_INSTRUCTION_NODE
COMMENT_NODE
DOCUMENT_NODE
DOCUMENT_TYPE_NODE
DOCUMENT_FRAGMENT_NODE
NOTATION_NODE
Element
Attr
Text
CDATASection
EntityReference
Entity
ProcessingInstruction
Comment
Document
DocumentType
DocumentFragment
Notation
AtributosnodeName, nodeValue, nodeType, parentNode, childNodes, firstChild, lastChild, previousSibling, nextSibling, attributes, owenerDocument
MétodosinsertBefore(newChild, refChild), replaceChild(newChild, oldChild), removeChild(oldChild), appendChild(newChild), hasChildNodes(), cloneNode(deep)

Dependiendo del tipo de nodo, los valores para los atributos nodeName, nodeValue y attributes están dados por la siguiente tabla:


Tipo de nodo nodeName nodeValue attributes
Element tagName null NameNodeMap
Attr nombre del atributo valor del atributo null
Text #text contenido del nodo null
CDATASection #cdata-section contenido del CDATA Section null
EntityReference nombre de la entidad referenciada null null
Entity nombre de la entidad null null
ProcessingInstruction target contenido sin destino null
Comment #comment contenido del comentario null
Document #document null null
DocumentType nombre del tipo de documento null null
DocumentFragment #document-fragment null null
Notation nombre de la notación null null

Interfaz NodeList


La interfaz NodeList proporciona una colección ordenada de nodos.

Atributoslength
Métodositem(index)

Interfaz NamedNodeMap


Esta interfaz es utilizada para representar colecciones de nodos que han sido obtenidos mediante su nombre.

Atributoslength
MétodosgetNamedItem(name), setNamedItem(arg), removeNamedItem(name), item(index)

Interfaz CharacterData


Esta interfaz es una extensión de la interfaz Node que agrega un conjunto de atributos y métodos necesarios para acceder a los datos de caracteres del documento.

Atributosdata, length
MétodossubstringData(offset, count), appendData(arg), insertData(offset, arg), deleteData(offset, count), replaceData(offset, count, arg)

Interfaz Attr


Esta interfaz representa un atributo para un objeto Element. Generalmente los valores posibles son definidos en la definición del tipo de documento.

Atributosname, specified, value

Interfaz Element


La interfaz Element representa la mayoría de cada uno de los objetos nodo que encontramos en el documento. Element hereda de la interfaz Node, por lo que podremos utilizar sus métodos también.

AtributostagName
Métodos
getAttribute(name), setAttribute(name, value), removeAttribute(name), getAttributeNode(name), setAttributeNode(newAttr), removeAttributeNode(oldAttr), getElementsByTagName(name), normalize()

Interfaz Text


La interfaz Text representa como su nombre lo indica contenido textual (también llamado character data en XML) de un Element o Attr.

MétodossplitText(offset)

Interfaz Comment


Esta interfaz representa contenido comentado en el código XML o HTML, denotado entre las etiquetas <!-- y -->


Aquellos que ya han utilizado el lenguaje de programación JavaScript y ya están familiarizados con el paradigma de programación orientado a objetos verán las anteriores interfaces muy familiares y de seguro habrán utilizado más del 40% de sus métodos y atributos. Para aquellos que aún se sienten desorientados no debe haber preocupación, la programación orientada a objetos es bastante compleja y se aprende en la mayoría de los casos con la práctica, es por esto que en una próxima entrega utilizaremos el lenguaje JavaScript para manipular el DOM de nuestros documentos y ver cómo es de fácil utilizar las anteriores interfaces para desarrollar aplicaciones básicas.

Aunque hemos visto la mayoría de interfaces, aún quedan las interfaces extendidas que en algunos casos nos pueden servir de mucho. A modo de investigación queda por la cuenta del lector leer las referencias para adentrarse más en este maravilloso tema. Hasta la próxima!.


Referencias

- Document Object Model (Core) Level 1. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 14:26, June 6, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html

No hay comentarios:

Publicar un comentario