Da die Daten bereits in verschiedenen Tabellen vorhanden sind, erstellen Sie eine XML-Objektgruppe, die die Tabellen dem XML-Dokument zuordnet. Zum Erstellen einer XML-Objektgruppe definieren Sie die Objektgruppe durch Vorbereiten einer DAD-Datei.
In Planung haben Sie festgelegt, welche Spalten in der relationalen Datenbank mit den Daten vorhanden sind und wie die Daten aus den Tabellen in einem XML-Dokument strukturiert werden. In diesem Abschnitt erstellen Sie das Zuordnungsschema in der DAD-Datei, die die Beziehung zwischen den Tabellen und der Struktur des XML-Dokuments angibt.
In den folgenden Schritten werden die Elemente in der DAD als Befehle und die Elemente Ihrer XML-Dokumentstruktur als Elemente bezeichnet. Ein Muster einer DAD-Datei ähnlich der von Ihnen erstellten finden Sie in c:\dxx\samples\dad\getstart_xcollection.dad. Dieses Muster weist einige kleine Unterschiede gegenüber der in den folgenden Schritten generierten Datei auf. Wenn Sie das Muster für die Lektion verwenden, beachten Sie, daß die Dateipfade für Ihre Umgebung anders sein können.
So erstellen Sie eine DAD-Datei zum Zusammensetzen eines XML-Dokuments:
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
Der XML Extender geht davon aus, daß Sie das Produkt im Verzeichnis c:\dxx installiert haben. Ändern Sie ggf. hier und in den folgenden Schritten diese Angabe ggf. auf das Laufwerk und das Verzeichnis, das Sie bei der Installation dieses Produkts angegeben haben.
<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>
Diese SQL-Anweisung verwendet die folgenden Richtlinien bei Verwendung der SQL-Zuordnung. Schlagen Sie die Dokumentstruktur in Abbildung 6 nach.
Die Anforderungen zum Schreiben einer SQL-Anweisung sind im Abschnitt Voraussetzung für das Zuordnungsschema beschrieben.
<prolog>?xml version="1.0"?</prolog>
Dieser Text ist in genau dieser Form für alle DAD-Dateien erforderlich.
<doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
Weitere Informationen zu diesen Knoten finden Sie im Abschnitt Die DAD-Datei. Abbildung 6 zeigt die hierarchische Struktur des XML-Dokuments und der DB2-Tabellenspalten und gibt an, welche Arten von Knoten verwendet werden. Die schraffierten Kästchen kennzeichnen die Namen der DB2-Tabellenspalten, as denen die Daten beim Zusammensetzen des XML-Dokuments extrahiert werden.
Mit den folgenden Schritten fügen Sie nacheinander die einzelnen Knotenarten hinzu.
<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>
Beachten Sie, daß das untergeordnete Element <Shipment> das Attribut "multi_occurence="YES" aufweist. Dieses Attribut wird für Elemente ohne Attribute verwendet, die in dem Dokument wiederholt werden. Das Element <Part> verwendet das Attribut "multi-occurence" nicht, da es durch das Attribut "Color" eindeutig ist.
<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>
Sie können die eben erstellte Datei mit der Beispieldatei c:\dxx\samples\dad\getstart_xcollection.dad vergleichen. Diese Datei ist eine Arbeitskopie der zum Zusammensetzen des XML-Dokuments erforderlichen DAD-Datei. Die Beispieldatei enthält Pfadanweisungen, die für eine erfolgreiche Ausführung eventuell an Ihre Umgebung angepaßt werden müssen.
Wenn Sie in Ihrer Anwendung eine XML-Objektgruppe häufig zum Zusammensetzen von Dokumenten verwenden, können Sie durch Aktivieren der Objektgruppe einen Gruppennamen definieren. Durch Aktivieren der Objektgruppe wird diese in der Tabelle XML_USAGE registriert; durch die Angabe des Gruppennamens (statt des Namens der DAD-Datei) bei der Ausführung gespeicherter Prozeduren kann somit die Leistung verbessert werden. In diesen Lektionen aktivieren Sie die Objektgruppe nicht. Weitere Informationen zum Aktivieren von Objektgruppen finden Sie im Abschnitt XML-Objektgruppen aktivieren.