Cuando planifique utilizar una aplicación que hace uso de documentos XML, primero debe determinar lo siguiente:
Una vez determinado lo anterior, puede planificar el resto de las tareas de administración:
La forma en que utiliza el XML Extender depende de las necesidades de su programa de aplicación. Tal como se indica en Nociones preliminares sobre el XML Extender, puede componer documentos XML a partir de datos DB2 existentes y almacenar documentos XML en DB2, en forma de documentos inalterados o como datos DB2. Cada uno de estos métodos de almacenamiento y acceso tiene unos requisitos de planificación distintos. Las secciones siguientes tratan sobre cada una de estas consideraciones de planificación.
El XML Extender proporciona dos métodos de acceso y almacenamiento para utilizar DB2 como depósito XML: la columna XML y la colección XML. Primero debe determinar cuál de estos métodos se ajusta mejor a las necesidades de su programa de aplicación para acceder y manejar datos XML.
La naturaleza de su programa de aplicación determina el tipo de acceso y método de almacenamiento que se debe utilizar y cómo estructurar los datos XML. Los casos siguientes describen las situaciones en las que es más apropiado cada uno de los métodos de acceso y almacenamiento.
Utilice columnas XML en las situaciones siguientes:
Utilice colecciones XML en las situaciones siguientes:
Utilice el archivo de definición de acceso a documento (archivo DAD) para asociar datos XML con tablas DB2 mediante esos dos métodos de acceso y almacenamiento. La Figura 7 muestra cómo la DAD especifica los métodos de acceso y almacenamiento.
![]() |
El archivo DAD es una parte importante de la administración del XML Extender. Este archivo define la ubicación de archivos clave, tales como la DTD, y especifica cómo la estructura del documento XML se correlaciona con los datos DB2. Y lo que es más importante, define los métodos de acceso y almacenamiento que el usuario utiliza en el programa de aplicación.
Las secciones siguientes describen las tareas de planificación para columnas XML.
Una vez elegido un método de acceso y almacenamiento, puede decidir validar los datos y puede especificar la DAD. Para validar los datos XML utilice una DTD; esto asegura la validez del documento XML y le permite realizar búsquedas estructurales en los datos XML. La DTD se almacena en el depósito de DTD.
Recomendación: Valide los datos XML utilizando una DTD, a menos que almacene los documentos XML con fines de archivado. Para realizar la validación, es necesario que tenga una DTD en el depósito del XML Extender. Vea Almacenamiento de una DTD en el depósito de DTD para conocer cómo insertar una DTD en el depósito.
Puede validar documentos de una misma columna XML utilizando varias DTD diferentes. Es decir, puede tener documentos de estructura similar, con elementos y atributos similares, que invocan definiciones DTD que son diferentes. Para hacer referencia a varias DTD, siga estas directrices:
Importante: Si decide validar los datos XML, debe hacer la validación antes de insertar los datos en DB2. El XML Extender no permite validar datos que ya estén insertados en DB2.
Consideraciones:
Los documentos XML se almacenan en una columna XML en forma de UDT (tipo
definido por el usuario) . La Tabla 4 lista los UDT disponibles.
Tabla 4. Los UDT del XML Extender
Columna de tipo definido por el usuario | Tipo de datos fuente | Descripción |
---|---|---|
XMLVARCHAR | VARCHAR(long_varchar) | Almacena un documento XML completo, en forma de VARCHAR, dentro de DB2. |
XMLCLOB | CLOB(long_clob) | Almacena un documento XML completo, en forma de CLOB, dentro de DB2. |
XMLFILE | VARCHAR(1024) | Almacena el nombre de archivo de un documento XML en DB2 y guarda el documento XML en un archivo local del servidor DB2. |
Cuando se planifican tablas secundarias, debe tenerse en cuenta cómo organizar las tablas, cuántas tablas se van a crear y si se va a crear una vista por omisión para las tablas secundarias. Estas decisiones en parte se basan en varios puntos: si los elementos y atributos pueden aparecer varias veces y los requisitos para el rendimiento de las consultas.
Cuando un documento tiene vías de ubicación de aparición múltiple, el XML Extender añade una columna DXX_SEQNO del tipo INTEGER a cada tabla secundaria para mantener un seguimiento del orden de los elementos que aparecen más de una vez. Con DXX_SEQNO, se puede recuperar una lista de los elementos utilizando el mismo orden que el documento XML original especificando ORDER BY DXX_SEQNO en una consulta SQL.
Cuando habilite una columna XML, puede especificar una vista de sólo lectura por omisión que una la tabla de aplicación con las tablas secundarias utilizando un ID exclusivo llamado ID RAÍZ. Con la vista por omisión, puede buscar en documentos XML consultando las tablas secundarias. Por ejemplo, si tiene la tabla de aplicación SALES_TAB y las tablas secundarias ORDER_TAB, PART_TAB y SHIP_TAB:
SELECT sales_person FROM sales_order_view WHERE price > 2500.00
La sentencia SQL devuelve los nombres de los vendedores de SALES_TAB que tienen pedidos guardados en la columna ORDER y en los que PRICE es mayor que 2500.00.
La ventaja de consultar la vista por omisión es que proporciona una única vista virtual de la tabla de aplicación y las tablas secundarias. Sin embargo, cuantas más tablas secundarias se creen, más costosa es la consulta. Por lo tanto, la creación de la vista por omisión sólo se recomienda cuando el número total de columnas de la tablas secundarias es pequeño. Las aplicaciones pueden crear sus propias vistas, uniendo las columnas de tablas secundarias importantes.
Una decisión importante de la planificación es si desea indexar el documento de columnas XML. Esta decisión debe tomarla basándose en la frecuencia con que necesita acceder a los datos y el grado de importancia que tiene el rendimiento en las búsquedas estructurales.
Cuando utiliza columnas XML, que contienen documentos XML completos, puede crear tabla secundarias para contener columnas de valores de elementos o atributos XML, y luego crear índices sobre estas columnas. Debe determinar para qué elementos y atributos necesita crear el índice.
La indexación de columnas XML permite utilizar el soporte nativo de DB2 para indexar datos de consulta frecuente de tipo general, tales como INTEGER, DECIMAL o DATE. El XML Extender obtiene los valores de elementos o atributos XML a partir de documentos XML y los almacena en las tablas secundarias, permitiendo al usuario crear índices sobre estas tablas secundarias.
Puede especificar cada columna de una tabla secundaria utilizando una vía de ubicación, la cual identifica un elemento o atributo XML y un tipo de datos de SQL. La Figura 8 muestra una columna XML con tablas secundarias.
Figura 8. Columna XML con tablas secundarias
![]() |
El XML Extender llena automáticamente con datos la tabla secundaria cuando el usuario almacena documentos XML en la columna XML.
Para poder realizar búsquedas rápidas, cree índices sobre estas columnas utilizando la técnica de la indexación de árbol binario de DB2. Los métodos utilizados para crear un índice varían según el sistema operativo, y el XML Extender da soporte a estos métodos.
Por ejemplo, puede crear un índice para /Order/Part/ExtendedPrice y especificar el tipo de datos REAL para /Order/Part/ExtendedPrice. En este caso, el XML Extender almacena el valor de /Order/Part/ExtendedPrice en la columna PRICE de una tabla secundaria.
Si la clave primaria simple no existe en la tabla de la aplicación, o por alguna razón no desea utilizarla, el XML Extender modifica la tabla de aplicación para añadir la columna DXXROOT_ID, la cual contiene un ID exclusivo que se crea en el momento de la inserción. Todas las tablas secundarias tienen una columna DXXROOT_ID que contiene el ID exclusivo. Si se utiliza la clave primaria como ID RAÍZ, todas las tablas secundarias tienen una columna con el mismo nombre y tipo que la columna de clave primaria de la tabla de aplicación, y se guardan los valores de las claves primarias.
Una vía de ubicación es una secuencia de códigos XML que identifican un elemento o atributo de XML. El XML Extender utiliza la vía de ubicación en las situaciones siguientes:
La Figura 9 muestra un ejemplo de una vía de ubicación y su relación con la estructura del documento XML.
![]() |
La lista siguiente describe la sintaxis de la vía de ubicación soportada por el XML Extender.
Caracteres comodín: Se puede sustituir un asterisco por un elemento de una vía de ubicación para que coincida con cualquier serie de caracteres.
La vía de ubicación simple es una secuencia de
nombres de tipos de elementos que están conectados por una barra inclinada
simple (/). Los valores de atributos están encerrados entre corchetes,
a continuación del correspondiente tipo de elemento. Las descripciones
de sintaxis de los puntos 3 y 6 en Sintaxis de la vía de ubicación describen vías de acceso de ubicación simples. La Tabla 5 describe la sintaxis.
Tabla 5. Sintaxis de la vía de ubicación simple
Sujeto | Vía de ubicación | Descripción |
---|---|---|
Elemento XML | /tag1/tag2/..../tagn-1/tagn | Representa un contenido de elemento identificado por el elemento llamado tagn y sus padres |
Atributo XML |
/tag_1/tag_2/..../tag_n-1/tag_n/@attr1
| Representa el atributo attr1 del elemento identificado por tagn y sus padres |
El XML Extender tiene restricciones respecto al uso de la vía de ubicación
al definir un elemento o atributo en la DAD. Debido a que el XML
Extender utiliza una correlación de "uno con uno" entre un elemento o atributo
y una columna DB2, son necesarias reglas especiales para la vía de
ubicación. La Tabla 6 describe las restricciones existentes para la vía
de ubicación. Los números que figuran en la columna Vía de ubicación
soportada remiten a las representaciones de sintaxis de Sintaxis de la vía de ubicación.
Tabla 6. Restricciones del XML Extender en la utilización de la vía de ubicación
Uso de la vía de ubicación | Vía de ubicación soportada |
---|---|
Elemento de la DAD | 3, 6 (vía de ubicación simple descrita en la Tabla 5) |
Funciones UDF de extracción | 1-9 |
UDF de búsqueda del Text Extender | 1-9 |
Para las columnas XML, la DAD principalmente especifica cómo se deben indexar los documentos que están contenidos en una columna XML. La DAD es un documento formateado por XML y reside en el sistema cliente. Si elige validar los documentos XML utilizando una DTD, el archivo DAD se puede asociar a esa DTD. El tipo de datos del archivo DAD es CLOB.
El archivo DAD correspondiente a columnas XML contiene una cabecera XML, que especifica las vías de directorios del sistema cliente para acceder al archivo DAD y DTD, y proporciona un mapa de los datos XML que se deben almacenar en tablas secundarias para su indexación.
Para especificar el método de acceso y almacenamiento para columnas XML, utilice el código siguiente en el archivo DAD.
Las columnas habilitadas para XML pertenecen al UDT de XML Extender. Los programas de aplicación pueden incluir la columna en cualquier tabla de usuario. El acceso a los datos de columnas XML se realiza principalmente mediante sentencias de SQL y las UDF del XML Extender.
Puede utilizar el asistente de administración del XML Extender o un editor para crear y actualizar la DAD.
Cuando se planifica para colecciones XML, existen distintas consideraciones a tener en cuenta para componer documentos a partir de datos de DB2, descomponer documentos XML en datos de DB2 o ambas cosas. La secciones siguientes tratan sobre temas de planificación para colecciones XML y sobre consideraciones para la composición y descomposición.
Una vez elegido un método de acceso y almacenamiento, puede decidir si desea validar los datos. Para validar los datos XML utilice una DTD; esto asegura la validez del documento XML y le permite realizar búsquedas estructurales en los datos XML. La DTD se almacena en el depósito de DTD.
Recomendación: Valide los datos XML utilizando una DTD. Para realizar la validación, es necesario que tenga una DTD en el depósito del XML Extender. Vea Almacenamiento de una DTD en el depósito de DTD para conocer cómo insertar una DTD en el depósito. Los requisitos de la DTD varían, dependiendo de si está componiendo o descomponiendo documentos XML.
Importante: Si decide validar los datos XML, debe hacer la validación antes de insertar los datos en DB2. El XML Extender no permite validar datos que ya estén insertados en DB2.
Consideraciones:
Para las colecciones XML, el archivo DAD correlaciona la estructura del documento XML con las tablas DB2 utilizadas para componer o descomponer el documento.
Por ejemplo, si tiene un elemento llamado <Tax> en el documento XML, puede necesitar correlacionar <Tax> con una columna llamada TAX. El usuario define la relación existente entre los datos XML y los datos relacionales especificados en la DAD.
El archivo DAD se especifica al habilitar una colección o cuando se utiliza el archivo DAD en procedimientos almacenados de colección XML. La DAD es un documento formateado por XML y reside en el sistema cliente. Si elige validar los documentos XML utilizando una DTD, el archivo DAD se puede asociar a esa DTD. Cuando se utiliza como parámetro de entrada de los procedimientos almacenados del XML Extender, el archivo DAD tiene el tipo de datos CLOB.
Para especificar el método de acceso y almacenamiento para colecciones XML, utilice el código siguiente en el archivo DAD:
Una colección XML es un nombre virtual que designa un conjunto de tablas relacionales que contienen datos XML. Los programas de aplicación pueden habilitar una colección XML de tablas de usuario cualesquiera. Estas tablas de usuario pueden ser tablas existentes de datos de negocio o tablas recién creadas por el XML Extender. El acceso a los datos de la colección XML se realiza principalmente mediante los procedimientos almacenados que proporciona el XML Extender.
El archivo DAD define la estructura arborescente del documento XML, utilizando las clases de nodos siguientes:
La Figura 10 muestra parte de la correlación utilizada en un archivo DAD. Los nodos correlacionan el contenido del documento XML con columnas de una tabla relacional.
Figura 10. Definiciones de nodos
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd"> <DAD> ... <Xcollection> <SQL_stmt> ... </SQL_stmt> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE DAD SYSTEM "c:\dxx\sample\dtd\getstart.dtd"</doctype> <root_node> <element_node name="Order"> --> Identifica el elemento <Order> <attribute_node name="key"> --> Identifica el atributo "key" <column name="order_key"/> --> Define el nombre de la columna, "order_key", con la que se correlacionan el elemento y el atributo </attribute_node> <element_node name="Customer"> --> Identifica un elemento hijo de <Order> como <Customer> <text_node> --> Especifica el texto CDATA del elemento <Customer> <column name="customer"> --> Define el nombre de la columna, "customer", con la que se correlaciona el elemento hijo </text_node> </element_node> ... </element_node> ... <root_node> </Xcollection> </DAD> |
En este ejemplo, las primeras dos columnas de la sentencia de SQL tienen elementos y atributos correlacionados con ellas.
Puede utilizar el asistente de administración del XML Extender o un editor para crear y actualizar el archivo DAD.
Si está utilizando una colección XML, debe seleccionar un esquema de correlación que define cómo se representan los datos XML en una base de datos relacional. Debido a que las colecciones XML deben hacer corresponder la estructura jerárquica de los documentos XML con una estructura relacional, es conveniente que comprenda cómo se corresponden las dos estructuras. La Figura 11 muestra cómo la estructura jerárquica se puede correlacionar con columnas de una tabla relacional.
Figura 11. Documento XML estructurado correlacionado con columnas de una tabla relacional
![]() |
El XML Extender utiliza el esquema de correlación al componer o descomponer documentos XML que residen en diversas tablas relacionales. El XML Extender proporciona un asistente que ayuda al usuario a crear el archivo DAD. Sin embargo, antes de crear el archivo DAD, debe considerar cómo los datos XML se correlacionan con la colección XML.
El esquema de correlación se especifica en el elemento <Xcollection> del archivo DAD. El XML Extender proporciona dos tipos de esquemas de correlación: la correlación SQL y la correlación de base de datos relacional (correlación de nodo_RDB). Ambos métodos utilizan el modelo XSLT para definir la jerarquía del documento XML.
La correlación SQL proporciona a los usuarios de DB2 la capacidad para correlacionar los datos utilizando SQL. Si utiliza la correlación SQL, debe poder unir todas las tablas de una sola sentencia SELECT para formar una consulta. Si una sola sentencia de SQL no es suficiente, considere la posibilidad de utilizar la correlación de nodo_RDB. Para unir entre sí todas las tablas, es recomendable utilizar la relación clave primaria-clave foránea para estas tablas.
El nodo_RDB contiene una o más definiciones de nodo para tablas, columnas opcionales y condiciones opcionales. Las tablas y columnas se utilizan para definir cómo deben almacenarse los datos XML en la base de datos. La condición especifica los criterios para seleccionar datos XML o la forma de unir las tablas de la colección XML.
Para definir un esquema de correlación, cree una DAD con un elemento <Xcollection>. La Figura 12 muestra parte de un archivo DAD de ejemplo que contiene una correlación SQL para colecciones XML, la cual compone un conjunto de documentos XML a partir de datos de tres tablas relacionales.
Figura 12. Esquema de correlación SQL
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd"> <DAD> <dtdid>c:\dxx\samples\dad\getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <SQL_stmt> SELECT o.order_key, customer, p.part_key, quantity, price, tax, date, mode, comment FROM order_tab o, part_tab p, table(select substr(char(timestamp(generate_unique())), as ship_id, date, mode, from ship_tab) as s WHERE p.price > 2500.00 and s.date > "1996-06-01" AND p.order_key = o.order_key and s.part_key = p.part_key </SQL_stmt> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE DAD SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype> <root_node> <element_node name="Order"> <attribute_node name="key"> <column_name="order_key"/> </attribute_node> <element_node name="Customer"> <text_node> <column name="customer"/> </text_node> <element_node> ... </element_node><!-end Part-> </element_node><!-end Order-> </root_node> </Xcollection> </DAD> |
El XML Extender proporciona varios procedimientos almacenados que gestionan los datos de una colección XML. Estos procedimientos almacenados admiten la utilización de ambos tipos de correlación, pero exigen que el archivo DAD siga las directrices indicadas en Requisitos del esquema de correlación.
Las secciones siguientes describen los requisitos de cada tipo de esquema de correlación para colecciones XML.
En este esquema de correlación, debe especificar el elemento SQL_stmt en el elemento <Xcollection> de la DAD. SQL_stmt debe contener una sola sentencia de SQL que pueda unir varias tablas relacionales con el predicado de la consulta. Además, son necesarias las cláusulas siguientes:
SELECT o.order_key, customer, p.part_key, quantity, price, tax, ship_id, date, mode
En este ejemplo, order_key y customer, de la tabla ORDER_TAB, tienen el nivel relacional más alto, pues ocupan una posición más alta en el árbol jerárquico del documento XML. Las columnas ship_id, date y mode, de la tabla SHIP_TAB, se encuentran en el nivel relacional más bajo.
FROM order_tab as o, part_tab as p, table(select substr(char(timestamp(generate_unique())),16) as ship_id, date, mode from ship_tab) as s
En este ejemplo, la función generate_unique() se convierte al tipo de datos CHAR de TIMESTAMP, y se le asigna el seudónimo ship_id.
WHERE p.price > 2500.00 AND s.date > "1996-06-01" AND p.order_key = o.order_key AND s.part_key = p.part_key
Aunque SQL_stmt tiene los requisitos indicados anteriormente, es una herramienta potente porque le permite especificar cualquier predicado en la cláusula WHERE, siempre que la expresión contenida en el predicado utilice las columnas de las tablas.
Cuando utilice este método de correlación, no utilice el elemento SQL_stmt en el elemento <Xcollection> del archivo DAD. En su lugar, utilice el elemento nodo_RDB para nodo_de_elemento y para cada nodo_de_atributo y nodo_de_texto.
El nodo_de_elemento superior del archivo DAD representa el elemento raíz del documento XML. Para especificar un nodo_RDB para el nodo_de_elemento superior, siga estos pasos:
<element_node name="Order"> <RDB_node> <table name="order_tab"/> <table name="part_tab"/> <table name="ship_tab"/> <condition> order_tab.order_key = part_tab.order_key AND part_tab.part_key = ship_tab.part_key </condition> </RDB_node>
<table name="part_tab" key="part_key, price"/>
La información especificada para la descomposición de un documento XML no se tiene en cuenta al componer el documento.
Debe especificar explícitamente el nombre de tabla y el nombre de columna.
En este esquema de correlación, los datos residen en el nodo_de_atributo y nodo_de_texto de cada nodo_de_elemento. Por tanto, el XML Extender necesita conocer en qué lugar de la base de datos debe encontrar los datos. Es necesario que especifique un nodo_RDB para cada nodo_de_atributo y nodo_de_texto, indicando al procedimiento almacenado desde que tabla y columna debe obtener los datos y bajo qué condición de consulta debe obtenerlos. Debe especificar los valores para la tabla y la columna; el valor de la condición es opcional.
<element_node name="Price"> <text_node> <RDB_node> <table name="part_tab"/> <column name="price"/> <condition> price > 2500.00 </condition> </RDB_node> </text_node> </element_node>
<column name="order_key" type="integer"/>
La información especificada para la descomposición de un documento XML no se tiene en cuenta al componer el documento.
Si utiliza la correlación de nodo_RDB, no es necesario que proporcione sentencias de SQL. Sin embargo, establecer condiciones de consulta complejas en el elemento de nodo_RDB puede ser más difícil. Por ejemplo, el utilizar una expresión u operación de unión es algo menos efectivo que el método que correlaciona SQL con XML.
La descomposición utiliza la correlación de nodo_RDB para especificar cómo un documento XML se descompone en tablas DB2 extrayendo los valores de elementos y de atributos en filas de tabla. Los valores para cada documento XML se almacenan en una o más tablas DB2. Cada tabla puede tener un máximo de 1.024 filas descompuestas de cada documento.
Por ejemplo, si un documento XML se descompone en cinco tablas, cada una de las cinco tablas puede tener un máximo de 1.024 filas para este documento concreto. Si la tabla tiene filas para varios documentos, puede tener un máximo de 1.024 filas para cada documento. Si la tabla tiene 20 documentos, puede tener 20.480 filas, 1.024 para cada documento.
La utilización de elementos de aparición múltiple (elementos con vías de ubicación que pueden aparecer más de una vez en la estructura XML) afecta el número de filas. Por ejemplo, un documento que contiene un elemento <Part> que aparece 20 veces, puede descomponerse como 20 filas en una tabla. Cuando utilice elementos de aparición múltiple, considere esta limitación del tamaño de tabla.