Introducción
Objetivo
Estudiar casos de estudio que ilustren escenarios típicos de
aplicación de XML
Indicar las APIs apropiadas en cada caso
Casos de estudio
Configuración de aplicaciones Generación de aspecto visual
Configuración de aplicaciones (1)
En el tema anterior, se ha sugerido el uso de ficheros
.properties
como mecanismo de configuración de
aplicaciones
Ventaja: sencillez
Desventaja: no permite especificar cómodamente
configuraciones complejas
Cuando la configuración es compleja, el uso de XML
se presenta como una buena alternativa
Como se ha sugerido en el tema anterior, se deberían
ofrecer un conjunto de clases que permitan acceder
fácilmente a la información de configuración, ocultando el uso de XML
Configuración de aplicaciones (2)
Ejemplo
... <data-sources> <data-source name="Catalog" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost/catalog" user="catalog" password=""> </data-source> <data-source name="OrderManagement" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:oci8:@orders" user="orders" password=""> </data-source> </data-sources> ...Configuración de aplicaciones (3)
¿ Cómo se puede parsear un fichero XML ?
El pequeño conjunto de normas que define XML y la
posibilidad de definir reglas (ej.: vía DTDs) para especificar los tags válidos, permiten construir parsers genéricos que son capaces de comprobar que el documento XML está “bien formado” y es “válido”
¡ Los parsers ya están hechos !
Existen parsers para los lenguajes más usuales, conformes a
varias APIs estándares
DOM SAX
Configuración de aplicaciones (4)
Parsers SAX
Simple API for XML
Es un pequeño framework basado en eventos
El programador proporciona uno o varios objetos callback a
los que el parser llamará cada vez que ocurra un evento de interés (apertura de un tag, cierre de un tag, un error, etc.)
Parsers DOM
Document Object Model
Construye una representación (un árbol) en memoria del
documento
El programador puede acceder a los datos del documento
Configuración de aplicaciones (5)
Parsers SAX vs DOM
SAX
Es secuencial
Consumo mínimo de memoria => eficiencia
No es fácil acceder a elementos anteriores, hermanos, etc.
DOM
Construye un árbol en memoria Máximo consumo de memoria
Permite acceder fácilmente a todos los detalles del documento Más sencillo que SAX
Configuración de aplicaciones (6)
APIs Java básicas para parsing
J2SE incluye JAXP (Java API for XML Processing)
javax.xml.parsers y familia javax.xml.transform
Formaba parte de J2EE, pero se movió a J2SE a partir de la versión
1.4 de J2SE
javax.xml.parsers incluye dos factorías abstractas para
obtener instancias de parsers SAX (familia org.xml.sax) y DOM
(org.w3c.dom)
J2SE incluye una implementación por defecto de JAXP Se puede usar otra si se desea
APIs Java de más alto nivel para parsing
JAXB (Java Architecture for XML Binding)
Permite generar clases Java a partir de un esquema XML Permite serializar a XML y viceversa
Formará parte de J2EE
Jakarta Commons Digester
http://jakarta.apache.org/commons/digester
Permite definir reglas en XML para dar valores a JavaBeans a partir de
Configuración de aplicaciones (7)
J2EE permite especificar información de
configuración en XML
Ej.: web.xml
Es posible configurar aspectos relativos a la aplicación y al
servidor de aplicaciones
El programador accede a la información de configuración
relativa a la aplicación mediante el API de J2EE
Configuración de aplicaciones (y 8)
Más información sobre SAX, DOM y JAXB
Libro
Java and XML
(bibliografía recomendada) http://java.sun.com/xml The Java Web Services Tutorial http://java.sun.com/webservices
Generación de aspecto visual (1)
Situación
Queremos construir una tienda de comercio electrónico Cada producto tiene asociado los siguientes atributos:
Identificador de producto, nombre, breve descripción, fecha y
precio
También se desea almacenar la “estructura” del producto
Si es un libro, su estructura es su índice (división en capítulos y
apartados)
Si es un CD, su estructura es la lista de canciones (indicando
para cada una de ellas, su nombre y duración)
Se podrán hacer consultas con condiciones sobre los valores
de cualquier atributo (ej.: obtener los libros con precio > X), excepto su estructura
Sólo interesa recuperar su estructura a partir del identificador
del producto
Cuando el usuario desea visualizar los detalles de un
producto, deberán mostrarse los datos del producto, incluyendo su estructura
Generación de aspecto visual (2)
Opciones de diseño
Modelar la estructura de libros y CDs como tablas Incómodo
Son estructuras jerárquicas => requerirán varias tablas Se necesitan tablas distintas para cada tipo de producto
Añadir un atributo de tipo String a la tabla Producto que
represente su estructura en HTML
¿Y si quisiésemos mostrarlo en otro lenguaje visual (ej.: WML)? ¿Y si queremos cambiar el formato HTML (ej.: un tipo de
letra)?
Generación de aspecto visual (3)
Opciones de diseño (cont)
Añadir un atributo de tipo String a la tabla Producto que
represente su estructura en XML
Generamos el aspecto visual dinámicamente ¿ Cómo ?
Una posible solución sería usar un parser DOM o SAX para acceder
a los datos y generar dinámicamente HTML
Sin embargo, y dado que es un caso muy habitual, existen
soluciones más sencillas: XSL y los tags de XML de JSTL
Transformaciones XSL (XSLT)
Un fichero XSL (eXtensible Stylesheet Language) permite
expresar reglas para transformar un documento XML en otro formato (ej.: HTML, otro documento XML, PDF, etc.)
Generación de aspecto visual (4)
Transformaciones XSL (cont)
APIs Java
Familia de paquetes javax.xml.transform
Forman parte de JAXP
Proporciona una factoría abstracta que permite obtener un
transformador para realizar la transformación de un documento XML a partir de un documento XSL
Generación de aspecto visual (y 5)
Tags de XML proporcionados por JSTL
JSTL (parte de J2EE) se comentará en el tema 4
Ofrece un tag para realizar una transformación en una
página JSP
También ofrece tags para parsear un documento XML y
acceder a su información de una manera bastante parecida a XSL
Estos tags representan una alternativa (menos potente) a XSL
Más información sobre XSL y los tags de XML de JSTL
Libros
XML in a nutshell
yJavaServer Pages 3rd edition
(bibliografía recomendada)
http://java.sun.com/xml The J2EE Tutorial
http://java.sun.com/j2ee
Integración de aplicaciones heterogéneas (1)
El ejemplo de las películas ...
BD cine.acme.com Nuestra empresa BD Petición Internet Respuesta en XML Ap. web Ap. cliente
Integración de aplicaciones heterogéneas (2)
En el ejemplo anterior, cliente y servidor pueden
estar escritos en distintos lenguajes y corriendo en
distintas plataformas (hardware y sistema operativo)
Cuando la comunicación es vía Internet,
normalmente se usa HTTP
Todos los firewalls reconocen HTTP
El servidor se suele implementar como una sencilla
aplicación web
El cliente sólo necesita conectarse a una URL, leer su
respuesta, parsearla e introducirla en su BD
Ej.:
http://cine.acme.com/services/MovieInformationProvider/findM ovieReleases?day=19&month=10&year=2001
Integración de aplicaciones heterogéneas (3)
Servicios Web
SOAP: Protocolo basado en XML para el intercambio de información
en un entorno distribuido
Conceptualmente permite enviar peticiones/respuestas en XML
(normalmente por HTTP)
Un Servicio Web es un servicio ofrecido a través del web que envía
la información mediante SOAP
Existen APIs, para los lenguajes más usuales, que permiten
implementar clientes y servidores que usan SOAP
Clientes y servidores pueden estar escritos en lenguajes distintos Tanto J2EE como .NET proporcionan soporte para servicios web
Existen APIs basadas en RPCs (ej.: JAX-RPC en J2EE), que
permiten implementar un Servicio Web como un objeto cuyos métodos se pueden invocar remotamente, como si de un objeto local se tratase
Ocultan el uso de XML
El intercambio de información mostrado en el anterior ejemplo se
Integración de aplicaciones heterogéneas (4)
Otro ejemplo
Como parte de una aplicación web que estamos
desarrollando, queremos ofrecer un servicio que permite visualizar las cotizaciones de valores bursátiles
Contratamos con una empresa de contenidos que nos pase
esta información
La información está cambiando constantemente No tiene sentido almacenarla en nuestra BD
Sólo queremos mostrar la información
Podríamos modelar esta solución con Servicios Web
La empresa de contenidos implementa un servicio web que
ofrece una operación para consultar las cotizaciones del conjunto de valores bursátiles pasados como parámetro
Nuestra aplicación web invoca esta operación cada vez que
tiene que mostrar información de cotizaciones y genera HTML dinámicamente
Integración de aplicaciones heterogéneas (5)
Otro ejemplo (cont)
En este caso, el uso de XML/XSL constituiría una solución
más sencilla
La empresa de contenidos proporciona una URL para obtener
los valores del conjunto de valores bursátiles que pasamos como parámetro, que devuelve dicha información en XML
Implementamos la consulta de cotizaciones en nuestra
aplicación web leyendo de esta URL y transformando dinámicamente a HTML mediante un documento XSL
Integración de aplicaciones heterogéneas (y 6)
CORBA permite afrontar integraciones más complejas
entre aplicaciones heterogéneas (normalmente en
intranets)
Seguridad, transacciones, eventos, etc.
Más información sobre Servicios Web
http://www.webservices.org The Java Web Services Tutorial
http://java.sun.com/webservices