Programación en castellano
-Tutoriales

Introducción a J2EE


Añadir eXtensible Markup Language (XML)

eXtensible Markup Language (XML) es un lenguaje para representar y describir datos basados en texto para que los datos puedan ser leídos y manejados por cualquier progrma o herramienta que usae los APIs XML. Los programas y herramientas pueden generar ficheros XML que otros programas y herramientas pueden leer y manejar.

Por ejemplo, una compañía puede usar XML para producir informes para que las diferentes partes que reciban los informes puedan manejar los datos de una forma apropiada a sus necesidades. Una parte podría pasar los datos XML a través de un programa para traducirlos a HTML y poder ponerlos en la Web, otra parte podría pasar los datos por una herramienta para producir un inform de stocks, y otra tercera parte podría pasar los datos XML a través de una herramienta para crear una presentación de marketing. Mismos datos, diferentes necesidades, y un grupo de programas y herramientas independientes de la plataforma para usar los mismos datos en varis formas distintas. Estas capaciades tan flexibles y baratas están disponibles a través de etiquetas XML, Definiciones de Tipos de Documentos (DTDs) también conocidos com esquemas XML, y los APIs XML.

Esta lección adapta el ejemplo de la Lección anterior para que la clase JavaBeans use los APIs XML para impriir un sencillo informe donde los datos están marcados con etiquetas XML.

. Marcar y Manejar Texto

Con XML definimos etiquetas de marcas para representar diferentes elementos de datos en un fichero de texto. Por ejemplo, si tenemos un fichero de texto que consiste en un pequeño artículo, definimos etiquets que represente el título, el autor, las cabeceras de primer nivel, las cabeceras de segundo nivel, las listas bulleteadas, el texto del artículo, etc. Una vez que los datos están representados por etiquetas XML, podemos crear una Definición de Tipo de Documento (DTD) y/o un fichero "eXtensible Style sheet Language (XSL)" para describir cómo queremos que se manejen los datos.

  • Los estilos XSL nos pemiten hacer cosas como el mapeo de XML a HTML. Por ejemplo, podemos definir una etiqueta de título XML para que represente el título de un artículo, y crear un fichero XSL que mapee la etiqueta de título CML a una etiqueta H1 de HTML para mostrarselo al usuario final.
  • Un DTD (también conocido como esquema XML) contiene especificaciones que permiten a otros programa validad la estructura de un fichero XML para asegurarse que los datos están etiquetados de la forma correcta. Por ejemplo, un DTD para un artículo podría permitir una etiqueta de título, pero cero o más primeros y segundos niveles de cabeceras.

Cualquier programa capaz de analizar XML puede chequear etiquetas XML bien-formadas, y cualquier programa capaz de aplicar estilos XLS o especificaciones DTD a datos XML puede manejar datos que fueron etiquetados de forma inteligente. Por ejemplo, si un artículo titne dos etiquetas de título, pero el DTD permite sólo una, el programa devuelve un error. Chequear un documento XML contra un DTD es lo que se conoce como verificación.

Lo más bonito sobre XML es que el etiquetado está separado de las hojas de estilos y DTD. Esto significa que podemos tener un documento XML y desde a muchas hojas de estilo o DTDs. Diferentes hojas de estilo nos permiten tener diferentes presentaciones dependiendo de cómo se utilice el documento. Por ejemplo, un artículo en XML puede tener una hoja de estilo para diferentes web sites donde se va a publicar para que corresponda con el aspecto y comportamietno de cada site.

La versión actual de J2EE no tiene un motor de "eXtensible Style sheet Language Transformation (XSLT)" por eso no es posible actualmente usar una hoja de estilo para hacer cosas como transformar un documento XML en HTML para mostrarlo.

. Modificar la Clase JavaBean

En esta lección, se añade un método genXML a la clase JBonusBean para generar el documento XML mostrado abajo. Después de ver las etiquetas y estructura de un documento XML vermos el código que genera este documento XML.

<?xml version="1.0"?>
<report>
  <bonusCalc ssnum="777777777" bonusAmt="300.0" />
</report>

. Prólogo XML

La línea <?xml version="1.0"?> es el prólogo XML. Un fichero XML siempre debe empezar con un prologo que lo identifique como un fichero XML. El prólo no es necesario si sólo va a ser leído por humanos, pero es buena idea incluirlo. Junto con la información de versión, el prólogo también puede incluir información de codificación e información "standalone.

  • Información de Codificación: indica el conjunto de caracteres usado en los datos del documento. Unicode descomprimido se representa como <?xml version="1.0" encoding="UTF-8"?>. El conjunto de caracteres Western European y lenguaje Inglés se indica como:<?xml version="1.0" encoding="ISO-8859-1"?>.
  • Información Standalone: idnica si este documento usa información de otros ficheros. Por ejemplo, un documento XML podría relacionarse con una hoja de estilo para infomación sobre cómo crear un interface de usuario e HTML, o un DTD para especificaciones de etiquetas válidas.

