Se le asignado la tarea de obtener información de una base de datos de pedidos de compra existente, SALES_DB, y extraer información clave de ésta para almacenarla en documentos XML. El departamento de servicio utilizará estos documentos XML cuando trabaje con pedidos y reclamaciones de los clientes. El departamento de servicio ha solicitado que se incluyan datos específicos y ha proporcionado una estructura para los documentos XML.
Utilizando datos existentes va a componer un documento XML, getstart.xml, a partir de los datos de estas tablas.
También va a planificar y crear un archivo DAD que correlacione las columnas de las tablas relacionadas con una estructura de documento XML que proporciona un registro de pedidos de compra. Debido a que este documento está formado por múltiples tablas, va a crear una colección XML, asociando estas tablas con una estructura XML y una DTD. Utilice esta DTD para definir la estructura del documento XML. También puede utilizarla para validar el documento XML compuesto en las aplicaciones.
Los datos de la base de datos existente para el documento XML se describen en las tablas siguientes. Los nombres de columna que aparecen en cursiva son las columnas que el departamento de servicio ha solicitado que estén en la estructura de documento XML.
Nombre de columna | Tipo de datos |
---|---|
ORDER_KEY | INTEGER |
CUSTOMER | VARCHAR(16) |
CUSTOMER_NAME | VARCHAR(16) |
CUSTOMER_EMAIL | VARCHAR(16) |
Nombre de columna | Tipo de datos |
---|---|
PART_KEY | INTEGER |
COLOR | CHAR(6) |
QUANTITY | INTEGER |
PRICE | DECIMAL(10,2) |
TAX | REAL |
ORDER_KEY | INTEGER |
Nombre de columna | Tipo de datos |
---|---|
DATE | DATE |
MODE | CHAR(6) |
COMMENT | VARCHAR(128) |
PART_KEY | INTEGER |
Antes de empezar a trabajar con el XML Extender para componer los documentos, debe determinar la estructura del documento XML y cómo ésta corresponde a la estructura de los datos de la base de datos. Esta sección le proporcionará una visión general de la estructura del documento XML que ha solicitado el departamento de servicio, de la DTD que va a utilizar para definir la estructura del documento y de cómo este documento se correlaciona con las columnas que contienen los datos que se utilizan para rellenar los documentos.
La estructura del documento XML obtiene información para un pedido específico de varias tablas y crea un documento XML para dicho pedido. Cada una de estas tablas contiene información relacionada sobre el pedido y se puede unir en sus columnas clave. El departamento de servicio desea un documento que se estructure según el número de pedido como nivel superior y, a continuación, la información de cliente, pieza y envío. Quieren que la estructura del documento sea intuitiva y flexible, cuyos elementos describan los datos, en lugar de la estructura del documento. (Por ejemplo, el nombre de cliente debe estar en un elemento llamado "cliente," en lugar de un párrafo.) Según su petición, la estructura jerárquica de la DTD y del documento XML debe ser similar a la que se describe en la Figura 5.
Una vez designada la estructura del documento, debe crear una DTD que describa la estructura del documento XML. Esta guía de aprendizaje le proporciona un documento XML y una DTD. Puede ver el archivo DTD en el Apéndice B, Ejemplos. Puede ver que coincide con la estructura de la Figura 5.
Figura 5. Estructura jerárquica de la DTD y el documento XML
![]() |
Después de designar la estructura y crear la DTD, debe indicar cómo se relaciona la estructura del documento con las tablas DB2 que utilizará para rellenar los elementos y atributos. Puede correlacionar la estructura jerárquica con columnas específicas de las tablas relacionales, como se muestra en la Figura 6.
Figura 6. Documento XML correlacionado con columnas de tabla relacional
![]() |
Utilice la descripción de esta relación para crear archivos DAD que definan la relación entre los datos relacionales y la estructura del documento XML.
Para crear el archivo DAD de la colección XML, debe comprender la correspondencia entre el documento XML y la estructura de la base de datos, tal como se describe en la Figura 6, para que pueda describir de qué tablas y columnas obtiene datos la estructura del documento XML para los elementos y atributos. Utilizará esta información para crear el archivo DAD para la colección XML.
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 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.
Importante: Si ha completado la lección sobre la columna XML y no ha limpiado el entorno, puede saltarse este paso. Compruebe si tiene una base de datos llamada SALES_DB.
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:
Importante: Si ha completado la lección de la columna XML y no ha limpiado el entorno, puede saltarse este paso.
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
Dado que los datos ya existen en varias tablas, creará una colección XML, que asocia las tablas con el documento XML. Para crear una colección XML, defina la colección mediante la preparación de un archivo DAD.
En Planificación ha determinado las columnas que están en la base de datos relacional en la que existen los datos y cómo se estructurarán las tablas para formar un documento XML. En esta sección, va a crear el esquema de correlación del archivo DAD que especifica la relación entre las tablas y la estructura del documento XML.
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_xcollection.dad encontrará un ejemplo de un 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.
Para crear el archivo DAD para componer un documento XML:
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
El XML Extender supone que ha instalado el producto en c:\dxx. Si esto no es así, cambie este valor por la unidad y el directorio que haya especificado durante la instalación de este producto aquí y en los pasos siguientes.
<validation>NO</validation>
<Xcollection> </Xcollection>
<SQL_stmt> SELECT o.order_key, customer_name, customer_email, p.part_key, color, quantity, price, tax, ship_id, date, mode from order_tab o, part_tab p, table (select substr(char(timestamp(generate_unique())),16) as ship_id, date, mode, part_key from ship_tab) s WHERE o.order_key = 1 and p.price > 20000 and p.order_key = o.order_key and s.part_key = p.part_key ORDER BY order_key, part_key, ship_id </SQL_stmt>
Esta sentencia SQL utiliza las siguientes directrices cuando utiliza la correlación SQL. Consulte la Figura 6 para ver la estructura del documento.
Vea Requisitos del esquema de correlación para conocer los requisitos cuando se escribe una sentencia SQL.
<prolog>?xml version="1.0"?</prolog>
Este texto exacto es necesario para todos los archivos DAD.
<doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
Vea El archivo DAD para obtener más información sobre estos nodos. La Figura 6 muestra la estructura jerárquica del documento XML y las columnas de tabla DB2, e indica qué tipos de nodos se utilizan. Los recuadros sombreados indican los nombres de columna de tabla DB2 de los que se obtendrán datos para componer el documento XML.
En los pasos siguientes añadirá cada tipo de nodo, un tipo a la vez.
<root_node> <element_node name="Order"> <element_node name="Customer"> <element_node name="Name"> </element_node> <element_node name="Email"> </element_node> </element_node> <element_node name="Part"> <element_node name="key"> </element_node> <element_node name="Quantity"> </element_node> <element_node name="ExtendedPrice"> </element_node> <element_node name="Tax"> </element_node> <element_node name="Shipment" multi_occurrence="YES"> <element_node name="ShipDate"> </element_node> <element_node name="ShipMode"> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
Tenga en cuenta que el elemento hijo <Shipment> tiene un atributo de multi_occurence="YES". Este atributo se utiliza para los elementos sin un atributo, que se repiten en el documento. El elemento <Part> no utiliza el atributo multi-occurence porque tiene un atributo de color, que hace que sea exclusivo.
<root_node> <element_node name="Order"> <attribute_node name="key"> </attribute_node> <element_node name="Customer"> <element_node name="Name"> </element_node> <element_node names"Email"> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> </attribute_node> <element_node name="key"> </element_node> <element_node name="Quantity"> </element_node> ... </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<root_node> <element_node name="Order"> <attribute_node name="key"> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> </text_node> </element_node> <element_node name="Email"> <text_node> </text_node> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> </attribute_node> <element_node name="key"> <text_node> </text_node> </element_node> <element_node name="Quantity"> <text_node> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> </text_node> </element_node> <element_node name="Tax"> <text_node> </text_node> </element_node> <element_node name="Shipment" multi-occurence="YES"> <element_node name="ShipDate"> <text_node> </text_node> </element_node> <element_node name="ShipMode"> <text_node> </text_node> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<root_node> <element_node name="Order"> <attribute_node name="key"> <column name="order_key"/> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> <column name="customer_name"/> </text_node> </element_node> <element_node name="Email"> <text_node> <column name="customer_email"/> </text_node> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> <column name="color"/> </attribute_node> <element_node name="key"> <text_node> <column name="part_key"/> </text_node> <element_node name="Quantity"> <text_node> <column name="quantity"/> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> <column name="price"/> </text_node> </element_node> <element_node name="Tax"> <text_node> <column name="tax"/> </text_node> </element_node> <element_node name="Shipment" multi-occurence="YES"> <element_node name="ShipDate"> <text_node> <column name="date"/> </text_node> </element_node> <element_node name="ShipMode"> <text_node> <column name="mode"/> </text_node> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
Puede comparar el archivo que acaba de crear con el archivo de ejemplo c:\dxx\samples\dad\getstart_xcollection.dad. Este archivo es una copia de trabajo del archivo DAD necesario para componer el documento XML. 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 la aplicación, si va a utilizar con frecuencia una colección XML para componer documentos, puede definir un nombre de colección habilitando la colección. Cuando se habilita la colección, ésta se registra en la tabla XML_USAGE y puede mejorar el rendimiento especificando el nombre de colección (en lugar del nombre de archivo DAD) al ejecutar procedimientos almacenados. En estas lecciones, no va a habilitar la colección. Para obtener más información sobre cómo habilitar colecciones, vea Habilitación de colecciones XML.
En este paso, utilizará el procedimiento almacenado dxxGenXML() para componer el documento XML especificado por el archivo DAD. Este procedimiento almacenado devuelve el documento con un UDT XMLVARCHAR.
Para componer el documento XML:
getstart_stp.cmd
El documento XML se ha compuesto y se guarda en la tabla RESULT_TAB.
Puede ver ejemplos de los procedimientos almacenados que pueden utilizarse en este paso en los archivos siguientes:
DB2 CONNECT TO SALES_DB DB2 SELECT db2xml.Content(db2xml.xmlvarchar(doc), 'c:\dxx\samples\cmd\getstart.xml') FROM RESULT_TAB
Alternativamente, puede ejecutar el mandato siguiente para exportar el archivo:
getstart_exportXML.cmd
Esta lección le enseña cómo obtener uno o más documentos XML compuestos utilizando la función de conjunto de resultados del procedimiento almacenado de DB2 para que le permita extraer cada fila para obtener cada documento. Cuando obtiene cada fila de un documento, puede exportarla a un archivo, que es el modo más simple de demostrar el funcionamiento de esta característica. Para conocer maneras más eficaces de obtener datos, vea los ejemplos de CLI en c:\dxx\samples\cli.