IBM Books

Administración y programación


Lección: Composición de un documento XML

Escenario de la guía de aprendizaje

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.

ORDER_TAB

Nombre de columna Tipo de datos
ORDER_KEY INTEGER
CUSTOMER VARCHAR(16)
CUSTOMER_NAME VARCHAR(16)
CUSTOMER_EMAIL VARCHAR(16)

PART_TAB

Nombre de columna Tipo de datos
PART_KEY INTEGER
COLOR CHAR(6)
QUANTITY INTEGER
PRICE DECIMAL(10,2)
TAX REAL
ORDER_KEY INTEGER

SHIP_TAB

Nombre de columna Tipo de datos
DATE DATE
MODE CHAR(6)
COMMENT VARCHAR(128)
PART_KEY INTEGER

Planificación

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.

Determinación de la estructura del documento

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


Estructura jerárquica de la DTD y el documento XML

Correlación de la relación de un documento XML y una base de datos

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


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:

getstart_db.cmd
Crea la base de datos y rellena cuatro tablas.

getstart_prep.cmd
Enlaza la base de datos con los procedimientos almacenados del XML Extender y la CLI de DB2.

getstart_stp.cmd
Ejecuta el procedimiento almacenado para componer la colección XML.

getstart_exportXML.cmd
Exporta el documento XML desde la base de datos para utilizarlo en una aplicación.

getstart_clean.cmd
Limpia el entorno de guía de aprendizaje.

Puesta a punto

Creación de la base de datos

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:

  1. Cambie al directorio DXX_INSTALL\samples\cmd, donde DXX_INSTALL es la unidad y el directorio en los que ha instalado el XML Extender. En estas lecciones se supone que el directorio es c:\dxx. Cambie estos valores si su unidad y directorio son otros.
  2. Abra la Ventana de mandatos de DB2 desde el menú Inicio de Windows NT o entre el mandato siguiente desde el indicador de mandatos de Windows NT:
    DB2CMD
    
  3. Desde la Ventana de mandatos de DB2, ejecute el mandato siguiente:
    getstart_db.cmd
    

Habilitación de la base de datos

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

Creación de la colección XML: preparación del archivo DAD

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:

  1. Desde el directorio c:\dxx\samples\cmd, abra un editor de texto y cree un archivo llamado getstart_xcollection.dad.
  2. Cree la cabecera del archivo DAD, utilizando el texto siguiente:
    <?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.

  3. Inserte los códigos <DAD></DAD>. Los demás códigos están incluidos dentro de estos códigos.
  4. Especifique los códigos <validation> </validation> para indicar si el XML Extender valida la estructura del documento XML utilizando la DTD que ha insertado en la tabla de depósito de DTD.
    <validation>NO</validation>   
    
  5. Utilice los códigos <Xcollection></Xcollection> para definir el método de acceso y almacenamiento como colección XML. Los métodos de acceso y de almacenamiento definen que los datos XML se guardan en una colección de tablas DB2.
    <Xcollection>
      </Xcollection>
    
  6. Especifique una sentencia SQL para especificar las tablas y columnas que se utilizan para la colección XML. Este método recibe el nombre correlación de SQL y es una de las dos maneras de correlacionar los datos relacionales con la estructura del documento XML. (Vea Tipos de esquemas de correlación para obtener más información sobre los esquemas de correlación.) Entre la sentencia siguiente:
        <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.

  7. Añada la siguiente información de prólogo que debe utilizarse en el documento XML compuesto.
    <prolog>?xml version="1.0"?</prolog> 
    

    Este texto exacto es necesario para todos los archivos DAD.

  8. Añada los códigos <doctype></doctype> que deben utilizarse en el documento XML que está componiendo. El código <doctype> contiene la vía de acceso a la DTD almacenada en el cliente.
    <doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype> 
    
  9. Defina el elemento raíz del documento XML utilizando los códigos <root_node></root_node>. Dentro del nodo raíz, especifique los elementos y atributos que forman el documento XML.
  10. Correlacione la estructura del documento XML con la estructura de la tabla relacional DB2 utilizando los tres tipos de nodos siguientes:

    element_node > (nodo_de_elemento)
    Especifica el elemento del documento XML. Los element_nodes pueden tener element_nodes hijo.

    attribute_node (nodo_de_atributo)
    Especifica el atributo de un elemento del documento XML.

    text_node (nodo_de_texto)
    Especifica el contenido del texto del elemento y los datos de las columnas de una tabla relacional para element_nodes de nivel inferior.

    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.

    1. Defina un código <element_node> para cada elemento del documento XML.
            <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.

    2. Defina un código <attribute_node> para cada atributo de documento XML. Estos atributos están anidados en su element_node. Los attribute_nodes añadidos se resaltan en negrita:
            <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> 
      
    3. Para cada element_node de nivel superior, defina los códigos <text_node>, para indicar que el elemento XML contiene datos de tipo carácter que deben extraerse de DB2 cuando se compone el documento.
            <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> 
      
    4. Para cada element_node de nivel inferior, defina un código <column>. Estos códigos especifican de qué columna deben extraerse los datos cuando se compone el documento XML y generalmente están incluidos dentro del código <attribute_node> o <text_node>. Recuerde que las columnas que defina aquí deben estar en la cláusula <SQL_stmt> SELECT.
            <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> 
      
  11. Compruebe que hay un código final </root_node> a continuación del último código </element_node>.
  12. Compruebe que hay un código final </Xcollection> a continuación del código </root_node>.
  13. Compruebe que hay un código final </DAD> a continuación del código </Xcollection>.
  14. Guarde el archivo como getstart_xcollection.dad

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.

Proceso de composición del documento 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:

  1. Desde la Ventana de mandatos de DB2, entre el mandato siguiente para ejecutar el procedimiento almacenado:
    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:

  2. Exporte el documento XML desde la tabla a un archivo utilizando la función de recuperación del XML Extender, Content():
    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.


[ Principio de página | Página anterior | Página siguiente | Contenido | Índice ]