¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Desarrollo informático
  3. XML
Extrait - Desarrollo informático Aprenda a diseñar antes de programar
Extractos del libro
Desarrollo informático Aprenda a diseñar antes de programar Volver a la página de compra del libro

XML - Arquitectura 3 tiers

Objetivos del capítulo

Los objetivos son aprender a:

  • Diseñar y desarrollar un servidor de cadenas en formato XML.

  • Desarrollar aplicaciones cliente de este servidor.

XML: eXtensible Markup Language

1. El lenguaje XML

XML es un lenguaje de etiquetas que tiene como uno de sus objetivos facilitar el intercambio de información entre aplicaciones.

XML es extensible porque las etiquetas no están predefinidas.

2. Documento XML

a. Ejemplo de documento XML

images/1_216.png

El documento XML contiene:

  1. Un prólogo que incluye una declaración XML, como en el ejemplo anterior.

  2. El cuerpo del documento, que es la descripción de los datos propiamente dichos.

b. Cuerpo del documento XML

images/2_216.png

Las etiquetas se rodean entre comillas angulares simples. Un elemento se define entre una etiqueta de apertura y una de cierre.

Ejemplo: <nombre> es una etiqueta de apertura; </nombre> es la etiqueta de cierre que le corresponde. Se habla del elemento nombre.

c. XML es una estructura arborescente

El documento XML anterior se puede representar por el esquema de una arborescencia:

images/3_216.png

Cada uno de los símbolos gráficos (hexágono, elipse, rectángulo, rectángulo redondeado) representa un nodo (node) del árbol.

d. Un documento XML bien formado

Para que un documento XML esté bien formado, debe respetar las siguientes reglas:

  • Solo debe tener un elemento raíz que incluya el resto de elementos.

  • Todos los elementos se deben cerrar.

  • Los elementos se deben anidar correctamente.

  • Los valores de los atributos se deben escribir entre «comillas dobles».

Java y XML

1. El DOM (Document Object Model)

El DOM es un conjunto de clases que permite manipular un documento XML.

Un determinado número de interfaces permiten representar los diferentes nodos del árbol.

Para hacer referencia a este árbol, algunas veces hablamos del árbol DOM.

2. La jerarquía de las interfaces Node (extracto)

images/4_216.png

Node

Es el tipo de datos básico del DOM. El resto de los tipos derivan de él.

Document

Un objeto Document representa el documento XML entero. Contiene el prólogo y el cuerpo del documento.

Element

Un objeto Element representa una etiqueta del documento XML.

Attr

Un objeto Attr representa un atributo.

Text

Un objeto Text hace referencia al contenido de una etiqueta.

Comment

Un objeto Comment hace referencia a un comentario.

Parseadores XML

Un parser XML es una clase que tiene métodos que permiten obtener una representación de memoria del documento XML. De esta manera, podemos recorrer el árbol, extraer los datos y trabajar con ellos.

1. Parser DOM

a. Programa

Un parser DOM lee el conjunto del documento XML y lo carga en memoria. Permite generar un objeto Document a partir de un archivo XML.

