Da ist mit dem Thema XML-Datenbank nun ein Thema in die Vorbereitung zur Abschlussprüfung gerutscht, bei dem ich durchaus verstehen kann, wenn man sich entscheidet, es streichen zu wollen. Nachdem ich mich jetzt aber ein bisschen intensiver mit diesem Thema auseinandergesetzt habe, würde ich behaupten, dass die Prüfungsfragen absolut oberflächlich bleiben werden. Diese Punkte könnt ihr wahrscheinlich gut und gerne mitnehmen, wenn ihr euch ein bisschen mit der Thematik auseinandersetzt und die wichtigsten Zusammenhänge und Begrifflichkeiten schon mal gehört habt. Ich habe mir Mühe gegeben, es nicht zu technisch werden zu lassen. Aber ganz werden wir hier um einige technische Termini nicht rum kommen. Auch ein bisschen Erfahrung im Umgang mit XML und Datenbanken selbst kann nicht schaden.

Abschlussprüfung Winter ’16: KuG – U8 | XML-Datenbank

Was ist nun eine XML-Datenbank? Die einfachste Definition liefert hier sicher ein Artikel aus 2001 auf xml.com: Eine XML-Datenbank speichert Informationen in einer XML-ähnlichen Struktur oder in einer mit XML verwandten Technologie.

Beispiel: wiederkehrende XML-Struktur

Beispiel: wiederkehrende XML-Struktur

Dann können wir jetzt ja aufhören! Naja, ganz so leicht ist es leider nicht. XML als Auszeichnungssprache kann alleine natürlich kein DBMS darstellen. Dennoch speichert XML Daten in einer strukturierten Weise ab. Wer meine XML-Grundlagen-Präsentation [DOWNLOAD] gelesen hat, ist damit vertraut: Es gibt vom Wurzelknoten ausgehend in einer Baumstruktur beliebig viele nachgeordnete Knoten. Wobei sich wiederholende Datenelemente als ein Zweig verstanden werden können. Das sehr einfache Beispiel zur linken zeigt dies recht gut. Ausgehend vom Wurzelelement gibt es unterschiedliche „Zweige“ die mit dem Element beginnen und in dessen weiteren Verlauf dann die Daten enthalten sind.

 

Möglichkeiten XML-Dokumente zu speichern

Die vorangegangene Definition kann also noch nicht der letzte Schluss gewesen sein. Generell definiert man eine XML-Datenbank deshalb auch eher als eine Datenbank oder ein Datenbanksystem, welches mit XML ausgezeichnete Dokumente speichern, durchsuchen und verwalten kann. In der Datenbankwelt gibt es dazu aktuell drei Ansätze, wie man mit diesen XML-Dokumenten umgehen kann. Diese Ansätze kann man dann zu zwei Datenbankkategorien zusammenfassen: XML-fähige Datenbanken und native XML Datenbanken.

XML-fähige Datenbanken sind in Wirklichkeit jedoch relationale Datenbanken, die auf zwei alternativen Wegen mit XML-Dokumenten umgehen können. Zum einen kann ein XML-Dokument in eine bestehende Tabelle direkt als String gespeichert werden und aus dieser dann wieder im Ganzen oder in Teilen ausgegeben werden. XML ist nur Text und kann also auch ganz normal wie jeder andere Text in SQL durchsucht werden.

In der zweiten Variante nimmt man ein XML-Dokument und schickt es durch einen Wrapper vor der relationalen Datenbank. Dieser Wrapper macht aus dem im Dokument gespeicherten XML zum Beispiel eine SQL-Anweisung. Diese wird an die relationale Datenbank geschickt und dort dann ausgeführt. Das Resultat ist eine Tabelle, in der die Daten des XML-Dokuments gespeichert sind. Bei der Abfrage funktioniert das dann wieder umgekehrt. Das Ergebnis der Abfrage wird durch den Wrapper geschleust und am Ende fällt wieder ein XML-Dokument heraus.

Variante drei, also die nativen XML-Datenbanken, arbeiten mit den Dokumenten in ihrer ‚rohen Form‘. Die Daten bleiben also als XML erhalten und werden lediglich indiziert. Der Zugriff auf die Daten erfolgt über XQuery oder XPath dem XML-äquivalent zu SQL.

Da die ersten genannten Typen quasi nur erweiterte relationale Datenbanken sind gehe ich im Folgenden nur auf den letzten Typus näher ein.

Welche Vorteile bietet mir eine XML-Datenbank?

