Programación XML usando PHP y AJAX

En las arquitecturas SOA, los programadores suelen utilizar XML para intercambiar datos estructurados y semiestructurados entre aplicaciones. XML y sus tecnologías relacionadas (Document Object Model (DOM), XPath, HTTP, XQuery y Transformaciones de lenguaje de hojas de estilo extensibles (XSLT) proporcionan un entorno potente para el desarrollo rápido de aplicaciones. Las aplicaciones creadas con estas tecnologías ocuparán menos espacio de memoria, requerirán menores costos de mantenimiento y tendrán mayor calidad y flexibilidad.

Los aspectos XML de DB2 y otras bases de datos relacionales son bastante maduros, por lo que son ideales para almacenar y gestionar datos XML además de datos relacionales. El soporte XML de DB2 9 (llamado pureXML) proporciona la capacidad de almacenar XML en formato XML puro (en otras palabras, un almacenamiento jerárquico anotado en forma de árbol). En DB2 9, los datos XML se pueden indexar utilizando esquemas XML, se pueden componer a partir de datos relacionales, se pueden descomponer en datos relacionales, se pueden consultar y transformar, se pueden publicar de forma independiente o combinarse con datos relacionales mediante una combinación de SQL/XML. y XQuery.

Los navegadores web también proporcionan scripts de cliente con más capacidades para procesar XML de manera eficiente. Al utilizar JavaScript asíncrono y XML (Ajax), las páginas web ahora pueden realizar llamadas a procedimientos remotos directamente al servidor de aplicaciones y utilizar la API DOM en cualquier dato XML devuelto.

Este artículo muestra cómo escribir aplicaciones simples basadas en XML aprovechando las capacidades proporcionadas por DB2 XML, Ajax y el preprocesador de hipertexto (PHP) de PHP. Con la ayuda de escenarios de muestra, aprenderá cómo llamar aplicaciones PHP desde JavaScript; cómo modificar datos XML utilizando DOM y API SimpleXML; cómo transferir XML desde el cliente a la aplicación a la base de datos; Servicio web para consumir SQL/XML y publicar informes XQuery sobre datos XML.

Ventajas de XML

La mayoría de las aplicaciones se utilizan para crear, almacenar, manipular y presentar datos comerciales. La envoltura de objetos se refiere a unir datos comerciales para facilitar que la lógica empresarial los procese. Gran parte de la funcionalidad de estos objetos contenedores es proporcionar estructura a los datos comerciales en función de relaciones y reglas de formato, y permitir que la lógica empresarial manipule, publique y serialice los datos empaquetados.

·Un constructor

·Métodos Getter y Setter

·Código de verificación

·Serialización interna a nivel de objeto

p>

Estos objetos no tienen nada que ver con la lógica empresarial real. El empaquetado de objetos tiene como objetivo facilitar que la lógica empresarial administre los datos comerciales. Envolver datos requiere mucho más código que lógica empresarial. Más código generará más errores, mayor corrección, más mantenimiento y mayores costos.

Si las variables de datos en el objeto se pueden formatear en una estructura XML y la función principal del objeto es exponer estos datos a la lógica de negocios y dejar que la lógica de negocios los manipule, entonces el DOM puede ser utilizado en lugar del objeto.

·Crear nuevos objetos XML.

·Actualizar el valor de un objeto XML.

· Navegar por objetos XML.

·Busca dentro de la jerarquía de objetos usando XPath.

·Serializar y deserializar la jerarquía de objetos XML (en otras palabras, persistencia incorporada).

Al utilizar XML, puede evitar el uso de la mayoría de los objetos contenedores utilizados para administrar datos comerciales. Las aplicaciones serán más simples y se centrarán más en la lógica empresarial que en la gestión de datos.

XML y esquema

La introducción de XML en el esquema brinda una forma estandarizada de representar datos comerciales. XML proporciona la estructura de los datos; los esquemas XML imponen reglas de estructura y formato; y la API DOM y lenguajes como XQuery, XPath y XSLT permiten que la lógica empresarial manipule, publique y serialice datos de manera eficiente. Debido a que la representación XML de los datos comerciales es consistente en el cliente, el nivel intermedio y la base de datos, el código que manipula estos objetos también es similar.

Le mostraré cómo construir una aplicación basada en XML en un entorno de tres niveles que consta de los siguientes componentes:

·Cliente web: JavaScript y XML asincrónicos (Ajax), DOM

·Servidor de aplicaciones: PHP y SimpleXML

·Base de datos: DB2 9 y SQL/XML, XQuery

Basado en el escenario del modelo de datos de vida ACORD

Consideremos un escenario de seguro de vida simple en el que primero creamos un documento XML que representa una nueva póliza, luego consultamos y manipulamos este documento, y también movemos este documento de una capa a otra capa. Este documento se basa en la especificación XML para seguros de vida de la Asociación para la Investigación y el Desarrollo de Operaciones Cooperativas (ACORD), que define los datos que deben intercambiarse para seguros de salud y anualidades.

Para solicitar una nueva póliza, los clientes deben proporcionar cierta información básica. Parte de la información se completa en una aplicación PHP y otra en el navegador del cliente. Luego, la política se almacena en una columna XML de DB2. En DB2 9, las columnas de tipo XML almacenan datos XML internamente como un árbol analizado, en un lugar separado de los datos relacionales. Este enfoque es específico de DB2 9; las versiones anteriores de DB2 utilizaban una infraestructura de almacenamiento relacional para almacenar XML.

Así es como el documento XML de política fluye entre el cliente y la aplicación:

·En el cliente web, el cliente actualiza la página y hace clic en Enviar.

·El cliente web realiza una solicitud XMLHTTP a PHP para obtener un nuevo documento de política en blanco.

·La aplicación PHP abre un documento de política en blanco, lo actualiza con un identificador único global (GUID) y devuelve el documento al cliente web.

·El cliente web utiliza Ajax para capturar el evento devuelto y recuperar el DOM XML, luego completa el documento con la información ingresada en la página web.

·El cliente web utiliza XMLHTTP para enviar el XML actualizado a la aplicación PHP.

Cuando la primera solicitud llega al servidor de aplicaciones PHP de nivel medio, se carga un nuevo documento de política XML en un objeto SimpleXML. Actualice el elemento TransRefGUID con el GUID creado en la aplicación PHP mediante la API SimpleXML.

header('Tipo de contenido: texto/xml');

$fileContents = file_get_contents("$basedir/acord.xml");

$ dom = simplexml_load_string($fileContents);

$dom-TXLifeRequest-TransRefGUID=$guid;

echo $dom-asXML();

Entonces, esto El documento se envía al cliente.

Para este artículo, asumimos que el GUID se crea mediante algún mecanismo (como una combinación de tiempo y números aleatorios). Lo que es más importante es comprender cómo se ve el documento XML que representa la política como una jerarquía en memoria de objetos comerciales y cómo utilizar la API SimpleXML (o DOM/XPath) para navegar y actualizar este objeto.

Completar información básica del cliente

En el cliente web, la función fillPolicy() lee el valor devuelto. Ahora, un objeto DOM que contiene una representación en memoria del XML devuelto se puede utilizar para manipular documentos de políticas. La información ingresada por el cliente en la página web se utiliza directamente para actualizar el DOM. Después de actualizar la política con la información del cliente, el objeto DOM modificado se envía nuevamente a la aplicación PHP mediante XMLHTTP (consulte el Listado 2). Incluso los valores de los componentes HTML se leen utilizando DHTMLDocument Object Model (DOM).

#p#subtitle#e#

Almacenamiento de políticas en DB2

La aplicación PHP almacena el documento XML entrante directamente en la base de datos sin necesidad de analizarlo ( ver Listado 3). El soporte pureXML de DB2 analizará implícitamente el XML entrante y lo almacenará en una estructura jerárquica similar a DOM. Ahora se puede consultar XML en sentencias XQuery utilizando tecnologías de navegación XML como XPath (igual que las utilizadas en DOM). DB2 9 también ofrece la posibilidad de indexar en cualquier nodo de la jerarquía.

Exponer servicios en documentos XML

Después de que la nueva póliza se almacena en DB2 9, el agente de seguros puede consultar la póliza para decidir si acepta el seguro. La consulta utilizada para obtener informes sobre nuevas políticas se expone a la aplicación cliente a través de un servicio web.

El servicio web de este ejemplo está escrito en PHP, lo que proporciona una interfaz limpia para llamar a procedimientos almacenados de DB2 que implementan la lógica de transformación y de negocios del servicio. Cada procedimiento almacenado de DB2 consta de una consulta SQL/XML que filtra y transforma las políticas XML almacenadas en la base de datos para crear un documento XML de salida. Luego, el servicio web PHP devuelve el documento XML al cliente.

Analicemos cada procedimiento almacenado para ver las consultas que efectivamente forman una implementación de servicio web.

Consulta DB2 para listar todos los seguros de nuevos clientes. El procedimiento almacenado que contiene esta consulta es listAllNewCustomers (ver Listado 4). Esta consulta busca todos los documentos de políticas en la columna INFO de la tabla ACORD. Dentro de cada documento XML, DB2 profundiza más para devolver sólo aquellos documentos donde el valor del código del atributo PolicyStatus/@tc está establecido en 12 (que es el valor recomendado). El resultado de la consulta es un documento XML que tiene un nodo raíz newpolicylist que contiene una serie de nodos secundarios TXLife para cada nueva política (consulte la Figura 4).

Observe cómo esta consulta utiliza primero la función DB2 XQuery db2-fn:xmlcolumn para navegar por el esquema relacional y localizar la columna XML. Cuando llega a la columna XML, utiliza XPath para navegar al nodo apropiado en el esquema XML (similar a navegar por el DOM usando PHP, JavaScript u otros lenguajes).

Consulta DB2 para enumerar los seguros propuestos para clientes en riesgo. Esta consulta solo enumera nuevos clientes que están en riesgo (es decir, respondieron afirmativamente a una pregunta médica). La consulta está contenida en un procedimiento almacenado llamado listAtRiskNewCustomers (ver Listado 5). Nota: La cláusula WHERE verifica tanto la respuesta como el estado de la política.

Consulta DB2 para evaluar el riesgo de un nuevo cliente riesgoso. Para cada póliza en la lista anterior, solo las preguntas con una respuesta afirmativa pueden incluirse en el área de Riesgos para la salud de la póliza. La consulta también devuelve el tipo de póliza para mostrar cuánto vale la póliza, lo que permite la evaluación de riesgos. El procedimiento almacenado que contiene esta consulta (ver Listado 6) es getRiskQuestions(guid). Nota: Necesita una versión del controlador DB2 que admita tipos XML. De lo contrario, deberá utilizar XMLSerialize en cada procedimiento almacenado para serializar los valores XML de XMLQuery. Consulte el artículo de DeveloperWorks "Uso de XML nativo de DB2 con PHP" para obtener información más detallada.

Creación del servicio web

El código PHP para el servicio web getnewpolicyinfo es un contenedor delgado que verifica el tipo de informe de política requerido y llama al procedimiento almacenado apropiado. Luego, el valor devuelto por el procedimiento almacenado se envía de vuelta al cliente (consulte el Listado 7). Observe lo fácil que es crear un servicio web con PHP. Las últimas tres líneas exponen la funcionalidad como servicio web. El servicio web se puede llamar desde cualquier cliente, incluso desde una aplicación PHP, como se muestra en el Listado 8.

Conclusión

En los últimos años, la compatibilidad con XML ha madurado en todas las capas de aplicaciones, lo que ha dado como resultado un potente entorno de desarrollo que puede transformar la forma en que se diseña la aplicación. XML permite a los desarrolladores definir reglas y estructuras para documentos comerciales y crear instancias de documentos en la memoria como objetos jerárquicos que los desarrolladores pueden navegar, modificar y serializar en cualquier capa utilizando API estándar. Ajax permite que los scripts de clientes basados ​​en web llamen a las API DOM y realicen llamadas a procedimientos remotos a niveles intermedios. PHP proporciona una de las formas más sencillas de trabajar con XML y servicios web, lo que lo hace ideal para el desarrollo de aplicaciones basadas en XML. La cadena final de la evolución de XML es la capa de base de datos. DB2 9 permite que la capa de base de datos manipule XML. Entonces este ciclo evolutivo llega a su fin.

#p#subtitle#e#