Programación en castellano
-Tutoriales

El API JAXP


Desarrollar Soluciones XML con Tecnología JSP

XML (eXtensible Markup Language) es un conjunto de reglas de síntaxis y guías para definir lenguajes de texto basados en marcas. Los lenguajes XML tienen un gran número de usos, incluyendo.

  • El intercambio de información
  • La definición de tipos de documentos
  • La especificación de mensajes

La información que se expresa en un formato estructurado basado en texto puede ser fácilmente transmitida, trasformada e interpretada por entidades que entiendan la estructura. De esta forma XML nos trae los mismos beneficios multi-plataforma para el intercambio de información que el lenguaje de programación Java tiene para el procesamiento.

La tecnología JavaServer Pages (JSP) proporciona especificación y servicios de documentos que combinan elementos de lenguaje de marcas estáticos y elementos creados dinámicamente mediante objetos del lenguaje Java. Las páginas JSP se ejecutan como Servlets Java, normalmente en el contexto de un servidor Web donde generan documentos de respuesta dependientes del contenido usando datos almacenados en bases de datos y en otros objetos de aplicación basados en servidor.

Los servidores de aplicaciones y las herramientas de desarrollo que soportan la tecnología JSP están disponibles a través de muchos vendedores (inlcuyendo grupos de código abierto) para un ámplio rango de plataformas hardware y software.

La tecnología JSP proporciona un número de capacidades que son ideales para trabajar con XML. Las páginas JSP pueden contener cualquier tipo de datos basados en texto, por eso son correctas para generar documentos que contienen marcas XML. Las páginas JSP también pueden usar todo el poder de la plataforma Java para acceder a objetos del lenguaje para analizar y transformar mensajes XML en documentos. En particular, como parte del entorno Java, las páginas JSP pueden usar objetos que utilicen los nuevos APIs Java para procesar datos XML. Finalmente la tecnología JSP proporciona un mecanismo de abstracción para encapsular la funcionalidad y así facilitar su uso dentro de una página JSP.

Está página muestra cómo las páginas JSP pueden.

Esta página asume que estás familiarizado con la tecnología JSP, incluyendo los componentes JavaBeans y las librerías de etiquetas personalizadas.

. Usar Fuentes de datos XML en Páginas JSP

Es sencillo usar múltiple fuentes de datos, incluyendo fuentes XML, en una página JSP; la siguiente figura ilustra la forma estándard de hacer esto. Una página conecta con un fuente de datos a través de un objeto del lado del servidor, transforma la información en obstracciones de datos y los muestra usando elementos JSP.

Consideremos la siguiente representación XML de un inventario de libros.

<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book isbn="123">
<title>Web Servers for Fun and Profit</title>
<quantity>10</quantity>
<price>$17.95</price>
</book>
<book isbn="456">
<title>Web Programming for Mobile Devices</title>
<quantity>2</quantity>
<price>$38.95</price>
</book>
<book isbn="789">
<title>Duke: A Biography of the Java Evangelist</title>
<quantity>25</quantity>
<price>$15.00</price>
</book>
</books>

Hay dos formas en las que podríamos usar datos XML en una página JSP.

  • Convertir los elementos XML en objetos del lado del servidor y luego extraer las propiedades de los objetos.
  • Invocar una transformación de los datos XML.

. Convertir XML en Objetos del Lado del Servidor y Extraer las Propiedades del Objeto

En la primera aproximación, los objetos se crearon para representar la información contenida en el documento XML. Actualmente tenemos que escribir código, usando DOM o SAX y encapsularlo dentro de una etiqueta de usuario o un componente JavaBean, para crear estos objetos. En el futuro, la tecnología "XML/Java Binding" (JSR 31 en el "Java Community Process") automatizará este proceso porque nos permitirá compilar un esquema XML en una clase Java.

En el siguiente ejemplo, una página JSP recupera datos XML desde dos URLs y usa los datos para generar una página HTML. Observa que la URL puede apuntar a una fuente que genere datos XML de forma dinámica, o a un documento XML estático, se puede utilizar la misma técnica para generar XML.

La página JSP usa la etiqueta personalizada del analizador para extraer y almacenar los datos XML en dos objetos: un customer y una colección books. Luego la página extrae las propiedas del objeto customer y usa una etiqueta personalizada para iterar a través de la colección y mostrar una tabla que liste las propiedades de los objetos book.

<%@ taglib uri="..." prefix="tl" %>
<html>
<tl:parse id="customer" type="Customer"
xml="XML_Customer_URL"/>
<tl:parse id="saleBooks" type="BookInventory"
xml="XML_Book_Inventory_URL"/>
<head>
<title>Welcome</title>
</head>
<body>
Welcome 
<jsp:getProperty name="customer" property="lastName"/>
 
<jsp:getProperty name="customer" property="firstName"/>
<table border="0" width="50%">
<tl:iterate id ="book" type=”Book”
collection=”<%= saleBooks.getBooks() %>” >
<tr>
<td>
<jsp:getProperty name="book"
property="title"/>
</td>
<td>
<jsp:getProperty name="book"
property="price"/>
</td>
</tr>
</tl:iterate>
</table>
</body>
</html>