Zugegeben, das gerade verwendete Beispiel gibt jetzt nun wirklich nicht her, warum man sich mit diesem Thema auseinandersetzen sollte. Interessant wird es jedoch, wenn man sich strukturierte Datenmengen ansieht, wie sie jeden Tag in eigentlich jedem Unternehmen anfallen. Kunden bestellen Waren, Rechnungen und Mahnungen werden geschrieben und Waren werden natürlich auch versandt. Für all diese Schritte braucht es unterschiedliche Dokumente: Bestellungen, Auftragsbestätigungen, Rechnungen, Mahnungen, Lieferscheine

Und diese Dokumente sind der klassische Fall einer strukturierten Datensammlung. Jedes Dokument enthält einzelne Daten, wie zum Beispiel einen Teil der Stammdaten des Kunden und natürlich auch einen großen Teil sich wiederholender Daten, zum Beispiel für jedes einzelne Produkt. Diese Daten werden von XML-Datenbanken als komplette Dokumente gespeichert. Und die Dokumentstruktur muss dabei noch nicht mal bekannt sein, weshalb auch vollkommen unstrukturierte Elemente gespeichert und verwaltet werden können.

Wichtiger ist aber, dass es sich bei XML um einen offenen Standard des W3C handelt, der inzwischen weit verbreitet ist. Dies sorgt dafür, dass es zahlreiche Implementierungen dieses Standards gibt, die eine Vielzahl an Tools mit sich bringen mit denen XML gelesen und bearbeitet werden kann. Der Austausch von Daten kann somit viel leichter erfolgen, als bei klassischen Datenbanksystemen.

Daraus folgt auch, dass bei einigen Anwendungen die Umwandlung der gespeicherten Daten wegfallen kann: XML ist gerade im Internet und in Webanwendungen weit verbreitet. Bei der Verwendung relationaler Datenbanken führt der Weg im schlimmsten Fall von der Übersetzung von XML in SQL, um das Ergebnis der Anfrage dann wieder in XML zu übersetzen, um es an den Nutzer der Website oder der Anwendung auszuliefern.  Ein Aufwand den man sich dann sparen kann.

Darüber hinaus ist XML für den Menschen lesbar und damit auch in einem Worst-Case-Szenario zur Not auch noch ‚ausgedruckt‘ verwendbar. Relationale Datenbanken bieten diesen Komfort in der Regel nicht. Wie sinnvoll das aber ist, darf jeder für sich selbst entscheiden.

 

Da könnte ja jeder kommen! Hat XML überhaupt das Zeug zur Datenbank?

Die Antwort hier ist einfach: Definitiv! XML bietet eigentlich alles, was man so braucht, wenn man sich ein Datenbanksystem basteln möchte: Gespeichert werden sämtliche Daten in XML-Dokumenten (storage), die gewissen Regeln in Form einer Dokumenttyp-Definition folgen müssen (schemas). Der Zugriff erfolgt über Abfragesprachen (query languages) wie zum Beispiel XPath, XQuery oder XQL. Und das gute alte DOM dient als Schnittstelle zur Programmierung des Systems (programming interface).

Damit wäre der erste Schritt zur Datenbank schon mal geschafft. Aber natürlich sind das noch nicht alle Anforderungen, die ein Datenbanksystem erfüllen muss. Einige der Allgemeinen Anforderungen wären an vorderster Stelle die Performance, die Skalierbarkeit, eine Implementierung von Zugriffsrechten und daraus resultierend natürlich die Fähigkeit mit vielen Anfragen, sogenannten Transaktionen, von vielen Benutzern gleichzeitig klar zu kommen. Den Knackpunkt stellt dabei aber, bei egal welchem Datenbanksystem, die Performance dar. Und gerade in diesem Punkt scheiden sich die Geister, wenn es um XML-Datenbanken geht. So sind bei XML-Datenbanken neben der reinen Menge an möglichen Daten, auch die unterschiedlichen Größen der einzelnen Datensätze in die Kalkulation einzubeziehen. Die gespeicherten XML-Dokumente können von sehr kleinen Dateien, bis zu richtig großen Dokumenten mit unzähligen Einträgen reichen. Und bei der Suche innerhalb dieser Dokumente sollte für den Anwender kein Performanceunterschied erkennbar sein.

