Parsing XML: SAX y DOM - ¿Cómo se clasifican los parsers?
Curso gratis creado por Carlos Castillo. Extraido de: http://www.tejedoresdelweb.com/307/article-2146.html
18 de Octubre de 2005
XML
2 - ¿Cómo se clasifican los parsers?
Se clasifican en SAX y DOM.
También se hace distinción entre los que son Validantes y los No Validantes. Los primeros verifican que el documento, además de estar bien formado de acuerdo a las reglas de XML, responda a una estructura definida en una DTD.
SAX Parsers
SAX significa Simple API for XML. Un parser SAX tiene una interfaz del estilo:
saxParse( documento, f_inicio_elemento, f_fin_elemento, f_texto )
En que los principales argumentos son punteros a funciones. Estas funciones serán ejecutadas por el parser cuando él se encuentre con un elemento inicial, con uno final, o con texto.
Por ejemplo, en el documento <p>Hola <b>mundo</b></p>, si ejecuto saxParse( documento, fstart, fend, ftext ), se produce la siguiente secuencia de invocaciones:
fstart(http://www.w3.org/TR/REC-xml-names/"p"∞)
ftext("Hola")
fstart("b")
ftext("mundo")
fend("b")
fend("p")DOM Parsers
DOM significa Document Object Model. Un parser DOM tiene una interfaz del estilo:
nodoRaiz = domParse( documento )
Y lo que produce es un árbol de nodos, en el ejemplo anterior, produciría algo así, considerando una notación tipo LISP:
(p "Hola" (b "mundo"))
En que el primer elemento de las listas es la raíz.
Comparación
Un SAXParser es una herramienta más versátil, más veloz y menos potente que un DOMParser. Requiere de mayor programación hacer algo útil con ella, pero puede ser muy buena idea si por ejemplo, lo que interesa es rescatar un fragmento de un documento, buscar sólo un elemento en particular.
En contraste, un DOMParser es menos versátil, más lento, pero una vez usado no tengo que desarrollar nada más. El DOMParser me entrega el árbol construído y listo, así que no necesito nada más para funcionar.
Obviamente, un DOMParser puede implementarse encima de un SAXParser.
nodo_actual = null
define fstart(elemento) := ( nodo_actual null ) ? nodo_actual = elemento : nodo_actual.agregaHijo( elemento )
define fend(elemento) := nodo_actual = nodo_actual.obtienePadre()
También se hace distinción entre los que son Validantes y los No Validantes. Los primeros verifican que el documento, además de estar bien formado de acuerdo a las reglas de XML, responda a una estructura definida en una DTD.
SAX Parsers
SAX significa Simple API for XML. Un parser SAX tiene una interfaz del estilo:
saxParse( documento, f_inicio_elemento, f_fin_elemento, f_texto )
En que los principales argumentos son punteros a funciones. Estas funciones serán ejecutadas por el parser cuando él se encuentre con un elemento inicial, con uno final, o con texto.
Por ejemplo, en el documento <p>Hola <b>mundo</b></p>, si ejecuto saxParse( documento, fstart, fend, ftext ), se produce la siguiente secuencia de invocaciones:
fstart(http://www.w3.org/TR/REC-xml-names/"p"∞)
ftext("Hola")
fstart("b")
ftext("mundo")
fend("b")
fend("p")DOM Parsers
DOM significa Document Object Model. Un parser DOM tiene una interfaz del estilo:
nodoRaiz = domParse( documento )
Y lo que produce es un árbol de nodos, en el ejemplo anterior, produciría algo así, considerando una notación tipo LISP:
(p "Hola" (b "mundo"))
En que el primer elemento de las listas es la raíz.
Comparación
Un SAXParser es una herramienta más versátil, más veloz y menos potente que un DOMParser. Requiere de mayor programación hacer algo útil con ella, pero puede ser muy buena idea si por ejemplo, lo que interesa es rescatar un fragmento de un documento, buscar sólo un elemento en particular.
En contraste, un DOMParser es menos versátil, más lento, pero una vez usado no tengo que desarrollar nada más. El DOMParser me entrega el árbol construído y listo, así que no necesito nada más para funcionar.
Obviamente, un DOMParser puede implementarse encima de un SAXParser.
nodo_actual = null
define fstart(elemento) := ( nodo_actual
null ) ? nodo_actual = elemento : nodo_actual.agregaHijo( elemento )
define fend(elemento) := nodo_actual = nodo_actual.obtienePadre()
define ftext(texto) := nodo_actual.guardaContenido( texto )
saxParse( document, fstart, fend, ftext )
return nodo_actual
Hay que agregar una serie de salvedades que permiten ir verificando en línea que se cierren todos los elementos que se abran, etc.
Respecto a los atributos: es una extensión de este tipo de parsing.
Valora este capítulo:
Autor y licencia de 'Parsing XML: SAX y DOM - ¿Cómo se clasifican los parsers?'
|
Opiniona sobre 'Parsing XML: SAX y DOM - ¿Cómo se clasifican los parsers?' (1)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este curso gratis |
Wikis relacionados con 'Parsing XML: SAX y DOM - ¿Cómo se clasifican los parsers?'
Jakarta es un nuevo paso dentro del desarrollo de la tecnología orientada a software de...
Más »
El Sistema Aduanero Automatizado (SIDUNEA) es la herramienta informática para el control y administración de...
Más »
Existen numerosos formatos en que se pueden explotar las capacidades multimediales del WWW. Cada uno...
Más »
El principal objetivo es introducir y discutir el modo principal[2] PSGML de Emacs y las...
Más »
Una de las características que diferencian al hombre como ser racional o como ''homo sapiens''...
Más »

