Autor: Ma Xiaoning
XML (lenguaje de marcado extensible) puede parecer una especie de estándar w3c: no tiene ningún impacto práctico ahora, e incluso si resulta útil en el futuro, lo será mucho tiempo después. Pero, de hecho, ya se está utilizando. Por lo tanto, no espere hasta que se agregue XML a su editor HTML favorito para comenzar a usarlo. Ahora puede resolver varios problemas internos y problemas del sistema b2b.
En sparks.com utilizamos xml para estandarizar la representación de datos entre diferentes sistemas, desde objetos java hasta visualizaciones de datos html.
En particular, hemos descubierto que los datos se pueden compartir y manipular más fácilmente cuando están estandarizados en una estructura XML muy básica. En este proceso, descubrimos muchas formas efectivas de utilizar xml. A continuación se describe nuestra aplicación actual en detalle.
Estandarizar Antes de usar XML, cree un formato de datos XML que sea diferente de la información que desea usar.
Generar xml dinámico
Generar HTML a partir de una base de datos no es nuevo, pero generar XML sí lo es. Aquí presentamos los pasos de generación específicos.
Usando xsl como lenguaje de plantilla
XSL (lenguaje de hoja de estilo extensible) es una buena forma de definir el formato de visualización de datos XML y será más eficaz si se escribe en varias plantillas estáticas.
generar html
xml más xsl es igual a html. Puede que esto no suene bien, pero nuestra página html que ven los usuarios es en realidad el resultado de xml y xsl.
1.
La capacidad de estandarizar XML proviene de su flexibilidad. Pero desafortunadamente, a veces es tan flexible que te quedas con una página en blanco preguntándote cómo resolver el problema.
En cualquier proyecto XML, el primer paso es crear un formato de datos estándar. Para ello, deberá tomar las siguientes decisiones:
• ¿Qué datos estarán involucrados?
• Si se debe utilizar dtd (definición de tipo de archivo)
• Si desea utilizar DOM (Modelo de objetos de documento) o SAX (API simplificada para XML) para analizar
y determinar los datos:
Como no existe un formato XML estándar, los desarrolladores son libres de desarrollar sus propios formatos. Sin embargo, si su formato solo es reconocido por una aplicación, entonces solo podrá ejecutar esa aplicación para usar el formato. Obviamente, sería más útil si hubiera otros programas que también pudieran leer su formato xml. Si se modifica un formato XML, es posible que también sea necesario modificar el sistema que lo utiliza, por lo que debe crear el formato lo más completo posible. Debido a que la mayoría de los sistemas ignoran las etiquetas que no reconocen, la forma más segura de cambiar el formato de un XML es agregar etiquetas, en lugar de modificarlas.
Haga clic aquí para ver un ejemplo de formato de datos xml
En sparks.com, analizamos todos los datos de producto necesarios para diferentes presentaciones de producto. Aunque no todas las páginas utilizan todos los datos, hemos desarrollado un formato de datos xml muy completo y adecuado para todos los datos. Por ejemplo, nuestra página de detalles del producto muestra más datos que nuestra página de exploración de productos. Sin embargo, seguimos usando el mismo formato de datos en ambos casos porque la plantilla xsl de cada página solo usa los campos que necesita.
Si se debe utilizar dtd
En sparks.com utilizamos xml bien organizado en lugar de simplemente xml correcto, ya que el primero no requiere un dtd. DTD agrega una capa de procesamiento entre el usuario que hace clic y ve la página. Descubrimos que esta capa requería demasiado procesamiento. Por supuesto, sigue siendo bueno utilizar DTD cuando se comunica con otras empresas en formato XML. Porque dtd puede garantizar que la estructura de datos sea correcta al enviar y recibir.
Elección de un motor de análisis Ahora bien, existen varios motores de análisis que se pueden utilizar. Cuál elija depende casi por completo de las necesidades de su aplicación. Si decide utilizar DTD, entonces el motor de análisis debe poder permitir que DTD verifique su XML. Podría poner la validación en un proceso separado, pero eso afectaría el rendimiento.
Sax y dom son dos modelos básicos de análisis. SAX se basa en eventos, por lo que cuando se analiza el xml, los eventos se envían al motor. A continuación, los eventos se sincronizan con el archivo de salida. El motor de análisis DOM establece una estructura de árbol jerárquica para datos XML dinámicos y hojas de estilo XSL. Al acceder aleatoriamente al árbol DOM, los datos XML se pueden proporcionar como si estuvieran determinados por una hoja de estilo XSL. El debate sobre el modelo SAX se centra principalmente en la reducción excesiva de la memoria de la estructura DOM y la aceleración del tiempo de análisis de la hoja de estilo XSL.
Sin embargo, descubrimos que muchos sistemas que utilizan saxo no lo utilizan en todas sus capacidades. Estos sistemas lo utilizan para construir estructuras DOM y enviar eventos a través de estructuras DOM. Con este enfoque, el DOM debe construirse a partir de la hoja de estilo antes de cualquier procesamiento XML, por lo que el rendimiento se verá afectado.
2. Generar xml dinámico
Una vez establecido el formato xml, necesitamos un método para trasplantarlo dinámicamente desde la base de datos.
Generar documentos xml es relativamente simple porque solo requiere un sistema que pueda manejar cadenas. Construimos un sistema utilizando java servlet, servidor javabean empresarial, jdbc y rdbms (sistema de gestión de bases de datos relacionales).
• El servlet maneja las solicitudes de información del producto descargando la tarea de generar documentos xml al javabean empresarial (ejb).
• ejb usa jdbc para consultar los detalles requeridos del producto desde la base de datos.
• ejb genera el archivo xml y lo pasa al servlet.
El servlet llama al motor de análisis para crear resultados html a partir de archivos xml y hojas de estilo xsl estáticas.
(Para obtener información adicional sobre la aplicación de XSL, consulte Uso de XSL como lenguaje de plantilla).
Ejemplo de generación de XML El código real para crear una cadena de documento XML en Java se puede dividir en varios métodos y clases.
El código que inicia el proceso de generación xml se coloca en el método ejb. Esta instancia creará inmediatamente un stringbuffer para almacenar la cadena xml generada.
stringbuffer xml = nuevo stringbuffer();
xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "explorar", solicitud));
xml.append(producto.toxml());
xml.append(xmlutils.enddocument("navegar");
out.print(xml.tostring());
Las siguientes tres variables xml.append() son llamadas a otros métodos.
Generar encabezado de archivo El primer método adicional llama a la clase xmlutils para generar el encabezado del archivo xml. El código en nuestro servlet java es el siguiente:
cadena estática pública comenzar documento (hoja de estilo de cadena, página de cadena)
{
stringbuffer xml = nuevo stringbuffer();
xml.append("<?xml version="1.0"?>n")
.append("<?xml-stylesheet href="")
.append(hoja de estilo).append(""")
.append(" tipo ="text/xsl"?>n");
xml.append("<").append(página).append(">n");
devolver xml.tostring();
}
Este código genera el encabezado del archivo xml. La etiqueta <?xml> define este archivo como un archivo xml compatible con la versión 1.0. La segunda línea de código apunta a la ubicación de la hoja de estilo correcta para mostrar los datos. Lo último que se incluye es la etiqueta a nivel de elemento (<browse> en este ejemplo). Al final del archivo, solo es necesario cerrar la etiqueta <browse>.
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse>
Después de completar la información del producto y completar el encabezado del archivo, el El método de control llamará al objeto Java para generar su xml. En este ejemplo, se llama al objeto del producto. El objeto del producto utiliza dos métodos para generar su representación xml. El primer método toxml() crea el nodo de producto generando etiquetas <product> y </product>. Luego llama a internalxml(), que proporciona el contenido requerido para el xml del producto. internalxml() es una serie de llamadas a stringbuffer.append(). El stringbuffer también se convierte en una cadena y se devuelve al método de control.
cadena pública toxml()
{
stringbuffer xml = nuevo stringbuffer("<producto>n");
xml.append(internalxml());
xml.append("</producto>n");
devolver xml.tostring();
}
cadena pública internalxml()
{
stringbuffer xml = nuevo
buffer de cadena("t")
.append(tipo de producto).append("n");
xml.append("t").append(idvalue.trim())
.append("n");
xml.append("t").append(nombreid.trim())
.append("n");
xml.append("t").append(página.trim())
.append("n");
¿Angustia?
xml.append("t").append(cantidad).append("n");
xml.append("t").append(proveedor).append("n");
xml.append("tn");
xml.append("t").append(pubdesc).append("n");
xml.append("t").append(vendesc).append("n";
¿Angustia?
devolver xml.tostring();
}
Finalmente, se llama al método xmlutils.enddocument() después de cerrar el archivo. Esta llamada cierra la etiqueta xml (en este caso) y finalmente completa el archivo xml estructurado. El stringbuffer completo del método de control también se convierte en una cadena y se devuelve al servlet que manejó la solicitud http original.
3. Utilice xsl como lenguaje de plantilla
. Para obtener resultados html, combinamos el archivo xml generado con la plantilla xsl que controla cómo se representan los datos xml. Nuestras plantillas xsl constan de etiquetas xsl y html cuidadosamente organizadas.
Comience a construir la plantilla El comienzo de nuestra plantilla xsl es similar al código siguiente. La primera línea de código es obligatoria y define este archivo como una hoja de estilo xsl. El atributo xmlns:xsl= hace referencia al espacio de nombres xml utilizado por este archivo, y el atributo version= define el número de versión del espacio de nombres. Al final del archivo cerramos la etiqueta.
La segunda línea de código que comienza con <xsl:template> determina el modo de la plantilla xsl. El atributo de coincidencia es obligatorio y aquí apunta a la etiqueta xml <basketpage>. En nuestro sistema, la etiqueta <basketpage> contiene la etiqueta <product>, que permite que la plantilla xsl acceda a la información del producto incrustada en la etiqueta <product>. Una vez más tenemos que cerrar la etiqueta <xsl:template> al final del archivo.
A continuación, echemos un vistazo al HTML bien organizado. Dado que será procesado por el motor de análisis XML, debe cumplir con todas las reglas de un XML bien organizado. Básicamente, esto significa que todas las etiquetas de apertura deben tener una etiqueta de cierre correspondiente. Por ejemplo, una etiqueta <p> que normalmente no está cerrada debe cerrarse con </p>.
<xsl:hoja de estilo xmlns:xsl=" http://www.w3.org/1999/xsl/transform "
versión="1.0">
<xsl:template match="página de la cesta">
<html>
<cabeza>
<title>bolsa de compras / ajustar cantidad</title>
</cabeza>
<cuerpo bgcolor="#cccc99" bgproperties="fijo" link="#990000" vlink="#990000">
<br>
?br> </xsl:plantilla>
</xsl:hoja de estilo>
Dentro del cuerpo de la plantilla, hay muchas etiquetas xsl que se utilizan para proporcionar lógica para la presentación de datos. A continuación se explican dos etiquetas de uso común.
elegir
La etiqueta <xsl:choose> es similar al comienzo de una estructura if-then-else en los lenguajes de programación tradicionales. En XSL, la etiqueta elegir indica que en la parte donde ingresa el código, la asignación desencadenará la acción. La etiqueta <xsl:when> con atributos asignados sigue a la etiqueta de elección. Si la asignación es correcta, se utilizará el contenido entre las etiquetas de apertura y cierre de <xsl:when>. Si la asignación es incorrecta, se utiliza el contenido entre las etiquetas de apertura y cierre de <xsl:otherwise>. Toda la sección termina con </xsl:choose>.
En este ejemplo, la etiqueta when busca en el xml la etiqueta de cantidad. Si la etiqueta de cantidad contiene un atributo de error con un valor de verdadero, la etiqueta de cantidad mostrará las celdas de la tabla que se enumeran a continuación. Si el valor del atributo no es verdadero, xsl mostrará el contenido entre las etiquetas de lo contrario. En el siguiente ejemplo, si el atributo de error no es verdadero, no se mostrará nada.
<xsl:elegir>
<xsl:cuando prueba="cantidad[@error='true']">
<td bgcolor="#ffffff"><img height="1" width="1" src="