Eine große Hürde ist in vielen Firmen die Originaltreue der Dokumente. Diese ist besonders in der Kommunikationen mit dem Kunden von großer Bedeutung. Jede Korrespondenz mit dem Kunden rund um einen Kauf muss eine bestimmte Zeit archiviert werden. Einer der Vorteile von XML-Dokumenten liegt gerade in der Möglichkeit komplette XML-Dokumente auch abteilungsübergreifend austauschen zu können. Damit diese dann auch jederzeit unverändert vorhanden sind, muss eine XML-Datenbank diese gesamten Dokumente auch entsprechend verwalten können.

Wollt ihr in einer Firma XML-Datenbanken einsetzen muss auch geklärt sein, wie bisher die Daten gespeichert wurden. Sind alte Datenbanken vorhanden und können diese ohne Probleme in die neue Datenbank integriert werden? Oder gibt es vielleicht Maschinen im Fuhrpark, die zu alt sind und deshalb mit XML-Datenbanken nicht zusammenarbeiten können? In so einem Fall müssen die Daten, die diese Maschine braucht, zumindest noch in dem alten System vorgehalten werden. Da sich aber auch hier die Daten ändern können müssen, braucht es eine Anbindung anderer Datenquellen an eure XML-Datenbank. Auch das muss geleistet werden.

 

Spezielle Anforderungen an XML-Datenbanken

Neben diesen allgemeinen Anforderungen bringt XML aber selbst noch einige Anforderungen mit, die erfüllt sein wollen. Darunter fallen natürlich erst mal die Klassiker der XML Grundlagen wie Wohlgeformtheit und Validität. Eine dieser zusätzlichen Anforderungen wäre demnach die Konformität mit den eigenen Standards. Eine XML-Datenbank sollte die Einhaltung dieser Standards natürlich gewährleisten. Diese Anforderung muss in beide Richtungen erfüllt werden! Natürlich muss auch das, was am Ende der Anfrage aus der Datenbank herausfällt wieder den Anforderungen von XML an sich selbst genügen. Dabei reicht es nicht, dass Dokumente einzeln wieder aus der Datenbank herausgereicht werden. Datenbankabfragen erwarten in der Regel aggregierte Daten aus unterschiedlichen Bereichen des Datenbestands. Ein Beispiel wäre die Abfrage der Kilometerleistung des Firmenfahrzeugs eines Außendienstmitarbeiters aus dem Fuhrpark einer Firma. Hier werden Daten aus vielen Bereichen benötigt, die unter Umständen nur schlecht miteinander verbunden sind. Und auch dieses Ergebnis muss am Ende XML-konform an das anfragende Tool ausgeliefert werden.

XML-Dokumente können extrem kompliziert werden. Es gibt keine Beschränkung der Verschachtelungstiefe und auch wiederkehrende Strukturen können beliebig tief verschachtelt werden. Das kann natürlich bei der Indizierung eines solchen Dokuments zu Problemen führen. Eine XML-Datenbank muss diese Dokumente ohne Einschränkungen unabhängig von der Struktur des einzelnen Dokuments speichern und verwalten können.

Eines der Steckenpferde von XML ist der plattformunabhängige Datenaustausch über das Internet. Eine Webanbindung erscheint deshalb als unabdingbare Voraussetzung. Dabei sollten die Dokumente im Idealfall auch unabhängig von der Internetverbindung genauso schnell durchsucht und abgefragt werden können, als wären die Dokumente lokal auf der anfragenden Maschine gespeichert.

Wenn wir schon beim Internet sind, spielt natürlich auch die Internationalisierung eine wichtige Rolle. Unterschiedliche Zeichensätze müssen dabei genauso berücksichtigt werden können, wie die sprachspezifischen Vorlieben der Anwender. Bei den Zeichensätzen haben sich utf-8 und utf-16 inzwischen weitestgehend als Standard etabliert. Diese sollten also mindestens unterstützt werden. Im Idealfall achtet das System bei der Ausgabe dann auch noch auf die Sprachgewohnheiten des Anfragenden in Bezug auf gängige Sortierreihenfolgen. Hier kann es tatsächlich zu Problemen im internationalen Geschäft kommen.

Bitte beachtet: Diese Aufzählung erhebt keinen Anspruch auf Vollständigkeit. Die Möglichen Anforderungen an ein XML-Datenbanksystem sind so vielzählig wie seine Einsatzmöglichkeiten.

 

Wie komme ich an die Daten?