public class VerificaDocumentDom  
{  
   public static void main(String args[]) throws IOException,  
                                                 ParserConfigurationException,
                                                 SAXException  
   { 
  • DocumentBuilderFactory es una clase que permite obtener un parser (analizador sintáctico) de tipo DOM.

  • DocumentBuilder es la referencia del parser obtenido.

       DocumentBuilderFactory fabricaParserXml;  
       DocumentBuilder parserXml; 
  • File es la referencia al archivo XML que se tiene que convertir.

  • Document es la referencia al documento obtenido por el parser.

  • Element es la referencia de un elemento (aquí, la raíz del árbol).

  • Node es la interfaz de la que derivan todas las interfaces que representan un nodo del árbol DOM.

  • NodeList es una colección de nodos (Node).

        File archivoXml;  
       Document documentDom;  
       Elment raiz;  
       NodeList hijos;  
       Node hijo; 

Creación del objeto parserXml:

       fabricaParserXml = DocumentBuilderFactory.newInstance();  
       fabricaParserXml.setIgnoringComments(true);  
       parserXml = fabricaParserXml.newDocumentBuilder(); 

El método setIgnoringComments() permite indicar que el parser no debe tener en cuenta los comentarios presentes en el archivo XML.

El programa presentado convierte un archivo XML en objeto Document y después muestra el nombre del nodo raíz. Para terminar, muestra el nombre de todos...

Trabajo práctico: Proyecto ServidorXML

1. Objetivos

  • Desarrollar un servidor de aplicación conectado a una base de datos, que envía XML en respuesta a las consultas SQL de los clientes.

  • Desarrollar una aplicación en una arquitectura 3 tiers.

2. Arquitectura del proyecto: 3 tiers

images/12_216.png

3. Tema

a. Ventana gráfica del servidor

images/13_216.png

Aparte del título, la ventana es idéntica a la del Servidor de objetos del capítulo anterior. 

b. Protocolo de intercambio entre cliente y servidor

  • El servidor de objetos serializados del capítulo anterior intercambia objetos Java con su cliente. Por lo tanto, este se escribe en Java.

  • El servidor XML intercambia los workflows de caracteres (una consulta SQL o un programa XML) con su cliente. Esto se puede escribir en cualquier lenguaje, siempre que este lenguaje permita el análisis sintáctico de un archivo XML.

images/14_216.png

c. Clases útiles para el desarrollo

  • Clase JuegoResultadoXML

    El constructor de la clase JuegoResultadoXML del paquete herramientasMG.jdbc, recibe un objeto ResultSet como argumento y fabrica una cadena XML, que se puede recuperar con el método getResultadoXML().

    La DTD de esta cadena XML tiene la siguiente estructura:

    <!DOCTYPE RAIZ [ 
    <!ELEMENT RAIZ (COLUMNA*, FILA*)> 

    La descripción del elemento COLUMNA no depende de la SELECT realizada:

       <!ELEMENT COLUMNA (NombreColumna, TamanioColumna, ClaseColumna)> 
         <!ELEMENT NombreColumna (#PCDATA)> 
         <!ELEMENT TamanioColumna (#PCDATA)> 
         <!ELEMENT ClaseColumna (#PCDATA)> 

    La descripción del elemento fila depende de la SELECT. En el siguiente ejemplo (SELECT * FROM CONTACTO), cada fila seleccionada tiene seis columnas. Cada columna se corresponde con un elemento que contiene el valor leído (texto):

   <!ELEMENT FILA (NUMERO, NOMBRE, DIRECCION, CODIGO_POSTAL, CIUDAD, 
CODIGO_SECTOR)>  
     <!ELEMENT NUMERO (#PCDATA)>  
     <!ELEMENT NOMBRE (#PCDATA)>  
     <!ELEMENT DIRECCION (#PCDATA)>  
     <!ELEMENT CODIGO_POSTAL (#PCDATA)>  
     <!ELEMENT CIUDAD (#PCDATA)>  
     <!ELEMENT CODIGO_SECTOR (#PCDATA)>  
]> 
  • Clase AccesBase

    La clase AccesBase tiene...

Trabajo práctico: Proyecto GestionContactoXML

1. Objetivo

Desarrollar el cliente gráfico del proyecto 3tiers.

2. Pantallas del cliente y del servidor

images/19_216.png

3. Tema

a. Presentación

Este proyecto retoma el proyecto GestionContactoRed del capítulo anterior. Se trata de adaptar al servidor XML las clases de acceso a los datos.

b. Trabajo

  • Crear el paquete herramientasVarios.daoServidorXML.

  • Y volver a copiar todas las clases del paquete herramientasVarios.daoServidorObjetos.

  • La clase socketServidor no se modifica.

  • La claseAccesServidorse debe modificar. Tiene los siguientes métodos:

  • AccesServidor(socketServidor toma)

  • socketServidor getToma()

  • Socket getConnection() throws IOException

  • void closeConnection() throws IOException

  • JuegoResultado executeQuery(String select) throws ParserConfigurationException, SAXException, IOException

  • public Integer executeUpdate(String consulta) throws ParserConfigurationException, SAXException, IOException

Los métodos de la clase AccesServidor son los mismos que los del paquete herramientasVarios.daoServidorObjetos, pero su código es diferente y la firma difiere a causa de las excepciones.

  • Adaptar las clases ContactoDAO y SectorDAO (las excepciones).

  • Crear un proyecto GestionContactoXML.

  • Y volver a copiar todas las clases del proyecto GestionContactoRed.

  • Adaptar la clase Controlador (las excepciones).

c. Diagrama de secuencia

images/Esquema6.png

4. Proyecto GestionContactoXML: propuesta de corrección

a. Clase AccesServidor del paquete daoServidorXMLDom

Esta solución utiliza el parser DOM. En el sitio web de Ediciones ENI puede acceder a una solución que utiliza el parser SAX (los paquetes se llaman daoServidorXMLDom y daoServidorXMLSax).

Las propiedades de la clase AccesoServidor son:

  • socketServidor toma: localización del servidor

  • Socket socketCliente: socket que permite el acceso al servidor

  • PrintWriter salida: workflow de escritura al servidor

  • InputStreamReader Entrada e InputSource origenXML: workflow para leer la respuesta XML del servidor

package daoServidorXMLDom;  
  
public class AccesServidor  
{  
   private socketServidor toma;  
   private Socket socketCliente;  
   private InputStreamReader entrada;  
   private InputSource origenXml;  
   private PrintWriter salida;  
  
   public AccesServidor(socketServidor...