XML und Datenbanken
Motivation
XML-Dokumente können für sehr verschiedene Anwendungen eingesetzt werden
Aussehen der Dokumente unterscheidet sich stark
Vielzahl von Methoden zur Speicherung existiert
verschiedene Abfragemethoden
Mehrere Varianten zur Modellierung von XML-
Dokumenten und deren Struktur
Daten oder Dokumente (1)
„Lesbare Dokumente“ (dokumentzentriert)
– sind selten genau gleich strukturiert
– Reihenfolge ist wichtig
– sinntragende Daten auf allen Ebenen, viel Mixed Content
– Volltextsuche ist unabdingbar, aber nicht ausreichend
– Beispiele
Zeitschriftenbeiträge, Bücher
Gebrauchsanweisungen, Handbücher
Präsentationen
Verträge
– 70% der relevanten Geschäftsinformationen in
Daten oder Dokumente (2)
Datenzentrierte Dokumente
– wie Daten im herkömmlichen Sinn (z.B. in relationalen Datenbanken)
– Reihenfolge ist oft nicht relevant
– sind einheitlich und meist einfach strukturiert
– haben Datentypen
– sinntragende Daten in Blattelementen oder Attributen
– Mixed Content ist die Ausnahme (oder Dekoration)
– Beispiele:
Telefonbücher
wissenschaftliche Daten
Fahrpläne, Flugpläne
Bestellungen
Daten und Dokumente
Semistrukturierte Daten
– Strukturiert: Felder
– Unstrukturiert: binäre Daten wie Text, Video- und Audio-Streams, Bilder (in XML: External Entities, CDATA Sections)
– unregelmäßiges Auftreten von Hyperlinks
Mangel an Struktur
– Mischform aus datenzentriert und dokumentenzentriert
– Struktur implizit oder verborgen
– Integration von Daten aus heterogenen Quellen (hierfür strukturiertes Modell oft zu restriktiv)
– Bestimmte Anfragetypen ignorieren Schema bewußt (z.B.
Zeichenkettensuche über gesamte Datenbank hinweg)
Beispiel Krankenakten:
– Krankenakten
Daten: Geburtsdatum, Adresse, etc,
binäre Daten: Röntgenbilder
Dokumente: Diagnose, Anamnese etc.
Klassifikation: Beispiel
Datenzentrierte Dokumente
(strukturiert, regulär
Beispiele: Produktkataloge, Bestellungen, Rechnungen)
Dokumentzentrierte Dokumente
(unstrukturiert, irregulär
Beispiele: wissenschaftliche Artikel, Bücher, E-Mails, Webseiten)
Semistrukturierte Dokumente
(datenzentrierte und dokumentenzentrierte Anteile
Beispiele: Veröffentlichungen, Amazon)
<order>
<customer>Meyer</customer>
<position>
<isbn>1-234-56789-0</isbn>
<number>2</number>
<price currency=„Euro“>30.00</price>
</position>
</order>
<content>
XML builds on the principles of two existing languages, <emph>HTML</emph> and
<emph>SGML</emph> to create a simple mechanism ..
The generalized markup concept ..
</content>
<book>
<author>Neil Bradley</author>
<title>XML companion</title>
<isbn>1-234-56789-0</isbn>
<content>
XML builds on the principles of two existing languages, <emph>HTML</emph> and ..
</content>
</book>
Warum XML in Datenbanken
XML als SGML-Nachfolger
– entstehende Dokumente müssen gespeichert werden
XML als Austauschformat
– Originaldaten werden in XML transformiert
Austauschdaten müssen aber ebenfalls gespeichert werden (z.B. beim Empfänger)
Nur die Speicherung in Datenbanken garantiert
– mächtige und effiziente Suchfunktionen
– transaktionsorientierte Speicherung
– Mehrbenutzerbetrieb
Anwendungen
– Dokumentenverwaltung
– Website-Management
– Verkaufsunterstützung
– Information Publishing
Volltextindex und XML-Index
Volltextindex Als Dateien /
Clobs
Speicherung der Dokumentstruktur
Strukturierte Speicherung in Datenbanken
Vollständiges Mapping Benutzer- definiertes
Mapping Abbilden des
DOM-Modells Abbildung der Graphstruktur
Für dokument-zentrierte XML-Dokumente
Für daten-zentrierte XML-Dokumente Für semistrukturierte XML-Dokumente
Speicherung von XML-Dokumenten
Beispiel
Speicherung mit Volltext-Index
- bekannte Methode (älter als relationale Datenbanken) - Boolesches Retrieval (AND, OR, NOT)
Verweis
Warnemünde
<adresse>
<plz>18119</plz>
<ort>Warnemünde</ort>
<nummer>12</nummer>
</adresse>
<anreisebeschreibung>
</anreisebeschreibung>
</hotel>
<hotelname>Hotel Hübner</hotelname>
Aus Richtung Rostock kommend ...
<hotel>
Begriff
anreisebeschreibung ort
Rostock hotel
<strasse>Seestraße</strasse>
Beispiel
Relationale Speicherung von XML
- DTD ist erforderlich
- Anfragen verwenden SQL - Funktionalität - Datentypen
<hotel url="www.hotel-huebner.de">
<hotelname>Hotel Hübner</hotelname>
<adresse>
<ort>Warnemünde</ort>
...
</adresse>
<preise>
<einzelzimmer>198</einzelzimmer>
</preise>
...
</hotel>
<strasse>Seestraße</strasse>
XML-Dokument HotelID Hotelname Adresse Preise
H0001 Hotel Hübner A0001 P0001
AdresseID Ort Strasse ...
A0001 Warnemünde Seestraße
PreiseID Einzelzimmer ...
P0001 198 Hotel:
Preise:
Adresse:
Beispiel
Hybride Ansätze zur Speicherung
Auswahl
unterschiedlicher
Speicherungsmethoden für verschiedene
Dokumentanteile
Hotel
0381/5434-0 Ort Strasse Telefon Strand Hotel Hübner Warnemünde Seestraße
komfortabel eingerichtetes 4-Sterne Hotel
direkt an der Strandpromenade von Warnemünde mit Blick auf Leuchtturm, Hafeneinfahrt
Sie finden unser elegant und
und Ostsee.
<hotel>
<adresse>
<plz>18119</plz>
<nummer>12</nummer>
<telefon>0381/5434-0</telefon>
</adresse>
<hausbeschreibung> Sie finden unser elegant und
</hotel>
komfortabel eingerichtetes 4-Sterne Hotel
direkt an der Strandpromenade von Warnemünde mit Blick auf Leuchtturm, Hafeneinfahrt
und Ostsee. </hausbeschreibung>
<hotelname>Strand Hotel Hübner</hotelname>
<ort>Warnemünde</ort>
<strasse>Seestraße</strasse>
XSQL
XML + SQL
Bestandteil des Oracle XDK (XML Development Kit)
XML-formatierte Ausgabe von relational
gespeicherten Daten in jedem DBMS verfügbar
Grundidee:
– relational gespeicherte Daten als XML darstellen
– Einbettung von SQL-Anweisungen in XML
– Weiterverarbeitung mittels XSL-Stylesheets möglich
Vorteile von XSQL Pages
einfache Generierung von XML-Dokumenten auf der Basis von SQL Queries
erlaubt Insert-, Update- und Delete-Operationen
unterstützt XSL Transformation durch
Anwendung von XML Stylesheets, beliebige Zielformate wie z.B. HTML
dient als Input für den XSQL Page Processor
Trennung der Daten von der Darstellung
XSQL Page Verarbeitung
Bestandteile
XSQL Pages
– SQL Queries
– DML und DDL in XML Tags
XSQL Page Processor (in Java)
– nimmt XSQL Pages als Input
– erzeugt dynamische XML Seiten mit den Ergebnissen der SQL- Queries
XSQL Servlet
– erlaubt XSQL Page Verarbeitung im Web
Erweiterbare Stylesheets
– optional
– XSL Transformationen zur Formatierung des Output
Verarbeitung von XSQL Pages
<?xml version=“1.0“ ?>
<xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“>
SELECT ‘Hello World‘ AS greeting FROM DUAL
</xsql:query>
<?xml version=“1.0“ ?>
<xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“>
SELECT ‘Hello World‘ AS greeting FROM DUAL
</xsql:query>
XSQL Page Input
XML Output
<ROWSET>
<ROW num=“1“>
<GREETING>Hello World</GREETING>
</ROW>
</ROWSET>
<ROWSET>
<ROW num=“1“>
<GREETING>Hello World</GREETING>
</ROW>
</ROWSET>
Einführendes Beispiel
XSQL Queries und Connections
XSQL Page erlaubt die Definition von SQL Queries
Query ist eingebettet in ein xsql:query Tag
Connection-Attribut definiert die Verbindungsinformaiton zur Datenbank
Connection Name wird aufgelöst in einer
Konfigurationsdatei XSQLConfig.xml (in xsql/lib)
Beispiel
<connectiondefs>
<connection name=“demo“>
<username>xuser</username>
<password>xuser</password>
<dburl>jdbc:oracle:thin:@localhost:1521:mydb</dburl>
<driver>oracle.jdbc.driver.OracleDriver</driver>
</connection>
...
</connectiondefs>
<connectiondefs>
<connection name=“demo“>
<username>xuser</username>
<password>xuser</password>
<dburl>jdbc:oracle:thin:@localhost:1521:mydb</dburl>
<driver>oracle.jdbc.driver.OracleDriver</driver>
</connection>
...
</connectiondefs>
XSQL Page Processor Architektur
XSL Stylesheet
XSQL Page
XML o.a.
Formate
XSQLConfig
Datenbank XSQL Page Processor
XSLT
XML Parser
XML Utility
JDBC
Überblick über XSQL Tags
<xsql:query>
<xsql:dml>
<xsql:set-stylesheet-param>
<xsql:insert-request>
<xsql:include-xml>
<xsql:include-request-params>
<xsql:include-xsql>
<xsql:include-owa>
<xsql:action>
<xsql:ref-cursor-function>
<xsql:include-param>
<xsql:set-session-param>
<xsql:set-page-param>
<xsql:set-cookie>
Anpassung von XSQL Queries
rowset-element Elementname für Anfrageergebnis; leerer String, wenn kein Elementname gewünscht
row-element Elementname für jede Zeile im Anfrageergebnis; leerer String, wenn kein Name gewünscht
max-rows Maximalanzahl von Zeilen, die vom Ergebnis ausgegeben werden sollen, sinnvoll z.B. für Top-N-Queries
skip-rows Anzahl von Zeilen, die übersprungen werden soll vor Darstellung des Ergebnisses
id-attribute Attributname für id-Attribute für jede Zeile im Anfrageergebnis
id-attribute-
column Zu nutzender Spaltenname, um den Wert des id-Attributs in jeder Ergebniszeile zu liefern
null-indicator Wenn auf “y“ oder „“yes“ gesetzt: Null-Indicator-Attribut bei den Elementen genutzt, dessen Wert NULL ist
Attribute für xsql:query:
XSQL Query Parameter
Beispiel: Deklaration einer parametrisierten Query in einer XSQL Page
Die Parameterwerte können in einer URL geliefert werden, z.B.:
http://localhost/xsql/demo/emp.xsql?find=A&sort=SAL
<?xml version=“1.0“ ?>
<?xml-stylesheet type=“text/xsl“ href=“emp.xsl“?>
<xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“
find=“%“ sort=“ENAME“ null-indicator=“yes“>
SELECT * FROM EMP WHERE ENAME LIKE ‘%{@find}%‘
ORDER BY {@sort}
</xsql:query>
<?xml version=“1.0“ ?>
<?xml-stylesheet type=“text/xsl“ href=“emp.xsl“?>
<xsql:query connection=“demo“ xmlns:xsql=“urn:oracle-xsql“
find=“%“ sort=“ENAME“ null-indicator=“yes“>
SELECT * FROM EMP WHERE ENAME LIKE ‘%{@find}%‘
ORDER BY {@sort}
</xsql:query>
Aufruf XSQL Page Processor
Kommando- Zeile
Java Applikation
XSQL Servlet
Java Server Page
XSQL Page Processor
Aufruf XSQL von der Kommandozeile
Beispiel1
•
Lese Fluginformation von San Francisco mittels xsql Command Line Utility>xsql airport.xsql airport=sfo xml-stylesheet=none
Beispiel2
•
Es hängt von der XSQL Page ab, welche Aktion ausgeführt werden sollen•
Ausführung einer Insert-operation, 2. Parameter gibt die XML Quelle an, die durch XSQL Page eingefügt werden soll, dafür kann URL verwendet werden>xsql insertnewsstory.xsql
posted-xml=http://www.news.com/source
XSQL Servlet Environment
Web Server mit Servlet Engine
XSQL Page Processor XSQL Servlet
http JDBC
Oracle DB Web-Browser