XML ist prinzipiell vom Menschen lesbar. Man könnte nun also auch per Hand durch diverse XML-Dateien suchen und sich die entsprechenden Daten zusammensuchen. Das ist natürlich nicht praktikabel, wie oben aber bereits angerissen in einem Worst-Case-Szenario immer noch möglich. Viel einfacher geht es jedoch mit XQuery. Dabei handelt es sich um eine ebenfalls vom W3C spezifizierte Abfragesprache für XML-Datenbanken. Mit seiner stark an SQL und XSLT und C angelehnten Syntax ist es zum einen mit einem erstaunlich geringen Aufwand zu erlernen bzw. einzusetzen und zum anderen auch in der Lage sehr mächtige Skripte zur Abfrage von Daten aus einer XML-Datenbank auszuführen.

XQuery fungiert dabei, genauso wie SQL, nicht nur als reiner Abfragemechanismus. Beide Sprachen bringen alle nötigen Funktionen mit, um Daten und Datenbanken in ihrem jeweiligen System anlegen, auslesen, manipulieren, anfügen und löschen zu können. Mit diesen Funkionen hat man klassischerweise nach einem Text oder Wert gesucht und diesen ausgegeben, eingetragen oder manipuliert. Klassische Datenbanksysteme bieten demnach nur die Möglichkeit nach Werten oder Texten anzufragen. Da XML aber komplexere Strukturen ermöglicht, als es die relationalen Systeme bieten, tut sich hier eine komplett neue Welt der Anfragen auf: Neben wert- und textorientierten Anfragen, bietet XML die Möglichkeit strukturorientiert, verweisorientiert, schemaorientiert, namensraumorientiert und metadatenorientiert auf die gespeicherten Daten zugreifen zu können. Und natürlich kann man auch Kombinationen daraus anfragen.

Die Anfragetypen kurz erläutert
Wertorientierte und textorientierte Anfragen setze ich jetzt einfach mal als bekannt voraus. Zudem lässt sich aus den Namen schon erschließen, worauf zugegriffen wird. Für die anderen Typen möchte ich euch eine kurze Erläuterung liefern, die jedoch kein Tutorial für die Anfrage via XQery oder XPath darstellt! Ich bin mir auch ziemlich sicher, dass ihr diese Anfragetypen nicht im Detail wissen müsst. Aber von ihnen gehört haben solltet ihr schon.

  • Strukturorientiert
    Eine strukturorientierte Anfrage liefert Werte des gesuchten Attributes oder ganze Dokumente zurück, in denen das Attribut vorhanden ist. Bei unserem obigen Beispiel wäre eine Anfrage nach dem Vornamen eine solche Anfrage. Sie würde euch als Ergebnis alle Vornamen zurückliefern.
  • Verweisorientiert
    Nein, hier geht es nicht darum, die Berufsschüler unter euch herauszulesen, die einen Verweis bekommen haben. Die verweisorientierte Anfrage liefert euch eine Liste der Dokumente, die entweder auf eine bestimmte Stelle in eurer Datenbank verweisen, oder eine Liste an Dokumenten, auf die aus einem anderen Dokument verwiesen wird.

Bis hierhin waren die Anfragetypen noch recht leicht nach zu vollziehen. Die nächsten, finde ich, stellen aber echte Kopfnüsse dar, die man erst mal ein bisschen analysieren muss, bis man sie verstanden hat.

  • Schemaorientiert
    Eine schemaorintierte Anfrage vergleicht Dokumente mit ihrer jeweiligen schematischen Beschreibung und liefert, bei entsprechender Anfragestellung, zum Beispiel alle Dokumente auf, bei denen die Zeichenketten genau die Anzahl maximal erlaubter Zeichen beinhaltet. Die Sinnhaftigkeit hat sich mir jetzt noch nicht erschlossen und wird wahrscheinlich auch in keiner Mediengestalter-Abschlussprüfung auf diesem Planeten jemals abgefragt werden.
  • Namensraumorientiert
    Eine namensraumorientierte Anfrage liefert euch alle Dokumente, Elemente oder Attribute zurück, die in irgendeiner Form Elemente und Objekte eines bestimmten Namensraums enthalten. Ein Namensraum ist ein in der Programmierung verwendeter Begriff. In einem Namensraum werden Objekte eindeutig mit einem Namen bezeichnet und in einer Baumstruktur abgelegt. Diese Objekte können dann über ihren Namen eindeutig angesprochen werden (Wikipedia).  Ihr könntet also fragen: Welche Dokumente enthalten Elemente oder Objekte aus dem PHP-Namensraum? Und die Datenbank würde euch alle entsprechenden Dokumente liefern.
  • Metadatenorientiert
    Eine metadatenorientierte Anfrage durchsucht nicht den Inhalt eines Dokumentes, sondern die Metadaten. Sie liefert euch also entsprechend alle Dokumente zurück, die zum Beispiel am 24.12.2015 angelegt wurden. Oder alle Dokumente die vom Christkind gespeichert wurden. Eine metadatenbasierte Suche ist also immer dann interessant, wenn man nichts über den Inhalt eines Dokuments weiß, aber zumindest noch weiß wann oder wer das Dokument angelegt hat.

 

