por Jerry Emerick
traducido por Felipe Guerrero.
La mayoria de las aplicaciones tradicionales de negocio y de las aplicaciones basadas en Internet dependen de bases de datos. Existen diversos modelos diferentes de bases de datos, sin embargo, la mayoría son relacionales [7]. Para mantener datos en una base de datos, éstos deben ser obtenidos y almacenados de una manera consistente, confiable y eficiente. El uso de la infraestructura existente de bases de datos para la administración de demandas de datos XML parece ser lógico. Sin embargo, nuevos productos nativos XML están construidos para manejar las demandas de datos XML en forma nativa sin el bagaje de conversiones a otras estructuras de bases de datos como la relacional. Adicionalmente, existe una diversidad de estrategias de almacenamiento XML, procesos de conversión, y niveles de soporte para XML con los productos líderes de bases de datos [1].
Los sistemas de almacenamiento XML deben acomodarse eficientemente con ambos tipos de requerimientos de datos, dado que XML está siendo ampliamente usado en sistemas que administran ambos tiops de datos. La mayoría de los productos se enfocan en servir uno de esos formatos de datos mejor que el otro. Las bases de datos relacionales tradicionales son típicamente mejores al tratar con requerimientos centrados en los datos, mientras que los sistemas de administración de contenido y de documentos son típicamente mejores para almacenar datos centrados en el documento. En los sistemas que encuentran XML, Es común tener ambas categorías de datos dentro de la misma aplicación. Los documentos centrados en los datos se pueden originar en bases de datos relacionales o como un documento XML que puede haber sido transmitido como parte de un sistema B2B. Los sistemas de bases de datos deben ser capaces de exponer los datos relacionales como XML y almacenar el XML recibido como datos relacionales para transferir, obtener y almacenar transparentemente los datos requeridos por la aplicación.
Si bien es posible almacenar datos centrados en el documento en bases de datos relacionales u orientadas al objeto, esto resultará típicamente en duplicar el trabajo de un sistema administrador de contenido. Similarmente, dado que un sistema de administración de contenido está usualmente construido sobre una base de datos orientada al objeto o jerárquica, tratar de usarlo como base de datos probablemente será fustrante [1].
La diferencia entre los datos centrados en los datos y los centrados en el documento no siempre es fácil de identificar. Por ejemplo, una orden de compra puede contener datos tales como comentarios o notas. Adicionalmente, los datos centrados en los documentos, tales como artículos de revistas, pueden tener datos estructurados como el nombre del autor y la fecha. Típicamente los requerimeintos que manejan los datos se inclinan con mayor peso en una dirección o la otra. Mas aún, tomarse mayor tiempo en entender si los datos son más centrados en el documento o en los datos será ventajoso cuando se elija la estrategia de almacenamiento.
Las estrategias existentes pueden ser descompuestas en tres métodos básicos:
El proceso de mapeo y traducción puede ser descompuesto en unos pocos pasos básicos. El primer paso es crear el esquema XML con un elemento para cada tabla y los atributos correspondientes para cada columna no clave que será mapeada. Las columnas que no permiten valores nulos pueden ser marcadas como requeridas mientras aquellas que permiten valores nulos pueden ser marcadas como opcionales en el esquema XML. Las columnas pueden ser también anidadas como elementos, pero pueden surgir problemas cuando el mismo nombre de columna es usado en más de una tabla. De esta manera el enfoque más simple es mapear las columnas como atributos XML donde las colisiones de nombre en el esquema XML no son un problema [12].
El segundo paso es crear las claves primarias en el esquema XML. Un enfoque podría ser agregar un atributo para la columna clave primaria con un ID agregado al nombre de la columna. Este atributo podría necesitar ser definido en el esquema XML como de tipo ID. Pueden surgir nuevamente problemas de colisión al crear claves primarias en el esquema XML. A diferencia de las bases de datos relacionales donde las claves primarias necesitan ser únicas sólo dentro de una tabla, un atributo ID dentro de un documento XML debe ser único a través de todo el documento. Una manera de manejar este problema es agregar el nombre del elemento (nombre de la tabla) al valor de la clave primaria (valor del atributo). Esto asegura que el valor es único a través del documento XML [12].
El tercer paso y final es modelar las relaciones de clave secundaria. Esto se puede lograr mediante el anidamiento de elementos bajo el elemento padre. Alternativamente, un ID de esquema XML puede ser usado para apuntar a una estructura XML correspondiente conteniendo un IDREF. Existen compensaciones entre esos dos enfoques relacionados con rendimiento y habilidad de navegación a través del documento XML [12].
| Documento XML (Esquema) | Esquema Relacional |
| Elemento | Tabla |
| Atributo o Elemento Anidado | Columna |
| Atributo ID | Clave Primaria |
| IDREF o Elemento Anidado | Clave Secundaria |
| #REQUIRED, #IMPLIED | NULL, NOT NULL |
Tabla 1: Resumen de relación Esquema XML y Esquema Relacional [12]
Se pueden usar muchas variaciones de esquemas XML para representar la misma base de datos relacional. Al entender las capacidades y técnicas disponibles cuando se construye el esquema XML, tanto el tamaño del documento como el tiempo de procesamiento pueden ser minimizados. Este entendimiento requiere conocimiento detallado de las capacidades de los esquemas XML y además un entendimiento acabado de cómo DOM y el API SAX procesarán realmente el documento XML. Esas APIs son el estándar de facto para el procesamiento de documentos XML.
Oracle ofrece también una utilidad SQL XML para Java. Esta herramienta es un conjunto de clases Java que permite la inserción de datos XML en tablas o vistas de objetos. Las clases Java pueden generar también documentos XML de resultados de consultas SQL. Un Servlet Java XSQL está también disponible que permite que la ejecución de consultas SQL retornen los resultados como XML y luego transformen el XML a HTML usando hojas de estilo.Este conjunto de herramientas puede ser utilizado efectivamente de una manera relativamente rápida, cuando son usadas por desarrolladores experimentados con habilidades Java y Oracle intermedias. Debajo hay un ejemplo que utiliza la Utilidad SQL XML para crear un documento XML. En la Figura 1 se muestra la Utilidad SQL XML ejecutando una consulta SQL contra la base de datos Oracle y luego generando un documento XML a partir de los resultados de la consulta SQL.
SELECT CUSTNO, CUSTNAME FROM CUSTOMER WHERE CUSTNO = 1234; <"xml version=1.0"> <ROWSET> <ROW id="1"> <CUSTNO>1234</CUSTNO> <CUSTNAME> AJAX INC </CUSTNAME> </ROW> </ROWSET> |
Figura 1
Por defecto, ROWSET es el nombre de elemento del elemento documento XML. ROW es el nombre de elemento de cada fila en el resultado de la consulta. Los nombres de columnas son usados para los nombres de elemento. Una aplicación puede cambiar los nombres por defecto aplicando una hoja de estilo XSL para realizar una traducción. La utilidad puede además generar una representación en forma de string del documento XML o un árbol de elementos DOM XML en memoria. Adicionalmente, la utilidad XML puede ser usada para generar un DTD basado en el esquema de la tabla que está siendo consultada [11].
Oracle ofrece una rica implementación de soporte XML que provee acceso mediante programación a datos estructurados como XML. Se proveen características para estructuras centradas en el documento y estructuras centradas en los datos.
Una característica única de DB2 es la habilidad de administrar e indexar documentos XML localizados disparmente en el sistema de archivos, una única columna, o distribuidos a través de múltiples tablas y columnas. El producto XML Extender está diseñado para proveer capacidades de búsqueda rápida con páginas (archivos) XML. Esto es útil para aplicaciones que comparten archivos XML o aplicaciones que buscan contra archivos XML como motores de búsqueda. El indexamiento es realizado usando Definición de Acceso a Datos (Data Access Definition, DAD) para definir los elementos y atributos XML que deben ser indexados. Funciones definidas por el usuario (User-defined functions, UDFs) pueden ser usadas para insertar, seleccionar o actualizar un documento completo o elementos y atributos dentro de un documento. DAD es usado también para definir el mapeo de DTD a las tablas y columnas relacionales [3].
Los procedimientos almacenados son implementados como parte de XML Extender que permiten la obtención o generación de documentos XML sobre la base de consultas SQL. Se mapea un DTD contra las tablas relacionales usando DAD para proveer la estructura del documento generado. Son también soportadas consultas dinámicas, que construyen el documento XML sobre la base de nombres de tablas y nombres de columnas en la consulta en vez del mapeo definido en el DAD [3].
SQL Server ha agregado también nuevas características para soportar la escritura de documentos XML desde el sistema de archivos a la base de datos usando una nueva función OpenXML. Para usar la función OpenXML, una representación interna del documento XML debe ser creada en memoria usando un nuevo procedimiento almacenado del sistema. La función OpenXML referencia el documento XML en memoria, especifica una consulta XPath para filtrar o localizar los datos XML dentro del documento, y especifica si las columnas relacionales en la base de datos serán mapeadas a elementos de documento XML o atributos. Un esquema puede ser también especificado para determinar el mapeo entre el documento XML y las tablas y columnas de la base de datos. Esto permite básicamente al desarrollador cargar un documento XML en memoria y luego usar SQL y XPath para retornar datos de consulta desde el documento XML en memoria [10].
Los tres vendedores líderes ofrecen similares capacidades para el manejo de XML. Oracle ofrece a una rica interfaz de programación para datos XML usando las clases, servlets y utilidades Java. SQL Server de Microsoft ofrece la mayor flexibilidad para la obtención de estructuración de datos como XML a través de los varios modos descritos arriba. Los tres soportan las estrategias de almacenamiento más comunes aunque las capacidades objeto-relacionales de Oracle pueden proveer mayor flexibilidad en esta área y prevenir parte de la traducción XML adicional que puede ser necesaria en los otros dos productos discutidos. El producto DB2 de IBM parece estar un paso atrás de la competencia con su soporte XML; aunque es posible soportar las tres estrategias comunes de almacenamiento, este soporte de la herramienta para las estrategias no parece ser tan rico.
Hay algunos que critican el uso del modelo relacional para el almacenamiento XML. La crítica más común es la sobrecarga y la programación extra asociada con el mapeo y traducción de datos estructurados XML en datos relacionales. La estructura jerárquica de un documento XML es también una forma que no se apega bien a las bases de datos relacionales. La estructura jerárquica de un documento XML es representada típicamente por joins en la base de datos relacional. Numerosos niveles de anidamiento en los documentos XML pueden causar problemas significativos de rendimiento y diseño en bases de datos relacionales cuando los documentos XML anidados resultan en tablas y operaciones join adicionales que pueden rápidametne degradar el rendimiento [4].
Los proponentes del uso de bases de datos relacionales maduras para el manejo de las demandas de almacenamiento XML de una organización son rápidas en apuntar a las características de almacenamiento y obtención de datos XML que han implementado rápidamente para hacer mucho más fácil la tarea del DBA y el desarrollador. La opción de cambiar a una nueva base de datos XML nativa conforme es discutida en la siguiente sección es una decisión que la mayoría de las organizaciones no hará rápidamente a menos que sea una decisión específica de una aplicación o una solución de nicho. Se ha invertido demasiado en entrenamiento, procedimientos y aplicaciones exsitentes para que las organizaciones abandonen su arquitectura de bases de datos actual. Los proponentes apuntan además a las capacidades transaccionales, seguridad, respaldo, recuperación y herramientas administrativas en los productos de bases de datos relacionales existentes que tomarán probablemente años para los vendedores de nuevas bases de datos XML nativas implementar completamente [4].
Hay sin embargo un número de razones para usar los tipos de bases de datos existentes y los productos de bases de datos existentes para almacenar XML aún cuando no sea de forma nativa. Primero, las bases de datos relacionales y orientadas al objeto comunes son bien conocidas, mientras que las bases de datos XML nativas son nuevas. Segundo, como resultado de la familiaridad con las bases de datos relacionales y orientadas al objeto, los usuarios entienden su comportamiento, especialmente en lo que respecta al rendimiento [4].
Las bases de datos XML nativas son diseñadas para trabajar con XQL (eXtensible Query Language), el cuál sirve un propósito similar a SQL en una base de datos relacional. XQL está diseñado para trabajar con documentos XML jerárquicamente estructurados y puede proveer características de consulta como filtros y joins. Los esquemas XML son implementados en bases de datos XML nativas para registrar reglas de almacenamiento e indexación de datos y para proveer y obtener información de almacenamiento a los mecanismos de bases de datos XML nativas. Adicionalmente, todos los objetos en una base de datos XML nativa son típicamente accesibles directamente mediante un URL [6]. El trabajo con bases de datos XML nativas involucra dos pasos básicos: (1) Describir los datos mediante Definiciones de Tipos de Datos (Document Type Definitions, DTD) o esquemas XML y (2) Definir un nuevo esquema de base de datos XML nativa XML o Mapa de Datos a usar para almacenamiento y obtención de datos [6].
El producto XML nativo visto como líder en el mercado es Tamino de Software AG. Al revisar las capacidades de Tamino, los beneficios de trabajar nativamente con XML se aclaran y provee una visión de dónde los vendedores líderes de bases de datos están probablemente encabezando con soporte XML nativo. Tamino provee tanto almacenamiento XML nativo como mecanismo de almacenamiento relacional SQL dentro del mismo producto. Esta característica permite a los usuarios consultar datos heterogéneos mediante XQL y recibir conjuntos de resultados en formato XML [7].
Al almacenar y obtener documentos XML usando el mecanismo XML, no es necesaria una traducción a formato relacional. Tamino puede almacenar casi cualquier tipo de documento incluyendo información formateada XML, páginas HTML, cartas, planillas de cálculo, audio, video, imágenes y datos de bases de datos SQL u de objetos. Otras bases de datos nativas XML incluyen dbXML, eXcelon, y x-Hive/DB.
Probablemente no pasará mucho tiempo hasta que los vendedores líderes de bases de datos relacionales ofrezcan capacidades nativas de almacenamiento y obtención de datos XML conjuntamente con las capacidades SQL y relacionales actuales. Esto irá probablemente más allá de la traducción al almacenamiento nativo de XML en la base de datos. Las capacidades de almacenamiento XML que los vendedores líderes de bases de datos han agregado en los últimos dos años son una progresión natural hacia esta arquitectura. Por mientras, las aplicaciones intensivas en XML que requeiren capacidades de almacenamiento y obtención de datos muy rápidas y flexibles pueden ser tentadas de implementar alguno de los nuevos productos de bases de datos XML nativos. Las organizaciones de Tecnología de Información mayores con inversiones grandes en productos de bases de datos líderes probablemente se quedarán con las capacidades actuales XML de sus productos de bases de datos y no apostarán la empresa a productos de almacenamiento XML nativos más inmaduros [4].
Aún cuando el soporte XML nativo puede manejar los problemas de escalabilidad y reducir la cantidad de trabajo involucrado por la eliminación de las actividades de traducción y mapeo, hay aún numerosos problemas con la administración de datos XML. Los datos XML son mucho más voluminosos. Un documento XML, en contraste con un archivo delimitado por comas o basado en registros, incluye tags para cada campo además de los valores de dato. Este hecho tiene implicaciones para las los requerimeintos de capacidad de almacenamiento y para el rendimiento de transmisión y procesamiento.
El impacto en las organizaciones debido al crecimeinto de XML no debe ser tomado a la ligera. Los beneficios obvios del uso de bases de datos para almacenar XML puede ser sobrepasado por el uso indebido o sin visión de la tecnología, resultando en sistemas que son difíciles de mantener, inflexibles, de mal rendimiento y difíciles de integrar. El soporte de XML en sistemas de administarción de bases de datos está creciendo. Los profesionales de Tecnologías de Información necesitan entender las capacidades para cosechar los beneficios que la tecnología tiene para ofrecer.
Jerry Emerick (gjemerick@yahoo.com) es un recién graduado de la Grand Valley State University y un IT Project Manager de Gordon Food Service, una compañía privada considerada líder tecnológico en su industria. Sus inereses de investigación incluyen tecnologías de bases de datos, XML y Análisis y Diseño Orientado a Objetos. Él también está participando actualmente en proyectos de eBusiness enfocándose en aplicaciones Extranet que se enfrentan al cliente.