. Documento Raíz

La etiqueta <report> es la primera etiqueta XML de este fichero. Es la etiqueta XML de más alto nivel y marca el inicio de los datos del documento. Otro nombre para este nivel de etiqueta es root. Las etiquetas XML tienen su correspondiente etiqueta final, por eso el final de este documento tiene su correspondiente etiqueta </report> para cerrar la pareja.

Podemos darle a una etiqueta XML cualquier nombre que queramos. Este ejemplo usa report porque el fichero XML es un informe de bonos. Podría haberse llamado <root> o <begin> o cualquier otra cosa. el nombre tiene significado en la hoja de estilo y en el DTD porque es donde asignamos especificaciones para las etiquetas por sus nombres.

. Nodos Hijos

La etiqueta <bonusCalc> representa el informe de bonos. Esta etiqueta es un nodo hijo que se añade al raíz. Usa atributos para especificar el número de la seguridad social y el valor del bono (ssnum y bonusAmt ). Podemos definir un DTD para chequear que las etiquetas bonusCalc tienen los atributos ssnum y bonusAmt, y poder hacer que nuestro programa corriga un error si ha desaparecido algún atributo o si los atributos presentes no deberian estar ahí.

<bonusCalc ssnum="777777777" bonusAmt="300.0" />

. Otras Etiquetas XML

Hay varias formas de etiquetar datos XML. Este ejemplo usa etiquetas vacías, que son etiquetas que no encierran datos, usan atributos para especificar datos, y se cierran con una barra inclinada. La siguiente etiqueta vacía de este ejemplo, podría crearse para que los datos se encerraran entre etiquetas XML. El analizador XML chequea todos los datos encerrados por datos que llamados etiquetas bien-formadas. Las etiquetas bien-formadas consisten en una etiqueta de apertura y una de cierre como es muestra en el ejemplo de abajo:

Etiqueta Vacía:
<bonusCalc ssnum="777777777" bonusAmt="300.0" />
Etiquetas bien-formadas:
<bonusCalc>
  <ssnum>"777777777"</ssnum>
  <bonusAmt>300.0</bonusAmt>
</bonusCalc>

Los comentarios XML son como las etiquetas de comentario HTML.

<!-- Bonus Report -->
<bonusCalc ssnum="777777777" bonusAmt="300.0" />

Las instrucciones de procesamiento le dan comandos o información a una aplicación que está procesando los datos XML. Las instrucciones de procesamiento tienen el formado <? target instructions?> donde target es el nombre de la aplicación que está haciendo el procesamient, e instructions encierra la información o comandos para que los procese la aplicación. El prólogo es un ejemplo de una instrucción de procesamiento, donde xml es la fuente y version="1.0" encierra las instrucciones. Debemos observar que el nombre de fuente xml esta reservado para estándar XML.

<?xml version="1.0"?>

También podemos usar instrucciones de procesamiento par ahacer cosas como distinguir entre diferentes versiones de una representación como la versión de alto nivel ejecutivo y la versión de nivel técnico.

. Código del JavaBean

La clase JBonusBean para esta lección tiene sentencias import para crear el documento XML, manejar errores, y escribir el documento en el terminal. Esta lección escribe la salida del XML en el terminal para mantener las cosas sencillas. También podría escribirse en un fichero, pero necesitaríamos configutrar nuestro navegador para usar el Java Plug-In e incluir un fichero de policía de seguridad que concediera permiso para escribir un fichero.

Para generar el fichero XML para esta lección, necesitamos importar las clases ElementNode y XmlDocument. También necesitamos las clases StringWriter e IOException para escribir datos XML en el terminal.

import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import Beans.*;
import java.io.StringWriter;
import java.io.IOException;
import com.sun.xml.tree.ElementNode;
import com.sun.xml.tree.XmlDocument;

Esta versión de la clase JBonusBean tiene una variable más de ejemplar. El interface remoto del bean de sesión, theCalculation, necesita ser accedido desde los métodos getBonusAmt y genXML. Esto es porque genXML lee la base de datos para generar XML para todos los registros almacenados ene lla y tiene que poder acceder al método getRecord del bean de sesión.

Calc theCalculation;

