Artículos de Diseño Gráfico y Diseño y Desarrollo Web

RSS - Sindicar Contenidos
Xhtml 1.1 Strict Válido! CSS Nivel 2 Válido!  Nivel Doble-A de Conformidad con las Directrices de Accesibilidad Web (WAI)
Descarga FireFox gratis!
\n"; } } } lecturas();

Parsing XML

Autor: TejedoresDelWeb.com

Dado que XML es un lenguaje establecido ampliamente en la comunidad de desarrolladores Web, existen ya herramientas y estándares de programación para leer documentos XML.

1. ¿Qué es un Parser XML?

Un Parser es un módulo, biblioteca o programa que se ocupa de transformar un archivo de texto en una representación interna. En el caso de XML, como el formato siempre es el mismo, no necesitamos crear un parser cada vez que hacemos un programa, hay muchos parsers disponibles.

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.

1. 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")

2. 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.

3. 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.

3. Espacios de nombres

Ver: XML NameSpaces en el W3C

Consideremos que un documento XML puede tener partes diseñadas para distintas aplicaciones. La idea es que estas partes no choquen entre sí, esto es más importante aún cuando hablamos de Web Semántica.

En el caso de Java, por ejemplo, el esquema de imports utiliza la idea de que todas las clases hechas, por ejemplo, en el DCC, tienen que comenzar con cl.uchile.dcc; en el caso de XML se provee un esquema más flexible llamado xml namespaces.

4. Ejemplo sencillo

<vectorgraphic xmlns:vec="http://www.tejedoresdelweb.com/vector.dtd">
<vec:line x1="1" y1="1" x2="30" y2="30"/>
<vec:circle center="1,2" radius="12"/>
</vectorgraphic>

5. Namespaces múltiples

<document xmlns:doc="http://doc.org/doc.dtd">v
<doc:p>Hola</doc:p>
<bibdata xmlns:bib="http://biblioteca.cl/bib.dtd">
<bib:codigo>12389124</bib:codigo>
</bibdata>
</document>

6. Namespaces lado a lado

<document xmlns:doc="http://doc.org/doc.dtd" xmlns:bib="http://biblioteca.cl/bib.dtd">
<doc:p>Hola</doc:p>
<bib:codigo doc:visibility="hide">12389124</bib:codigo>
</document>

Nótese que los atributos y los elementos se comparten.

7. Namespaces default

<document xmlns="http://doc.org/doc.dtd">
<p>Hola</p>
</document>

4. Usos típicos

El namespace más usado es sin duda html, normalmente como default. Los espacios de nombre se utilizan en aplicaciones que generan documentos para varios contextos, como por ejemplo, cuando se necesita realizar anotaciones para ser leídas por humanos y computadoras.

Scour Design - Todos los Derechos Reservados - Carlos Carmona