Fazit

Dieser Artikel kann euch hoffentlich die für die Prüfung relevanten Informationen liefern. Für mich war die Auseinandersetzung damit mal wieder ein lehrreicher Moment. Auch wenn ich zugeben muss, dass ich bei allen Informationen die ich bisher gelesen habe, noch kein wirkliches Argument erhalten habe, warum man von relationalen Datenbanken auf XML-Datenbanken wechseln sollte. Gerade bei extrem großen Datenmengen scheint mir die Performance doch sehr stark zu leiden. Das liegt aber wohl in der Natur der Sache. Eine Datei zu öffnen, sie zu durchsuchen und dann wieder zu schließen dauert nun mal länger, als in einer Tabelle nach den Verknüpfungen zu suchen. Mit der Performance steht und fällt aber der flächendeckende Einsatz einer solchen Technologie.

Persönlicher Geschmack hingegen ist es, dass ich SQL deutlich einfacher anzuwenden finden, als XQuery. Das kann durchaus daran liegen, dass ich mit SQL mehr vertraut bin, aber XQuery erinnert stark an reguläre Ausdrücke und damit verbinde ich keine wirklich guten Erinnerungen. Das aber nur am Rande.

Ein Thema, das mir im Zuge meiner Recherche aber so gut wie gar nicht auf den Tisch gekommen ist, ist der Punkt Sicherheit. Wie sicher sind die Daten gespeichert? Wie sichere ich meine Websites ab, wenn sie auf eine XML-Datenbank losgelassen wird? Wie kann ich verhindern, dass ein Benutzer meiner Website Unfug treibt? Die Frage ist dann: Ist es nicht nötig, weil es sicher ist? Oder wird es einfach noch nirgends eingesetzt?
Bleiben am Ende eigentlich nur zwei Vorteile auf der Haben-Seite einer XML-Datenbank: Die Flexibilität, weil man sich an keine starren Tabellenstrukturen halten muss und der leichtere plattformübergreifende Datenaustausch. Nicht viel, wenn man zuerst denkt, es wäre der nächste große Wurf . Warum der zfa diesem Nischenthema jetzt ein eigenes Prüfungsthema widmet, erschließt sich mir beim besten Willen nicht.

 

Weiterführende Links

Folgende Links stellen keine ausführliche Liste aller Informationen dar, die es im Netz zum Thema XML-Datenbanken zu finden gibt. Sie enthält aber die Links, die mir beim Zusammentragen der hier enthaltenen Informationen nützlich waren und für euch zur weiterführenden Recherche durchaus nützlich sein können.

Die w3schools haben eine sehr gute, wenn auch englische Zusammenstellung rund um XML, XSLT, XPath und Xquery.
Die wohl erste Quelle zum Thema native XML-Datenbanken findet ihr auf xml.com. Dieser Artikel ist auch weiter oben schon referenziert.
Einen guten Überblick über XML-Datenbanken liefert euch diese Präsentation zum Thema XML-Datenbanken. Hier ist aber schon ein bisschen mehr Verständnis für die tieferliegenden Vorgänge von Nöten.
Sehr ausführlich geht diese Präsentation auf das Thema XML und Datenbanken ein. Vorkenntnisse sind auch hier von Vorteil.
Ein Beispiel für eine Opensource XML-Datenbank mit kommerziellem Support findet ihr bei exist-db.

Jetzt seid Ihr dran!

Habt ihr einen Fehler gefunden? Wollt ihr weitere Infos rund um XML-Datenbanken? Habt ihr Interesse an einer kleinen Einführung in XQuery? Schreibt mir doch einfach in die Kommentare wie tief ihr einsteigen wollt. Und natürlich freue ich mich auch jederzeit über Eure Verbesserungsvorschläge und Kritik. Ich freue mich darauf, von euch zu lesen.