El método JBonusBean.genXML es llamado desde el método getBonusAmt después de que el proceso se complete en el evento strMult y no sea null . Lo prmero que este método hace es crear un objeto XMLDocument y el nodo raíz, y añade la raíz al documento. El nodo raíz represetna el punto de más alto nivel en el árbol del documento y es el punto donde empieza el procesamiento.

  private void genXML(){
    Bonus records = null; 
  //Create XML document
    XmlDocument doc = new XmlDocument();
  //Create node
    ElementNode root = (ElementNode)
                doc.createElement("report");
  //Add node to XML document 
    doc.appendChild(root);
    

Los bloques try y catch que vienen luego, obtienen el registro de la base de datos, recuperar el valor del bono y el número de la seguridad social desde el registro, convierte el valor del bono a un string, crea un nodo hijo (bonusCalc ), y añade el número de la seguridad social y el bono al nodo hijo bonusCalc como atributos. El nodo hijo epresenta la herencia o árbol, y los atributos representan el tercer nivel.

    try{
    //Get database record
      records = theCalculation.getRecord(socsec);
    //Retrieve the social security number from record
       String ssRetrieved = records.getSocSec();
    //Retrieve bonus amount from record
       double bRetrieved = records.getBonus();
    //Convert double to string
       Double bonusObj = new Double(bRetrieved);
       String bString = bonusObj.toString();
    //Create child node
       ElementNode bonusCalc = (ElementNode)
                   doc.createElement("bonusCalc");
    //Add attributes to child node
       bonusCalc.setAttribute("ssnum", ssRetrieved);
       bonusCalc.setAttribute("bonusAmt", bString);
    //Add child node to root
      root.appendChild(bonusCalc);
    } catch (java.rmi.RemoteException e) {
      e.printStackTrace();
    }

La última parte del método genXML crea un objeto StringWriter, escribe la herencia del documento o árbol al objeto StringWriter, y escribe el objeto StringWriter al terminal.

    try{
      StringWriter out = new StringWriter();
      doc.write(out);
      System.out.println(out);
    } catch (java.io.FileNotFoundException fe) {
      System.out.println("Cannot write XML");
    } catch (IOException ioe) {
      System.out.println("cannot write XML");
    }

El árbol o estructura del documento XML se llama Document Object Model (DOM). La siguiente figura muestra una representación simplificada del DOM del ejemplo de esta lección. Las llamadas al API en el método genXML crea el DOM y podemos aplicar las llamadas al API para acceder al DOM paa hacer cosas como añadir, borrar y editar nodos hijos, o validar el DOM contra un DTD. Podemos crear un DOM desde un fichero XML.

. Los APIs

El fichero j2ee.jar que viene con nuestra instalación J2EE proporciona APIs para analizar y manipular datos XML. El fichero JAR realmente prporciona APIs XML para SAX, DOM y J2EE. Podemos usar cuaquier API que necesitamos como se muestra en la siguiente figura, el texto XML es independiente de la plataforma y el lenguaje de creacción...

. SAX y DOM

El API SAX es un mecanismo de acceso serial dirigido por eventos que hace un proceso elemento por elemento.

El API DOM proporciona una estructura de objetos del tipo árbol relativamente familiar. Podemos usar el API DOM para manipular la herencia de los objetos que encapsula. El API DOM es ideal para aplicaciones interactivas porque el modelo completo del objeto está presente en la memoria, donde el usuario puede acceder a él y modificarlo.

Construir el DOM requiere la lectura de la estructura XML completa y mantener el árbol de objetos en memoria, lo que significa mucho consumo de CPU y de memoria. Por esta razón, se tiende a preferir el API SAX para aplicaciones cliente-servidor y para filtros de datos que no requieren una representación de los datos en memoria.

. J2EE

El API XML J2EE independiente de la plataforma usa un árbol DOM y proporciona muchos métodos para manipularlo. los APIs XML J2EE están en el paquete com.sun y se han utilizado en el ejemplo de esta lección. No olvidemos que estos APIs están sujetos a modificaciones.

. Actualizar y Ejecutar la Aplicación

Como todo lo que hemos hecho en esta lección ha sido modificar la clase JBonusBean, simplementen podemos actualizar y redesplegar la aplicación.

  • Ventana Local Applicatons: Seleccionamos la aplicación 2BeansApp.
  • Menú Tools: Seleccionamos Update and Redeploy Application.
Nota:
La aplicación BonusApp de la lección anterior se desinstala automáticamente.

El servidor web se ejecuta por defecto en el puerto 8000. Para abrir la página bonus.jsp apuntamos el navegador a http://localhost:8000/JSPRoot/bonus.jsp, que es donde la herramietna Deploy puso la página JSP.

  • Rellenamos un número de la seguridad social y un multiplicador.
  • Pulsamos el botón Submit. Bonus.jsp procesa nuestros datos y devuelve una página HTML con el bono calculado.

. Código Fuente de los Ejemplos

Aquí tienes un fichero Zip con los ficheros fuente de los ejemplos de esta página:

fuentes_L6.zip

 
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