Beim Planen der XML-Objektgruppen müssen Sie unterschiedliche Punkte bedenken, je nachdem, ob Sie Dokumente aus DB2-Daten zusammensetzen, XML-Dokumente in DB2-Daten zerlegen oder beides. In den folgenden Abschnitten werden Fragen zur Planung von XML-Objektgruppen, zur Zusammenstellung und zum Zerlegen von Adressen erläutert.
Nachdem Sie eine Zugriffs- und Speichermethode ausgewählt haben, können Sie festlegen, ob Ihre Daten geprüft werden sollen. Für die Prüfung der XML-Daten verwenden Sie eine DTD. Die Verwendung einer DTD stellt sicher, daß das XML-Dokument gültig ist, und sie ermöglicht die Ausführung einer strukturellen Suche in Ihren XML-Daten. Die DTD wird im DTD-Repository gespeichert.
Empfehlung: Prüfen Sie XML-Daten mit einer DTD. Zur Prüfung müssen Sie eine DTD im XML Extender-Repository haben. Im Abschnitt Eine DTD im DTD-Repository speichern finden Sie Informationen dazu, wie Sie eine DTD in das Repository einfügen. Die DTD-Anforderungen sind unterschiedlich, je nachdem, ob Sie XML-Dokumente zusammensetzen oder zerlegen.
Wichtig: Entscheiden Sie vor dem Einfügen von XML-Daten in DB2, ob die Daten geprüft werden sollen. Der XML Extender unterstützt die Überprüfung von Daten nicht, die bereits in DB2 eingefügt wurden.
Überlegungen:
Für XML-Objektgruppen ordnet die DAD-Datei die Struktur des XML-Dokuments den DB2-Tabellen zu, aus denen Sie entweder das Dokument zusammensetzen oder in die Sie das Dokument zerlegen.
Wenn Sie beispielsweise ein Element mit dem Namen <Tax> in Ihrem XML-Dokument haben, müssen Sie <Tax> eventuell einer Spalte TAX zuordnen. Sie definieren die Beziehung zwischen den XML-Daten und den relationalen Daten in der DAD.
Die DAD-Datei wird entweder beim Aktivieren einer Objektgruppe oder beim Verwenden der DAD-Datei in den gespeicherten Prozeduren der XML-Objektgruppe angegeben. Die DAD ist ein XML-formatiertes Dokument, das auf dem Client gespeichert ist. Wenn Sie XML-Dokumente mit einer DTD prüfen wollen, kann die DAD-Datei dieser DTD zugeordnet werden. Wenn die DAD-Datei als Eingabeparameter der gespeicherten Prozeduren des XML Extender verwendet wird, hat sie den Datentyp CLOB.
Zum Angeben der Zugriffs- und Speichermethode "XML-Objektgruppen" verwenden Sie den folgenden Befehl in der DAD-Datei:
Eine XML-Objektgruppe ist ein virtueller Name für eine Gruppe relationaler Tabellen, die XML-Daten enthalten. Anwendungen können eine XML-Objektgruppe beliebiger Benutzertabellen aktivieren. Diese Benutzertabellen können vorhandene Tabellen mit unternehmensspezifischen Geschäftsdaten sein oder Tabellen, die der XML Extender vor kurzem erstellt hat. Sie greifen auf XML-Objektgruppendaten vor allem über die von XML Extender bereitgestellten gespeicherten Prozeduren zu.
Die DAD-Datei definiert die Baumstruktur der XML-Dokumente anhand der folgenden Knotenarten:
Abbildung 10 zeigt ein Fragment der Zuordnung, die in einer DAD-Datei verwendet wird. Die Knoten ordnen den Inhalt des XML-Dokuments den Tabellenspalten in einer relationalen Tabelle zu.
Abbildung 10. Knotendefinitionen
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd"> <DAD> ... <Xcollection> <SQL_stmt> ... </SQL_stmt> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE DAD SYSTEM "c:\dxx\sample\dtd\getstart.dtd"</doctype> <root_node> <element_node name="Order"> --> Kennzeichnet das Element <Order> <attribute_node name="key"> --> Kennzeichnet das Attribut "key" <column name="order_key"/> --> Definiert den Namen der Spalte, "order_key", der Element und Attribut zugeordnet werden </attribute_node> <element_node name="Customer"> --> Kennzeichnet ein untergeordnetes Element von <Order> als <Customer> <text_node> --> Gibt den CDATA-Text für das Element <Customer> an <column name="customer"> --> Definiert den Namen der Spalte, "customer", der das untergeordnete Element zugeordnet ist </text_node> </element_node> ... </element_node> ... <root_node> </Xcollection> </DAD> |
In diesem Beispiel wurden den ersten beiden Spalten in der SQL-Anweisung Elemente und Attribute zugeordnet.
Sie können den XML Extender-Verwaltungsassistenten oder einen Editor zum Erstellen und Aktualisieren der DAD-Datei verwenden.
Wenn Sie eine XML-Objektgruppe verwenden, müssen Sie ein Zuordnungsschema auswählen, das festlegt, wie XML-Daten in einer relationalen Datenbank dargestellt werden. Da XML-Objektgruppen einer hierarchischen Struktur entsprechen müssen, die in XML-Dokumenten mit einer relationalen Struktur verwendet wird, müssen Sie die Gemeinsamkeiten und Unterschiede der beiden Strukturen kennen. Abbildung 11 zeigt, wie die hierarchische Struktur auf die relationalen Tabellenspalten abgebildet werden kann.
Abbildung 11. XML-Dokumentstruktur auf relationale Tabellenspalten abgebildet
Der XML Extender verwendet das Zuordnungsschema beim Zusammensetzen oder Zerlegen von XML-Dokumenten in verschiedenen relationalen Tabellen. Der XML Extender enthält einen Assistenten, der das Erstellen der DAD-Datei unterstützt. Bevor Sie jedoch die DAD-Datei erstellen, müssen Sie darüber nachdenken, wie Ihre XML-Daten der XML-Objektgruppe zugeordnet werden sollen.
Das Zuordnungsschema wird im Element <Xcollection> in der DAD-Datei angegeben. Der XML Extender bietet zwei Arten von Zuordnungsschemata: SQL-Zuordnung und Zuordnung über die relationale Datenbank (RDB_node). Beide Methoden verwenden das XSLT-Modell zum Definieren der Hierarchie des XML-Dokuments.
Die SQL-Zuordnung gibt DB2-Benutzern die Möglichkeit, mit SQL Daten zuzuordnen. Bei Verwendung der SQL-Zuordnung müssen Sie in der Lage sein, alle Tabellen in einer SELECT-Anweisung zu verbinden und damit eine Abfrage zu bilden. Wenn eine SQL-Anweisung nicht ausreicht, sollten Sie eine RDB_node-Zuordnung in Betracht ziehen. Zum Verbinden aller Tabellen wird die Beziehung Primärschlüssel und Fremdschlüssel zwischen diesen Tabellen empfohlen.
Der RDB_node enthält eine oder mehrere Knotendefinitionen für Tabellen, wahlweise auszuführende Spalten und wahlfreie Bedingungen. Die Tabellen und Spalten werden verwendet, um festzulegen, wie die XML-Daten in der Datenbank gespeichert werden sollen. Die Bedingung gibt die Kriterien zur Auswahl der XML-Daten an oder dazu, wie die XML-Objektgruppentabelle verbunden werden soll.
Zum Definieren eines Zuordnungsschemas erstellen Sie eine DAD mit einem Element <Xcollection>. Abbildung 12 zeigt ein Fragment einer Muster-DAD-Datei mit einer SQL-Zuordnung "XML-Objektgruppe", die eine Gruppe von XML-Dokumenten aus Daten in drei relationalen Tabellen zusammensetzt.
Abbildung 12. SQL-Zuordnungsschema
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd"> <DAD> <dtdid>c:\dxx\samples\dad\getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <SQL_stmt> SELECT o.order_key, customer, p.part_key, quantity, price, tax, date, mode, comment FROM order_tab o, part_tab p, table(select substr(char(timestamp(generate_unique())), as ship_id, date, mode, from ship_tab) as s WHERE p.price > 2500.00 and s.date > "1996-06-01" AND p.order_key = o.order_key and s.part_key = p.part_key </SQL_stmt> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE DAD 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"> <text_node> <column name="customer"/> </text_node> <element_node> ... </element_node><!-end Part-> </element_node><!-end Order-> </root_node> </Xcollection> </DAD> |
Der XML Extender bietet verschiedene gespeicherte Prozeduren zur Verwaltung von Daten in einer XML-Objektgruppe. Diese gespeicherten Prozeduren unterstützen beide Arten der Zuordnung, erfordern jedoch, daß die DAD-Datei entsprechend den in Voraussetzung für das Zuordnungsschema definierten Regeln aufgebaut ist.
In den folgenden Abschnitten werden die Voraussetzungen für die verschiedenen Arten der Zuordnungsschemata für XML-Objektgruppen beschrieben.
In diesem Zuordnungsschema müssen Sie das Element SQL_stmt im DAD-Element <Xcollection> angeben. SQL_stmt muß eine einzelne SQL-Anweisung enthalten, die mehrere relationale Tabellen über das Abfrageprädikat verbindet. Darüber hinaus sind die folgenden Klauseln erforderlich:
SELECT o.order_key, customer, p.part_key, quantity, price, tax, ship_id, date, mode
In diesem Beispiel weisen order_key und customer aus der Tabelle ORDER_TAB die höchste relationale Stufe auf, da sie im hierarchischen Baum des XML-Dokuments höher angesiedelt sind. ship_id, date und mode aus der Tabelle SHIP_TAB befinden sich auf der niedrigsten relationalen Stufe.
FROM order_tab as o, part_tab as p, table(select substr(char(timestamp(generate_unique())),16) as ship_id, date, mode from ship_tab) as s
In diesem Beispiel wird die Funktion generate_unique() auf einen CHAR-Datentyp von TIMESTAMP abgebildet, und sie erhält den Aliasnamen ship_id.
WHERE p.price > 2500.00 AND s.date > "1996-06-01" AND p.order_key = o.order_key AND s.part_key = p.part_key
Auch wenn für SQL_stmt die oben angeführten Einschränkungen gelten, ist es doch eine sehr leistungsstarke Funktion, da Sie in Ihrer WHERE-Klausel ein beliebiges Prädikat angeben können, sofern der Ausdruck im Prädikat die Spalten in den Tabellen verwendet.
Verwenden Sie mit dieser Zuordnungsmethode nicht das Element SQL_stmt im Element <Xcollection> der DAD-Datei. Verwenden Sie statt dessen das Element RDB_node element in allen Knoten der Ausgangsebene für element_node und für jeden attribute_node und text_node.
Der Anfangs-element_node in der DAD-Datei steht für das Stammelement des XML-Dokuments. Geben Sie einen RDB_node für den Anfangs-element_node wie folgt an:
<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>
<table name="part_tab" key="part_key, price"/>
Die für das Zerlegen angegebenen Informationen werden beim Zusammensetzen eines Dokuments ignoriert.
Sie müssen den Tabellennamen und den Spaltennamen explizit ausschreiben.
In diesem Zuordnungsschema sind die Daten in dem attribute_node und text_node für jeden element_node abgelegt. Der XML Extender muß daher wissen, wo in der Datenbank die Daten zu finden sind. Sie müssen einen RDB_node für jeden attribute_node und text_node angeben und so der gespeicherten Prozedur mitteilen, aus welcher Tabelle, welcher Spalte und mit welcher Abfragebedingung die Daten abgerufen werden können. Sie müssen Werte für die Tabelle und die Spalte angeben; der Bedingungswert ist wahlfrei.
<element_node name="Price"> <text_node> <RDB_node> <table name="part_tab"/> <column name="price"/> <condition> price > 2500.00 </condition> </RDB_node> </text_node> </element_node>
<column name="order_key" type="integer"/>
Die für das Zerlegen angegebenen Informationen werden beim Zusammensetzen eines Dokuments ignoriert.
Mit dem Ansatz über die RDB_node-Zuordnung brauchen Sie keine SQL-Anweisungen anzugeben. Das Aufstellen komplexer Abfragebedingungen im Element RDB_node ist jedoch unter Umständen schwieriger. Die Verwendung eines Ausdrucks bzw. einer Operation union ist beispielsweise weniger leistungsstark als der Ansatz SQL-zu-XML.
Beim Zerlegen wird die RDB_node-Zuordnung verwendet zur Angabe, wie ein XML-Dokument in DB2-Tabellen zerlegt werden soll durch Extrahieren der Element- und Attributwerte in Tabellenzeilen. Die Werte aus den einzelnen XML-Dokumenten werden in einer oder mehreren DB2-Tabellen gespeichert. Jede Tabelle kann maximal 1024 Zeilen aus jedem Dokument enthalten.
Wenn ein XML-Dokument beispielsweise in fünf Tabellen zerlegt wird, kann jede dieser fünf Tabellen bis zu 1024 Zeilen für ein bestimmtes Dokument haben. Wenn die Tabelle Zeilen für mehrere Dokumente enthält, kann sie bis zu 1024 Zeilen für jedes Dokument enthalten. Wenn die Tabelle 20 Dokumente enthält, kann sie also 20.480 Zeilen enthalten, 1024 pro Dokument.
Die Verwendung mehrfach vorkommender Elemente (Elemente mit Standortpfaden, die mehr als einmal in der XML-Struktur vorkommen) wirkt sich auf die Anzahl der Zeilen aus. Ein Dokument, das beispielsweise ein Element <Part> 20 mal enthält, kann als 20 Zeilen in eine Tabelle zerlegt werden. Beachten Sie bei Verwendung mehrfach vorkommender Elemente diese Einschränkung der Tabellengröße.