Fakultät Elektronik und Informatik Wintersemester 2016 / 2017 XML-Verarbeitung mit der XML-Datenbank BaseX Ken Brucksch Nicolai Klingler Betreuer: Prof. Dr. Küpper 16. Januar 2017 Inhaltsverzeichnis 1 Vorwort 3 2 Einführung 2.1 4 Rückblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.1 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.2 XSLT 4 2.1.3 XQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Aktuelle Situation 2.3 Motivation 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Grundlagen 6 3.1 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.3 XQuery 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3.1 XQuery Update Facility 3.0 . . . . . . . . . . . . . . . . . 8 3.3.2 XQuery Full Text 3.0 8 . . . . . . . . . . . . . . . . . . . . 4 BaseX 9 4.1 Erhältliche Ausführungen . . . . . . . . . . . . . . . . . . . . . . 4.2 Unterstütze Standards . . . . . . . . . . . . . . . . . . . . . . . . 9 4.3 Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4.4 Technologie 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Evaluierung der Ezienz 9 11 5.1 Gerät / Umgebung . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5.2 Testaufbau 12 5.3 Datenbank befüllen . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.4 Datensätze abfragen . . . . . . . . . . . . . . . . . . . . . . . . . 13 5.5 Datensätze manipulieren . . . . . . . . . . . . . . . . . . . . . . . 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Fazit / Ausblick 16 7 Anhang 17 7.1 A: createCatalog.sh . . . . . . . . . . . . . . . . . . . . . . . . . . 17 7.2 B: Querys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2 1 Vorwort Seit den 1970er Jahren gelten die relationalen Datenbanksystemen auf dem Markt als Standard. Doch mit den NoSQL-Datenbanksystemen sind echte Alternativen erschienen. Eine dieser Systemgattungen, welches einen genaueren Blick lohnt, sind die XML-Datenbanksysteme und im Besonderen BaseX. Die XML-Datenbanksysteme unterstützen im Vergleich zu anderen dokumentorientierten Datenbankensystemen einen Groÿteil der standardisierten Abfragesprachen wie XPath und XQuery. BaseX besitzt eine hohe Standardkonformität der W3C-Empfehlungen und Erweiterungen. Zudem bietet BaseX durch seine integrierte Benutzeroberäche eine einfache Bedienung und gute Übersicht zum Analysieren der Daten. 3 2 Einführung BaseX wurde im Jahr 2005 von Christian Grün an der Universität Konstanz ins Leben gerufen und ist ein plattformunabhängiges XML-Datenbankmanagementsystem. Es ist mittlerweile ein Open-Source-Projekt und wird von einer Community auf GibHub entwickelt. Dieses System wird hauptsächlich zur Speicherung, Anfrage und Visualisierung groÿer XML-Dokumente und -Sammlungen verwendet. 2.1 Rückblick Seit nun mehr als 20 Jahren ist XML ein Standard in der IT-Welt, welcher nur 4 Jahre nach seinem geistigen Vorgänger HTML die Bühne betrat. Und der elegante Ansatz, welcher Inhalt und Struktur zu einer Einheit verschmelzen lieÿ und dadurch sowohl leicht vom menschlichen Auge als auch von Programmen analysiert werden kann, ndet Anklang. 2.1.1 XPath XPath ist ein Abfragesprache um Elemente eines XML-Dokuments abzufragen und ist seit 1999 ein Standard des W3-Konsortiums. Auch die XPath-Ausdrücke sind eben so eektiv wie intuitiv. Solche ein Ausdruck adressiert Pfade innerhalb eines XML-Dokuments, welches dabei als Baum, ähnlich wie das Linux-Dateisystem, betrachtet wird. 2.1.2 XSLT Zusammen mit XML und XPath bildet XSLT die Grundlage. Dabei werden XML-Daten statisch abgelegt und in relationale Datenbanken persistiert. Dafür ist aber eine aufwändige Aufbereitung von XML in das relationale Modell nötig. XSLT kann Daten aufbereiten, persistiert sie aber nicht in eine Datenbank. 2.1.3 XQuery XQuery füllt diese Lücke, da es in der Lage ist XML-Daten in Datenbanken zu schreiben. Seit 2005 gilt es ebenfalls als Standard. Wie auch XSLT baut XQuery auf XPath auf und ist somit Abwärtskompatibel. Jeder XPath-Ausdruck ist auch ein gültiger XQuery-Ausdruck. Zudem ist XQuery aber auch eine funktionale Script-Sprache, mit der umfangreiche Programme geschrieben werden können. 4 2.2 Aktuelle Situation Die XML-Standards haben sich im Bereich des Datenaustausches durchaus etabliert. In Sachen Datenhaltung hingegen noch keinen durchschlagenden Erfolg zu verbuchen. Dies liegt vermutlich daran, dass der Umstieg von einem gut funktionierenden auf ein unbekanntes, aber ebenso gut funktionierendes Konzept sehr viel Mut erfordert und deshalb nur dann gemacht wird, wenn es triftige Gründe für eine solche Umstellung gibt. Auch muss im Fokus stehen welche Anforderung für das System Priorität haben. 2.3 Motivation Ziel dieser Arbeit besteht darin den Horizont in Bezug auf Datenbanksysteme zu erweitern und ernsthaft zum Nachdenken anregen soll, ob ein Umstieg auf ein alternatives Datenbankkonzept oder die erstmalige Verwendung einer solchen Datenbank für ein neues Projekt sinnvoll erscheinen könnte. Des weiteren soll erarbeitet werden, ob der produktive Einsatz von BaseX empfehlenswert ist und wie sich das Datenbanksystem in Sachen Ezienz und Benutzerfreundlichkeit im produktiven Einsatz verhält. 5 3 Grundlagen Die bereits vorgestellten Standards sind Teil der Grundlage für das Konzept der XML-Datenbanken. Diese Datenbanken zeichnen sich dadurch aus, dass sie ihre Datensätze in XML-Dokumenten speichern und diese dann indexieren und ezient durchsuchen können. Dadurch gehören sie zu den dokumentorientierten Datenbanksystemen. Die Abfragemethoden solcher Datenbanken gehen meist über den SQL Standard hinaus. Gewöhnlich werden bei den meisten bekannten Datenbanken die Daten in tabellarischer Form gespeichert. NoSQL soll dabei eine Alternative zu den herkömmlichen relationalen Datenbanken darstellen. Dabei soll dies kein kompletter Gegensatz zu SQL sein, denn wie der Name schon sagt steht das Modell für "not only SQL", zu Deutsch also "nicht nur SQL". 3.1 XML XML (Extensible Markup Language) ist eine Computersprache zur hierarchisch strukturierten Darstellung von Daten als Textdateien. Diese Textdateien werden hauptsächlich zum plattformunabhängigen und programmunabhängigen Austausch von Daten verwendet. Sie gilt seit 1996 als Standard und das World Wide Web Consortium (W3C) hat 2008 die fünfte Auage der XML-Spezikation veröentlicht. Diese Spezikation beschreibt XML als eine Metasprache, die durch strukturelle und inhaltliche Einschränkung systemspezische Sprachen zum Datenaustausch deniert. Die Einschränkung geschieht durch eine DTD-Datei oder ein XML Schema. <?xml v e r s i o n ="1.0"? > <x s : schema x m l n s : x s=" h t t p : / /www . w3 . o r g / 2 0 0 1 /XMLSchema"> <x s : e l e m e n t name=" c a t a l o g "> <x s : complexType> <x s : s e q u e n c e > <x s : e l e m e n t name="book " m i n O c c u r s ="1" maxOccurs="unbounded"> <x s : complexType> <x s : s e q u e n c e > <x s : e l e m e n t name=" a u t h o r " <x s : e l e m e n t name=" t i t l e " t y p e =" x s : s t r i n g "/> t y p e ="x s : s t r i n g "/> <x s : e l e m e n t name=" p r i c e " t y p e =" x s : d o u b l e "/> </ x s : s e q u e n c e > <x s : a t t r i b u t e name=" i d " </ x s : complexType> </ x s : e l e m e n t > </ x s : s e q u e n c e > </ x s : complexType> </ x s : e l e m e n t > </ x s : schema> 6 t y p e =" x s : s t r i n g " u s e =" r e q u i r e d "/> So sieht ein XML-Schema für ein Katalog, der mindestens ein Buch enthält. Diese Datei wird unter dem Namen catalog.xsd abgelegt. Im Bezug auf relationale Datenbanken könnte man es auch als sehr einfaches relationales Modell betrachten. Der Datensatz an sich wäre dann eine dem Schema entsprechendes XMLDatei. Solch eine Datei könnte wie folgt aussehen: <?xml v e r s i o n ="1.0"? > <c a t a l o g > <book i d ="b k 1 0 1"> <a u t h o r >G a m b a r d e l l a , Matthew</a u t h o r > < t i t l e >XML D e v e l o p e r ' s Guide </ t i t l e > < p r i c e >20.45 </ p r i c e > </book> <book i d ="b k 1 0 2"> <a u t h o r >R a l l s , < t i t l e >M i d n i g h t Kim</a u t h o r > Rain </ t i t l e > < p r i c e >15.95 </ p r i c e > </book> </ c a t a l o g > 3.2 XPath Wie bereits erwähnt adressiert XPath Teile eines XML-Dokuments. Mit dieser Sprache kann man also einen Teil des XML-Dokuments einfach abfragen. XPath ist seit dem 8.April.2014 in der Version 3.0 standardisiert. Dieser Ausdruck liefert den Titel des Buches mit der ID bk101: / c a t a l o g / book [ @id="b k 1 0 1 " ] / t i t l e Mit XPath haben wir die Möglichkeit einfache Abfragen an die XML-Datenbank zu tätigen. Vergleichbar wäre dies mit einem einfachen SELECT-Statement in SQL. Die XPath-Ausdrücke greifen dabei nur auf eine einzelne XML-Datei zu, nicht wie SQL auf mehrere Tabellen. Ein Join wie bei SQL ist hier nicht möglich, allerdings lässt sich eine SQL-Tabelle nicht ganz mit einer XML-Datei vergleichen, da sich die Struktur deutlich unterscheidet. Doch eine XML-Datenbank wird erst dann interessant wenn die Abfragen nicht nur auf ein einzelnes Dokument zugreifen kann sondern eine Abfrage ihre Informationen aus mehreren Dokumenten ziehen kann. Auÿerdem bietet XPath zwar die Möglichkeit Daten zu lesen, jedoch nicht Daten in eine Datei oder Datenbank zu schreiben. 7 3.3 XQuery Mit XQuery bietet sich, seit es als Standard im Jahre 2005 eingeführt wurde, eine Möglichkeit schreibend auf XML-Dokumente zuzugreifen. Derzeit ist die aktuellste Recommendation die Version 3.1, vom 13.Dezember.2016. XQuery baut auf XPath auf, aber im Gegensatz dazu ist es auÿerdem möglich Datensätze aus unterschiedlichen XML-Dokumenten abzufragen. Das ist im Bezug auf relationale SQL-Datenbanken mit Verbundoperationen wie Join zu vergleichen. Die zugrunde liegende Datenstruktur in XQuery ist die Sequenz. Sie bildet eine geordnete Liste mit beliebig vielen enthaltenen Elementen ab. Diese Sequenzen können auch Duplikate enthalten. XQuery bietet Funktionen zur Abfrage von Kardinalitäten solcher Sequenzen an. Da XQuery nicht nur eine Abfrage-Sprache sondern auch eine funktionale Script-Sprache ist bietet sie die Möglichkeit zur Verwendung von Variablen wie es auch in anderen Programmiersprachen der Fall ist. Diese Variablen beginnen in mit dem $-Präx. Des weiteren stehen auch Funktionen zur Sortierung von Sequenzen zur Verfügung. Ein kleines Beispiel-Skript welches alle Titel von Büchern des obigen catalog.xml, die mehr als 16A C kosten, sortiert ausgibt könnte wie folgt aussehen: for $book in d o c ( " c a t a l o g . xml " ) / c a t a l o g / book where $ b o o k / p r i c e >16 order by return $book / t i t l e $book / t i t l e Hier sieht man das sich der Syntax von XQuery stark an bekannte Sprachen wie SQL und C anlehnt. 3.3.1 XQuery Update Facility 3.0 Die Update Facility in der Version 3.0 ist eine XQuery Erweiterung, die vom W3-Consortium als Standard veröentlicht wurde. Durch diese Erweiterung ist es möglich persistente Änderungen an einer Instanz eines XQuery- oder XPathModells 3.0 vorzunehmen. Um zu begreifen wie essenziell diese Funktion für eine Datenbank ist stelle man sich einfach eine gewöhnliche relationale SQLDatenbank vor, die keine Möglichkeit bietet vorhandene Datensätze zu persistent zu manipulieren. 3.3.2 XQuery Full Text 3.0 XQuery beinhaltet auch ohne diese Erweiterung eine rudimentäre VolltextSuche. Doch für komplexe Volltext-Suchen sind Syntax-Erweiterungen von XQuery nötig. Dies übernimmt die XQuery Full Text 3.0 Erweiterung des W3-Consortiums. Dieses Erweiterung bietet alle nötigen Funktionen um sehr komplexe VolltextSuchanfragen gegen eine XML-Datenbank zu tätigen. 8 4 BaseX In diesem Kapitel wird das XML-Datenbanksystem BaseX genauer betrachtet. Zur genaueren Betrachtung gehören auch eine Evaluierung mit Tests im kleineren Umfang um Aussagen bezüglich der Ezienz des System im Vergleich zu herkömmlichen Datenbanksystemen machen zu können. Auf die Tests und ihre Durchführung wird im weiteren Verlauf noch genauer eingegangen. BaseX ist in Java implementiert und setzt eine Java Laufzeitumgebung in der Version 7 voraus. Aktuell ist das System in der Version 8.5.3 verfügbar. Es unterstützt folgende Dateiformate: XML, HTML, JSON, CSV, Text, Binärdaten. BaseX verwendet eine tabellarische Abbildung von Baumstrukturen für die Speicherung von XML-Dokumenten. Eine Datenbank kann daher sowohl aus einer einzelnen XML-Datei als auch durch eine Sammlung solcher Dateien realisiert werden. 4.1 Erhältliche Ausführungen BaseX ist ein plattformunabhängiges und sehr leichtgewichtiges Datenbanksystem. Es steht in verschiedenen Ausführungen zum Download bereit: • Windows Installer EXE-Datei • Standalone JAR-Datei • Webapplikation WAR-Datei Auÿerdem existiert eine Server-Client Anwendung, die sowohl Benutzerverwaltung als auch Transaktionsmanagement beinhaltet. Zusätzlich hat die zuständige Community verschiedene vorgefertigte Docker-Images auf Dockerhub veröentlicht, damit die Anwendung von der Virtualisierungssoftware Docker als Container betrieben werden kann. 4.2 Unterstütze Standards BaseX unterstützt eine groÿe Bandbreite von wichtigen Standards: • XPath-Ausdrücke • XPath/XQuery 3.1 • XQuery Update Facility 3.0 XPath/XQuery Full Text 3.0 Unterstützung der meisten EXPath-/EXQuery-Module EXPath und EXQuery sind zusätzliche Erweiterungen der bereits vorgestellten Standards. 9 4.3 Schnittstellen Zudem sind für BaseX viele Schnittstellen implementiert damit das System möglichst vielfältig eingesetzt werden kann. Lässt man das Datenbanksystem lokal laufen kann man die integrierte GUI dazu nutzen groÿe XML-Datei-Sammlungen einfach und schnell zu analysieren und durch die Verwendung der ausführbaren JAR-Datei ist dazu nicht einmal eine Installation nötig. Wird das System als Webservice bereitgestellt ist es über folgende API`s erreichbar. • REST • WebDAV • XML:DB • XQJ • Java • C# • Perl • PHP • Python und andere Sprachen 4.4 Technologie Die Funktionsweise dieses Datenbanksystems ist einfach zu verstehen. Die Datensätze selbst liegen in den XML-Dateien. Wird eine Datenbank aus einer XML-Datei erstellt so wird die XML-Datei eingelesen, indexiert und zusätzliche Meta-Daten abgespeichert um schnelle Zugrie gewährleisten zu können. Um XML-Daten verarbeiten zu können benötigt ein XML-Datenbanksystem selbstverständlich einen XML-Parser. BaseX bietet hierfür zwei Möglichkeiten. Da das gesamte System in Java implementiert ist kann zum einen der JavaDefault-Parser verwendet werden. Zum anderen bietet BaseX aber auch einen zusätzlichen XML-Parser der für die Verwendung in XML-Datenbanksystemen optimiert wurde. Die XPath-Accelerator-Kodierung und der Staircase-Join-Operator dienen als Grundlage für die Beschleunigung von XPath-Lokalisierungsschritten. Des Weiteren verfügt BaseX über zahlreiche Indexstrukturen, die die Anfragegeschwindigkeit von Pfadoperationen, Attribut- und Textvergleichen und Volltextsuchen beschleunigen. In wie weit der zusätzliche XML-Parser einen Vorteil bietet wird sich aus den Tests für die Evaluierung der Ezienz ergeben. 10 5 Evaluierung der Ezienz Im folgenden Kapitel wird durch Tests im angemessenen Rahmen die Ezienz des BaseX-Datenbanksystems gemessen. Um die Ergebnisse der Evaluierung sinnvoll einordnen zu können werden die selben Eingaben-, Ausgaben- und Update-Operationen auch an einer relationalen SQL-Datenbank durchgeführt. Die SQL-Datenbank steht hierbei repräsentativ für die gängigen Datenbanksystemen in Produktion. Die Auswahl el hierfür auf die PostreSQL-Datenbank. Sie ist ebenfalls ein Open-Source-Projekt und wird von der eigenen Community als die fortschrittlichste Open-Source-Datenbank bezeichnet. Die Tests für die Datenbanken können natürlich nur für Datenmengen unterhalb des BigData-Bereichs sprechen. Die Systeme werden jeweils mit bis zu einer Millionen Datensätzen befüllt, Daten abgefragt und Update-Operationen durchgeführt. 5.1 Gerät / Umgebung Notebook: Sony Vaio Modellnummer: SVE1512W1EB CPU: Intel i5 Quadcore, 4 x 2,5 GHz RAM: 8GB DDR3 Festplatte: 1TB HDD Betriebssystem: Ubuntu 16.04 LTS Docker-Version: 1.12.5 PostgreSQL-Version: 9.6.1 BaseX-Version: 8.5.3 Die PostgreSQL Datenbank wird in einem Docker-Container ausgeführt. Dabei wurde das ozielle Postgres-Image von Dockerhub verwendet. Die BaseX Datenbank wird als ausführbare JAR-Datei direkt über die Konsole des Betriebssystem gestartet. 11 5.2 Testaufbau In beiden Datenbanksystemen wird eine Datenbank namens Catalog angelegt. Um die Datenbanken zu befüllen wurde ein Shell-Skript (siehe Anhang) geschrieben, dem durch ein übergebenen Parameter mitgeteilt wird wie viele Einträge erzeugt werden sollen. Dieses Skript erzeugt dann eine XML-Datei (catalog.xml) und eine SQL-Datei (catalog.sql) mit INSERT-Anweisungen. Der erzeugte Katalog besteht also aus beliebig vielen Büchern mit einer ID, einem Titel, einem Autor und einem Preis. Titel und Autor sind immer die gleichen Werte. Die ID ist eine fortlaufende Nummer mit dem Präx bk. Der Preis eines Buches wird durch Zufallszahlen generiert. Dabei kann ein Buch zwischen 0.00A C und 49.99A C kosten. Jedes mal wenn man das Skript ausführt erhält man also andere Datensätze. Die Datensätze in XML und SQL sind dabei aber immer identisch. 5.3 Datenbank befüllen Die Datenbanken werden mit unterschiedlich groÿen Datenmengen befüllt. In SQL wird durch INSERT-Anweisungen die entsprechende Tabelle befüllt. In XML wird die Datei ge-parst und indexiert. Die Befüllung wird mit 1.000, 10.000, 50.000, 100.000, 1.000.000 Datensätzen durchgeführt. Beide Systeme bieten die Möglichkeit die Zeit, die für die Ausführung der Operationen nötig sind, zu messen und anzuzeigen. Jede Befüllung wird drei mal vorgenommen und als Ergebnis wird das arithmetische Mittel der drei Durchläufe verwendet. Abbildung 1: Liniendiagramm zu Datensätze einlesen 12 BaseX weist beim Indexieren der Datei eine deutlich höhere Performance als das PostgreSQL-System beim Persistieren des Katalogs auf. Der optimierte Parser bringt zudem noch ein Leistungssteigerung. Man muss allerdings beachten das theoretisch die Zeit für das Ablegen der XML-Datei auf die Festplatte mit ein berechnet werden muss. 5.4 Datensätze abfragen Die Datenbanken werden mit 1.000.000 Datensätzen befüllt. Auf beide Systeme werden zwei Arten von einfachen Abfragen gemacht. Es werden alle Bücher abgefragt, deren Preis über 49.95A C liegt, und es werden einzelne Bücher anhand der ID abgefragt. Die Abfrage aller Bücher mit einem Preis von über 49.95A C werden auf jeden System drei Mal ausgeführt und als Ergebnis wird das arithmetische Mittel betrachtet. Die Systeme liefern bei den vorhandenen Datensätzen 763 Bücher. PostgreSQL BaseX (Default Parser) BaseX (optimierter Parser) 1. Messung 2. Messung 3. Messung 245 ms 204 ms 195 ms 1133.8 ms 1111.1 ms 1150.54 ms 1006.3 ms 1130.57 ms 963.59 ms Ergebnis 214.67 ms 1131.81 ms 1033.49 ms Tabelle 1: Datensätze abfragen (Ausgabe von 763 Bücher) PostgreSQL weist hier eine deutlich bessere Performance als das XML-Datenbanksystem. Der optimierte Parser bring zumindest eine leichte Verbesserung mit sich. Um zu beobachte ob Abfragen anhand der ID des Buches unterschiedliche Zugriszeiten aufweisen wenn sich das gesuchte Buch am Anfang, in der Mitte oder am Ende des Datensatzes bendet, werden die Bücher mit der ID 1.000, 500.000 und 999.999 abgefragt. Jede Messung wird wieder drei Mal vorgenommen und das arithmetische Mittel als Ergebnis betrachtet. ID 1.000 500.000 999.999 1. Messung 2. Messung 3. Messung 13 ms 14 ms 13 ms 14 ms 13 ms 12 ms 14 ms 13 ms 13 ms Ergebnis 13.33 ms 13.33 ms 13.33 ms Tabelle 2: Einen Datensatz abfragen mit PostgreSQL 13 ID 1.000 500.000 999.999 1. Messung 2. Messung 3. Messung 4.05 ms 2.04 ms 2.09 ms 3.33 ms 2.27 ms 1.92 ms 3.50 ms 2.54 ms 2.46 ms Ergebnis 2.74 ms 2.51 ms 2.83 ms Tabelle 3: Einen Datensatz abfragen mit BaseX (Default Parser) ID 1.000 500.000 999.999 1. Messung 2. Messung 3. Messung 4.13 ms 2.58 ms 3.75 ms 3.49 ms 2.38 ms 2.73 ms 2.73 ms 2.00 ms 1.97 ms Ergebnis 3.49 ms 2.90 ms 2.23 ms Tabelle 4: Einen Datensatz abfragen mit BaseX (optimierter Parser) Bei Abfrage nach Primärschlüssel weist BaseX ein bessere Performance auf. Der optimierte Parser bringt dabei keine Verbesserung mit sich. 5.5 Datensätze manipulieren Beim Manipulieren der Datensätze wird ähnlich wie beim Abfragen der Datensätze vorgegangen. Es werden eine Menge von Büchern und einzelne Bücher im Preis reduziert. Jede Operation wird drei Mal ausgeführt und als Ergebnis wird das arithmetische Mittel betrachtet. Bei der ersten Abfrage wird der Preis von einem bestimmten Buch geändert, in der Datenbank wird also genau ein Datensatz manipuliert. PostgreSQL BaseX (Default Parser) BaseX (optimierter Parser) 1. Messung 2. Messung 3. Messung 28 ms 23 ms 25 ms 525.06 ms 487.07 ms 537.82 ms 547.22 ms 579.04 ms 574.25 ms Ergebnis 25,33 ms 516.65 ms 566.84 ms Tabelle 5: Einen Datensatz manipulieren - alle Tools im Vergleich In der zweiten Abfrage werden alle Bücher die mehr als 49,95A C kosten auf 39,95A C reduziert. Bei den generierten Datensätzen sind 783 Bücher betroen. PostgreSQL BaseX (Default Parser) BaseX (optimierter Parser) 1. Messung 2. Messung 3. Messung 286 ms 274 ms 254 ms 1348.09 ms 1443.6 ms 1375.44 ms 1315.71 ms 1334.2 ms 1324.03 ms Tabelle 6: 783 Datensätze manipulieren - alle Tools im Vergleich 14 Ergebnis 271.33 ms 1389.04 ms 1324.65 ms Hier werden beide Abfragen in einem Balkendiagramm gegenübergestellt: Abbildung 2: Balkendiagramm zu Datensätze manipulieren 15 6 Fazit / Ausblick Das XML-Datenbanksystem BaseX kann durchaus als ernst zunehmende Alternative für herkömmliche relationale Datenbanken betrachtet werden. Beide Systeme bieten in unterschiedlichen Arten der Datenmanipulation bzw. Datenhaltung Vorteile bezüglich der Ezienz. Der optimale Einsatz des richtigen Systems ist also abhängig von dem Anwendungsfall des Projekts. Ein Beispiel für einen solchen Anwendungsfall wäre, wenn ein System das ohnehin seinen Datenaustausch über XML regelt und diese Daten zusätzlich noch persistieren muss, so bietet sich ein XML-Datenbanksystem wie BaseX an. Da die Daten nicht erst von XML zu SQL geparst werden müssen, sondern direkt als Datensatz für die Datenbank verwendet werden kann, ist in diesem Fall eine solche Nutzung vorteilhaft, besonders im Hinblick auf die Ezienz. Wie die Testergebnisse zeigen bietet BaseX bei den Abfrageoperationen die mehrere Datensätze abfragen eine weniger gute Ezienz wie herkömmliche SQLSysteme, somit ist bei groÿen Abfragemengen die SQL-Datenbank die bessere Wahl. Durch seine zahlreichen Schnittstellen kann BaseX problemlos in eigene Systeme integriert werden, als Server-Client-Anwendung laufen, als Webanwendung über eine REST-API erreichbar sein oder lokal auf der eigenen Maschine zum laufen gebracht werden und bietet somit für beinahe jeden Anwendungsfall die passende Lösung. Allerdings kann BaseX nicht nur Daten verarbeiten wie man es von Datenbanksystemen erwartet. Es kann auch als Tool zur manuellen Verwaltung von XML-Sammlungen verwendet werden und durch das integrierte Benutzerinterface lassen sich die Daten sehr einfach analysieren und durch Funktionen wie Baumstruktur oder Tabellarische Ansicht übersichtlich darstellen. 16 7 Anhang 7.1 A: createCatalog.sh ####################################### # Usage : . / c r e a t e C a t a l o g . s h <#ENTRIES> # # Script # for to create testing # with read xml basex and and vs . write sql files postgres db access . ####################################### #!/ b i n / b a s h set −e echo ' <? xml echo '< c a t a l o g > ' >> echo ' create author echo v e r s i o n ="1.0"? > ' > table catalog ( id varchar (255) , ' insert f o r ( ( i d =1; into . / c a t a l o g . xml . / c a t a l o g . xml price integer , float , c a t a l o g ( id , i d <= $1 ; title primary title , author , varchar (225) , key ( id ) ) ; ' > price ) ./ catalog . sql values ' >> ./ catalog . sql i d ++)) do p r i c e _ a=$ ( ($RANDOM % 5 0 ) ) p r i c e _ b=$ ( ($RANDOM % 1 0 0 ) ) echo ' echo ' < t i t l e >XML−Datenbanken </ t i t l e > ' >> . / c a t a l o g . xml echo ' <a u t h o r >B r u c k s c h , . / c a t a l o g . xml echo ' echo ' if $ i d = $1 [ <book i d ="bk ' $ i d ' " > ' >> . / c a t a l o g . xml Ken</a u t h o r > ' >> < p r i c e > ' $ p r i c e _ a ' . ' $ p r i c e _ b ' </ p r i c e > ' >> </book > ' >> . / c a t a l o g . xml ] then echo "(" $id " , 'XML−Datenbanken ' , ' " $ p r i c e _ a " . " $ p r i c e _ b " ' ) ; " >> ' Brucksch , Ken ' , ./ catalog . sql else echo "(" $id " , 'XML−Datenbanken ' , ' " $ p r i c e _ a " . " $ p r i c e _ b " ' ) , " >> fi done echo ' </ c a t a l o g > ' >> echo ' creation . / c a t a l o g . xml complete ' 17 ' Brucksch , ./ catalog . sql Ken ' , . / c a t a l o g . xml 7.2 B: Querys XQuery : for $book in where $book / p r i c e > 4 9 . 9 5 return d o c ( " c a t a l o g " ) / c a t a l o g / book $book SQL : ∗ select from catalog where price > 49.95 XQuery : for $book where in d o c ( " c a t a l o g " ) / c a t a l o g / book $ b o o k / @id = " b k 5 6 5 " return $book SQL : ∗ select from catalog where i d = 565 of / c a t a l o g / book [ @id="b k 1 0 0 " ] / t i t l e XQuery : replace with value 'HTML, node CSS und JavaScript ' SQL : update catalog set t i t l e = 'HTML, CSS und JavaScript ' XQuery : for $book where return in d o c ( " c a t a l o g " ) / c a t a l o g / book $book / p r i c e > 4 9 . 9 5 r e p l a c e ( $book / p r i c e , '30.00 ' , $book / p r i c e ) SQL : update catalog set p r i c e =59.95 18 where price > 49.95; where i d =100 Literatur 1. Schoening, Harald. XML und Datenbanken : Konzepte und Systeme [Buch] 2. Michelle Paulson. Extensible Markup Language Wikipedia [Online] https://de.wikipedia.org/wiki/Extensible_Markup_Language [Letzter Zugri: 12.01.2017] 3. Michelle Paulson. BaseX Wikipedia [Online] https://de.wikipedia.org/wiki/BaseX [Letzter Zugri: 16.01.2017] 4. Ocial BaseX Wiki [Online] http://docs.basex.org/wiki/Getting_Started [Letzter Zugri: 11.01.2017] 5. Michelle Paulson. XPath Wikipedia [Online] https://de.wikipedia.org/wiki/XPath [Letzter Zugri: 14.01.2017] 6. Michelle Paulson. XQuery Wikipedia [Online] https://de.wikipedia.org/wiki/XQuery [Letzter Zugri: 14.01.2017] 7. Michelle Paulson. XML-Datenbank Wikipedia [Online] https://de.wikipedia.org/wiki/XML-Datenbank [Letzter Zugri: 28.12.2016] 8. John Snelson, Jim Melton. XQuery Update Facility 3.0 [Online] https://www.w3.org/TR/xquery-update-30/ [Letzter Zugri: 15.01.2017] 9. Mary Holstege, Jim Melton. XQuery and XPath Full Text 3.0 [Online] https://www.w3.org/TR/xpath-full-text-30/ [Letzter Zugri: 15.01.2017] 10. Dr. Christoph Gaukel. BaseX, eine XML-Datenbank [Online] http://www.informatik-aktuell.de/betrieb/datenbanken/nosql-basex-einexml-datenbank.html [Letzter Zugri: 27.12.2016] 11. Stefan Brass. XML und Datenbanken [Online] http://users.informatik.uni-halle.de/ brass/xml07/xmldb.pdf [Letzter Zugri: 16.01.2017] 12. Websiteentwicklung: XML: Aufbau eines XML-Dokumentes [Online] https://de.wikibooks.org/wiki/Websiteentwicklung:_XML:_Aufbau_eines_XMLDokumentes [Letzter Zugri: 04.01.2017] 13. Dr. Markus Siepermann. XML [Online] http://wirtschaftslexikon.gabler.de/Denition/xml.html [Letzter Zugri: 2.01.2017] 14. Oliver Klein. Datenbanken und XML [Online] https://www.urz.uni-heidelberg.de/imperia/md/content/urz/programme/db_und_xml.pdf [Letzter Zugri: 8.Januar.2017] 19 15. Thomas Begerow. XML-Datenbank [Online] http://www.datenbanken-verstehen.de/lexikon/xml-datenbank/ [Letzter Zugri: 27.12.2016] 16. Kircher, Lukas. BaseX: Extending a native XML database with XQuery Update [Online] http://kops.uni-konstanz.de/handle/123456789/15488 [Letzter Zugri: 12.01.2016] 17. M. Scharwies. SelfHTML [Online] https://wiki.selfhtml.org/wiki/XML [Letzter Zugri: 8.01.2016] 18. Prof. Dr. Gustaf Neumann. XML [Online] http://www.enzyklopaedie-der-wirtschaftsinformatik.de/lexikon/technologienmethoden/Sprache/Auszeichnungssprache/XML [Letzter Zugri: 13.01.2016] 19. Basho Technologies. Erklärung von NoSQL-Datenbanken [Online] http://de.basho.com/resources/nosql-databases/ [Letzter Zugri: 13.01.2016] 20. Wolfgang Klimt. Was Sie über NoSQL wissen sollten [Online] http://www.computerwoche.de/a/was-sie-ueber-nosql-wissen-sollten,2528753 [Letzter Zugri: 16.01.2016] 21. XML in relationalen Datenbanksystemen. Uni Jena [Online] http://www.informatik.uni-jena.de/dbis/lehre/ws2012/xml/5-XML%20in %20relationalen%20Datenbanksystemen.pdf [Letzter Zugri: 6.01.2016] 20 Abbildungsverzeichnis 1 Liniendiagramm zu Datensätze einlesen 2 Balkendiagramm zu Datensätze manipulieren . . . . . . . . . . . . . . . . . . . . . . . . . 12 15 Tabellenverzeichnis 1 Datensätze abfragen (Ausgabe von 763 Bücher) . . . . . . . . . . 13 2 Einen Datensatz abfragen mit PostgreSQL . . . . . . . . . . . . . 13 3 Einen Datensatz abfragen mit BaseX (Default Parser) 14 4 Einen Datensatz abfragen mit BaseX (optimierter Parser) . . . . 14 5 Einen Datensatz manipulieren - alle Tools im Vergleich . . . . . . 14 6 783 Datensätze manipulieren - alle Tools im Vergleich 14 21 . . . . . . . . . . . .