Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Marc Düfrain Jochen Rondorf Daniel Schmidt Michael Schmidt Thomas Spinner Studienarbeit zur Erlangung eines Leistungsnachweises im 7. Semester zum Fach Wissensmanagement Stand: Januar 2002 Fachhochschule Bonn-Rhein-Sieg 1 Einleitung 1.1 2 3 4 6 4 Relationale Datenbanksysteme mit XML - Unterstützung 4 Speicherung von XML Dokumenten 5 2.1 Anforderungen an die XML - Speicherung in Datenbanksystemen 5 2.2 Arten von XML Dokumenten: 5 2.3 Dokumentzentriert 5 2.3.1 Volltextindex 2.3.2 Volltextindex und XML Index 6 6 2.4 Semistrukturiert 7 2.5 Datenzentriert 7 2.5.1 Vollständiges Mapping 2.5.2 Individuelles Mapping 8 8 Generieren von XML Dokumenten 8 3.1 Abbilden des vollständigen Inhaltes der Datenbank 8 3.2 Abbilden von Anfrageergebnissen 8 3.3 Einsatz individueller Transformationsvorschriften 9 Theorie 9 4.1 XML - Dokumente 4.2 Document Object Model (DOM) 10 4.3 SAX 11 4.4 Die XML - Datenbank Realisierungsmethoden 12 4.4.1 XDBC und XUpdate: Neue Standards müssen her 12 Mapping 12 4.5.1 Dokumentzentrierte Mappingverfahren 4.5.2 Datenzentrierte Mappingverfahren 13 13 4.6 DTDs von Datenbank-Schemas generieren und umgekehrt 17 4.7 Fazit zu Mapping 18 4.5 5 XML und relationale Datenbanken 9 DB2XML 18 5.1 Einleitung 18 5.2 GUI - Applikation 19 5.2.1 Menüpunkt „DTD“ 5.2.2 Menüpunkt „Database“ 5.2.3 Menüpunkt „XML Attributes“ 5.2.4 Menüpunkt „XML Elements“ 5.2.5 Menüpunkt „Stylesheets“ 5.2.6 Auswahlmöglichkeit „Database Query“ 5.2.7 Menüpunkt „Properties“ 20 20 21 21 21 21 21 5.3 Kommandozeilen-Applikation 22 5.4 Anwendungsbeispiel 22 5.5 Fazit zu DB2XML 23 Microsoft SQL Server 2000 23 6.1 http - Unterstützung 23 6.2 XML Views (XML Sichten) 24 6.3 XDR Schemas 24 Stand Januar 2002 S. 2 von 45 Fachhochschule Bonn-Rhein-Sieg 6.4 6.5 6.6 7 XML und relationale Datenbanken 6.3.1 XDR - Schema mit Anmerkungen 6.3.2 Zuordnungsschema 24 25 XPath 27 6.4.1 Unterstützte Funktionalität 6.4.2 Nicht unterstützte Funktionalität 27 28 Speicherung von XML Dokumenten 28 6.5.1 OPENXML 6.5.2 Bulk Loading XML 28 30 Generierung von XML Dokumenten 33 6.6.1 FOR XML 33 Eine Praxisanwendung 35 7.1 Die Ausgangslage 35 7.2 Die Herausforderung 36 7.3 Der Export der XML - Datei 37 7.4 Der Import der XML-Datei 40 7.5 Die vollständige Prozedur zum Einlesen von Bestellungen 41 8 Gesamtfazit 42 9 Zukunftsaussichten 42 10 Literaturangaben 43 11 Anhang A 45 Stand Januar 2002 S. 3 von 45 Fachhochschule Bonn-Rhein-Sieg 1 XML und relationale Datenbanken Einleitung Datenbanken haben sich im Laufe der Jahre als ideales Werkzeug zur Verwaltung und Pflege großer Datenvolumen entwickelt. Im Zuge der rasanten Verbreitung von neuen XML - Standards stehen Entwickler sehr schnell vor dem Problem, die Vorteile beider Technologien zu nutzen. Dazu hat heute nahezu jedes Datenbank-Produkt und Datenbank-Tool den Begriff "XML" in seine Featureliste aufgenommen. Bestandsaufnahme So umfangreich das Angebot an Lösungen zur Speicherung von XML - Daten ist, so verschiedenartig sind auch die Techniken zu deren Realisierung, so dass man damit ganze Bücher füllen könnte. Generell lassen sich die verwendeten Techniken durch ihre Eigenschaften in folgende drei Kategorien einordnen: o XML - Erweiterte Datenbank (XED) -- der Klassiker. Eine existierende Datenbank, meist ein relationales DBMS, wurde durch den Hersteller oder einen Drittanbieter mit einer XML - Mappingschicht versehen. Diese Mappingschicht verwaltet den lesenden und zum Teil schreibenden Zugriff auf die gespeicherten XML - Daten. Das Mapping der Daten von und nach XML unterscheidet sich bei den angebotenen Lösungen zum Teil sehr stark, und XML - Metadaten und -Struktur können durch das Mapping sogar verloren gehen. Der Zugriff und die Bearbeitung der Daten erfolgt entweder durch standardisierte XML - Technologien (XPath, DOM und SAX) oder mittels SQL. o Native XML - Datenbank (NXD) -- der wohl jüngste Spross in der Entwicklung von XML - Datenbanken. Diese Lösungen sind dadurch gekennzeichnet, von Anfang an für die effektive Speicherung und Bearbeitung von XML - Daten entworfen zu sein. Der Zugriff und die Bearbeitung der Daten erfolgt ausschließlich durch XML Technologien wie XPath, DOM und SAX. Die zugrunde liegende Datenbank erhält dabei die Struktur und die Metadaten der XML - Dokumente vollständig. In die Kategorie der NXDs fallen das unter GPL entwickelte dbXML sowie die Produkte Tamino und X-Hive/DB . o Hybride XML - Datenbank (HXD) -- interessante Nischenlösungen wie die OzoneDB und Excelon . Sie lassen sich nicht eindeutig in die vorgenannten Kategorien einordnen, gehören sogar teilweise zu beiden. Solche Lösungen können je nach aktuellen Applikationsanforderungen als XED oder NXD verwendet werden. o Der weitere Teil wird sich ausschließlich mit relationalen Datenbanken beschäftigen. 1.1 Relationale Datenbanksysteme mit XML - Unterstützung Alle großen relationalen DBMS bieten inzwischen Möglichkeiten für die Speicherung von XML - Dokumenten. Hier gibt es zwei wesentliche Ansätze. Der erste Ansatz ist eine zerlegende Abbildung von XML – Dokumenten auf relationale Datenstrukturen, d.h. aus einem XML - Dokument werden ein oder mehrere Zeilen in einer oder mehreren Tabellen, wobei die Tabellen eine relationale Modellierung der Anwendungswelt darstellen. Das hat den Vorteil, dass man auf Daten, die als XML geliefert werden, auch mit rein relationalen Mitteln zugreifen kann, und dass umgekehrt Daten, die in relationalen Datenbanken vorliegen, in ein XML - Format konvertiert werden können. Eine allgemeingültige (generische) Abbildung, die z.B. aus den Namen von XML - Elementen entsprechende Tabellennamen ableitet, stößt schnell an ihre Grenzen. Daher ist normalerweise eine explizite Abbildungsvorschrift nötig. Dieser Abbildungsansatz ist im allgemeinen nicht verlustfrei: Er hat seine Grenzen bei XML - Dokumenten mit mixed content, Kommentaren oder processing instructions, weil diese sich mit den AbbilStand Januar 2002 S. 4 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken dungsvorschriften nicht erfassen lassen (Kommentare z.B. können an beliebigen Stellen des Dokumentes auftreten und sich im XML Schema nicht beschrieben). Deshalb wird dieser Ansatz hauptsächlich bei eher datenorientierten XML - Dokumenten angewendet. 2 Speicherung von XML Dokumenten 2.1 Anforderungen an die XML - Speicherung in Datenbanksystemen Neben den allgemeinen Forderungen an ein Datenbankmanagementsystem (DBMS), wie z.B. transaktionsorientierte Verarbeitung (ACID), Datenschutz und effiziente Anfrageverarbeitung, gibt es für die XML - Speicherung spezielle Anforderungen. XML - Dokumente werden oft charakterisiert als datenorientiert oder textorientiert. Die datenorientierten XML - Dokumente (z.B. Preislisten) zeichnen sich durch eine regelmäßige Struktur aus, in der Reihenfolge oft keine Rolle spielt. In textorientierten XML - Dokumenten ist Reihenfolge oft sehr wichtig, und auch mixed content, d.h. Elemente, die als Inhalt sowohl Elemente als auch Text haben, ist typisch. XML - Dokumente haben oft sowohl datenorientierte als auch textorientierte Anteile. Daraus ergibt sich für die Anfragemöglichkeiten, dass man sowohl nach (z.B. numerischen) Werten im Dokument fragen möchte (z.B. ist der Preis höher als ein bestimmter Wert?) als auch nach Textanteilen (welche Dokumente enthalten das Wort »Datenbanksystem«?). XML - Dokumente können ein Schema haben, das ihre Struktur beschreibt, aber dieses ist optional. Ein solches Schema beschreibt u.a. die erlaubte Verschachtelung von XML - Elementen ineinander und gibt auch an, ob ein Element mehrfach vorkommen oder fehlen darf. Insbesondere bei Dokumenten mit optionalen Anteilen oder XML - Dokumenten unbekannten Schemas ist daher auch eine strukturbasierte Anfrage wichtig (welche XML -Dokumente enthalten das Element »Telefonnummer« mehrfach? ). Neben diesen Anfragemöglichkeiten ergeben sich aus der im Vergleich zu relationalen Tabellen komplexen Struktur von XML - Dokumenten weitere Anforderungen, wie z.B. selektive Änderung nur von Dokumentteilen oder gezielter Datenschutz (Autorisierung) für ausgewählte Dokumentteile. Außer diesen neuen Anforderungen gelten natürlich alle Anforderungen an ein allgemeines DBMS auch für den Fall der XML - Speicherung. 2.2 Arten von XML Dokumenten: o dokumentzentriert o semistrukturiert o datenzentriert 2.3 Dokumentzentriert Dokumentzentrierte XML Dokumente können in Dateien oder BLOBS (Binary Long Objects) oder CLOBS (Charcter Large Object) einer Datenbank gespeichert werden. Die Speicherung in BLOBS wird hauptsächlich für große dokumentzentrierte XML Dokumente vorgenommen. Da die Struktur des XML - Dokumentes dem relationalen DBMS unbekannt ist, wird dieser Ansatz auch opak genannt. Spezielle Funktionen, die in SQL - Anfragen eingebettet werden können, dienen zur Suche in diesen Dokumenten. Die Struktur des XML - Dokumentes ist für das SQL -System nicht sichtbar. Dadurch ist z.B. der Datenschutz für einzelne Dokumentteile hierbei schwierig. Auch eine datenorientierte Indizierung ist nicht direkt möglich. DB2 von IBM verwendet hier z.B. eigene relationale Tabellen, in denen Werte des XML - Dokumentes dupliziert und dann indiziert werden. Stand Januar 2002 S. 5 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Es wird für den Zugriff ein Index angelegt. Man unterscheidet hierbei zwischen zwei Strategien: 2.3.1 Volltextindex Dieser Index verfolgt folgendes Prinzip: Für die in den Dokumenten vorkommenden Stichworte wird ein Index gepflegt, der die Abbildungen zwischen Stichworten und Dokumenten speichert. 2.3.2 o Der Volltextindex besitzt die hier aufgeführten Eigenschaften: o es ist keine Schemabeschreibung erforderlich o die Dokumente bleiben im Original erhalten o der Dokumentcharakter ist dokumentzentriert o Anfragen erfolgen über die Text – Entender - Funktionalität o Es ist bei der Ausgabe kein Parsen notwendig Volltextindex und XML Index Neben den angesprochenen Funktionen des Volltextindex erweitert der XML Index die Abbildungen um Relationen zwischen den Elementen und Attributen. So wird beim XML Index nicht nur der Wert eines Attributes indiziert, sondern auch die Elementbezeichnung. Man unterscheidet hierbei zwischen einem Key - Word Index und einem Element-Index: Stand Januar 2002 S. 6 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Eigenschaften des kombinierten Volltext- und XML Index: o es ist keine Schemabeschreibung erforderlich o die Dokumente bleiben im Original erhalten o der Dokumentcharakter ist dokumentzentriert o Anfragen erfolgen über die Text – Entender - Funktionalität o Es ist bei der Ausgabe kein Parsen notwendig 2.4 Semistrukturiert Bei semistrukturierten XML Dokumenten wie die Datenstruktur gespeichert. Dieses kann verschiedenen Strukturen festgehalten werden. 2.5 Datenzentriert Bei datenzentrierte XML Dokumenten wird eine strukturelle Speicherung in Datenbanken vorgenommen. Für die Abbildung von Strukturen ist es notwendig eine DTD oder Schema zu besitzen. Die Anfragen an die Datenbanken besitzen meistens SQL - Funktionalitäten und sind row - set orientiert (zeilenorientiert). Stand Januar 2002 S. 7 von 45 Fachhochschule Bonn-Rhein-Sieg 2.5.1 XML und relationale Datenbanken Vollständiges Mapping Eigenschaften bei der Abbildung der XML Struktur auf eine Datenbank: o es ist eine Schemabeschreibung erforderlich o die Dokumente bleiben nicht Original erhalten o der Dokumentcharakter ist datenzentriert o Anfragen erfolgen über SQL oder Transformationen von XML Anfragen o 2.5.2 Eine Rekonstruktion von Dokumenten ist nur teilweise möglich Individuelles Mapping Eigenschaften bei der Abbildung der XML Struktur auf eine Datenbank: 3 o es ist eine Schemabeschreibung erforderlich o die Dokumente bleiben nicht Original erhalten o der Dokumentcharakter ist datenzentriert o Anfragen erfolgen über SQL oder Transformationen von XML Anfragen o Eine Rekonstruktion von Dokumenten nicht möglich o Es sind zwingend Mapping - Vorschriften notwendig Generieren von XML Dokumenten 3.1 Abbilden des vollständigen Inhaltes der Datenbank Eine relationale Datenbank wird als eine dreistufige Hierarchie von zwischen Datenbank – Relation – Attribut angesehen. Eigenschaften bei der vollständigen Abbildung Datenbankinhaltes: o Die Ausgabe der Datenbank ist vollständig o Es sind keine Informationen erforderlich o Es gibt kein variables Ausgabeformat o Datentypen werden durch DTDs oder XML Schema definiert o Speicherung von Schlüsseln/Fremdschlüsseln ist über ID/IDREF implementiert o Parser müssen DTD - Erweiterungen auswerten 3.2 Abbilden von Anfrageergebnissen Anfragen an das Datenbanksystem erfolgen meist über SQL oder SQL ähnliche Befehle. Die Antwort der Datenbank ist ein XML Dokument. Eigenschaften des Einsatzes von Datenbankanfragen: o Die Ausgabe der Datenbank erfolgt in Teilen o Es sind Informationen erforderlich o Es gibt kein variables Ausgabeformat o Datentypen werden durch DTDs oder XML Schema definiert o Speicherung von Schlüsseln/Fremdschlüsseln ist über ID/IDREF implementiert Stand Januar 2002 S. 8 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 3.3 Einsatz individueller Transformationsvorschriften Bei Einsatz individueller Transformationsregeln teilt man diese meist in zwei Teilbereiche auf. Zum einen in SQL - Anfragen zur Auswahl relevanter Daten und zum anderen in XML QL oder XQuery zur Darstellung der Syntax des Zielformates. Eigenschaften des Einsatzes von individuellen Transformationsregeln: 4 o Die Ausgabe der Datenbank erfolgt vollständig oder in Teilen o Es sind Informationen erforderlich - Datenbankanfrage o Es gibt ein variables Ausgabeformat o Datentypen werden durch DTDs oder XML Schema definiert o Speicherung von Schlüsseln/Fremdschlüsseln ist über ID/IDREF implementiert Theorie 4.1 XML - Dokumente Bei der Extensible Markup Language, abgekürzt XML, handelt es sich um eine eingeschränkte Form des SGML, der Standard Generalized Markup Language, auf der zum Beispiel auch HTML beruht. Der Unterschied zwischen HTML und XML ist, dass HTML universelle Möglichkeiten zur Darstellung von Daten besitzt, wogegen XML universelle Möglichkeiten bietet, um mit Daten direkt zu arbeiten. XML - Dokumente unterteilen sich in zwei Bereiche, den Initialisierungsteil und den Datenteil. Der erste Teil dient der Einordnung des Dokuments. Es werden Angaben über die Art des Dokuments, die zugrunde liegende XML - Version oder die Spezifikation gemacht. Der zweite Teil enthält den eigentlichen Inhalt des Dokuments. Dieser wird durch Elemente, sogenannte Tags, in Speicherungseinheiten unterteilt, umschlossen und dadurch strukturiert. Die Tags können in dem XML - Dokument oder in einem eigenständigen Dokument selber über eine Document Type Definition (DTD) definiert werden. Hier wird die Position der Tags, Attribute und Elemente und deren Verbindung untereinander im Dokument festgelegt. In den DTDs werden also die Metadaten zu den verarbeitenden XML Dokumenten gespeichert. Eine Erweiterung der DTD ist das XML - Schema, welches Stand Januar 2002 S. 9 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken eine differenziertere Typisierung der Elemente und Einschränkungen der Wertebereiche erlaubt. Weiterhin unterscheidet die W3C XML - Recommendation [XML Rec98] zwischen wohlgeformten (wellformed) und gültigen (valid) XML - Dokumenten. Ein XML - Dokument ist wohlgeformt, wenn es o ein oder mehrere Elemente besitzt o und davon genau eins das Wurzelement, das alle anderen Elemente einschließt. o Die Schachtelungsregel muss eingehalten werden: Wenn das "Start" - Tag im Inneren eines anderen Tags liegt, muss das "Ende" - Tag auch hier liegen. o Attributwerte müssen in Hochkommas oder Anführungszeichen stehen und explizit deklariert werden. Bei den hier angeführten Punkten handelt es sich um eine Auswahl von Kriterien, die für ein wohlgeformtes Dokument gelten müssen. Alle Kriterien sind in der XML 1.0 Spezifikation nachzulesen [XML Rec98]. Um ein gültiges XML - Dokument zu erhalten, muss zusätzlich eine DTD oder ein XML - Schema vorhanden sein, die der XML - Spezifikation genügen. 4.2 Document Object Model (DOM) Im folgenden dieser Studienarbeit ist öfters von einer DOM - Struktur die Rede. In diesem Kapitel wird kurz auf DOM eingegangen. Im nächsten wird es mit dem SAX - Projekt verglichen. Nach Definition des W3C ist das Document Object Model “a platform- and language-neutral interface that will allow programs and scripts to dynamically access and update the content, structure and style of documents. The document can be further processed and the results of that processing can be incorporated back into the presented page.” [DOM01] Die DOM - Gruppe des W3C-Konsortiums hatte sich seiner Zeit das Ziel gesetzt, eine Programmierschnittstelle - bestehend aus Objekten und Methoden - für XML und HTML zu schaffen. DOM ist in drei Teile aufgeteilt, den Core -, HTML - und den XML Teil. Der Core - Teil stellt eine Reihe von Objekten, die jedes strukturierte Dokument repräsentieren können, zur Verfügung. Die Schnittstelle ist in der Lage, jedes HTMLund XML - Dokument zu repräsentieren. Der Inhalt eines Dokuments kann über die Core - Schnittstelle, die kompakt ist und mit wenig Design daher kommt, verändert werden. Für HTML - und XML - Dateien ist es zwar möglich, via Core - DOM auf den Inhalt zuzugreifen; DOM stellt aber mit den HTML- und XML - Schnittstellen einen einfacheren und direkteren Zugriff auf höherem Level für diese Dateiformate bereit. Hierbei wird die Core - Spezifikation streng eingehalten. Die DOM - Arbeitsgruppe wird durch namhafte Industrievertreter unterstützt, darunter ArborText, IBM, Inso EPS, JavaSoft, Microsoft, Netscape, Novell, die Object Management Group, SoftQuad, Sun Microsystems, Texcel, und das W3C. Chef der W3C-DOM-Arbeitsgruppe ist Lauren Wood von SoftQuad. Software-Firmen können über die DOM-API Zugriff auf ihre meist properietären Datenstrukturen gewähren, um Inhaltverantwortliche zu unterstützen, produktabhängigen Datenzugang zu vermeiden und die Zusammenarbeit über das Web zu motivieren. Stand Januar 2002 S. 10 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken DOM besteht aus drei Leveln: o Level 1 konzentriert sich auf die Core -, HTML - und XML - Dokumentenmodelle. Es beinhaltet Funktionalität für die Dokumentnavigation und –manipulation. o Level 2 umfasst ein Stylesheet - Objektmodell und definiert Funktionalität zur Manipulation der Format-Informationen (Styles) innerhalb eines Dokuments. Darüber hinaus ermöglicht es Sprünge zu verschiedenen Stellen im Dokument, definiert ein Ereignismodell und unterstützt XML - Namensräume. o Level 3 (in Entwicklungsphase) ist verantwortlich für das Öffnen und Speichern von Dokumenten. Über Inhaltsmodelle (etwa DTDs und XML - Schemata) kann die Gültigkeit von Dokumenten nachgewiesen werden. Formate und Ansichten werden ebenso unterstützt wie Schlüsselereignisse und Ereignisgruppen. o Weitere Level sind in Planung. Diese könnten z.B. im Bereich Windowsysteme (GUI), Benutzerinteraktion, Sicherheit, Abfragesprache-Schnittstelle und Multithreading inklusive Synchronisation weitere Funktionalität bieten. 4.3 SAX Als Alternative zu DOM sei hier noch kurz das SAX - Projekt erwähnt. “SAX is the Simple API for XML, originally a Java-only API. SAX was the first widely adopted API for XML in Java, and is a ‘de facto’ standard. The current version is SAX 2.0, and there are versions for several programming language environments other than Java.” [SAX01] SAX arbeitet im Gegensatz zum baumstruktur-basierten DOM event - basiert. Ein kurzes Beispiel verdeutlicht den Unterschied: Ein XML - Dokument sieht folgendermaßen aus: <?xml version="1.0"?> <doc> <para>Hello, world!</para> </doc> Ein event - basiertes XML-API (wie SAX) wandelt die Struktur des Dokuments in lineare Events (Ereignisse) um: start document start element: doc start element: para characters: Hello, world! end element: para end element: doc end document Das Suchen eines bestimmten Schlüsselwortes in großen XML - Dateien kann durch dieses Verfahren erheblich schneller und ressourcenschonender vonstatten gehen. Es arbeitet stream - basiert und kann daher auch in nur teilweise eingelesenen Dateien Ergebnisse hervor bringen. Dafür geht die Struktur der ineinander verschachtelten Elemente verloren. Welche Technologie im Allgemeinen vorzuziehen ist, lässt sich nicht sagen. Im Einzelfall sind die Vor- und Nachteile jeder Technologie gegeneinander abzuwägen. Stand Januar 2002 S. 11 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 4.4 Die XML - Datenbank Realisierungsmethoden So umfangreich das Angebot an Lösungen zur Speicherung von XML - Daten ist, so verschiedenartig sind auch die Techniken zu deren Realisierung, so dass man damit ganze Bücher füllen könnte. Generell lassen sich die verwendeten Techniken durch ihre Eigenschaften in folgende drei schon beschriebene Kategorien einordnen: 4.4.1 o XML - Erweiterte Datenbank (XED) o Native XML - Datenbank (NXD) o Hybride XML - Datenbank (HXD) XDBC und XUpdate: Neue Standards müssen her Allen angebotenen XML - Datenbanklösungen ist dabei jedoch ein Problem gemein: Anerkannte Standards wie SQL und ODBC/JDBC, bestens bekannt aus der "relationalen Welt", gibt es im Bereich XML - Datenbanken nicht. Jeder Hersteller kocht hier leider noch sein eigenes Süppchen und bietet exklusiv properietäre Lösungen an. Dieses Problem haben einige Firmen und unabhängige Entwickler erkannt und aus diesem Grund die XML:DB-Initiative gegründet, die sich explizit mit der Entwicklung neuer XML - Datenbankstandards beschäftigt. Als wichtigstes Projekt haben die Mitglieder von XML:DB die Entwicklung einer standardisierten Programmierschnittstelle (API) für XML - Datenbanken gestartet. Als Pendant zu ODBC/JDBC soll XDBC (XML Database Connectivity) in Zukunft die Entwicklung von Applikationen auf Basis von XML - Datenbanken erleichtern. Diese einheitliche API soll es den Entwicklern ermöglichen, die verwendete XML - Datenbank bei Bedarf durch eine andere XDBC - konforme Lösung zu ersetzen. Die Mitglieder der entsprechenden XML:DB-Arbeitsgruppe haben bereits erste Vorschläge für die API unterbreitet, die durch die Community diskutiert und verifiziert werden. Ein weiterer Schwerpunkt der XML:DB-Initiative liegt in der Entwicklung einer XML - UpdateSprache, dem Xupdate - Projekt. Denn jeder Programmierer, der schon einmal versucht hat, XML - Daten in einer Datenbank zu bearbeiten, ist bisher dazu gezwungen, die DOM API zu benutzen. Hier soll die vorgelegte Xupdate - Spezifikation eine praktische, dem SQL Update ähnliche, Lösung bieten. 4.5 Mapping Beim Mapping handelt es sich um die Abbildung von XML - Daten auf eine relationale DB und umgekehrt von einer DB in ein XML - Dokument. Um aus Daten, die in einer relationalen DB gespeichert sind, ein XML - Dokument zu generieren, bedarf es eines Algorithmus, der die Strukturinformationen (DTD oder XML - Schema) aus den Daten extrahiert. Die meisten hierfür gebräuchlichen Algorithmen nutzen in Anlehnung an das DOM die Graphenstruktur der XML - Dokumente. Um andererseits XML - Dokumente effizient zu speichern und auch wieder abfragen zu können, muss das DBMS die innere Struktur der gespeicherten Dokumente kennen. Diese Struktur ist in der DTD oder im XML - Schema definiert. Allerdings verlangt der XML - Standard, dass Dokumente auch ohne Schemadefinition verarbeitet werden müssen. Daher muss ein DBMS auch in der Lage sein, ein XML - Dokument ohne DTD oder Schema zu speichern. Weiterhin muss die Möglichkeit bestehen, neue Elemente zu Dokumenten hinzuzufügen, ohne die bestehende Struktur zu ändern. Probleme können auch auftreten, wenn ein zu speicherndes Element nicht durch die DTD bekannt ist. Dann muss entschieden werden, ob dynamisch ein neues SQL - Schema erzeugt und die DB reorganisiert wird, oder ob das Dokument ganzheitlich in Form einer Textdatei gespeichert werden soll.[DAUM2000] Stand Januar 2002 S. 12 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Bei diesem Ablegen von XML - Dokumenten in Datenbanken ist die Unterscheidung von daten-zentrierten und dokument-zentrierten Dateien von besonderer Bedeutung, da RDBS wie SQL für Abfragen auf dokument-zentrierte Dokumente schlecht geeignet sind. 4.5.1 Dokumentzentrierte Mappingverfahren Um XML - Daten des dokumenten-zentrierten Typs in Relationen zu transformieren gibt es folgenden Ansatz: die Speicherung von einem kompletten XML - Dokument wird in einer einzigen Spalte einer Tabelle vorgenommen. Das Dokument kann als Binary Large Object (BLOB) abgelegt werden. Die Nachteile sind hier die Probleme bei Abfragen auf dem gespeicherten Dokument und bei Einfügeoperationen in das Dokument. Weiterhin ist es schwerer, neue Dokumente aus bestehenden zu erzeugen. 4.5.2 Datenzentrierte Mappingverfahren Dieser Abschnitt befasst sich mit der Frage, wie datenzentrierte XML - Dokumente und relationale Datenbankstrukturen zusammengeführt werden können. Hierbei gibt es zwei grundlegend unterschiedliche Mapping - Verfahren: das "vorlagenbasierte Mapping Verfahren" (Template - Driven Mapping) ermöglicht lediglich den Transfer von Informationen aus Datenbankinhalten in XML - Dokumente. Dagegen transferiert das "modellbasierte Verfahren" (Model - Driven Mapping) Informationen sowohl von einer Datenbank in ein XML - Dokument als auch umgekehrt. 4.5.2.1 Das vorlagenbasierte Verfahren Beim vorlagenbasierten Verfahren findet kein vordefiniertes, nach einem bestimmten Algorithmus arbeitendes Mapping statt, sondern SQL Statements werden in XML Templates (Schablonen) eingebaut. Das folgende Beispiel aus [Bourret2000] ist eine Möglichkeit, eine Anfrage an die Datenbank in ein XML Template mit dem Tag <SelectStmt> einzubetten. <?xml version="1.0"?> <FlightInfo> <Intro>The following flights have available seats:</Intro> <SelectStmt>SELECT Airline, FltNumber, Depart, Arrive Flights</SelectStmt> <Conclude>We hope one of these meets your needs</Conclude> </FlightInfo> FROM Hierbei ist eine sogenannte Middelware für den Datenaustausch zwischen dem XML Dokument und der DB zuständig. Das von der Middleware zurückgelieferte Ergebnis könnte folgendermaßen aussehen: <?xml version="1.0"?> <FlightInfo> <Intro>The following flights have available seats:</Intro> <Flights> <Row> <Airline>ACME</Airline> <FltNumber>123</FltNumber> <Depart>Dec 12, 1998 13:43</Depart> <Arrive>Dec 13, 1998 01:21</Arrive> </Row> ... </Flights> <Conclude>We hope one of these meets your needs</Conclude> </FlightInfo> Stand Januar 2002 S. 13 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg Templates werden also eingesetzt, um spezielle Informationen, zum Beispiel aus einer SQL - Datenbank in ein XML - Dokument zu übertragen. Weiterhin bietet das vorlagenbasierte Mapping in Verbindung mit XML - Stylesheets ein sehr einfaches Verfahren, um dynamisch Webseiten mit Inhalten aus relationalen Datenbanken darzustellen. Da dieser Ansatz aber unidirektional ist, gibt es keine Möglichkeit der Übertragung von XML - Daten zurück in die Datenbank. Folglich eignet sich dieser Ansatz nicht zur Datenverarbeitung sondern lediglich zur Datenpräsentation. 4.5.2.2 Das modellbasierte Verfahren Bei diesem Verfahren wird dem Mapping ein Datenmodel zugrunde gelegt, wodurch man Flexibilität verliert, da das Datenmodell die auszutauschenden Datenstrukturen vorher definiert. Kommt es zu einem Datenbankupdate oder soll die Struktur der ausgetauschten Daten verändert werden, muss das zugrunde liegende Mapping Model verändert oder angepasst werden und gegebenenfalls sogar das Mapping neu durchgeführt werden. Man erreicht Einfachheit, da das Mapping auf einem konkreten Model basiert und damit aufwendige Transformationsschritte erspart bleiben. Zusätzlich ist bei einem konstanten oder sich selten ändernden Datenbestand das Mapping selbst nur gelegentlich durchzuführen. Beim modellbasierten Mapping gibt es zwei gängige Verfahren: das Tabellen-Model (Tabel Model) und das Objekt Modell (Object Model), das die Basis für das objektrelationale Modell bildet. 4.5.2.2.1 Das Tabellen-Modell Beim "Table-based Mapping" handelt es sich um ein einfaches und somit auch wenig flexibles Verfahren. Es können mit diesem Modell nur XML - Dokumente in einer relationalen Datenbank abgebildet werden, die eine maximale Tiefe von drei Verschachtelungsebenen haben. Das folgende Beispiel nach [Bourret01] zeigt die Zuordnung der Struktur des XML Dokuments zu den Spalten und deren Inhalt der relationalen Datenbank. XML - Dokument relationalen Datenbank <A> <B> <C>ccc</C> <D>ddd</D> <E>eee</E> </B> <B> <C>fff</C> <D>ggg</D> <E>hhh</E> </B> </A> <=> C --... ccc fff ... Table A ------D --... ddd ggg ... E --... eee hhh ... Stand Januar 2002 S. 14 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Somit sieht die Struktur des XML - Dokumentes aus Sicht der relationalen Datenbank wie folgt aus: <Table> <Row_1> <Column_1>...</Column_1> ... <Column_n>...</Column_n> </Row_1> ... <Row_n> <Column_1>...</Column_1> ... <Column_n>...</Column_n> </Row_n> </Table> Falls mehrere Tabellen in einem XML - Dokument abgebildet werden sollen, können diese durch eine weitere Ebene (hier: <Tables>) zusammen gefasst werden: <Tables> <Table_1> <Row> <Column_1>...</Column_1> ... <Column_n>...</Column_n> </Row> ... </Table_1> ... <Table_n> <Row> <Column_1>...</Column_1> ... <Column_m>...</Column_m> </Row> ... </Table_n> </Tables> Für den Fall, dass nicht der vollständige Tabelleninhalt nach XML transferiert werden soll, kann der Inhalt des table - Tags auch als Ergebnis einer Anfrage (resultset) an die DB interpretiert werden. Sind in dem XML - Dokument nur unvollständige Datensätze, also nicht alle Spalten einer Tabelle enthalten, handelt es sich um eine spezielle Sicht (view) auf die Datenbank. Die Abbildung der XML - Elemente erfolgt also auf MetaElemente der Datenbank, wie Tabellen, Spalten und Views. Die Zuordnung der XML Elemente zu den entsprechenden Elementen der Datenbank geschieht meist über ihre konkreten Namen oder über zusätzlich vereinbarte Attribute. Der eigentliche Vorteil dieses Mappingsverfahrens ist seine Einfachheit und die damit verbundene leichte Implementierung. Ein weiterer Vorteil ist der schnelle und effiziente Datenaustausch zwischen mehreren relationalen Datenbanken. Der Nachteil dieses Modells ist, dass die Struktur nicht abgebildet wird, sondern nur die Elemente übergeben werden. Weiterhin gehen die Dokumenteninformationen (DTDs) die Kommentare und die Bearbeitungsanweisungen verloren und es können nur XML - Dokumente mit einer Tiefe von maximal 3 Ebenen verarbeitet werden. Stand Januar 2002 S. 15 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg 4.5.2.2.2 Objekt-relationale Mapping Beim objekt-relationalen Mapping werden die Daten auf korrespondierende Objekte abgebildet, die wiederum zu hierarchischen Baumstrukturen angeordnet werden. Auf diese Weise kann z.B. aus dem folgenden XML - Fragment ein sogenannter datenspezifischer Objektbaum generiert werden. (nach [Klein01]) <Orders> <SalesOrder SONumber="12345"> <Customer CustNumber="543"> ... </Customer> <Line LineNumber="1"> <Product Name="Cherries"> ... </Product> <Quantity Unit="ton">2</Quantity> </Line> </SalesOrder> </Orders> Bei dieser Abbildung werden die Elemente zu Objekten und die Subelemente und die Attribute werden zu Eigenschaften von Objekten. Hier im Beispiel an einem Ausschnitt des vorangegangenen Quelltextes: Komplexe Elemente <Line LineNumber="1"> <Product name="Cherries"> … </Product> <Quantity Unit="ton"> 2 </Quantity> </Line> werden Objekte Subelemente und Attribute <Line LineNumber="1"> <Product Name="Cherries"> … </Product> <Quantity Unit="ton> 2 </Quantity> </Line> werden Eigenschaften von Objekten Das so entstandene Modell kann dann direkt auf eine objektorientierte oder eine hierarchische Datenbank abgebildet werden. Der hierzu gehörige daten-spezifische Objektbaum sieht wie folgt aus: SalesOrder Customer Line Product Stand Januar 2002 S. 16 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg Sollen die Daten auf eine relationale Datenbank abgebildet werden, ist schließlich noch ein objekt-relationales Mapping durchzuführen. Dabei kann entweder eine eindeutige Eigenschaft eines Objekts als Primärschlüssel dienen, oder ein neues Attribut wird speziell zu diesem Zweck definiert. Im oberen Beispiel wird also die Eigenschaft soNumber in der zugehörigen Relation SalesOrder als Primärschlüssel definiert und in der entsprechenden Relation das Subelement Line als Fremdschlüssel aufgenommen. SalesOrder SoNumber 12345 ... Line Line 1 ... LineNumber ... 1 ... ProductName cherries ... ... ... ... Das objekt-relationale Mapping besteht also aus zwei Bereichen. Zuerst werden die XML - Strukturinformationen (DTD oder Schema) in ein Objektschema gemappt. Danach wird dieses Schema in das Datenbankschema umgewandelt. Diese beiden Schritte werden von den meisten Datenbanksystemen für XML zu einem einzigen Schritt zusammengeführt. Zur Veranschaulichung dieses Verfahrens ist hier ein Beispiele nach [Bourret01] aufgeführt: XML ============= Objects ============ <A> object B = C = D = } <B>bbb</B> <C>ccc</C> <D>ddd</D> </A> <=> A { "bbb" "ccc" "ddd" <=> Tables =============== Table A ------B C D ------... ... ... bbb ccc ddd ... ... ... Dieses Verfahren hat den Vorteil, dass nahezu alle Arten von XML - Dokumenten verarbeitet werden können und dass dabei die logische Struktur der Daten für jede Verarbeitungsrichtung erhalten bleibt. Das objekt-relationale Modell wird von vielen Datenbanksystemen, wie zum Beispiel BM DB2, Oracle8i und Microsoft SQL Server, für die Speicherung von XML genutzt. 4.6 DTDs von Datenbank-Schemas generieren und umgekehrt Diese Funktionalität ermöglicht die Speicherung und Rückgewinnung strukturierter XML - Dokumente, die typischerweise in Verbindung mit Strukturinformationen (DTDs) aufgebaut sind. Dabei wird die DTD für die Abbildung der hierarchischen Struktur und der Einbettung der XML - Elemente und Attribute auf relationale Schemata herangezogen, oder die Struktur der Relationen der DB wird zum Generieren der DTD verwendet. Diese Abbildungen können bei einigen Systemen auch automatisch erfolgen, indem sie entweder aus einer gegebenen DTD ein relationales Schema generieren, oder umgekehrt aus einem gegebenen Schema eine DTD für die zu verarbeitenden XML - Dokumente ableiten (wie zum Beispiel bei: Oracle8i). Genauso kann eine Abbildung zwischen den benutzerdefinierten Tabellen und XML – Elementen auch manuell vorgenommen werden (wie zum Beispiel bei: DB2XML Extender von IBM). Stand Januar 2002 S. 17 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 4.7 Fazit zu Mapping Die Entwicklung von Modellen und Algorithmen für das Mapping auf relationale Datenbanken ist noch nicht abgeschlossen. Jedes der einzelnen Modelle macht zum Teil große Abstriche und lässt weitergehende Fragen offen. Zum Beispiel ist unklar, wie die durch Vereinfachungsregeln verlorengegangenen Strukturinformationen der DTDs wieder zurückgewonnen werden können, oder wie dokumentzentrierte XML - Dokumente für Abfragen und Aktualisierungen gut in einer relationalen Datenbank gespeichert werden können. Weiterhin darf der Aufwand für das Mapping der Daten nicht unterschätzt werden, und bei unstrukturierten Dokumenten muss auf eine effiziente Speicherung der Elemente in Tabellen verzichtet werden. 5 DB2XML 5.1 Einleitung “DB2XML is a tool for transforming data from relational databases into Extensible Markup Language (XML) documents.” [DB2XML99]. Die Homepage des Autors Volker Turau umschreibt das 100%ig in Java implementierte DB2XML als Tool, um Daten von relationalen Datenbanken in Extensible Markup Language (XML) Dokumente zu transformieren. DB2XML deckt drei Hauptfunktionen ab, nämlich das Transformieren von Ergebnissen aus Datenbankabfragen oder gesamten Datenbanken in XML - Dokumente oder HTML-Dokumente (über XSLT - Stylesheets), die Auslieferung von Attributangaben, die Charakteristika der Daten (insbesondere Metadaten) beschreiben und die einfache Integration von XSLT – Stylesheet Prozessoren. Dabei kann es benutzt werden als: o Standalone - Tool (mit GUI oder Kommandozeile), o Servlet, um dynamisch XML - Dokumente zu generieren oder o Java-Bibliothek (DB2XML API) Die generierten XML - Daten sind als W3C-DOM-Objekt oder in einer DB2XMLspezifischen Datenstruktur verfügbar. Auf diese Objekte kann via Stream oder ByteArray zugegriffen werden. DB2XML besitzt eine benutzerfreundliche grafische Benutzerschnittstelle (GUI = graphical user interface). Der Zugriff auf Datenbanken erfolgt über JDBC - Treiber. Es benötigt JDK 1.1.x und ein Datenbanksystem mit verfügbarem JDBC - Treiber (oder einem ODBC - Treiber mit JDBC – ODBC - Brücke). Es wurde mit verschiedenen Datenbanken getestet, darunter Oracle, Microsoft Access + SQL Server, InstantDB, DB2 und MySQL. Eine Liste der verfügbaren JDBC - Treiber ist auf [JDBC01] verfügbar. DB2XML ist von der Free Software Foundation (FSF) unter der GNU General Public License veröffentlicht worden. Das heißt, das es jedem erlaubt ist, veränderte bzw. erweiterte Kopien der Software zu verbreiten, ohne dabei die Lizenzbestimmungen zu verändern. Testinstallation Ich habe mich entschieden, DB2XML in Verbindung mit einer MySQL - Datenbank unter dem Betriebssystem Linux zu installieren, um es zu testen. Als JDBC - Treiber fungierte MM - MySQL von Mark Matthews. Dieser wird sowohl auf [JDBC01] als auch [MYSQL01] als JDBC - Treiber empfohlen. Hiermit ist sicher gestellt, dass es sich bei Stand Januar 2002 S. 18 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken allen benötigten Komponenten um OpenSource - Projekte handelt und es jedem frei steht, dieses System ohne kommerzielle Software nachzubauen. Hier noch einmal die benutzte Software mit Versionsnummern: o Linux (Kernel 2.2.16, Mandrake) o Java J2RE (1.3.1) o DB2XML (1.4) o MySQL (3.23.41) o MM - MySQL (2.0.7) Die Jar - Files von DB2XML und des MM - MySQL-Treibers sind zur Java – CLASSPATH - Variable hinzuzufügen und damit ist die Installation abgeschlossen. Probleme beim Installieren und Konfigurieren traten nur beim Versuch eines Verbindungsaufbau über JDBC auf die MySQL - Datenbank auf, weil Java keine Unix Domain Sockets kennt. Mark Matthews ist das Problem bekannt und gibt dazu in seiner MM – MySQL - Dokumentation (siehe Anhang A) einen Lösungsvorschlag, den ich aber auf meinem Linux - System trotz intensiver Fehlerbehebungsversuche nicht zufriedenstellend anwenden konnte. Es stellte sich heraus, dass das Rechtesystem nicht Hostnamen-basiert möglich ist. Als funktionierende Lösung ist es daher notwendig, für den jeweiligen Benutzer, der lesenden Zugriff auf die für ihn relevanten Datenbankteile erhalten soll, im Feld „host“ das %-Zeichen als Joker zu verwenden. Als absolute Notlösung und unter sicherheitstechnischen Gesichtspunkten kaum zu vertreten, ist es auch möglich, den MySQL - Server mit der Option ‚—skip–grant-tables’ zu starten. Hierbei wird das Privileges-System von MySQL ausgeschaltet und jeder Benutzer hat Zugang zu allen Datenbanken und volle Administrationsrechte. Die Installation ist nun abgeschlossen. Wie kann ich nun eine konkrete DatenbankTabelle als XML - Datei exportieren? 5.2 GUI - Applikation Zunächst will ich die GUI - Variante beschreiben. Der Aufruf erfolgt bei gesetztem CLASSPATH mit java db2xml.gui.DB2XML Stand Januar 2002 S. 19 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Danach erscheint folgendes GUI: Abbildung 1: Das DB2XML-GUI in Version 1.4 unter Linux Standardmäßig wird die Ausgabe nach Standard - Out geschrieben. Es kann aber auch ein Dateiname für die XML – Ausgabe im unteren Teil des GUI angegeben werden. Das XML wird nach dem Tabellen-Modell (vgl. 1.8.2.1) erzeugt. Nachfolgend werden die einzelnen Menüpunkte beschrieben, die das GUI bereitstellt. 5.2.1 Menüpunkt „DTD“ Unter „DTD“ kann ich aus folgenden Alternativen eine auswählen (Radio Buttons): 1. Generate no DTD / generiere keine DTD. Es wird keine DTD erstellt. 2. Generate internal DTD / generiere interne DTD. Hier wird im XML - File mit <!DOCTYPE database [ ... ]> auf eine interne DTD direkt angegeben. 3. Generate external DTD / generiere externe DTD. Hier wird im XML - File mit <!DOCTYPE database SYSTEM "out.dtd"> auf eine externe DTD verlinkt. Dann kann man per Checkbox auswählen, ob man Daten generieren möchte oder nicht (Generate data). Im Normalfall sollte hier das Häkchen gesetzt werden. Das Abhaken ist nur sinnvoll, wenn man eine DTD ohne konkrete Daten wünscht. 5.2.2 Menüpunkt „Database“ Unter „Database“ gibt man die Parameter für die Datenbank-Verbindung an. Für meine MySQL - Datenbank sieht die Konfiguration folgendermaßen aus: Stand Januar 2002 S. 20 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Driver Class: “org.gjt.mm.mysql.Driver” Database URL: “jdbc:mysql://localhost/<DB_NAME>” User Name: <DB_USERNAME> Password: <DB_PASSWORD> Parameter: “” (leer) Bei Parameter kann man eine durch Kommata getrennte Liste von Name-Wert-Paaren angeben. Diese werden dann über den DriverManager an die Datenbank-Verbindung weitergeleitet. Beispiele sind: „encoding=UTF8“, „charSet=ISO8859-5“,... 5.2.3 Menüpunkt „XML Attributes“ Bei diesem Menüpunkt kann man die XML - Attribute durch Checkboxen konfigurieren. Hauptsächlich geht es hier um die Metadaten im Zusammenhang mit Datenstrukturen in den Datenbank-Tabellen. Es kann beispielsweise angegeben werden, ob bei der XML - Ausgabe ein Datenbankfeld vom Typ „Integer“ das Attribut „auto-increment“ erhalten soll. In Version 1.4 sind hier 15 Optionen möglich. 5.2.4 Menüpunkt „XML Elements“ Hier kann konfiguriert werden, wie die XML - Elemente „Datenbank“, „Tabelle“ und „Eintrag“ in XML benannt werden sollen. Standardmäßig heißen diese „database“, „table“ und „record“. In diesem Menüpunkt sind noch weitere Einstellungen möglich, auf die hier aber nicht näher eingegangen wird. 5.2.5 Menüpunkt „Stylesheets“ Hier werden die Stylesheets (XSL - Dateien) konfiguriert. Stylesheet URL: “default.xsl” Type: “text/xsl” Output MIME Type: “html” Mittels der Option “Apply stylesheets locally“ kann eine HTML-Datei, die durch ein XML - Stylesheet definiert wird, automatisch generiert werden. In meinen Versuchen ist es mir aber nicht gelungen, mehr als eine leere HTML-Seite zu produzieren. Ich löste die Java - Exception „org.apache.crimson.parser/P-061 UTF-8 Cp1252“ aus. 5.2.6 Auswahlmöglichkeit „Database Query“ Als Datenquelle kann zum einen die gesamte Datenbank („complete database“) ausgewählt werden oder ein Teil des Datenbankinhalts via SQL - Query („partial database“). Beispiel für die SQL - Query ist: select * from test where id >= 2; 5.2.7 Menüpunkt „Properties“ Hier werden die Schaltflächen „Save“ und „Load“ angeboten, womit ein Abspeichern und Laden aller Einstellungen in einer Datei möglich ist. Dies ist sehr praktisch, da ansonsten bei jedem Start von DB2XML alle Einstellungen manuell nachgetragen werden müssen. Die mitgelieferte Default-Datei „db2xml.properties“ beinhaltet über 60 Parameter. Ohne diese Funktionalität wäre viel Handarbeit angesagt! Stand Januar 2002 S. 21 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 5.3 Kommandozeilen-Applikation Außer der GUI - Variante lässt sich DB2XML auch über die Kommandozeile starten. Dies ist insbesondere bei automatisierten Arbeitsabläufen sinnvoll. Man könnte etwa über die Unix Cronjobs einmal täglich ein aktuelles Abbild der Datenbank im XML Form für Kunden bereitstellen. Die Syntax ist: java DB2XML [-help | -h] [-p propertyFile] [-out outFile] [-outDTD DTDoutFile] [-outXSL XSLToutFile] ["DB2XMLQueries"] Hier sind alle Funktionen der GUI-Variante über Optionen verfügbar. 5.4 Anwendungsbeispiel Hier möchte ich ein Beispiel anführen. Als Ausgangspunkt generiere ich eine einfache Tabelle durch folgenden MySQL - Dump in der Database „test“: CREATE TABLE test ( id int(10) NOT NULL default '0', name varchar(100) default NULL, PRIMARY KEY (id) ) INSERT INTO test VALUES (1,'Heinz','2000-01-01 00:00:00'); INSERT INTO test VALUES (2,'Hans','2001-12-12 12:30:50'); INSERT INTO test VALUES (3,'Hugo','2001-12-24 18:30:50'); DB2XML geniert mir daraus mit den Optionen „interne DTD“ und der „partial database“ - SQL-Query select * from test where id >= 2; folgendes XML - Dokument: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE database [ <!ELEMENT database (table0)> <!ELEMENT table0 (record0)*> <!ELEMENT record0 (id, name)> <!ELEMENT id (#PCDATA)> <!ATTLIST id ISNULL (true|false) #IMPLIED > <!ELEMENT name (#PCDATA)> <!ATTLIST name ISNULL (true|false) #IMPLIED > ]> <?xml-stylesheet href="default.xsl" type="text/xsl"?> <!-Generated with DB2XML version 1.4 http://www.informatik.fh-wiesbaden.de/~turau/DB2XML/index.html Database: jdbc:mysql://localhost/test Date: Sat Nov 24 15:51:05 GMT+01:00 2001 Driver: Mark Matthews' MySQL Driver 2.0.7 Database system: MySQL 3.23.41 --> <database> <table0> Stand Januar 2002 S. 22 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken <record0> <id>2</id> <name>Hans</name> <datum>12. Dez. 01</datum> </record0> <record0> <id>3</id> <name>Hugo</name> <datum>24. Dez. 01</datum> </record0> </table0> </database> An diesem Beispiel ist zu sehen, dass alle Felder bis auf das Feld „Datum„ vom MySQL - Type „datetime“ von DB2XML gut konvertiert werden. Bei „datetime“ verschluckt DB2XML leider die Stunden, Minuten und Sekunden. 5.5 Fazit zu DB2XML Das in 100%ig Java implementiere DB2XML ist sehr gut geeignet, XML - Abbilder ganzer oder teilweiser Datenbanken zu generieren. Hierbei werden optional DTDs intern oder extern hinzugefügt. Durch einen integrierten XSLT - Prozessor ist es theoretisch sogar möglich, direkt aus DB2XML heraus HTML-Dateien zu erstellen, was mir in meinen Tests jedoch nicht gelang. Bis auf den MySQL - Datentype „DATETIME“ werden alle getesteten Typen brauchbar konvertiert. Das Tool steht mit zwei Frontends bereit: als grafische Benutzerschnittstelle zur übersichtlichen Konfiguration und als Kommandozeilen-Programm für automatisierte (regelmäßige) Abläufe. Wem diese Funktionalität nicht ausreicht, kann mit Hilfe der via „javadoc“ erstellten API eigene Applikationen schreiben, die auf dem Framework DB2XML aufsetzen. Der Autor Volker Turau stellt eine sehr gute und ausführliche englische Dokumentation auf seiner Homepage [DB2XML99] zur Verfügung. Eine deutsche Dokumentation ist zur Zeit nicht geplant. DB2XML unterstützt zur Zeit noch kein XML - Schema, die neue Technologie in XML Form. Die DTDs werden in naher Zukunft ganz von XML - Schemata abgelöst werden. (Das auf der W3C-Homepage bereit gestellte Tool „dtd2xs“ löst dieses Problem, indem es in meinen Tests anstandslos DTDs in XML - Schemata konvertierte.) Als weiterer Negativpunkt ist zu erwähnen, dass das Tool nur DB2XML anbietet und nicht den umgekehrten Weg XML2DB. Ich kann damit einem Geschäftspartner Daten über eine RDBMS - unabhängige auf XML - Technologie basierende Technik zur Verfügung stellen. Möchte mein Geschäftskunde die in XML vorliegenden Daten seinerseits wieder in ein RDBMS einspielen, muss er diesen Vorgang in Eigenregie organisieren. 6 Microsoft SQL Server 2000 6.1 http - Unterstützung Der SQL Server 2000 in Verbindung mit MS-IIS (Microsoft Internet Information Services) Web Server unterstützt auch den direkten Zugriff mittels http auf die Datenbank. Dazu wird eine Art Plug - In installiert, das die http - Anfragen entgegennimmt und für den SQL Server 2000 aufbereitet und dann die Datenbankanfrage startet. Das Ergebnis der Anfrage (meistens XML Fragmente) wird eventuell noch nachformatiert und an den Client zurückgegeben. Stand Januar 2002 S. 23 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 6.2 XML Views (XML Sichten) Ein XML View beschreibt das Aussehen eines XML Dokumentes, obwohl dieses XML Dokument überhaupt nicht existiert, da es sozusagen on-the-fly von einer relationalen Datenbank erstellt wurde. Sie erlauben außerdem die Definition von Beziehungen zwischen XML und Tabellenstrukturen, so dass ein Format zurückkommt, das wir für die Darstellung von XML benötigen. In diesem Fall bleibt die Datenbank für den User verborgen und es erscheint so, als ob die Daten als Quelle ein XML - Dokument besitzen. Derzeitig basieren XML - Views auf der Schema-Sprache XDR (XML Data Reduced) (siehe http://www.ltg.ed.ac.uk/~ht/XMLData-Reduced.htm). Die W3C definiert derzeit eine Standard XML Schema Definitionssprache (XSD) (siehe http://www.w3.org/tr/xmlschema-1/). Wie der Name XML Data Reduced schon aussagt ist XDR eine vereinfachte Version von XML Data, einer Schema-Sprache (siehe http://www.w3.org/TR/1998/NOTE-XMLdata/). 6.3 XDR Schemas Beim SQL Server 2000 wird die XDR - Sprache (XML-Data Reduced) zum Erstellen der Schemas verwendet. XDR ist flexibel und überwindet einige der Einschränkungen von DTDs (Document Type Definition), die ebenfalls zur Beschreibung der Dokumentstruktur eingesetzt werden. Im Gegensatz zu DTDs beschreiben XDR - Schemas die Struktur des Dokuments unter Verwendung derselben Syntax wie das XML - Dokument. Darüber hinaus handelt es sich bei allen Dateninhalten in DTDs um Zeichendaten. Bei XDR - Sprachschemas können Sie den Datentyp eines Elements oder eines Attributs angeben. In einem XDR - Schema wird das gesamte Schema vom <Schema> - Element umgeben. Man kann Attribute als Eigenschaften des <Schema> - Elements beschreiben, die den Schemanamen und die Namespaces definieren, in denen sich das Schema befindet. In der XDR - Sprache müssen alle Elementdeklarationen innerhalb des <Schema> - Elements vorgenommen werden. Das minimale XDR - Schema sieht wie folgt aus: <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data"> ... </Schema> 6.3.1 XDR - Schema mit Anmerkungen Ein XDR - Schema mit Anmerkungen, welche die Zuordnung zur Datenbank beschreiben, eignet sich zur Abfrage der Datenbank und zur Rückgabe der Ergebnisse in Form eines XML - Dokuments. Der SQL Server 2000 führt eine Reihe von Anmerkungen ein, die Sie zum Zuordnen des XDR - Schemas zu den Datenbanktabellen und -spalten verwenden können. Es können XPath - Abfragen für die vom XDR - Schema erstellte XML - Sicht angegeben werden, um die Datenbank abzufragen und Ergebnisse in Form von XML - Dokumenten zu erstellen. Dies ist eine Alternative zur aufwendigeren Methode, eine SQL - Abfrage zu schreiben, die den FOR XML EXPLICIT - Modus zur Beschreibung der XML - Dokumentstruktur als Teil der Abfrage einsetzt. Weitere Informationen zu SELECT - Abfragen mit dem FOR XML EXPLICIT - Modus finden Sie unter Verwenden des EXPLICIT-Modus. Die Stand Januar 2002 S. 24 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg meisten Beschränkungen von XPath - Abfragen für Zuordnungsschemas können jedoch mithilfe von SQL - Abfragen und dem FOR XML EXPLICIT - Modus überwunden werden und ermöglichen so die Ausgabe der Ergebnisse in Form von XML - Dokumenten. Bei öffentlichen XDR - Schemas (wie etwa Microsoft BizTalk™-Schemas) stehen die folgenden Möglichkeiten zur Verfügung: o Schreiben der Abfrage im FOR XML EXPLICIT - Modus, so dass die generierten Daten für das öffentliche XDR - Schema gültig sind; FOR XML EXPLICIT - Abfragen zu schreiben, kann jedoch recht aufwendig sein. o Erstellen einer privaten Kopie des öffentlichen XDR - Schemas. Fügen Sie dann Anmerkungen zu dieser privaten Kopie hinzu, wodurch ein Zuordnungsschema generiert wird. Sie können XPath - Abfragen für das Zuordnungsschema angeben. Als Folge generiert die Abfrage die Daten im Namespace des öffentlichen Schemas. Das Erstellen von Schemas mit Anmerkungen und das Angeben von XPath Abfragen für die Schemas ist ein bedeutend einfacherer Vorgang, als komplexe FOR XML EXPLICIT - Abfragen zu schreiben. BizT alk Schema BizT alk Schema KOPIE Anmerkungen Zuordnungs schema SQL Server XML Dokument Anmerkung Microsoft BizTalk™ Framework ist der Versuch, ein standardisiertes XML - Format für die am weitesten verbreiteten Geschäftsobjekte, wie Kontakte, Bestellungen und Termine, zu definieren. Kopien dieser Geschäftsschemas finden man unter http://biztalk.org. 6.3.2 Zuordnungsschema Im Zusammenhang mit relationalen Datenbanken erweist sich die Zuordnung eines beliebigen XDR - Schemas zu einem relationalen Speicher als hilfreich. Eine der möglichen Optionen ist das Erstellen einer Anmerkung für das XDR - Schema. Ein XDR Schema mit Anmerkungen wird als Zuordnungsschema bezeichnet. Das Zuordnungsschema enthält Informationen über die Art der Zuordnung der XML - Daten zum relationalen Speicher. Bei einem Zuordnungsschema handelt es sich tatsächlich um eine XML - Sicht der relationalen Daten. Diese Zuordnungen können zur Abfrage relationaler Daten in Form eines XML - Dokuments verwendet werden. Der Microsoft SQL Server 2000 führt eine Reihe von Anmerkungen ein, die Sie im XDR - Schema zur Zuordnung der Elemente und Attribute zu den Datenbanktabellen und spalten verwenden können. Sie können Abfragen für die Zuordnungsschemas (XML Sichten) mit Hilfe von XPath (XML Path) angeben. Das Zuordnungsschema beschreibt die resultierende Dokumentstruktur. Stand Januar 2002 S. 25 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg Die wesentlichen Punkte beim Erstellen von XDR Schemas: <Customer CustomerID=“ANATR“> <Order CustomerID=”ANATR” <Order CustomerID=”ANATR” <Order CustomerID=”ANATR” <Order CustomerID=”ANATR” </Customer> <Customer CustomerID=”PARIS”/> OrderID=”10308”/> OrderID=”10625”/> OrderID=”10759”/> OrderID=”10926”/> Hieraus ergibt sich folgendes XML Schema „Beispiel.xdr“: <Schema xmlns=“urn:schemas-microsoft-com:xml-data“ <AttributeType name=“CustomerID“/> <ElementType name=”Order”> <AttributeType name=”OrderID” /> <Attribute type=”OrderID” /> <Attribute type=”OrderID” /> </ElementType> <ElementType name=”Customer”> <Attribute type=”CustomerID” /> <Element type=”Order” /> </ElementType> </Schema> Der Aufruf dieses Schemas erfolgt über die http - Anfrage an der SQL Server 2000: http://localhost/virtualdirectory/schema/beispiel.xdr/Customers?root=Root Diese XPath - Abfrage liefert ein „well - formed“ XML Dokument mit allen Kunden (Customer). Stand Januar 2002 S. 26 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg 6.4 XPath 6.4.1 Unterstützte Funktionalität In der folgenden Tabelle werden die Funktionen der XPath - Sprache beschrieben, die in SQL Server 2000 implementiert sind. Funktion Achsen Objekt attribute-, child-, parent- und self-Achsen Verknüpfung zu Beispielabfragen Angeben von Achsen in Xpath Abfragen Angeben von arithmetischen Operatoren in Xpath - Abfragen Prädikate mit booleschen Werten, einschließlich nachfolgender und geschachtelter Prädikate Alle relationalen Operatoren =, !=, <, <=, >, >= Angeben von relationalen Operatoren in Xpath - Abfragen Arithmetische Operatoren +, -, *, div Angeben von arithmetischen Operatoren in Xpath - Abfragen Explizite Konvertierungsfunktionen number(), string(), Boolean() Angeben expliziter Konvertierungsfunktionen in Xpath - Abfragen Boolesche Operatoren AND, OR Angeben von booleschen Operatoren in Xpath - Abfragen Boolesche Funktionen true(), false(), not() Angeben von booleschen Funktionen in Xpath - Abfragen Xpath - Variablen Angeben von Xpath - Variablen in Xpath - Abfragen Stand Januar 2002 S. 27 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg 6.4.2 Nicht unterstützte Funktionalität In der folgenden Tabelle werden die Funktionen der XPath - Sprache beschrieben, die in SQL Server 2000 nicht implementiert sind. Funktion Achsen Objekt ancestor, ancestor-or-self, descendant, descendantor-self (//), following, following-sibling, namespace, preceding, preceding-sibling Prädikate mit numerischen Werten Arithmetische Operatoren mod Knotenfunktionen ancestor, ancestor-or-self, descendant, descendantor-self (//), following, following-sibling, namespace, preceding, preceding-sibling Zeichenfolgenfunktionen string(), concat(), starts-with(), contains(), substringbefore(), substring-after(), substring(), string-length(), normalize(), translate() Boolesche Funktionen lang() Numerische Funktionen sum(), floor(), ceiling(), round() Union-Operator | 6.5 Speicherung von XML Dokumenten 6.5.1 OPENXML Um in einer relationalen Datenbank in Tabellen zu aktualisieren einzufügen oder zu löschen, müssen die Daten in einem rowset dargestellt werden, damit die entsprechenden SQL – Befehle Insert, Update und Delete ausgeführt werden können. Wenn nun unsere Quelldaten in einem XML - Dokument liegen, und man dessen Daten in die Datenbank einfügen, existierende Daten modifizieren oder Daten in der Datenbank löschen möchte, ist es unumgehbar ein rowset zu erstellen, welches dann durch die Statements INSERT, UPDATE oder DELETE geschickt wird. OPENXML unterstützt diese Funktionalitäten. Die OPENXML - Funktion des SQL Servers 2000 ist ein rowset - provider, welcher ein rowset view (Zeilensicht) aus einem XML - Dokument erstellt. Ein rowset ist also wie eine Tabelle anzusehen und kann demnach genauso, wie eine Tabelle eines relationalen Datenbanksystems mittels SELECT - queries benutzt werden. Das OPENXML - Feature des SQL Servers 2000 erlaubt also die Speicherung von XML - Dokumenten oder Dokumentfragmenten in Datenbanktabellen. OPENXML ist eine Methode um XML Dokumente in Datenbanken zu speichern. Hierbei wird SQL als Anfragesprache benutzt. Stand Januar 2002 S. 28 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Attribute - centric Als Default-Einstellung wird angenommen, dass die Spaltennamen der Tabellen zu den Attributnamen des XML Dokumentes übereinstimmen. – Element - centric 6.5.1.1 OPENXML in SQL-Statements Ein typisches SELECT - Statement für den Erhalt eines rowset hat folgendes Aussehen: SELECT FROM WHERE * <Tabellenname> <Kriterien> Da aber die Daten nicht in einer Tabelle sondern in einem XML - Dokument liegen, muss uns OPENXML ein rowset aus dem XML - Dokument erzeugen und im SELECT statement implementieren: SELECT FROM WHERE * OPENXML … <Kriterien> 6.5.1.1.1 DOM - Tree Abbildung des XML - Dokumentes im Speicher Wie angesprochen benutzt OPENXML DOM, um die Struktur des XML - Dokumentes abzubilden, so dass ein rowset generiert wird, welches nach Gebrauch wieder zerstört wird, um Ressourcen zu sparen. Hierfür existieren zwei spezielle stored procedures, die dieses umsetzen können: o Sp_xml_preparedocument o Sp_xml_removedocument 6.5.1.1.2 Die generelle Syntax für ein OPENXML - query: OPENXML (DocHandle int, XpathPattern nvarchar, [Flags byte]) WITH (RowsetSchema | TableName)] Nur die ersten Parameter sind für OPENXML zwingend, die anderen sind optional. DocHandle: Das XML document handle zurückgegeben von Sp_xml_preparedocument XpathPattern: Ein XPath - Ausdruck. Dieser Ausdruckt kennzeichnet die Knoten im XML - Dokument, welche im rowset generiert werden. Flags: WITH: Hier existieren drei Optionen: 1. keine Spezifizierung, 2. Ein existierender Tabellenname mit dessen Tabellenschema das rowset generiert wird, 3. Ein rowset Schema (Spaltennamen, Datentypen und Mapping Informationen) Stand Januar 2002 S. 29 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg Als Beispiel nehmen wir eine bereits existierende Tabelle „CustOrder“: CustOrder(oid varchar(10), orderdate datetime, requireddate datetime) Und ein XML Dokument wie folgendes: <root> <Customer cid=“Cust1“ name=”Bob” city=”Seattle”> <Order oid=”ord1” empid=”1” orderdate=”10/1/2000” date=”11/1/2000” note=”ship 2nd day ups” /> <Order oid=”ord2” empid=”1” orderdate=”10/2/2000” date=”12/1/2000” /> /Customer> </root> required- required- Das Document handle und der Tabellenname werden in folgender Form an OPENXML übergeben: SELECT FROM * OPENXML (@hdoc, ‘/root/Customer/Order’) WITH CustOrder Das Resultat der Anfrage hat dieses Aussehen: Oid Orderdate Requireddate Ord1 2000-1-10 2000-1-11 Ord2 2000-2-10 2000-2-12 Für jedes Order-Element wurde eine Zeile (rowset) erstellt. 6.5.1.1.3 INSERT Wollen wir Daten in Tabelle CustOrder einfügen, benutzen wir die folgende Syntax: INSERT INTO CustOrder SELECT * FROM OPENXML (@hdoc, ‘/root/Customer/Order’) WITH CustOrder 6.5.1.1.4 UPDATE Wollen wir Daten aktualisieren, in diesem Fall die Spalte „requireddate“, benutzen wir folgende Syntax: UPDATE SET CustOrder requireddate= (SELECT requireddate FROM OPENXML (@hdoc, ‘/root/Customer/Order’) WITH CustOrder WHERE oid=”ord1”) Bei nicht übereinstimmenden Spalten- bzw. Attributnamen, müssen geeignete Mapping - Verfahren angewendet werden. 6.5.2 Bulk Loading XML Diese Methode ist besonders effizient um eine große Anzahl von Daten in eine Datenbank zu transferieren. Das XML Bulk Load Objekt benutzt XML - Views (XML - Views sind XML Schemas geschrieben mit XDR) . Stand Januar 2002 S. 30 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Um mit dem Bulk Load Modell arbeiten zu können, sind zwei Informationen essentiell: o Das Mapping Schema o Das XML Dokument Das Bulk Load Modell hat nur ein Objekt mit folgenden Eigenschaften und Methoden: o Execute o ConnectionCommand o ConnectionString o KeepNulls o KeepIdentity o CheckConstraints o ForceTableLock o XMLFragment o Transaction o TempFilePath o ErrorLogFilet o SchemaGen o SGDropTables o SGUseId 6.5.2.1 Wie eine Datenbank aus XML generiert wird Weil XML Dokumente sehr groß sein können, werden sie nicht komplett in den Speicher gelesen, sondern wie ein Stream behandelt, d.h. dass die Daten in der Reihenfolge verarbeitet werden, wie Sie gelesen werden. Beispiel: Es existiert eine Tabelle Costumer: Customer(CostumerID, ContactName) Es existiert ein XML Dokument: <Customer CostumerID=“C1“ ContactName=”Joe”/> <Customer CostumerID=“C2“ ContactName=”Bob”/> Wenn das erste Start-Tag des Customer Element gelesen wird, wird ein Datensatz für die Tabelle Customer generiert. Wenn die Attribute erreicht werden, werden deren Inhalte in den bereits generierten Datensatz kopiert. Wenn das End Tag erreicht ist, wird der Datensatz an den Server zum Einfügen gesendet. Beim nächsten Customer Element wiederholt sich der Vorgang. Es ist wichtig zu verstehen, dass die Daten für die Tabelle Customer innerhalb des Customer Element enthalten sind. Dieses wird klar, wenn man ein komplexes XML Dokument mit einem assoziierten XDR Schema analysiert. Stand Januar 2002 S. 31 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken Es liegt das Dokument nach folgender Hierachie vor: <Customer CostumerID=“C1“ ContactName=”Joe”> <Order OrderID=”Ord1” OrderDate=”10/10/2000” /> <Order OrderID=”Ord1” OrderDate=”10/10/2000” /> </Customer> und die Tabelle: Customer(CustomerID, ContactName) Order (OrderID, OrderDate, CustomerID) Das XML Bulk Load benutzt die im XDR Schema spezifizierte primary key – foreign key Beziehung. Alle Order Elemente werden in der gleichen Art abgehandelt. Erst am End-Tag des Customer Elements werden die Attribute des Customer Elements in den Datensatz kopiert und an den Server übertragen. Der Wert des CustomerID Attributes des Customer Elements muss vor den Order Child - Elementen genannt werden, ansonsten würde am end-tag des Order Elementes der Datensatz ohne den foreign key an der Server übertragen werden und der Bulk Load fehlschlagen. Die einzige Ausnahme ist, wenn man idref oder idrefs Attribute benutzt. Während des Bulk Load werden keine Datensätze generiert wenn die Attribute mit idref oder idrefs gekennzeichnet sind (start tag). Vergleichen wir dieses XML Fragment: <Customer CustomerID=“C1“ OrderList=“Ord1 Ord2 Ord3“ /> <Customer CustomerID=“C2“ OrderList=“Ord5 Ord24“ /> Nehmen wir an das Mapping Schema assoziiert das <Customer> Element zur Customer Tabelle, dementsprechend das CustomerID Attribut zur CustomerID Spalte und das OrderID Attribut zur OrderID Spalte der Tabelle CustOrder. Das CustomerID Attribut wird in den Datensatz kopiert, aber das Orderlist Attribut nicht, da es nicht zu der Tabelle Customer mapped. Letztendlich identifiziert das Schema das OrderList Attribut als ein idrefs – Typ und ignoriert ihn somit einfach. Ist das XML Dokument in folgender Form überarbeitet: <Customer CustomerID=“C1“ OrderList=“Ord1 Ord2 Ord3” /> <Order CustomerID=”C1” OrderID=”Ord1” /> <Order CustomerID=”C1” OrderID=”Ord2” /> <Order CustomerID=”C1” OrderID=”Ord3” /> <Customer CustomerID=“C2“ OrderList=“Ord4 Ord5” /> <Order CustomerID=”C2” OrderID=”Ord4” /> <Order CustomerID=”C2” OrderID=”Ord5” /> Dieser XML Bulk Load wird die Daten sowohl in die Customer als auch in die Order Tabelle eintragen. Das einzige Problem ist hierbei, dass der Benutzer für die Integrität der Beziehungen verantwortlich ist. Nachfolgend haben wir diesen XML - View (mapping schema) definiert: Ch14_ex29.xdr Und diese XML Daten Ch14_ex29.xml Mit z.B. Visual Basic können wir dann den XML Bulk Load ausführen Stand Januar 2002 S. 32 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 6.6 Generierung von XML Dokumenten 6.6.1 FOR XML Der Microsoft SQL Server 2000 bietet einen erweiterten Abfragedienst an, der Ergebnisse einer SQL - Abfrage- oder Anfrage als XML Dokument zurückliefern kann. Hierfür ist es notwendig in dem SQL Satz eine FOR XML - Klausel zu integrieren, die uns dann das erwünschte Ergebnis liefern wird. SQL - Beispiel SELECT FROM CustomerID, ContactName Customers Dieser SQL - Befehl liefert uns ein 2-spaltiges Ergebnisse mit n Zeilen Um von dem vorrangegangenen SQL - Befehl als Ergebnis nun ein XML Dokument zu erhalten können erweitern wir den Befehl folgendermaßen: SELECT CustomerID, ContactName FROM Customers FOR XML RAW 6.6.1.1 Modi Es gibt drei verschieden Modi: RAW, AUTO, EXPLICIT 6.6.1.1.1 AUTO Der Auto-Modus produziert ein XML Dokument, bei welchem die Hierarchie der Elemente aus der Reihenfolge der Spalten in dem SQL - Befehl resultiert – der Anwender hat somit ein gewisses Maß an Kontrolle über das Aussehen des XML Dokumentes. Dieser Modus stellt einen Kompromiss zwischen Kontrolle und Komplexität dar. Der Auto-Modus erzeugt geschachtelte Elemente. Ist in der SELECT - Anweisung nur eine Tabelle oder Sicht beteiligt, ist die Ausgabe nahezu identisch mit dem „RAW - Modus“, nur werden die Elemente nicht „row“, sondern entsprechend dem Tabellennamen genannt. Sind mehrere Tabellen an der Abfrage beteiligt, wird für jede Tabelle ein eigenes Element erzeugt. Der Elementname entspricht auch hier dem Tabellennamen. Die Spalten der Tabellen werden den Elementen als Attribute zugeordnet. Die Schachtelungshierarchie ist abhängig von der Reihenfolge der Tabellenspalten. Durch die Option Elements kann man erreichen, dass die Spalten nicht als Attribute, sondern als Unterelemente eingefügt werden. 6.6.1.1.2 RAW Der RAW - Modus produziert ein Attribut-zentriertes XML Dokument mit einer flachen Struktur. Jede Zeile der Tabelle wird durch generisches Tag dargestellt – der Anwender ist jedoch stark in der Manipulation der Struktur eingeschränkt. Jede Zeile der Ergebnisstabelle wird durch ein XML - Element „row“ dargestellt. Die Werte der Spalten werden als Attribute dem XML - Element „row“ hinzugefügt. 6.6.1.1.3 EXPLECIT Der Explecit - Modus ermöglicht dem Anwender die vollständige Kontrolle über die Struktur des XML Dokumentes. Die negative Eigenschaft ist jedoch, dass es wesentlicher komplizierter ist ein solches Dokument zu administrieren. Der Anwender trägt die Verantwortung für die Wohlgeformtheit des Dokumentes. Stand Januar 2002 S. 33 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 6.6.1.2 Generelle Syntax FOR XML xml_mode [,XMLDATA] [,ELEMENTS] [, BINARY BASE64] Xml_mode: AUTO, RAW, EXPLECIT XMLDATA XML - Data Schema für das resultierende XML Dokument ELEMENTS Wenn ein Element-zentriertes XML Dokument zurückgegeben wird, bei welchem die Spaltenwerte als Sub-Elemente dargestellt werden. Standardmäßig werden die Spaltenwerte auf die ElementAttribute abgebildet. BINARY Base64 Wenn die Rückgabefelder binäre Daten beinhalten, wie z.B. vom SQL Server 2000 ein IMAGE -Type Feld, muss diese Option angegeben sein. Stand Januar 2002 S. 34 von 45 Fachhochschule Bonn-Rhein-Sieg 7 XML und relationale Datenbanken Eine Praxisanwendung 7.1 Die Ausgangslage Eine beliebige Firma X hat ein funktionierendes Bestellsystem basierend auf einer relationalen Datenbank unter dem MS SQL Server 2000. Die Datenbank besteht hauptsächlich aus fünf Tabellen. In der Tabelle Kunden sind Kundeninformationen wie Name und Adresse hinterlegt. Die Tabelle Artikel beinhaltet alle im System bestellbaren Artikel. Die Bestellung selbst ist durch eine Kopf-Zeilen Struktur in den Tabellen Bestellkopf und Bestellzeile abgelegt. Zusätzlich gibt es noch die Tabelle Bestellherkunft. Bestellungen können entweder durch ein Interneteingabeformular in die Datenbank eingelesen werden oder durch ein Eingabeprogramm, das im Call Center der Firma X eingesetzt wird. Abb. 1 Das ER - Modell der Bestelldatenbank Der Versand der Bestellungen wird durch die Firma X selbst durchgeführt, indem direkt auf die Daten im SQL Server zugegriffen wird, und Etiketten aus den Einträgen in den Tabellen Bestellkopf und Bestellzeile generiert wird. Die Bestellung wird als schon durchgeführt markiert, indem lediglich das Versanddatum gefüllt wird. Stand Januar 2002 S. 35 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 7.2 Die Herausforderung Im Zuge ihrer Expandierung entschließt sich die Firma X den Paketversand an eine Spedition zu outsourcen. Die Spedition Y die neuer Vertragspartner der Firma X wird möchte die Versanddatum in einem speziellen XML Format zugesandt haben. Y sendet X folgende Vorlage zu: <Bestellung> <Kunde Kundennummer="1"> <Name1>Felix</Name1> <Name2>Neumann</Name2> <Auftrag Eingangsdatum="15.12.2001" Spediteur="TNT" fuehrtAm="16.12.2001"> <Detail Artikel="1" Anzahl="15"/> <Detail Artikel="2" Anzahl="1"/> <Detail Artikel="1" Anzahl="1"/> </Auftrag> </Kunde> </Bestellung> Ausge- Die Firma X muss nun also dieses XML - Format bedienen, indem es seine Bestellungen gemäß der von Y gesandten Vorlage aus der relationalen Datenbank exportiert. Zusätzlich werden die Entwickler der Firma X vor die Aufgabe gestellt, ein Bestellungen eines weiteren fremden Call Centers in die Datenbank zu importieren. Diese Bestellungen werden in folgendem XML - Format zur Verfügung gestellt: <Bestellung> <Kunde> <Vorname>Peter</Vorname> <Nachname>Lustig</Nachname> <Auftrag Eingangsdatum="2001-12-18T00:00:00" Spediteur="TNT" AusgefuehrtAm=""> <Detail Artikel="1" Anzahl="1"/> </Auftrag> </Kunde> </Bestellung> Abb.2 Die Eingabemaske im Call -Center Stand Januar 2002 S. 36 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 7.3 Der Export der XML - Datei Wir tasten uns langsam an die korrekte XML – Sicht der Daten heran, indem wir das XDR - Schema aufbauen. Mit Hilfe folgender XML - Datei, die eine XPath Abfrage enthält, lassen wir uns die XML - Sicht dann anzeigen: <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="xdrSchema.xml"> /Kunde </sql:xpath-query> </ROOT> Wir beginnen mit folgendem einfachen XDR - Schema: <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="Kunde" sql:relation="Kunden" > <AttributeType name="Titel" /> <AttributeType name="Name1" /> <AttributeType name="Name2" /> <attribute type="Titel" sql:field="Anrede" /> <attribute type="Name1" sql:field="Vorname" /> <attribute type="Name2" sql:field="Nachname" /> </ElementType> </Schema> Durch dieses Schema werden die Feldnamen Anrede, Vorname und Nachname der Tabelle Kunden auf die Attribute Titel, Name1 und Name2 des Elementes Kunde in der XML - View gemapped. Die Ausgabe als XML - Datei sieht wie folgt aus: <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Kunde Titel="Herr" Name1="Daniel" Name2="Schmidt" /> <Kunde Titel="Herr" Name1="Hansi" Name2="Gnad" /> </ROOT> Dadurch haben wir die erste Anforderung erfüllt, dass das Feld Vorname aus der Tabelle Kunde in der XML Datei nun Name1 heißt. Wir können also jeden Feldnamen der Tabellen auf einen anderen Namen in der XML Datei mappen. Ebenfalls haben wir das Element Kunde genannt, und nicht den Namen der entsprechenden Tabelle in der relationalen Datenbank Kunden. Nun sollen gemäß der Vorgabe die Felder Name1 und Name2 Unterelemente des Elements Kunde sein, lediglich die Kundennummer ist Attribut des Elements Kunde. Dies leistet folgendes erweiterte XDR – Schema: Stand Januar 2002 S. 37 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="Name1" content="textOnly" /> <ElementType name="Name2" content="textOnly" /> <ElementType name="Kunde" sql:relation="Kunden" > <AttributeType name="Kundennummer" /> <attribute type="Kundennummer" sql:field="PK_Kunden" /> <element type="Name1" sql:field="Vorname"/> <element type="Name2" sql:field="Nachname"/> </ElementType> </Schema> Innerhalb des ElementType Kunde sind zwei weitere Elementtypen integriert. Nämlich die Elementtypen Name1 und Name2 die zuvor schon als ElementType mit textOnly Content deklariert wurden. Die Anwendung dieses Schemas ergibt folgende XML Datei: <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <Kunde Kundennummer="1"> <Name1>Daniel</Name1> <Nachname>Schmidt</Nachname> </Kunde> <Kunde Kundennummer="2"> <Name1>Hansi</Name1> <Nachname>Gnad</Nachname> </ROOT> Zu den Kunden fehlen jedoch noch die passenden Bestellungen. Diese sind in der Datenbank relational verknüpft über den Fremdschlüssel FK_Kunden in der Tabelle Bestellkopf. Diese Abhängigkeit muss in dem XDR - Schema abgebildet werden: <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="Auftrag" sql:relation="Bestellkopf" > <AttributeType name="Eingangsdatum" /> <AttributeType name="Spediteur" /> <AttributeType name="AusgefuehrtAm" /> <attribute type="Eingangsdatum" /> <attribute type="Spediteur" /> <attribute type="AusgefuehrtAm" sql:field="Versanddatum" /> </ElementType> <ElementType name="Vorname" content="textOnly" /> <ElementType name="Nachname" content="textOnly" /> <ElementType name="Kunde" sql:relation="Kunden" > <AttributeType name="Kundennummer" /> <element type="Vorname" /> <element type="Nachname" /> Stand Januar 2002 S. 38 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken <attribute type="Kundennummer" sql:field="PK_Kunden" /> <element type="Auftrag" > <sql:relationship key-relation="Kunden" key="PK_Kunden" foreign-key="FK_Kunden" foreign-relation="Bestellkopf" /> </element> </ElementType> </Schema> Die Relation wird durch das Schlüsselwort sql:relationship kenntlich gemacht. Dabei werden die an der Relation beteiligten Tabellen genannt, und die Schlüssel über welche die Tabellen miteinander verknüpft sind. Das um die Relation erweiterte XDR Schema erzeugt folgende Ausgabe: <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> -<Kunde Kundennummer="1"> <Vorname>Daniel</Vorname> <Nachname>Schmidt</Nachname> <Auftrag Eingangsdatum="2001-12-15T00:00:00" Spediteur="TNT" AusgefuehrtAm="2001-12-16T00:00:00" /> </Kunde> <Kunde Kundennummer="2"> <Vorname>Hansi</Vorname> <Nachname>Gnad</Nachname> <Auftrag Eingangsdatum="2001-12-13T00:00:00" Spediteur="DPD" AusgefuehrtAm="2001-12-13T00:00:00" /> <Auftrag Eingangsdatum="2001-12-14T00:00:00" Spediteur="TNT" AusgefuehrtAm="2001-12-15T00:00:00" /> </Kunde> </ROOT> Das entgültige XDR - Schema, das eine weitere relationale Abhängigkeit integriert, nämlich die zwischen Auftragskopf und Auftragszeile sieht folgendermaßen aus: <?xml version="1.0" ?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <ElementType name="Detail" sql:relation="Bestellzeile" > <AttributeType name="Artikel" /> <AttributeType name="Anzahl" /> <AttributeType name="Preis" /> <attribute type="Artikel" sql:field="FK_Artikel" /> <attribute type="Anzahl" /> </ElementType> <ElementType name="Auftrag" sql:relation="Bestellkopf" > <AttributeType name="Eingangsdatum" /> <AttributeType name="Spediteur" /> <AttributeType name="AusgefuehrtAm" /> <attribute type="Eingangsdatum" /> <attribute type="Spediteur" /> <attribute type="AusgefuehrtAm" sql:field="Versanddatum" /> <element type="Detail" > <sql:relationship Stand Januar 2002 S. 39 von 45 XML und relationale Datenbanken Fachhochschule Bonn-Rhein-Sieg key-relation="Bestellkopf" key="PK_Bestellkopf" foreign-key="FK_Bestellkopf" foreign-relation="Bestellzeile" /> </element> </ElementType> <ElementType name="Vorname" content="textOnly" /> <ElementType name="Nachname" content="textOnly" /> <ElementType name="Kunde" sql:relation="Kunden" > <AttributeType name="Kundennummer" /> <element type="Vorname" /> <element type="Nachname" /> <attribute type="Kundennummer" sql:field="PK_Kunden" /> <element type="Auftrag" > <sql:relationship key-relation="Kunden" key="PK_Kunden" foreign-key="FK_Kunden" foreign-relation="Bestellkopf" /> </element> </ElementType> </Schema> Dieses Schema erzeugt XML - Dateien aus der relationalen Datenbank, die genau dem durch die Spedition Y angeforderten Format entsprechen. 7.4 Der Import der XML-Datei Zunächst müssen die Zeilen der zu importierenden Bestellungen aus der XML Datei in den SQL Server gelangen. Dies kann leicht mit Hilfe des DTS Import/Export Assistenten des SQL Server 2000 geschehen. Der Import kann auch durch einen Scheduler gemanaged werden, so dass der Import regelmäßig zu bestimmten Uhrzeiten automatisch geschehen kann. Der Import muss so eingestellt werden, das jede Bestellung aus der XML - Datei in einem Feld der Importtabelle gespeichert ist. Abb. 3 Ausschnitt aus der Importtabelle auf dem SQL Server Jede XML - Bestellung wird nun zeilenweise durch einen SELECT - Befehl in die Variable @doc eingelesen und an die Prozedur sp_xml_preparedocument übergeben. Mit Hilfe dieser Prozedur wird ein Handle auf die DOM Repräsentation der Bestellung geliefert: EXEC sp_xml_preparedocument @idoc OUTPUT, @doc Nun kann mittels der OPENXML Klausel auf die Elemente des XML - Dokuments zugegriffen werden, und die Bestellinformationen können in Kombination mit dem INSERT - Befehl in die entsprechenden Tabelle hineingeschrieben werden: Stand Januar 2002 S. 40 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken INSERT INTO Kunden (Vorname, Nachname) SELECT * FROM OPENXML (@idoc, '/Bestellung/Kunde',2) WITH (Vorname varchar(50), Nachname varchar(50)) 7.5 Die vollständige Prozedur zum Einlesen von Bestellungen CREATE PROCEDURE dbo.doImports AS DECLARE @idoc int DECLARE @doc varchar(1000) -- Deklarationen DECLARE @KDNR int DECLARE @Bestellkopf int DECLARE @Position int -- Cursor damit wir alle Bestellungen einlesen DECLARE crs_Bestellungen CURSOR FOR SELECT xml FROM xmlimport OPEN crs_Bestellungen FETCH NEXT FROM crs_Bestellungen INTO @doc WHILE @@FETCH_STATUS = 0 BEGIN -- Create an internal representation of the XML document. EXEC sp_xml_preparedocument @idoc OUTPUT, @doc -- Execute a SELECT statement using OPENXML rowset provider. INSERT INTO Kunden (Vorname, Nachname) SELECT * FROM OPENXML (@idoc, '/Bestellung/Kunde',2) WITH (Vorname varchar(50), Nachname varchar(50)) SET @KDNR =@@IDENTITY INSERT INTO Bestellkopf (FK_Kunden, FK_Bestellherkunft, Spediteur, Eingangsdatum) SELECT @KDNR,3, * FROM OPENXML (@idoc, '/Bestellung/Kunde/Auftrag',1) WITH (Spediteur varchar(10), Eingangsdatum datetime) SET @Bestellkopf=@@IDENTITY /* When inserting a row in Child 'Bestellzeile', The Positionsfield must be filled if it is not filled*/ select @Bestellkopf SELECT @Position=max(Position) FROM Bestellzeile WHERE FK_Bestellkopf=@Bestellkopf SET @Position=@Position+1 IF @Position is NULL BEGIN SET @Position=1 END INSERT INTO Bestellzeile (FK_Bestellkopf, Position, FK_Artikel, Anzahl) Stand Januar 2002 S. 41 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken SELECT @Bestellkopf,@Position, * FROM OPENXML (@idoc, '/Bestellung/Kunde/Auftrag/Detail',1) WITH (Artikel int, Anzahl int) EXEC sp_xml_removedocument @idoc FETCH NEXT FROM crs_Bestellungen INTO @doc END CLOSE crs_Bestellungen DEALLOCATE crs_Bestellungen GO 8 Gesamtfazit Allen angebotenen XML - Datenbanklösungen ist dabei jedoch ein Problem gemein: Anerkannte Standards wie SQL und ODBC/JDBC, bestens bekannt aus der "relationalen Welt", gibt es im Bereich XML - Datenbanken nicht. Jeder Hersteller bietet exklusiv properietäre Lösungen an. Dieses Problem haben einige Firmen und unabhängige Entwickler erkannt und aus diesem Grund die XML:DB-Initiative [11] gegründet, die sich explizit mit der Entwicklung neuer XML - Datenbankstandards beschäftigt. Die interne Organisation ähnelt der Apache - Organisation, das bedeutet, jeder kann sich an der Entwicklung beteiligen, und entstehende Referenz-Implementierungen sind öffentlich zugänglich. Als wichtigstes Projekt haben die Mitglieder von XML:DB die Entwicklung einer standardisierten Programmierschnittstelle (API) für XML - Datenbanken gestartet. Als Pendant zu ODBC/JDBC soll XDBC (XML Database Connectivity) in Zukunft die Entwicklung von Applikationen auf Basis von XML - Datenbanken erleichtern. Diese einheitliche API soll es den Entwicklern ermöglichen, die verwendete XML - Datenbank bei Bedarf durch eine andere XDBC - konforme Lösung zu ersetzen. Die Mitglieder der entsprechenden XML:DB - Arbeitsgruppe [12] haben bereits erste Vorschläge für die API unterbreitet, die durch die Community diskutiert und verifiziert werden. Ein weiterer Schwerpunkt der XML:DB -Initiative liegt in der Entwicklung einer XML - Update- Sprache, dem XUpdate - Projekt [13]. Denn jeder Programmierer, der schon einmal versucht hat, XML - Daten in einer Datenbank zu bearbeiten, ist bisher dazu gezwungen, die DOM API zu benutzen. Hier soll die vorgelegte XUpdate - Spezifikation eine praktische, dem SQL Update ähnliche, Lösung bieten. 9 Zukunftsaussichten Open – Source - Organisationen schießen im Moment wie Pilze aus dem Boden, und gerade Firmen "beteiligen" sich gern an solchen Institutionen, um damit ihre Marktpräsenz zu erhöhen. Bei der Entwicklung neuer XML - Standards hat sich das W3C als unabhängiges Standardisierungsgremium herausgebildet, sieht naturgemäß seinen Fokus aber nicht in der Entwicklung von Technologien für XML - Datenbanken. Die XML:DB - Initiative möchte hier die technische Vorarbeit leisten, um solchen Gremien qualifizierte Vorschläge zu unterbreiten. Stand Januar 2002 S. 42 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 10 Literaturangaben [MSSQL1] Kevin Willaims: "XML Databases", 2001 WROX PRESS [MSSQL2] "SQL Server 2000 XML", 2001 WROX PRESS [MSSQL3] "Microsoft SQL Server 2000 - Die technische Referenz", 2001 Microsoft Press [MSSQL4] "Onlinedokumentation", SQL Server 2000 [Bourret00] Ronald Bourret: „XML and Databases“ www.rpbourret.com/xml/XMLAndDatabases.htm [Bourret01] Ronald Bourret: „Mapping DTDs to Databases", 09.Mai 2001 http://www.xml.com/pub/a/2001/05/09/dtdtodbs.html?page=2 [Daum00] Daum, Berthold; Scheller, Markus: „Electronic Business, Methoden, Werkzeuge, Techniken und Systeme für den Unternehmenserfolg im Internet", Addison - Wesley, München 2000 [DB2XML99] DB2XML-Homepage, Volker Turau, http://www.informatik.fh-wiesbaden.de/~turau/DB2XML/index.html, 1999 [DOM01] W3C-DOM-Homepage, http://www.w3.org/DOM/, 2001 [JDBC01] Java-JDBC-Homepage, SUN Microsystems, http://java.sun.com/products/jdbc/, 2001 [Klein01] Oliver Klein: "Datenbanken und XML", 13. Juni 2001 [MM01] Homepage des MM – MySQL – JDBC - Treibers, Mark Matthews, http://mmmysql.sourceforge.net/, 2001 [MYSQL01] MySQL - Homepage, http://www.mysql.com, 2001 [SAX01] Homepage des SAX-Projektes, http://www.saxproject.org, 2001 [XMLCP01] The XML Cover Pages, http://www.oasis-open.org/cover/dom.html, 2001 Stand Januar 2002 S. 43 von 45 Fachhochschule Bonn-Rhein-Sieg [XML Rec98] XML und relationale Datenbanken Extensible Markup Language (XML) 1.0; W3C Recommendation 10-February-1998; http://www.w3.org/TR/1998/REC-xml-19980210 Stand Januar 2002 S. 44 von 45 Fachhochschule Bonn-Rhein-Sieg XML und relationale Datenbanken 11 Anhang A Auszug aus Mark Matthews’ MM-MySQL-Dokumentation: Issue: "When I try to connect to the database with MM.MySQL, I get the following exception: SQLException: Server configuration denies access to data source SQLState: 08001 VendorError: 0 What's going on? I can connect with the MySQL client." Resolution: MM.MySQL must use TCP/IP sockets to connect to MySQL, as Java does not support Unix Domain Sockets. Therefore, when MM.MySQL connects to MySQL, the security manager in MySQL server will use the HOSTS table to determine whether or not the connection should be allowed. You must add grants to allow this to happen. The following is an example of how to do this (but not the most secure). From the mysql command-line client, issue the following command "GRANT ALL PRIVILEGES ON [dbname].* to [user]@[hostname] identified by '[password]'" replacing [dbname] with the name of your database, [user] with the username, [hostname] with the host that MM.MySQL will be connecting from, and [password] with the password you want to use. Be aware that RedHat linux is broken with respect to the hostname portion for the case when you are connecting from localhost. You need to use "localhost.localdomain" for the [hostname] value in this case. Follow this by issuing the "FLUSH PRIVILEGES" command. I suggest you read the permissions/security section of your MySQL server manual for a much more detailed explanation of how this works. Stand Januar 2002 S. 45 von 45