Uno de los documentos XML de este ejemplo (los datos del inventario de libros) está compuesto por fragmentos XML (elementos book). No es realmente necesario analizar el documento completo en memoria para extraer los datos -- podemos analizarlo usando SAX o JDOM, por ejemplo, y extraer los datos de un fragmento cada vez. La siguiente versión del ejemplo usa la etiqueta personalizada iterateOnXMLStream para implementar esta alternativa.

<%@ taglib uri="..." prefix="tl" %>
<html>
<tl:parse id="customer" type="Customer"
xml="XML_Customer_URL"/>
<head>
<title>Welcome</title>
<body>
as above ...
<table border="0" width="50%">
<tl:iterateOnXMLStream id="book" type="Book"
xml="XML_Book_Inventory_URL">
<tr>
as above ...
</tr>
</tl:iterateOnXMLStream>
</table>
</body>
</html>

. Convertir XML Usando una Transformación XSLT

Otra forma de usar datos XML en un página JSP es aplicar una transformación a la fuente de los datos XML, o para extraer los datos, o para crear un nuevo formato. Esta transformación puede hacerse usando varios mecanismos diferentes y accediendo a través de etiquetas personalizadas.

XSLT es un lenguaje transformacional estándarizado en el W3C que puede ser usado para transformar datos XML en HTML, PDF u otro formato XML. Por ejemplo, podemos usar XSLT para convertir un documento XML de un formato usado por una compañia al formato usado por otra compañia.

Para generar el HTML de la página de la sección anterior usando está aproximación necesitamos una hoja de estilo XSL y una forma de aplicar esa hoja de estilos. La hoja de estilos XSL del ejemplo siguiente realiza las transformaciones necesarias para los elementos book y customer. La hoja de estilos genera marcas HTML y extrae los datos de los elementos.

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="books">
<table border="0" width="50%">
<xsl:for-each select="book">
<tr>
<td>
<i><xsl:value-of select="title"/></i>
</td>
<td>
<xsl:value-of select="price"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="customer">
<b><xsl:value-of select="first_name"/> 
<xsl:value-of select="last_name"/></b>
</xsl:template>
</xsl:stylesheet>

Para aplicar la hoja de estilo, programáticamente invocamos a un procesador XSLT desde un scriplet JSP o una etiqueta personalizada. El proyecto de jakarta-taglibs de la "Apache Software Foundation" mantiene una librería de etiquetas que contiene varias de ellas para procesar entradas XML y aplicar transformaciones XSLT. La página JSP siguiente invoca a la etiqueta apply de esta librería con store.xsl para transformar los datos del cliente y del inventario de libros.

<%@taglib uri="http://jakarta.apache.org/taglibs/xsl-1.0"
prefix="xsltlib" %>
<html>
<head>
<title>Book Inventory</title>
</head>
<body bgcolor="white">
<center>
Welcome 
<xsltlib:apply xml="XML_Customer_URL" xsl="store.xsl"/>!
<p></p>
<font color="red">
On Sale Today ...
</font>
<p></p>
<xsltlib:apply xml="XML_Book_Inventory_URL" xsl="store.xsl"/>
</center>
</body>
</html>

Abajo puedes ver el resultado de la ejecución de esta página.

. Generar Lenguajes de Marcas usando Páginas JSP

Para que los servicios basados en Web tengan un uso más amplio tienen que conseguir un incremento importante para que sean accesibles desde la más amplia variedad de clientes. En los últimos años han proliferado diferentes tipo de clientes orientados a usuarios para aplicaciones basadas en Web: PDAs, teléfonos móviles WAP, y clientes de línea de voz terrestre. Con el incremento de las transaciones negocio-a-negocio, los servidores que consumen XML pueden también ser clientes. El escenario que nosotros visionamos se parecería a esto.

Estos clientes hablan los siguientes lenguajes:

Cliente Lenguaje de Marcas
Navegador basado en PC HTML, DHTML y XHTML
PDA WML y XHTML
Teléfono Móvil WML y XHTML
Teléfono Terrestre XML de Voz
Servidor Lenguajes XML específicos de la aplicación

El esfuerzo requerido para soportar todos estos clientes empequeñecerá el esfuerzo que se hizo con las aplicaciones HTML durante los noventa. Afortunadamente las mejores herramientas ya están disponibles: la tecnología JSP y XML. Luego describiremos cómo usar estas herramientas para desarrollar aplicaciones Web multi-lenguaje.

. Generar XML desde una Página JSP

Ya hemos visto como las páginas JSP pueden consumir datos XML para generar contenido dinámico. Las páginas JSP también pueden generar datos XML. Recordamos el documento XML presentado al principio de esta página.

<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book isbn="123">
<title>Web Servers for Fun and Profit</title>
<quantity>10</quantity>
<price>$17.95</price>
</book>
...
</books>

