Strukturbasierte Abbildung von XML auf relationale Datenbanken Marcel Keller Matrikel 46134 [email protected] Juni 2004 Friedrich-Schiller-Universität Jena Fakultät für Mathematik und Informatik Lehrstuhl für Datenbanken und Informationssysteme Prof. Dr. K. Küspert, T. Müller, K. Stolze Sommersemester 2004 Seminar „XML und Datenbanken“ Inhaltsverzeichnis 1. Einführung ......................................................................................................... 3 1.1. Motivation ................................................................................................... 3 1.2. Art der zu speichernden XML-Dokumente ................................................ 4 2. Automatisches Mapping .................................................................................... 4 2.1. Allgemeine Eigenschaften .......................................................................... 4 2.2. Prinzipielle Abbildungsvorschrift nach Klettke und Meyer ....................... 5 2.3. Abbildungsvorschrift nach Ronald Bourret ................................................ 7 2.4. Probleme beim automatischen Mapping .................................................... 8 2.5. Weitere Merkmale der Speicherung mit automatischem Mapping .......... 10 3. Benutzerdefiniertes Mapping .......................................................................... 11 3.1. Allgemeine Eigenschaften ........................................................................ 11 3.2. Mappingvorschrift nach Ronald Bourret .................................................. 12 3.3. Weitere Merkmale der Speicherung mit ................................................... 14 benutzerdefiniertem Mapping .......................................................................... 14 4. Was machen die Hersteller? ............................................................................ 16 4.1. Oracle 9i .................................................................................................... 16 4.2. IBM DB2 UDB ......................................................................................... 17 5. Zusammenfassung ........................................................................................... 21 6. Quellenverzeichnis .......................................................................................... 22 7. Anhang ............................................................................................................ 23 A) Relationenschema ...................................................................................... 23 2 1. Einführung 1.1. Motivation Der weit verbreitete Einsatz von XML als temporäres Austauschformat führt zur Frage wie man die in XML enthaltenen Daten dauerhaft und effizient speichern kann. Für die Datenhaltung bieten sich relationale und objektorientierte Datenbanken, Dateisysteme und reine XML-Datenbanken an. Da relationale und objektrelationale Datenbanken in der Wirtschaft eine breite Verwendung finden, kommt diesen die größte Bedeutung zu. Viele Hersteller von relationalen Datenbanken unterstützen schon die Speicherung von XMLDaten in ihren Systemen. Im Allgemeinen werden dabei drei verschiedene Ansätze verfolgt. Der erste Ansatz, genannt textbasierte Abbildung, speichert das gesamte XML-Dokument als CLOB (Character Large Object) in einer Tabellenspalte. Dieser Ansatz ist zwar einfach zu realisieren, bietet jedoch nur eingeschränkte Funktionalität und Effizienz, wenn auf Teile des Dokumentes zugegriffen werden soll. Ein zweiter Ansatz wandelt das XML-Dokument in eine Graphenstruktur um und speichert zum Beispiel jeden Elementtyp mit einer eindeutigen Elementtyp-ID, einer zugehörigen Dokument-ID, einem Verweis auf den Vorgänger und die Elementordnung ab. Zwar ist das Dokument später wieder aus der Datenbank rekonstruierbar, jedoch ist dies aufgrund der hohen Anzahl von Joins nur sehr langsam möglich und auch das Beantworten von Anfragen ist nicht effizient. Diese Seminararbeit befasst sich mit der Erläuterung von verschiedenen Abbildungsverfahren, die zur strukturbasierten Speicherung von XML-Daten in relationale Datenbanken entwickelt wurden. Bei diesem dritten Ansatz werden die XML-Dokumente zunächst strukturell analysiert und dann die im XML-Dokument enthaltenen Daten in relationaler Form in einer oder mehreren Tabellen abgespeichert. Dieser Ansatz ist weitaus mächtiger als die Anderen, da im Gegensatz zu Ansatz 1 jetzt die komplette Funktionalität des Datenbanksystems zum tragen kommt und weiterhin im Vergleich zu Ansatz 2 viel effizientere Anfragen und Rekonstruktionen möglich sind. Also ist prinzipiell der dritte Ansatz vorzuziehen. Die Umsetzung in der Praxis ist jedoch nicht immer unproblematisch. Für die Anwendung eigenen sich nur bestimmte XML-Dokumente, die im nächsten Abschnitt genauer beschrieben werden sollen. 3 1.2. Art der zu speichernden XML-Dokumente Da sich das relationale Modell wesentlich vom hierarchischen Modell von XML unterscheidet ist es manchmal schwer bis unmöglich eine geeignete Abbildung zu finden. Um bei der Wahl des Ansatzes eine Richtlinie zu haben, wurden XML-Dokumente anhand ihrer Struktur charakterisiert. Dabei gibt es im wesentlichen zwei Arten, die datenzentrierten Dokumente, die sehr strukturiert und regulär sind, und die dokumentzentrierten Dokumente die einen unstrukturierten Aufbau aufweisen und unregulär sind. Die dritte Art der semistrukturierten Dokumente umfasst alle Dokumente, die sowohl datenzentrierte als auch dokumentzentrierte Anteile besitzen. Für die strukturbasierte Abbildung eignen sich besonders datenzentrierte XML-Dokumente, da bei diesen eine leichte, unproblematische Abbildung in das relationale Schema möglich ist. Solche strukturierten XML-Dokumente finden wir besonders dort, wo XML als Medium zum Datenaustausch zwischen Systemen fungiert. Beispiele hierfür wären die Übermittlung von Bestellungs-, Rechnungs- und Produktdaten. Nun stellt sich jedoch die Frage, was heißt “strukturiert“, das heißt welche Merkmale muss ein XML-Dokument aufweisen damit es als datenzentriert klassifiziert werden kann. Bei datenzentrierten XML-Dokumenten treten selten gemischte Inhalte bei Elementen (Mixed Content, ANY) auf und auch die Reihenfolge von Geschwisterelementen spielt in der Regel keine Rolle. Weiterhin lassen sich hierarchische Strukturen ohne Rekursivität leicht auf mehrere Tabellen mit entsprechenden Fremdschlüsselbeziehungen abbilden. Im nächsten Abschnitt werden nun Verfahren vorgestellt, die auf der automatischen Abbildung von XML-Daten auf relationale Strukturen basieren. 2. Automatisches Mapping 2.1. Allgemeine Eigenschaften Bei dieser ersten Methode der Abbildung werden die XML-Strukturen von einem allgemeingültigen, vom konkreten Schema unabhängigen Konzept umgesetzt. Es muss natürlich eine DTD oder ein XML-Schema vorhanden sein, um daraus die Strukturinformationen zu gewinnen, die für die Umsetzung ins relationale Schema benötigt werden. 4 Eine sogenannte Defaultmappingvorschrift spezifiziert, welche Strukturen auf welche relationale Strukturen abgebildet werden. Es ist zu beachten, dass diese Vorschrift für sämtliche zu speichernde XML-Dokumente gilt, da in dieser kein Bezug auf bestimmte Elementtypen genommen wird, sondern nur Strukturen, wie zum Beispiel Elementtyp mit Subelementen, von Bedeutung sind. Wie man leicht erkennt, richtet sich bei dieser Variante der Datenbankentwurf nach der Struktur der XML-Dokumente. Das bedeutet, ändert man das XML-Schema, dann muss auch das Datenbankschema angepasst werden. Nachteil dieser Methode ist, dass immer nur das gesamte XML-Dokument abgebildet werden kann. In der Praxis ist es aber oft nötig, dass Teile aus XML-Dokumenten in zum Beispiel schon bestehende Datenbanken gespeichert werden. Für diesen Zweck wird im Kapitel 3 eine weitaus flexiblere Methode der strukturbasierten Abbildung vorgestellt. 2.2. Prinzipielle Abbildungsvorschrift nach Klettke und Meyer In Klettke und Meyer [1] wird ein prinzipielles Verfahren zur Abbildung von XML-Daten auf objektrelationale Datenbanken vorgestellt. Für die Abbildung auf relationale Datenbanken, die ja keine Objekttypen unterstützen, wurde von mir eine Anpassung vorgenommen. Die Grundidee dieses Verfahrens ist, dass man Elemente und Attribute von XML-Dokumenten mit Hilfe der zugehörigen DTD oder eines XML-Schemas aufgrund von Strukturmerkmalen einteilen kann. Begonnen wird mit der Abbildung von Elementen: 1) Ist der Elementtyp das Wurzelelement mit mehreren verschiedenen Subelementtypen, dann wird eine Relation angelegt, die den Namen des Wurzelelementtyps erhält und eine eindeutige ID als Attribut, um die Zuordnung zum XML-Dokument zu gewährleisten. Besteht das Wurzelelement in der nächst tieferen Ebene aus nur einem Subelementtyp, dann kann man den Namen des Wurzelementtyps der Datenbank zuordnen und den Subelementtyp als Namen einer Relation mit eindeutiger ID verwenden. 2) Ein normaler Elementtyp wird auf ein Attribut einer Relation abgebildet. 3) Besteht ein Elementtyp aus einer Sequenz von Elementtypen, dann werden diese auf Attribute einer Relation abgebildet. 5 4) Besteht ein Elementtyp aus einer Alternative von Elementtypen, dann werden diese auf Attribute einer Relation abgebildet. 5) Elementtyp mit dem Quantifizierer ? wird auf ein Attribut einer Relation abgebildet, wobei dieses Attribut NULL annehmen kann 6) Elementtyp mit dem Quantifizierer + oder * wird auf eine eigene Relation abgebildet mit einer eindeutigen ID. Die Relation erhält außerdem ein Attribut das den Namen des Elementtyps entspricht. 7) Komplex strukturierte (geschachtelte) Elementtypen werden in eine eigene Relation ausgegliedert, wobei die Subelementtypen den Attributen der Relation entsprechen. Abbildung von Attributen: 1) XML-Attribut wird auf ein Attribut einer Relation abgebildet. 2) Ist das Attribut #IMPLIED, dann sind NULLs erlaubt. 3) Ist das Attribut #REQUIRED, dann sind NULLs nicht erlaubt. 4) Bei Attribut mit Defaultwert, muss ein Defaultwert bei der „Create Table-Anweisung“ angegeben werden. Nun folgt an einem Beispiel die Anwendung der Vorschrift: Wie oben schon erwähnt, wird eine DTD benötigt, aus der die Strukturinformationen auslesen werden können. Eine solche Beispiel-DTD ist wie folgt aufgebaut: <!ELEMENT hotel (hotelname, kategorie, adresse, telefon+, fax)> <!ATTLIST hotel id ID #REQUIRED> <!ELEMENT hotelname (#PCDATA)> <!ELEMENT kategorie (#PCDATA)> <!ELEMENT adresse (plz, ort, strasse, nummer)> <!ELEMENT plz (#PCDATA)> <!ELEMENT ort (#PCDATA)> <!ELEMENT strasse (#PCDATA)> <!ELEMENT nummer (#PCDATA)> <!ELEMENT telefon (#PCDATA)> <!ELEMENT fax (#PCDATA)> 6 Der abgeleitete Datenbankentwurf würde dann folgendermaßen aussehen: CREATE TABLE Hotel ( ID INTEGER PRIMARY KEY, Hotelname VARCHAR(50) NOT NULL, Kategorie INTEGER NOT NULL, Adresse VARCHAR(5) NOT NULL, Telefon VARCHAR(5) NOT NULL, Fax VARCHAR(30) NOT NULL ); CREATE TABLE Telefon ( ID INTEGER NOT NULL, Telefon VARCHAR(30) NOT NULL, PRIMARY KEY (ID,Telefon), FOREIGN KEY (ID) references Hotel (ID) ); CREATE TABLE Adresse ( ID INTEGER PRIMARY KEY, Plz INTEGER NOT NULL, Ort VARCHAR(50) NOT NULL, Strasse VARCHAR(30) NOT NULL, Nummer INTEGER NOT NULL, FOREIGN KEY (ID) references Hotel (ID) ); Das daraus abgeleitete Relationenschema befindet sich im Anhang A. 2.3. Abbildungsvorschrift nach Ronald Bourret Eine weitere Abbildungsvorschrift wurde von Ronald Bourret entwickelt, die im diesem Abschnitt kurz vorgestellt wird. 7 Ein wesentlicher Unterschied zu der Vorschrift von Klettke und Meyer ist, dass die PCDATA-Komponente eines Elementes mit gemischten Inhalt in eine separate Tabelle ausgegliedert wird. 1) Erzeuge für jeden Elementtyp mit Subelementen beziehungsweise gemischtem Inhalt eine Tabelle mit einer Primärschlüsselspalte 2) Erzeuge für jeden Elementtyp mit gemischtem Inhalt eine separate Tabelle zur Speicherung der PCDATA-Komponente. Diese Tabelle wird mit der Tabelle des Elementtyps über deren Primärschlüssel verknüpft. 3) Erzeuge in der Tabelle eines Elementtyps für jedes einwertige Attribut des Elementtyps und jeden nur einmal vorkommenden Subelementtyp, der nur PCDATA enthält eine Spalte. Wenn der Subelementtyp beziehungsweise das Attribut optional sind, muss die Spalte den Wert Null annehmen können. 4) Erzeuge für jedes mehrwertige Attribut eines Elementtyps und für jeden Subelementtyp, der ein Mehrfachvorkommen erlaubt, jedoch nur PCDATA enthält, eine separate Tabelle zur Speicherung der Werte. Diese Tabelle wird mit der Tabelle des Elementtyps über deren Primärschlüssel verknüpft. 5) Verknüpfe für jeden Subelementtyp mit Subelementen oder gemischtem Inhalt die Tabelle des Elementtyps mit der Tabelle des Subelements über den Primärschlüssel des Elementtyps. 2.4. Probleme beim automatischen Mapping 2.4.1. Einführung Mit der oben vorgestellten prinzipiellen Abbildungsvorschrift nach Klettke und Meyer sind gewisse Probleme verbunden, die nicht immer zu lösen sind. Diese Probleme werden erst ersichtlich, wenn bei datenzentrierten Dokumenten der Fall eintritt, dass gemischter Inhalt und Rekursionen auftreten oder die Elementordnung von Bedeutung ist. Da bei der Abbildungsvorschrift nur Elemente und Attribute abgebildet werden, kann das ursprüngliche Dokument nicht exakt wiederhergestellt werden, da zum Beispiel Kommentare, Processing Instructions, XML-Prolog und die DTD an sich zwangsweise verloren gehen. 8 2.4.2. Abbildung von Alternativen Bei Abbildung von Alternativen werden alle Elementtypen in der Alternative auf Attributnamen einer Relation abgebildet. Da nur ein Elementtyp aus der Alternative im zugehörigen XML-Dokument auftritt, man aber im voraus nicht erkennen kann welcher Elementtyp auftreten wird und weiterhin sich die Elementtypen je nach Dokument unterscheiden können, müssen alle Elementtypen der Alternative abgebildet werden. Dies führt natürlich zu dünn besetzten Relationen, was eher unerwünscht ist. Um dieses Problem zu umgehen, kann man alle Elementtypen in einer Alternative in eine jeweils eigene Relation ausgliedern. 2.4.3. Abbildung von rekursiven Datendefinition In XML-Dokumenten können keine Rekursionen auftreten, da diese Dokumente endlich sind. In DTDs oder einem XML-Schema können allerdings Rekursionen auftreten, die nicht exakt auf relationale Datenbanken abgebildet werden können. Rekursionen müssen in separate Tabellen aufgespaltet werden und Primär- beziehungsweise Fremdschlüsselbeziehungen verwendet werden, um die Rekursion zu verdeutlichen. Diese Problematik soll anhand einer Beispiel-DTD verdeutlicht werden: .... <!ELEMENT ort (name, einwohnerzahl, ausflugsziel*)> <!ELEMENT ausflugsziel (ort, entfernung, beschreibung)> .... In diesem Beispiel enthält die Beschreibung von Orten neben anderen Informationen auch Vorschläge für ein Ausflugsziel. In diesen Ausflugszielen sind nun wiederum Orte vorhanden Diese DTD enthält also eine Rekursion. Ein Beispiel für ein entsprechendes Relationenschema könnte wie folgt aussehen: Ort (ID, Name, Einwohnerzahl, Ausflugsziel) Ausflugziel (ID, OrtID, Entfernung, Beschreibung) 9 Wie man erkennt, wurde die Rekursion in separate Tabellen aufgespaltet. Die unterstrichenen Attribute sind Primärschlüssel der jeweiligen Relation. Dabei verweist OrtID von Ausflugsziel als Fremdschlüssel auf ID von Ort. Nun müsste theoretisch auch noch Ausflugziel von Ort auf ID von Ausflugsziel verweisen, was aber nicht möglich ist, da ID nur ein Teil des Primärschlüssels ist und somit die verlangte Eindeutigkeit aufweist. 2.4.4. Abbildung von Elementordnungen Wenn man Inhalte von XML-Dokumenten auf Datenbanken abbildet, bleibt die Dokumentordnung nicht zwingend erhalten, beziehungsweise sie ist bei der Rekonstruktion der Dokumente aus der Datenbank nicht wieder herstellbar. In vielen Anwendungen ist diese Ordnung jedoch von großer Bedeutung. Ein Beispiel hierfür wären wissenschaftliche Publikationen, bei denen die Reihenfolge der Kapitel nicht vernachlässigt werden darf. Ist es also notwendig, die Ordnung der Elemente zu erhalten, dann muss ein zusätzliches Datenbankattribut eingeführt werden, welches sicherstellt, dass die Ordnung gespeichert wird. 2.4.5. Abbildung von Mixed Content Types Ein weiterer Problemfall ist die Speicherung von Mixed Content Types, da hier Texte und andere Elemente gemischt auftreten können. Die Speicherung von solchen Typen ist sehr umständlich, da bei Texten auch die Elementordnung von Bedeutung ist. Auch Anfragen an solche Relationen sind nicht effizient durchführbar. Da bei datenzentrierten Dokumenten Mixed Content Types nur selten auftreten, kann das Problem bei der Speicherung vernachlässigt werden. 2.5. Weitere Merkmale der Speicherung mit automatischem Mapping Bis jetzt wurden Verfahren für das automatische Mapping aufgezeigt und Problemfälle angesprochen. Nun werden die wichtigsten Merkmale des automatischen Mappings noch einmal kurz zusammengetragen. 10 Für die strukturbasierte Abbildung von XML-Daten auf relationale Datenbanken mit automatischem Mapping ist immer eine Schemabeschreibung, also eine DTD oder ein XMLSchema, erforderlich. Ist nur eine DTD vorhanden, dann ist vom Anwender noch eine Anpassung der Datenbankattributtypen notwendig, da in einer DTD keine Typisierung von Elementen möglich ist. Datenbankanfragen sind mit SQL möglich, dazu muss jedoch verständlicherweise die Struktur der Datenbank bekannt sein. Hier kann der Anwender nun die Vielzahl von Funktionalitäten des Datenbanksystems nutzen und Anfragen werden durch das Datenbankmanagementsystem optimiert. Für Anfragen mit XPath oder XQuery muss der Prozess der Abbildung von XML auf die Datenbank protokolliert werden. In einem weiteren Schritt muss nun die Datenbankanfrage automatisch aus der XML-Anfrage generiert und das Ergebnis der Datenbankanfrage wieder in das XMLFormat umgewandelt werden. Während der Prozess der Ausgabe von SQL-Anfragen in Form von XML schon in vielen Datenbanksystemen umgesetzt ist, so ist die Protokollierung und die Umformung von XML-Anfragen in SQL-Statements relativ schwierig zu bewerkstelligen. Die Effizienz von Anfragen ist im Vergleich zu den in Punkt 1.2. erwähnten anderen Verfahren relativ hoch. Bei dieser Art der Abbildung wird oft ein großes Schema erzeugt und wie schon angesprochen, kann der unerwünschte Fall einer schwach gefüllten Datenbank auftreten. Elementhierarchien können zwar mit entsprechenden Schlüsselbeziehungen abgebildet werden, doch im Allgemeinen erlauben objektorientierte oder objektrelationale Datenbanksysteme eine natürlichere Abbildung. Die Speicherung von Elementen vom Typ ANY ist überhaupt nicht möglich, da diese Elemente beliebigen Inhalt besitzen können. 3. Benutzerdefiniertes Mapping 3.1. Allgemeine Eigenschaften Bisher konnte die Art der Speicherung nicht beeinflusst werden, das bedeutet, der Nutzer konnte nicht steuern, welche XML-Strukturen auf welche Datenbankstrukturen abgebildet werden sollen. Weiterhin war es bisher nicht möglich nur Teile eines XML-Dokumentes abzubilden. 11 Benutzerdefinierte Abbildungen lassen den Nutzer nun steuern welche Speicherungsstruktur zum Einsatz kommt. In einer vom Nutzer erstellten Mappingvorschrift wird spezifiziert welche Informationen aus dem XML-Dokument auf welche Datenbankstruktur abgebildet werden. Somit ist es möglich zu entscheiden, ob das XML-Dokument vollständig abgebildet wird oder nur ein Ausschnitt des XML-Dokumentes von Bedeutung ist. Benutzerdefiniertes Mapping erweist sich also als eine sehr flexible Methode. Man kann außerdem das XML-Schema und das Datenbankschema unabhängig voneinander entwerfen und auch das Speichern von XML-Daten in schon bestehende Datenbanken stellt kein Problem dar. Zwar gibt es Utilities, die einen bei der Erstellung der Mappingvorschrift unterstützen, jedoch erfordert dies dennoch einen großen manuellen Aufwand. Für das Verfahren wird auch der Begriff „Schreddern“ oder „Shredding“ verwendet, denn man kann die Mappingvorschrift so wählen, das vom Originaldokument bei der Speicherung nicht mehr viel zu erkennen ist. In solchen Fällen sind die XML-Dokumente nicht wiederherstellbar. Auch Anfragen die sich an XML-Dokumente stellen ließen, sind nicht immer mehr an die Datenbank zu stellen. Dies sind Probleme, die auftreten, wenn nur unvollständig gespeichert wird oder die Art der Speicherung gegenüber dem Originaldokument stark verändert wurde. Die Verantwortung für eine korrekte Abbildung liegt hier beim Anwender. 3.2. Mappingvorschrift nach Ronald Bourret Ein mögliche Form einer Mapping-Vorschrift ist von Ronald Bourret entwickelt wurden. In diesem konkreten Fall basiert die Mappingvorschrift auf XML-Syntax, wobei aber auch XLST als Basis verwendet werden kann. Im folgenden Beispiel ist ein XML-Dokument angegeben, aus dem bestimmte Informationen mit Hilfe einer Mappingvorschrift in eine relationale Datenbank abgebildet werden sollen. 12 <Hotel url= "www.hotel-huebner.de“> <HotelID>H0001</HotelID> <Name>Hotel Huebner </Name> <Adresse> <PLZ>18119</PLZ> <Ort>Warnemünde</Ort> <Strasse>Seestrasse</Strasse> <Nr>12</Nr> </Adresse> <Preise> <Einzelzimmer>198</Einzelzimmer> </Preise> </Hotel> Das XML-Dokument enthält Informationen über ein Hotel, wie das Attribut url und die Elementtypen HotelID, Name, Adresse und Preise. Der Elementtyp Adresse enthält die Subelementtypen PLZ, Ort, Strasse und Nr und der Elementtyp Preise enthält den Subelementtyp Einzelzimmer. Nun folgt die von Ronald Bourret entwickelte MappingVorschrift. <ClassMap> <ElementType Name="Hotel“/> <ToClassTable> <Table Name="Preise"> </ToClassTable> <PropertyMap> <Attribute Name="url"/> <ToColumn> <Column Name="Hotel_url"> </ToColumn> </PropertyMap> <PropertyMap> <ElementType Name="hotelname"/> <ToColumn> <Column Name="Name"/> </ToColumn> </PropertyMap> <PropertyMap> <ElementType Name="Einzelzimmer"/> <ToColumn> <Column Name="Einzelzimmer"/> </ToColumn> </PropertyMap> ..... </ClassMap> 13 Im ersten Teil dieser Vorschrift wird das Wurzelelement Hotel der Datenbanktabelle Preise zugeordnet. Hinter den einzelnen PropertyMap-Tags stehen Zuordnungen von Attributen und Elementtypen zu Datenbankattributen der Tabelle Preise. Im Einzelnen wird das Attribut url dem Datenbankattribut Hotel_url, der Elementtyp hotelname dem Datenbankattribut Name und der Elementtyp Einzelzimmer dem Datenbankattribut Einzelzimmer zugeordnet. An dieser Mappingvorschrift wird deutlich, dass in jeder Mappingvorschrift die Darstellung von Informationen dem Datenbankschema zugeordnet werden muss. Aus diesem Fakt ergibt sich, dass die Datenbanken entweder schon existieren müssen oder die Datenbank aus der Mappingvorschrift erstellt werden muss. 3.3. Weitere Merkmale der Speicherung mit benutzerdefiniertem Mapping Benutzerdefiniertes Mapping hat viele Vorteile gegenüber automatischem Mapping und besitzt aufgrund der großen Variabilität und Flexibilität der Methode eine größere Bedeutung in der Praxis. Wie auch beim automatischen Mapping ist für die Umsetzung eine Schemabeschreibung erforderlich. Die Dokumentrekonstruktion ist aus in Punkt 3.1. genannten Gründen meist nicht möglich. Anfragen an die Datenbank sind mit SQL möglich, jedoch muss auch hier die Struktur der Datenbank bekannt sein. Um XML-Anfragen zu stellen, muss der Abbildungsprozess in Metadaten protokolliert werden. Dafür ist es nötig, dass alle für die Anfrage relevanten Daten gespeichert sind. Die Anfragemöglichkeiten mit XML-Anfragesprachen sind also nur sehr eingeschränkt. Die Dokumentordnung kann nur über ein zusätzliches Attribut gewährleistet werden. Ein weiteres Merkmal ist, dass durch die flexible Abbildung der Zusammenhang zwischen Attributen und Elementen verloren gehen kann. Bei Änderungen des XML-Schemas oder des Datenbankschemas muss außerdem die Mappingvorschrift angepasst werden. Dies zeigt auch deutlich, dass die Verantwortung für die korrekte Abbildung beim Anwender, also beim Entwerfer der Mappingvorschrift liegt. Auch bei dieser Abbildungsmethode werden der Prolog des XML-Dokumentes, Processing Instructions, Kommentare und das Schema des XML-Dokumentes nicht gespeichert. 14 Probleme können auch bei der Typisierung der Datenbankattribute entstehen, da in einer DTD keine Typisierung zur Verfügung steht. Ist zum Beispiel ein Datenbankattribut vom Typ DATE vorhanden, so muss das Element oder Attribut im XML-Dokument auch den syntaktischen Anforderungen von DATE entsprechen. Gegebenfalls ist eine Konvertierung in das richtige Format notwendig. Ein weiteres Problem, das bis jetzt noch nicht betrachtet wurde, zeigt sich, wenn man überlegt, wie Zeichenketten behandelt werden, denn Entities und CDATA-Abschnitte müssten ja aufgelöst werden, um korrekt gespeichert zu werden. 15 4. Was machen die Hersteller? 4.1. Oracle 9i Oracle bietet nur für die objektrelationale Speicherung automatisches Mapping an. Bennutzerdefiniertes Mapping ist nicht möglich. Für die relationale Speicherung von XMLDaten bietet Oracle das Programm XSU (XML SQL Utility) an, welche Ergebnisse von SQLAnfragen in XML ausgeben kann und Daten aus XML-Dokumenten in Tabellen einliest. Das auf Java basierende XSU wird über ein Java Application Interface angesprochen. Für den Import von XML-Daten muss der Name der bestehenden Tabelle und der Name des abzubildenden XML-Dokumentes angegeben werden. XSU erzeugt dann automatisch SQLInsert-Befehle. Die Verwendbarkeit des Programms ist durch strikte Strukturanforderungen an das XML-Dokument und die bestehende Tabelle stark eingeschränkt. So müssen XMLSchema und relationales Schema exakt übereinstimmen. Ist dies nicht der Fall, dann muss entweder das relationale Schema angepasst werden oder das XML-Dokument mit XLST transformiert werden. Diese Strukturanforderungen sollen an folgendem Beispiel erklärt werden. <ROWSET> <ROW num="1"> <PersNr>234<PersNr> <Name>Müller<Name> <Gehalt>4000<Gehalt> </ROW> <ROW num="2"> ... </ROW> ... </ROWSET> XSU erzeugt beim Auslesen aus der Datenbank das eben vorgestellte XML-Dokument mit ROWSET als Wurzelelement und für jede gelesene Zeile des Anfragergebnisses ein ROWElement in dem die einzelnen Datenbankattribute auf Elemente des XML-Dokumentes abgebildet wurden. Die Struktur beim Import von XML-Dokumenten muss genau der Struktur entsprechen, die beim Auslesen aus der Datenbank entsteht. 16 4.2. IBM DB2 UDB IBM bietet in DB2 benutzerdefiniertes Mapping an. Dazu wurde ab Version 7.1 mit dem Erweiterungsmechanismus von DB2 der XML-Extender eingeführt, der verschiedene Zugriffs- und Speicherungsformen für XML zur Verfügung stellt. Nun folgt eine Grafik die diese Formen verdeutlichen soll. Die erste Speicherungsform ist XML-Collection, welche die Abbildung auf relationale Strukturen ermöglicht. XML-Column bietet einen XML-Datentyp an, welcher die Speicherung von ganzen XML-Dokumenten oder Fragmenten in einer Spalte unterstützt. Diese zweite Speicherungsform wird in dieser Arbeit jedoch nicht weiter beleuchtet, denn sie ist Thema der textbasierten Abbildung. Die genaue Form der Speicherung wird in einer sogenannten DAD-Datei (Document Access Definition) beschrieben. Diese DAD-Datei ist nichts anderes als die schon oft erwähnte Mappingvorschrift, also ein XML-formatiertes Dokument, welches auf dem Client gespeichert ist. DTDs werden beim automatischen Mapping mit DB2 in einem DTD-Repository abgelegt und auch die DAD-Datei wird in einer sogenannten XML-Usage-Table gespeichert. Um automatisches Mapping durchführen zu können, muss zunächst eine XML-Collection aktiviert werden. 17 Bei dieser Aktivierung mit der Methode dxxEnableCollection() muss der Datenbankname, Name der Collection, DAD-Datei und der Tablespace angegeben werden. Die Prozedur dxxInsertXML() bekommt als Eingabeparameter nun den Namen der aktivierten XMLCollection und die XML-Datei und führt anhand der Abbildungsregeln in der DAD-Datei das Shredding aus. Es gibt auch eine Möglichkeit das Aktivieren der XML-Collection zu umgehen, indem die Prozedur dxxShredXML() für das Shredding benutzt wird. Als Eingabeparameter erhält diese Prozedur die DAD-Datei und die XML-Datei. Verwende ich XML-Collection dann muss dies in der DAD-Datei explizit kenntlich gemacht werden. Weiterhin stehen 2 Abbildungsmethoden zur Verfügung. Die SQL-Zuordnung, welche allerdings nur für den Export von XML-Daten aus der Datenbank gewählt werden kann, und die RDB_node-Zuordnung. Da das Augenmerk dieser Arbeit auf dem Import von XML-Daten in relationale Datenbanken liegt, können wir die erste Methode vernachlässigen. 18 Ein Beispiel für eine DAD-Datei: <?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "dxx_install_verz/samples/db2xml/dtd/dad.dtd"> <DAD> <dtdid>dxx_install_verz/samples/dad/getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <prolog>?xml version="1.0"?</prolog><doctype>! DOCTYPE Order SYSTEM "dxx_install_verz/samples/db2xml/dtd/getstart.dtd"</doctype> <root_node> <element_node name="Order"> <RDB_node> <table name="order_tab" key="order_key"/> <table name="part_tab" key="part_key order_key"/> <condition>order_tab.order_key = part_tab.order_key</condition> </RDB_node> <attribute_node name="key"> <RDB_node> <table name="order_tab"/> <column name="order_key" type="integer"/> </RDB_node> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> <RDB_node> <table name="order_tab"/> <column name="customer_name" type="varchar(30)"/> </RDB_node> </text_node> </element_node> <element_node name="Email"> <text_node> <RDB_node> <table name="order_tab"/> <column name="email_name" type="varchar(30)"/> </RDB_node> </text_node> </element_node> </element_node> ................ .......... </element_node> </root_node>. </Xcollection> </DAD> 19 Die DAD-Datei beginnt ganz normal mit dem Prolog und der Angabe einer externen DTD die die DAD-Datei beschreibt. Weiterhin wird eine DTD angebeben für die die Beschreibung in der Xcollection gilt. Zur Beschreibung der Dokumentenaufbaus des XML-Dokumentes, bedient man sich einem sogenannten node-Set, welches aus root_node-, element_node-, attribut_node-, text_node- und RDB_node-Elementen besteht. Ein RDB-node beinhaltet wiederum table-, column- und condition-Elemente Unter dem root-node steht das Wurzelelement des XML-Dokumentes, danach folgt in dem ersten RDB-node die Angabe der beteiligten Tabellen und die Angabe der Primärschlüssel. In der Condition wird die Verbundbedingung zwischen den Tabellen angegeben, also die Fremdschlüsselbeziehungen. Ein Column-Element anzulegen ist hier nicht möglich und auch nicht sinnvoll. Nun wird der attribut_node key einer Tabelle und einer Spalte zugeordnet. Optional könnte man auch hier eine condition angeben, aber nur gegen ein konstantes Literal um bestimmte Attributinhalte auszuschließen. Die weiteren Abbildungen in diesem Beispiel sind selbsterklärend. Wichtig zu wissen ist außerdem, dass die Verschachtelung der nodeElemente den hierarchischen Beziehungen des XML-Dokumentes entsprechen muss. Die nächste Grafik zeigt die zu dieser DAD-Datei passende DTD und das daraus entstehende Relationenschema . <!ELEMENT Order (Customer, Part+)> <!ATTLIST Order order_key ID #REQUIRED> <!ELEMENT Customer (Name, Email)> <!ELEMENT Name (#PCDATA)> <!ELEMENT Email (#PCDATA)> <!ELEMENT Part (Key, Quantity, ExtendedPrice,Tax,Shipment)> <!ATTLIST Part color CDATA #IMPLIED> <!ELEMENT Key (#PCDATA)> <!ELEMENT Quantity (#PCDATA)> <!ELEMENT ExtendedPrice (#PCDATA)> <!ELEMENT Tax (#PCDATA)> <!ELEMENT Shipment (ShipDate, ShipMode)> <!ELEMENT ShipDate (#PCDATA)> <!ELEMENT ShipMode (#PCDATA)> 20 order_tab order_key customer_name cuctomer_email 1 Müller mü[email protected] part_tab part_key order_key price tax quantity color date mode 1 1 100 16 1 black 20.05.2004 1 5. Zusammenfassung Die XML-Speicherung ist eine wichtige Anforderung an Datenbanksysteme besonders im eCommerce geworden. Die Hersteller von Datenbanksystemen erweitern aufgrund dieser neuen Anforderungen ständig die XML-Funktionalität ihrer Datenbanksysteme. Speicherung von XML-Dokumenten in relationalen Datenbanksystemen ist nur für bestimmte einfach strukturierte XML-Dokumente zu empfehlen. Je komplexer die Hierarchie von XMLDokumenten ist, umso größer werden die Relationenschemas. Daraus folgt aber, dass die Effizienz von Anfragen sinkt. Für XML-Dokumente mit einer komplexen Struktur sind also andere, auf XML zugeschnittene Datenbanksysteme, besser geeignet. Der Firma Oracle bietet zwar vielfältige Möglichkeiten für die objektrelationale Speicherung von XML an, zur relationalen Speicherung steht aber nur das Tool XSU zur Verfügung, welches in seiner Funktionalität sehr eingeschränkt ist. IBM bietet unter Verwendung des DB2-XML-Extenders verschiedene Möglichkeiten um XML zu speichern und Daten aus relationalen Datenbanken in XML darzustellen. Eine gute Lösung für die strukturbasierte Speicherung von XML ist IBM mit der XcollectionSpeicherungsform gelungen. Da benutzerdefiniertes Mapping viele Vorteile gegenüber automatischem Mapping bietet, ist diese flexible Methode nur zu empfehlen. 21 6. Quellenverzeichnis [1] Meike Klettke und Holger Meyer: „XML und Datenbanken – Konzepte, Sprachen und Systeme“; dpunkt.verlag; 2002 [2] Harald Schöning: „XML und Datenbanken“; Carl Hanser Verlag; München/Wien; 2003 [3] Harald Schöning Vortrag: „XML-Speicherung in Datenbanksystemen“ ; http://www.xml-und-datenbanken.de/tutorials/nod02-sys.pdf [4] Informatik-Spektrum vom 24.Dezember 2001 Hauptbeitrag von Jost Enderle: „XML in relationalen Datenbanken“ ; http://www.informatik.uni-ulm.de/dbis/01/dbis/downloads/Ende01.pdf [5] Oliver Braun, Studienarbeit: „XML und relationale Datenbanken – Abbildungsverfahren und deren Implementierung“; http://i10www.ira.uka.de/arbeiten/xml-sql/Ausarbeitung.pdf [6] Dr. C. Türker, Vorlesung WS 200372004: „ XML und Datenbanken“ ; http://www-dbs.inf.ethz.ch/~xml/WS_03/folien/05AbbildungXMLaufDBMS.pdf 22 7. Anhang A) Relationenschema Hotel ll ID Hotelname Kategorie Fax 1 Hotel Hübner 1 0381-543444 ID PLZ Ort Strasse Nummer 1 18119 Warnemünde Seestraße 12 Adresse Telefon ID Telefon 1 0381-54340 1 0381-540 23