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