Java es una de las opciones más interesantes para el desarrollo de aplicaciones con XML.
Como ya hemos podido suponer, el empleo de tecnología XML, al ser un estándar
internacional y público, no nos ata a una plataforma o sistema de desarrollo concreto. Lo
mismo se puede usar Perl bajo UNIX para generar documentos XML a partir de una base
de datos, como usar Python en Windows NT para servir documentos HTML4 a
navegadores web a partir de un documento XML.
Dicho esto, hay que decir que JAVA se posiciona como una opción interesante a la hora de desarrollar aplicaciones usando XML.
Por ejemplo, a partir de fuentes de datos en XML, podemos escribir un servlet que analice sintácticamente el XML, y que genere un árbol DOM (Document Object Model). Una vez generado el árbol DOM, podemos ir extrayendo la información que contiene e ir generando un documento HTML de acuerdo con ciertas reglas de formato, de modo que pueda ser visualizado por un navegador web.
Vamos a suponer que nuestro servlet carga ese fichero XML en un objeto string de Java, que nos vamos a disponer a analizar.
Lo primero que debemos hacer es crear un analizador sintáctico XML. Usamos el objeto com.ibm.xml.Parser para ello.
Parser parser = new Parser("xslparse.err");
El fichero "xslparse.err" será el registro de cualquier error que ocurra mientras procesamos el documento XML, que debe ser convertido a un InputStream.
ByteArrayInputStream bais = new ByteArrayInputStream(xmlString.getBytes());
Ahora le decimos al parser que ignore las declaraciones de tipo de documento, los comentarios, etc.
parser.setWarningNoXMLDecl(false);
parser.setWarningNoDoctypeDecl(false);
parser.setKeepComment(false);
parser.setProcessNamespace(false);
Analizamos el documento, y cerramos el InputStream.
doc = parser.readStream;
bais.close();
Ahora contenemos el árbol DOM en el objeto "doc", y lo que tenemos que hacer es movernos por el árbol DOM e ir sacando los datos que contiene. Vamos a ver los métodos que tenemos para navegar el DOM (definidos en org.w3c.dom.Node)
getDocumentElement()
Devuelve el elemento raiz
getFirstChild()
Devuelve el nodo que es el primer "hijo" de este nodo.
getNextSibling()
Devuelve el nodo que es el siguiente "hermano" de este nodo.
getLastChild()
Devuelve el nodo que es el último "hijo" de este nodo.
getPreviousSibling()
Devuelve el nodo que es el último "hermano" de este nodo.
getAttribute(java.lang.String attrName)
Devuelve un objeto string que representa el valor de un atributo.
Existen más métodos para manipular el DOM. La especificación "DOM Level 1" (http://www.w3.org/TR/REC-DOM-Level-1) aporta más información sobre métodos del DOM.
LENGUAJE DE ENLACE XML (XLINK)
XLink es una aplicación XML que intenta superar las limitaciones que tienen los enlaces de hipertexto en HTML. Es una especificación que todavía está en desarrollo, y que todavía no tiene "rodaje" en el mundo real.
Los enlaces en HTML tienen una serie de limitaciones, que los hacen bastante pobres. Porejemplo, sólo tienen dos extremos, la terminación origen y la destino, y son unidireccionales.
Si yo creo un enlace en mi página web personal que me lleve hasta la página principal de Coca-Cola, estoy creando un "vínculo" entre esta página y la mia.
<a href="http://www.coca-cola.com/">Coca-Cola</a>
Este vínculo es unidireccional, porque un visitante cualquiera que entre en la página de Coca-Cola, no tiene forma de saber que mi página (así como otros cientos de miles) enlaza con ella.
El objetivo de XLink es crear enlaces entre recursos, de una forma de la que HTML no es capaz.
Por ejemplo, un estudiante podría hacer anotaciones a los apuntes que un profesor tiene disponibles en la red, por el método de insertar un enlace desde los apuntes (a los que no tiene acceso de escritura o modificación) y su propia página de anotaciones y comentarios.
O bien, podremos vincular dos páginas cualquiera, por ejemplo enlazando el texto de una noticia en un diario on-line, con el texto de la noticia equivalente en el diario competidor. Y no hay porqué quedarse en enlaces con dos extremos. Los enlaces extendidos permiten mucho más que eso.
En el momento actual, la tecnología para poder mantener una base de datos de enlaces mundial, no está desarrollada, pero se puede hacer a nivel local.
Por ejemplo, nuestra empresa quiere comprar ciertos productos de un suministrador. Los trabajadores de la empresa podrán visitar la página web del proveedor y hacer enlaces externos a comentarios sobre las especificaciones de tal producto. Cuando otro compañero de la empresa visite la página, el servidor de enlaces de nuestra empresa le mostrará la página junto con los enlaces externos creados, y mostrar nuestros comentarios como si fueran parte del documento original.
Dicho esto, hay que decir que JAVA se posiciona como una opción interesante a la hora de desarrollar aplicaciones usando XML.
Por ejemplo, a partir de fuentes de datos en XML, podemos escribir un servlet que analice sintácticamente el XML, y que genere un árbol DOM (Document Object Model). Una vez generado el árbol DOM, podemos ir extrayendo la información que contiene e ir generando un documento HTML de acuerdo con ciertas reglas de formato, de modo que pueda ser visualizado por un navegador web.
Vamos a suponer que nuestro servlet carga ese fichero XML en un objeto string de Java, que nos vamos a disponer a analizar.
Lo primero que debemos hacer es crear un analizador sintáctico XML. Usamos el objeto com.ibm.xml.Parser para ello.
Parser parser = new Parser("xslparse.err");
El fichero "xslparse.err" será el registro de cualquier error que ocurra mientras procesamos el documento XML, que debe ser convertido a un InputStream.
ByteArrayInputStream bais = new ByteArrayInputStream(xmlString.getBytes());
Ahora le decimos al parser que ignore las declaraciones de tipo de documento, los comentarios, etc.
parser.setWarningNoXMLDecl(false);
parser.setWarningNoDoctypeDecl(false);
parser.setKeepComment(false);
parser.setProcessNamespace(false);
Analizamos el documento, y cerramos el InputStream.
doc = parser.readStream;
bais.close();
Ahora contenemos el árbol DOM en el objeto "doc", y lo que tenemos que hacer es movernos por el árbol DOM e ir sacando los datos que contiene. Vamos a ver los métodos que tenemos para navegar el DOM (definidos en org.w3c.dom.Node)
getDocumentElement()
Devuelve el elemento raiz
getFirstChild()
Devuelve el nodo que es el primer "hijo" de este nodo.
getNextSibling()
Devuelve el nodo que es el siguiente "hermano" de este nodo.
getLastChild()
Devuelve el nodo que es el último "hijo" de este nodo.
getPreviousSibling()
Devuelve el nodo que es el último "hermano" de este nodo.
getAttribute(java.lang.String attrName)
Devuelve un objeto string que representa el valor de un atributo.
Existen más métodos para manipular el DOM. La especificación "DOM Level 1" (http://www.w3.org/TR/REC-DOM-Level-1) aporta más información sobre métodos del DOM.
LENGUAJE DE ENLACE XML (XLINK)
XLink es una aplicación XML que intenta superar las limitaciones que tienen los enlaces de hipertexto en HTML. Es una especificación que todavía está en desarrollo, y que todavía no tiene "rodaje" en el mundo real.
Los enlaces en HTML tienen una serie de limitaciones, que los hacen bastante pobres. Porejemplo, sólo tienen dos extremos, la terminación origen y la destino, y son unidireccionales.
Si yo creo un enlace en mi página web personal que me lleve hasta la página principal de Coca-Cola, estoy creando un "vínculo" entre esta página y la mia.
<a href="http://www.coca-cola.com/">Coca-Cola</a>
Este vínculo es unidireccional, porque un visitante cualquiera que entre en la página de Coca-Cola, no tiene forma de saber que mi página (así como otros cientos de miles) enlaza con ella.
El objetivo de XLink es crear enlaces entre recursos, de una forma de la que HTML no es capaz.
Por ejemplo, un estudiante podría hacer anotaciones a los apuntes que un profesor tiene disponibles en la red, por el método de insertar un enlace desde los apuntes (a los que no tiene acceso de escritura o modificación) y su propia página de anotaciones y comentarios.
O bien, podremos vincular dos páginas cualquiera, por ejemplo enlazando el texto de una noticia en un diario on-line, con el texto de la noticia equivalente en el diario competidor. Y no hay porqué quedarse en enlaces con dos extremos. Los enlaces extendidos permiten mucho más que eso.
En el momento actual, la tecnología para poder mantener una base de datos de enlaces mundial, no está desarrollada, pero se puede hacer a nivel local.
Por ejemplo, nuestra empresa quiere comprar ciertos productos de un suministrador. Los trabajadores de la empresa podrán visitar la página web del proveedor y hacer enlaces externos a comentarios sobre las especificaciones de tal producto. Cuando otro compañero de la empresa visite la página, el servidor de enlaces de nuestra empresa le mostrará la página junto con los enlaces externos creados, y mostrar nuestros comentarios como si fueran parte del documento original.
Alfredo Reino Romero