Le seguenti sezioni contengono i file DAD (document access definition) che associano i dati XML alle tabelle relazionali DB2, utilizzando le modalità di accesso colonna XML o raccolta XML.
Questo file DAD contiene l'associazione per una colonna XML, definendo la tabella, le tabelle laterali e le colonne in cui contenere i dati XML.
Figura 16. File DAD di esempio per una colonna 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> |
Questo file DAD contiene un'istruzione SQL che specifica le condizioni, le tabelle e le colonne DB2 in cui contenere i dati XML.
Figura 17. File DAD di esempio per una raccolta XML che utilizza l'associazione 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> |
Questo file DAD utilizza elementi <RDB_node> per definire le condizioni, le colonne e le tabelle DB2 in cui contenere i dati XML.
Figura 18. File DAD di esempio per una raccolta XML che utilizza l'associazione RDB_node
<?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> |