Una página JSP podría generar un respuesta conteniendo este documento para satisfacer una petición de negocio-a-negocio sobre los contenidos de un almacen de libros. El ejemplo del consumidor descrito anteriormente también podría usar esta página como fuente de datos XML.

El punto principal para generar XML es que la página JSP seleccione el tipo de contenido de la página de forma apropiada:

<%@ page contentType=”text/xml”%>
... XML document

Con este cambio, las técnicas descritas anteriormente para generar contenido HTML pueden usarse para generar XML.

. Generar Multiples Lenguajes de Marcas

Hay varias aproximaciones para generar multiples lenguajes de marcas desde una aplicación Web.

  • Tubería sencilla
  • Tubería múltiple
  • Combinación de tuberías

. Tubería Sencilla

En la aproximación de tubería sencilla, las páginas JSP de la aplicación Web generan marcas específicas de clientes aplicando transformaciones a los datos XML entrantes. Cada tipo de cliente requiere una hoja de estilo diferente y el principal coste de desarrollo está asociado con la creacción y mantenimiento de estas hojas de estilo.

Esta aproximación aplaza la generación de las porciones estática y dinámica de una respuesta al momento de ejecución. El coste de la ejecución está asociado con.

  • Analizar los Datos XML
  • Analizar la hoja de estilos
  • Aplicar la Transformación

Si estamos usando transformaciones XSLT, podremos mejorar el rendimiento de las transformaciones creando una representación binaria (usando un compilador XSLT, por ejemplo, XSLTC) para una hoja de estilo. Sin embargo, esto también hace el proceso de mantenimiento más complejo: cada vez que la presentación cambie, la hoja de estilo debe recompilarse.

Algunas veces las diferencia entre clientes son menores y podría no merecer la pena modificar la transformación. Por ejemplo, hay una variedad de ligeras diferencias entre clientes de escritorio basados en navegadores. En algunos casos, uno podría querer aprovecharse de las diferencias en vez de generar contenido para el mínimo común denominador. Frecuentemente las diferencias entre estos clientes pueden encapsularse en una etiqueta personalizada que genera diferentes contenidos dependiendo de las propiedades del cliente.

Generar la presentación para clientes con diferentes modelos de interacción y flujo de control (por ejemplo, navegadores basados en PC contra teléfonos WAP) requiere transformaciones muy diferentes. Por ejemplo, un teléfono móvil no puede mostrar una tabla que contiene datos de un inventario de libros. En su lugar los datos tendrían que mostrase en un conjunto de listas anidadas. Soportar dichas transformaciones incrementa tanto los costes de desarrollo como de ejecución.

. Tuberías Múltiples

La aproximación de tuberías múltiples usa un conjunto de páginas JSP específicas del cliente para generar la salida.

Comparándola con la utilización de transformaciones XSLT, esta aproximación mantiene el trabajo de creacción de contenido estático en la fase de desarrollo dejando que la generación de contenido dinámico sea durante la ejecución.

Junto con las creacción de páginas JSP específicas del cliente, los costes de desarrollo incurren en la creacción y mantenimiento de objetos del lado del servidor que representan la abstracción de datos de la aplicación. Este paso no es necesario para la aproximación de tubería sencilla. De todas formas la aproximación de tuberías múltiples puede ser más barata que la de tubería sencilla por las siguientes razones.

  • Las abstracciones de datos pueden reutilizarse en diferentes tipos de páginas JSP.
  • Las abstracciones de datos cambian mucho menos que la presentación.
  • La ejecución de una página JSP para generar marcas es mucho más eficiente que realizar una transformación XSLT para generar la misma marca.

La siguiente tabla sumariza el coste de cada aproximación:

Tubería Desarrollo Ejecución
Sencillo El cliente especifica una hoja de estilo Analizar Datos XML
Analizar Hoja de Estilos
Aplicar Transformación
Múltiple Abstracción de Datos
El cliente especifica una página JSP
Analizar Datos XML
Ejemplarizar e inicializar los componentes de abstracción
Ejecutar la página JSP

. Combinación de Tuberías

Podemos combinar las aproximacioens de tuberías simples y múltiples. Si nuestros clientes usan diferentes lenguajes probablemente deberíamos usar una tubería para cada lenguaje. Para generar dialectos de un lenguaje, podríamos aplicar transformaciones XSLT a la tubería de ese lenguaje.

. Conclusión

La tecnología JavaServer Pages y el XML son compañeros naturales que usan fuentes de datos heterogéneas y soportan clientes multi-lenguaje. Esta página ha descrito varias aproximaciones para direccionar estos requerimientos que mejoran el desarrollo y mantenimiento contra el coste de ejecución. Como parte de la plataforma Java, las tecnología JSP proporciona a los desarrolladores la capacidad de evaluar estas mejoras y de adoptar una tecnología para procesamiento XML que satisfaga los rendimientos de su aplicación particular.

. Recursos

Para posterior información sobre las tecnologías descritas en esta página, puedes visitar las siguientes sites (en Inglés).

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados