Se le ha asignado la tarea de archivar los datos de ventas para el departamento de servicio. Los datos están almacenados en documentos XML que utilizan la misma DTD. El departamento de servicio utilizará estos documentos XML cuando trabaje con pedidos y reclamaciones de los clientes.
El departamento de servicio ha suministrado una estructura recomendada para los documentos XML y ha especificado los datos de elementos que cree que se van a consultar con más frecuencia. Desean guardar los documentos XML en la tabla SALES_TAB de la base de datos SALES_DB y desearían poder buscar en ellas con rapidez. La tabla SALES_DB tendrá dos columnas con datos sobre cada venta y una tercera columna que contendrá el documento XML. Esta columna se llama ORDER.
En primer lugar, el usuario determinará los tipos de datos XML en los que se va a almacenar el documento XML, así como los elementos y atributos XML que se van a consultar con frecuencia. A continuación, configurará la base de datos SALES_DB para XML, creará la tabla SALES_TAB y habilitará la columna ORDER para almacenar el documento inalterado en DB2. También insertará una DTD para el documento XML para validación y, después, almacenará el documento como un tipo de datos XMLVARCHAR. Cuando habilite la columna, definirá las tablas secundarias que deben indexarse para la búsqueda estructural del documento en un archivo de definición de acceso a documento (DAD), un documento XML que especifica la estructura de las tablas secundarias. Para ver ejemplos del archivo DAD, de la DTD y del documento XML, vea el Apéndice B, Ejemplos.
SALES_TAB se describe en la Tabla 1.
Nombre de columna | Tipo de datos |
---|---|
INVOICE_NUM | CHAR(6) NOT NULL PRIMARY KEY |
SALES_PERSON | VARCHAR(20) |
ORDER | XMLVARCHAR |
Antes de empezar a trabajar con el XML Extender para guardar los documentos, debe comprender la estructura del documento XML para poder determinar cómo buscar en el documento. Cuando planifique cómo buscar en el documento, debe determinar:
Las secciones siguientes describen cómo tomar estas decisiones.
La estructura del documento XML para esta lección recoge información para un pedido específico estructurada con la clave de pedido como nivel superior y, después, la información de cliente, pieza y envío en el nivel siguiente. El documento XML se describe en la Figura 4.
Esta lección también proporciona una DTD de ejemplo para que la utilice para comprender y validar la estructura del documento XML. Puede ver el archivo DTD en el Apéndice B, Ejemplos. Coincide con la estructura de la Figura 4.
Figura 4. Estructura jerárquica de la DTD y el documento XML
![]() |
El XML Extender proporciona tipos de datos de usuario XML en los que se define una columna para contener documentos XML. Estos tipos de datos son los siguientes:
En esta lección, va a almacenar un documento pequeño en DB2 y, por lo tanto, utilizará el tipo de datos XMLVarchar.
Una vez haya comprendido la estructura del documento XML y las
necesidades de la aplicación, puede determinar los elementos y atributos que
deben buscarse, los elementos y atributos que se buscarán o extraerán con más
frecuencia o los más caros de consultar. El departamento de servicio ha
indicado que va a consultar con frecuencia la clave de pedido, el nombre de
cliente, el precio y la fecha de envío de un pedido, y que va a necesitar un
rendimiento rápido para estas búsquedas. Esta información está
contenida en los elementos y los atributos de la estructura del documento
XML. La Tabla 2 describe las vías de ubicación de cada elemento y
atributo.
Tabla 2. Elementos y atributos que deben buscarse
Datos | Vía de ubicación |
---|---|
clave de pedido | /Order/@key |
cliente | /Order/Customer/Name |
precio | /Order/Part/ExtendedPrice |
fecha de envío | /Order/Part/Shipment/ShipDate |
En esta guía de aprendizaje va a crear un archivo DAD para la columna XML, que se utiliza para almacenar el documento XML en DB2. También correlaciona el contenido de los elementos y atributos XML con las tablas secundarias DB2 que se utilizan para la indexación, que mejora el rendimiento de las búsquedas. En la última sección, ha visto los elementos y atributos que van a buscarse. En esta sección, va a aprender más sobre cómo correlacionar los valores de los elementos y atributos con tablas DB2 que se pueden indexar.
Después de identificar los elementos y los atributos que se van a buscar, determinará cómo deberán organizarse en las tablas secundarias, cuántas tablas existirán y las columnas que habrá en cada tabla. Por lo general, las tablas secundarias se organizan incluyendo información similar en la misma tabla. La estructura también se determina según si la vía de ubicación de los elementos se puede repetir más de una vez en el documento. Por ejemplo, en nuestro documento, el elemento pieza se puede repetir varias veces y, por lo tanto, los elementos de precio y fecha pueden aparecer varias veces. Los elementos que pueden aparecer varias veces deben estar en sus propias tablas.
Además, también es necesario determinar los tipos base DB2 que deben utilizar los valores de los elementos y atributos. Normalmente, esto se determina fácilmente mediante el formato de los datos. Si los datos son texto, elija VARCHAR, si los datos son números enteros, elija INTEGER, o si los datos son una fecha y desea efectuar búsquedas por rango, elija DATE.
En esta guía de aprendizaje, los elementos y los atributos se correlacionan con las siguientes tablas secundarias:
Nombre de columna | Tipo de datos | Vía de ubicación | ¿Aparición múltiple? |
---|---|---|---|
ORDER_KEY | INTEGER | /Order/@key | No |
CUSTOMER | VARCHAR(16) | /Order/Customer/Name | No |
Nombre de columna | Tipo de datos | Vía de ubicación | ¿Aparición múltiple? |
---|---|---|---|
PRICE | DECIMAL(10,2) | /Order/Part/ExtendedPrice | Sí |
Nombre de columna | Tipo de datos | Vía de ubicación | ¿Aparición múltiple? |
---|---|---|---|
DATE | DATE | /Order/Part/Shipment/ShipDate | Sí |
Para esta guía de aprendizaje, se proporciona un conjunto de scripts para que los utilice para configurar su entorno. Estos scripts se encuentran en el directorio DXX_INSTALL\samples\cmd (donde DXX_INSTALL es la unidad y el directorio en el que se ha instalado el XML Extender, por ejemplo c:\dxx\samples\cmd) y son los siguientes:
En esta sección, se prepara la base de datos para utilizarla con el XML Extender. Va a realizar las tareas siguientes:
En esta sección se utiliza un mandato para preparar la base de datos. Este mandato crea una base de datos de ejemplo, se conecta a ella, crea las tablas que van a contener los datos y, después, inserta los datos.
Para crear la base de datos:
DB2CMD
getstart_db.cmd
Para guardar información XML en la base de datos, debe habilitarla para el XML Extender. Cuando habilita una base de datos para XML, el XML Extender:
Para habilitar la base de datos para XML:
Desde la Ventana de mandatos de DB2, ejecute el script siguiente para habilitar las base de datos SALES_DB:
getstart_prep.cmd
Este script enlaza la base de datos con los procedimientos almacenados del XML Extender y la CLI de DB2. También ejecuta la opción del mandato dxxadm que habilita la base de datos:
dxxadm enable_db SALES_DB
El XML Extender proporciona un método para almacenar y acceder a todos los documentos XML de la base de datos, llamado columna XML. Con la utilización del método de columna XML puede almacenar el documento utilizando los tipos de archivo XML, indexar la columna en tablas secundarias y, después, consultar o buscar en el documento XML. Este método de almacenamiento es particularmente útil para las aplicaciones de archivo en las que los documentos no se actualizan con frecuencia. Para la finalidad de esta guía de aprendizaje, va a guardar en la columna XML el documento XML proporcionado.
En esta lección va a guardar el documento en la tabla SALES_TAB. Para guardar el documento:
Puede utilizar una DTD para validar datos XML en una columna XML. El XML Extender crea una tabla en una base de datos habilitada para XML, llamada DTD_REF. La tabla se conoce con el nombre de referencia de DTD y está disponible para que pueda almacenar en ella las DTD. Cuando decida validar documentos XML, deberá almacenar la DTD en este depósito. La DTD para esta guía de aprendizaje es c:\dxx\samples\dtd\getstart.dtd.
Para insertar la DTD:
Desde la Ventana de mandatos de DB2, entre el siguiente mandato INSERT de SQL, todo en la misma línea:
DB2 CONNECT TO SALES_DB DB2 INSERT into db2xml.dtd_ref values('c:\dxx\samples\dtd\getstart.dtd', db2xml.XMLClobFromFile('c:\dxx\samples\dtd\getstart.dtd'), 0, 'user1', 'user1', 'user1')
También puede ejecutar el archivo de mandatos para insertar la DTD:
getstart_insertDTD.cmd
El archivo DAD para la columna XML tiene una estructura simple. La modalidad de almacenamiento se especifica como columna XML y las tablas y columnas se definen para indexación.
En los pasos siguientes, se hace referencia a los elementos de la DAD como códigos y a los elementos del documento XML como elementos. En c:\dxx\samples\dad\getstart_xcolumn.dad encontrará un ejemplo de archivo DAD similar al que va a crear. Tiene algunas pequeñas diferencias respecto al archivo que se genera en los pasos siguientes. Si lo utiliza para esta lección, tenga en cuenta que las vías de acceso de archivo pueden ser diferentes de las de su propio entorno, el valor <validation> está establecido en NO, en lugar de YES (SÍ).
Para preparar el archivo DAD:
Tenga en cuenta que todos los códigos que se utilizan en el archivo DAD son sensibles a las mayúsculas y minúsculas.
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">El archivo DAD es un documento XML y requiere declaraciones XML.
<dtdid>c:\dxx\samples\dtd\getstart.dtd</dtdid>
Verifique que esta serie coincida con el valor que se utiliza como primer valor de parámetro cuando se inserta la DTD en la tabla de referencia de DTD en la sección Almacenamiento de la DTD en el depósito de DTD. Por ejemplo, la vía de acceso que utilice para el DTDID puede ser diferente de la serie anterior si trabaja en una unidad de máquina distinta.
<validation>YES</validation>El valor de <validation> debe estar en mayúsculas.
<Xcolumn> </Xcolumn>
<Xcolumn> <table name="order_side_tab"> </table> <table name="part_side_tab"> </table> <table name="ship_side_tab"> </table> </Xcolumn>
<Xcolumn> <table name="order_side_tab"> <column name="order_key" type="integer" path="/Order/@key" multi_occurrence="NO"/> <column name="customer" type="varchar(50)" path="/Order/Customer/Name" multi_occurrence="NO"/> </table> <table name="part_side_tab"> <column name="price" type="decimal(10,2)" path="/Order/Part/ExtendedPrice" multi_occurrence="YES"/> </table> <table name="ship_side_tab"> <column name="date" type="DATE" path="/Order/Part/Shipment/ShipDate" multi_occurrence="YES"/> </table> </Xcolumn>
Puede comparar el archivo que acaba de crear con el archivo de ejemplo, c:\dxx\samples\dad\getstart_xcolumn.dad. Este archivo es una copia de trabajo del archivo DAD necesario para habilitar la columna XML y crear las tablas secundarias. El archivo de ejemplo contiene las sentencias path que es posible que tengan que modificarse para que coincidan con su entorno y se ejecuten satisfactoriamente.
En esta sección creará la tabla SALES_TAB. Inicialmente tiene dos columnas con la información de venta para el pedido.
Para crear la tabla:
Desde la Ventana de mandatos de DB2, entre las sentencia CREATE TABLE siguiente:
DB2 CONNECT TO SALES_DB DB2 CREATE TABLE SALES_TAB(INVOICE_NUM CHAR(6) NOT NULL PRIMARY KEY, SALES_PERSON VARCHAR(20))
Alternativamente, puede ejecutar el archivo de mandatos siguiente para crear la tabla:
getstart_createTabCol.cmd
Ahora, añada una nueva columna a la tabla SALES_TAB. Esta columna contendrá el documento XML inalterado que ha generado previamente y deberá tener un UDT XML. El XML Extender proporciona varios tipos de datos, que se describen en Tipos definidos por el usuario del XML Extender. En esta guía de aprendizaje, va a guardar el documento como XMLVARCHAR.
Para añadir la columna de tipo XML:
Desde la Ventana de mandatos de DB2, entre la siguiente sentencia de SQL:
DB2 ALTER TABLE SALES_TAB ADD ORDER DB2XML.XMLVARCHAR
Alternativamente, puede ejecutar el archivo de mandatos siguiente para modificar la tabla:
getstart_alterTabCol.cmd
Después de crear la columna de tipo XML, habilítela para el XML Extender. Cuando habilita la columna, el XML Extender lee el archivo DAD y crea las tablas secundarias. Antes de habilitar la columna debe:
Para habilitar la columna para XML:
Desde la Ventana de mandatos de DB2, entre el mandato siguiente:
dxxadm enable_column SALES_DB SALES_TAB ORDER GETSTART_XCOLUMN.DAD -v SALES_ORDER_VIEW -r INVOICE_NUM
Alternativamente, puede ejecutar el archivo de mandatos siguiente para habilitar la columna para XML:
getstart_enableCol.cmd
El XML Extender crea las tablas secundarias con la columna INVOICE_NUM y crea la vista por omisión.
Importante: No modifique las tablas secundarias de ningún modo. Sólo debe actualizar el documento XML utilizando las UDF proporcionadas por el XML Extender. El XML Extender actualizará automáticamente las tablas secundarias cuando actualice el documento XML en la columna XML.
Cuando ha habilitado la columna XML, ha creado una vista de la columna XML y de las tablas secundarias. Puede utilizar esta vista cuando trabaje con la columna XML.
Para ver la columna XML y las columnas de tabla secundaria:
Desde la Ventana de mandatos de DB2, entre la siguiente sentencia SELECT de SQL:
DB2 SELECT * FROM SALES_ORDER_VIEW
La vista muestra las columnas de las tablas secundarias, tal como se especifica en el archivo getstart_xcolumn.dad.
La creación de índices en tablas secundarias le permite realizar búsquedas
estructurales rápidas del documento XML. En este paso creará índices en
columnas clave de las tablas secundarias creadas cuando habilitó la columna
XML, ORDER. El departamento de servicio ha especificado las columnas
que probablemente van a consultar con más frecuencia sus empleados. La Tabla 3 describe estas columnas, que va a indexar:
Tabla 3. Columnas de tabla secundaria que se van a indexar
Columna | Tabla secundaria |
---|---|
ORDER_KEY | ORDER_SIDE_TAB |
CUSTOMER | ORDER_SIDE_TAB |
PRICE | PART_SIDE_TAB |
DATE | SHIP_SIDE_TAB |
Para indexar las tablas secundarias:
Entre los mandatos SQL siguientes desde la Ventana de mandatos de DB2:
DB2 CREATE INDEX KEY_IDX ON ORDER_SIDE_TAB(ORDER_KEY) DB2 CREATE INDEX CUSTOMER_IDX ON ORDER_SIDE_TAB(CUSTOMER) DB2 CREATE INDEX PRICE_IDX ON PART_SIDE_TAB(PRICE) DB2 CREATE INDEX DATE_IDX ON SHIP_SIDE_TAB(DATE)
Alternativamente, puede ejecutar el archivo de mandatos siguiente para crear los índices:
getstart_createIndex.cmd
Después de haber habilitado una columna que puede contener el documento XML y de haber indexado las tablas secundarias, puede almacenar el documento utilizando las funciones que proporciona el XML Extender. Para almacenar datos en una columna XML puede utilizar las funciones predefinidas por omisión o las UDF del XML Extender. Dado que va a almacenar un objeto del tipo base VARCHAR en una columna del UDT XML XMLVARCHAR, utilizará la función predefinida por omisión. Vea Almacenamiento de datos para obtener más información sobre las funciones predefinidas por omisión y las UDF proporcionadas por el XML Extender.
Para almacenar el documento XML:
Importante: Abra el documento de XML c:\dxx\samples\xml\getstart.xml. Asegúrese de que la vía de acceso de archivos de DOCTYPE coincide con el ID de DTD especificado en la DAD y al insertar la DTD en el depósito de DTD. Para verificar que coincidan, consulte la tabla db2xml.DTD_REF y compruebe el elemento DTDID del archivo DAD. Si utiliza una unidad y una estructura de directorios distintas de las que se asignan por omisión, tal vez tenga que modificar la vía de acceso en la declaración DOCTYPE.
Desde la Ventana de mandatos de DB2, entre el siguiente mandato INSERT de SQL:
DB2 INSERT INTO SALES_TAB (INVOICE_NUM, SALES_PERSON, ORDER) VALUES('123456', 'Sriram Srinivasan', db2xml.XMLVarcharFromFile('c:\dxx\samples\cmd\getstart.xml'))
Cuando almacena el documento XML, el XML Extender actualiza automáticamente las tablas secundarias.
Alternativamente, puede ejecutar el archivo de mandatos siguiente para guardar el documento:
getstart_insertXML.cmd
Para comprobar que se hayan actualizado las tablas, ejecute las siguientes sentencias SELECT para las tablas desde la Ventana de mandatos de DB2:
DB2 SELECT * FROM SALES_TAB DB2 SELECT * FROM PART_SIDE_TAB DB2 SELECT * FROM ORDER_SIDE_TAB DB2 SELECT * FROM SHIP_SIDE_TAB
Puede buscar en el documento XML con una consulta directa de las tablas secundarias. En este paso buscará todos los pedidos con un precio que esté por encima de 2500,00.
Para consultar las tablas secundarias:
Entre la siguiente sentencia SELECT desde la Ventana de mandatos de DB2:
DB2 "SELECT DISTINCT SALES_PERSON FROM SALES_TAB S, PART_SIDE_TAB P WHERE PRICE > 2500.00 AND S.INVOICE_NUM=P.INVOICE_NUM"
El conjunto de resultados debe mostrar los nombres de los vendedores que han vendido un artículo con un precio por encima de 2500,00.
Alternativamente, puede ejecutar el archivo de mandatos siguientes para buscar en el documento:
getstart_queryCol.cmd
Ha completado la guía de iniciación para almacenar documentos XML en tablas DB2. Muchos de los ejemplos del manual están basados en estas lecciones.