Las secciones siguientes contienen archivos de definición de acceso a documento (archivos DAD), que correlacionan datos XML con tablas relacionales DB2, utilizando las modalidades de acceso para columnas XML o para colecciones XML.
Este archivo DAD contiene la correlación de una columna XML; esta correlación define la tabla, las tablas secundarias y las columnas donde se almacenarán los datos XML.
Figura 16. Archivo DAD de ejemplo para una columna XML
<?xml version="1.0"?> <!DOCTYPE Order SYSTEM "c:\dxx\dad.dtd"> <DAD> <dtdid>c:\dxx\samples\dtd\getstart.dtd</dtdid> <validation>YES</validation> <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> </DAD> |
Este archivo DAD contiene una sentencia SQL, que especifica las tablas DB2, columnas y condiciones donde se almacenarán los datos XML.
Figura 17. Archivo DAD de ejemplo para una colección XML que utiliza la correlación SQL
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd"> <DAD> <validation>NO</validation> <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> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE Order 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"> <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> <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> </element_node> </element_node> </root_node> </Xcollection> </DAD> |
Este archivo DAD utiliza elementos <RDB_node> para definir las tablas DB2, columnas y condiciones donde se almacenarán los datos XML.
Figura 18. Archivo DAD de ejemplo para una colección XML que utiliza la correlación de nodo_RDB
<?xml version="1.0"?> <!DOCTYPE Order SYSTEM "c:\dxx\dtd\dad.dtd"> <DAD> <dtdid>c:\dxx\samples\dtd\getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype> <root_node> <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> <attribute_node name="key"> <RDB_node> <table name="order_tab"/> <column name="order_key"/> </RDB_node> </attribute_node> <element_node name="Customer"> <text_node> <RDB_node> <table name="order_tab"/> <column name="customer"/> </RDB_node> </text_node> </element_node> <element_node name="Part"> <RDB_node> <table name="part_tab"/> <table name="ship_tab"/> <condition> part_tab.part_key = ship_tab.part_key </condition> </RDB_node> <attribute_node name="key"> <RDB_node> <table name="part_tab"/> <column name="part_key"/> </RDB_node> </attribute_node> <element_node name="Quantity"> <text_node> <RDB_node> <table name="part_tab"/> <column name="quantity"/> </RDB_node> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> <RDB_node> <table name="part_tab"/> <column name="price"/> <condition> price > 2500.00 </condition> </RDB_node> </text_node> </element_node> <element_node name="Tax"> <text_node> <RDB_node> <table name="part_tab"/> <column name="tax"/> </RDB_node> </text_node> </element_node> <element_node name="shipment"> <RDB_node> <table name="ship_tab"/> <condition> part_key = part_tab.part_key </condition> </RDB_node> <element_node name="ShipDate"> <text_node> <RDB_node> <table name="ship_tab"/> <column name="date"/> <condition> date > "1966-01-01" </condition> </RDB_node> </text_node> </element_node> <element_node name="ShipMode"> <text_node> <RDB_node> <table name="ship_tab"/> <column name="mode"/> </RDB_node> </text_node> </element_node> <element_node name="Comment"> <text_node> <RDB_node> <table name="ship_tab"/> <column name="comment"/> </RDB_node> </text_node> </element_node> </element_node> <! -- end of element Shipment> </element_node> <! -- end of element Part ---> </element_node> <! -- end of element Order ---> </root_node> </Xcollection> </DAD> |