• Keine Ergebnisse gefunden

XML und Datenbanken

N/A
N/A
Protected

Academic year: 2022

Aktie "XML und Datenbanken"

Copied!
32
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

XML und Datenbanken

(2)

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

(3)

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

e-Mail

Präsentationen

Verträge

70% der relevanten Geschäftsinformationen in

(4)

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

(5)

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

(6)

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

<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 ..

(7)

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

(8)

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

(9)

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>

(10)

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:

(11)

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>

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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>

<connection name=“demo“>

<username>xuser</username>

<password>xuser</password>

<dburl>jdbc:oracle:thin:@localhost:1521:mydb</dburl>

<driver>oracle.jdbc.driver.OracleDriver</driver>

</connection>

...

(17)

XSQL Page Processor Architektur

XSL Stylesheet

XSQL Page

XML o.a.

Formate

XSQLConfig

Datenbank XSQL Page Processor

XSLT

XML Parser

XML Utility

JDBC

(18)

Ü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>

(19)

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:

(20)

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>

(21)

Darstellung komplexer Strukturen

flache XML-Dateien (ROWSET/ROW)

korrespondieren mit Tupeln einer Relation

Behandlung von mehrfach geschachtelten Objekten (1:n-Beziehung)

mehrfache Joins

nested Cursor zur Unterscheidung zwischen übergeordnetem Objekte und Komponente

Alternative: komplexe Objekte / Object Views

Behandlung von m:n-Beziehungen

Auflösung von Fremdschlüsselbeziehungen

mehrfache Darstellung der Tupel als XML-Elemente

(22)

Nested Cursor

erzeugen in SQL-Anfragen die XML-typische Baumstruktur (anstelle von Tabellen)

Beispiel:

FBEREICH STUDIENGANG SEMESTER BEZEICHNUNG

IMN IN 1 Grundlagen der Informatik

IMN IN 1 Analysis 1

Baumstruktur in XML:

IMN |-IN

|- 1.Semester

|- Grundlagen der Informatik |- Analysis 1

(23)

Beispiel Nested Cursor

Tiefe 1:

Gruppierte Auflistung aller Fachbereiche

Tiefe 2:

Auflistung der Studiengänge pro Fachbereich

Tiefe 3:

Auflistung der Semester pro Studiengang und Fachbereich

Tiefe 4:

Auflistung aller Fächer pro Semester und Studiengang und Fachbereich

(24)

Beispiel Nested Cursor (2)

Tiefe 3: Fachbereich → Studiengang → Semester

<ROWSET>

<ROW num="1">

<FBEREICH>IMN</FBEREICH>

<STUDGANG>

<STUDGANG_ROW num="1">

<STUDIENGANG>IN</STUDIENGANG>

<SEMESTER>

<SEMESTER_ROW num="1">

<SEMESTER>1</SEMESTER>

</SEMESTER_ROW>

<SEMESTER_ROW num="2">

<SEMESTER>2</SEMESTER>

</SEMESTER_ROW>

</SEMESTER>

</STUDGANG_ROW>

</STUDGANG>

</ROW>

(25)

Beispiel Nested Cursor (3)

Tiefe 3: Fachbereich → Studiengang → Semester

SQL-Befehl mit Nested Cursor (XML-Output vgl. vorige Folie)

select f.fbereich,

cursor (select fa.studiengang,

cursor (select fae.semester from faecher fae where

fae.fbereich=f.fbereich and fae.studiengang=fa.studiengang group by fae.semester) as semester

from faecher fa where fa.fbereich=f.fbereich group by fa.studiengang) as studgang

from faecher f group by f.fbereich

Kommentare:

GROUP BY verhindert Redundanz im Baum

in WHERE-Klausel des Cursors Referenz auf die höheren Ebenen

(26)

XSQL Tag Attribute für DML

Für alle DML-Operationen muß Zieltabelle spezifiziert werden:

Für Update und Deletes muß Key spezifiziert werden:

<xsql:insert-request table=“purchase_order“

transform=“order-to-rowset.xsl“/>

<xsql:insert-request table=“purchase_order“

transform=“order-to-rowset.xsl“/>

<xsql:update-request table=“dept“transform=“doc-to-dept.xsl“

key-columns=“deptno“/>

<xsql:update-request table=“dept“transform=“doc-to-dept.xsl“

key-columns=“deptno“/>

<xsql:delete-request table=“dept“transform=“doc-to-dept.xsl“

key-columns=“deptno“/>

<xsql:delete-request table=“dept“transform=“doc-to-dept.xsl“

key-columns=“deptno“/>

(27)

Aufruf von Stored Procedures

Stored Procedures können innerhalb von XSQL aufgerufen werden mittels <sql:dml> Tag:

 Stored Procedures können in PL/SQL oder Java geschrieben sein

 Calls von anonymen PL/SQL-Blöcken sind erlaubt Beispiel:

<xsql:dml>

my_package.my_procedure({@dname});

</xsql:dml>

<xsql:dml>

my_package.my_procedure({@dname});

</xsql:dml>

(28)

Aufruf XSQL Page Processor

Kommando- Zeile

Java Applikation

XSQL Servlet

Java Server Page

XSQL Page Processor

(29)

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

(30)

Aufruf XSQL von einem Java-Programm

Nutze oracle.xml.xsql.XSQLRequest():

public static void main (String[] args) throws Exception { // Erzeuge Instanz von XSQLRequest

URL pageUrl = new URL(“file://C:/foo/bar.xsql“);

XSQLRequest req = new XSQLRequest(pageUrl);

// Speichere Parameter in Hash-Tabelle Hashtable params = new Hashtable(3);

params.put(“param1“,“value1“);

params.put(“param2“,“value2“);

// Verarbeite die XSQL Page, übergebe die Parameter und // schreibe das Resultat in einen Out Stream

req.process(params,new PrintWriter(System.out), new PrintWriter(system.err));

}

public static void main (String[] args) throws Exception { // Erzeuge Instanz von XSQLRequest

URL pageUrl = new URL(“file://C:/foo/bar.xsql“);

XSQLRequest req = new XSQLRequest(pageUrl);

// Speichere Parameter in Hash-Tabelle Hashtable params = new Hashtable(3);

params.put(“param1“,“value1“);

params.put(“param2“,“value2“);

// Verarbeite die XSQL Page, übergebe die Parameter und // schreibe das Resultat in einen Out Stream

req.process(params,new PrintWriter(System.out), new PrintWriter(system.err));

}

(31)

XSQL Servlet Environment

Web Server mit Servlet Engine

XSQL Page Processor XSQL Servlet

http JDBC

Oracle DB Web-Browser

(32)

XSQL und Java Server Pages (JSP)

Java Server Pages

sind eine dokumentzentrische Art der Entwicklung von dynamischem Web Content

werden in Servlets compiliert vor der Ausführung

JSPs vollständig interoperabel mit Servlets (Einfügen und Weiterleiten von Output)

JSP Tags zum Aufruf von XSQL Pages

<jsp:include page=“foo.xsql“>

<jsp:forward page=„bar.xsql“>

Referenzen

ÄHNLICHE DOKUMENTE

Diese Funktion nimmt als Argument den Integerwert einer Suchinstanz, eine Facette auf der die drill-down Suche durchgeführt werden soll, sowie einen Drill-Down-Term entgegen..

Da diese aber per Trigger vergeben wird, muß diese auch bei einem Insert per XSQL nicht angegeben werden.. Standardwert bei Nicht- Angabe

Input Æ Output Simple PathsÆ NodeIDs 1-Index: Simple PathsÆ NodeIDs 2-Index: Relative PathsÆ NodeIDs T-Index: Privileged PathsÆ NodeIDs. Indexstruktur Graph

Da XQL direkt auf XML aufsetzt und eine einfache und kompakte Syntax besitzt und die Möglichkeit, eine Suchanfrage als einfachen String darzustellen, ist diese Anfragesprache

- Content Management Systeme (Kennzeichnen, Architektur) - XML-Anfragesprachen (XML-QL, XXL, XQL, XIRQL). - Content Management Systeme

Gespeichert werden muss lediglich ein XML-Dokument, welches durch Stylesheets (siehe Kapitel 3) in ein XSL/FO-Dokument zur Ansicht im Web transformiert wird.. Bei Bedarf kann

&lt;RDB_node&gt; , der die Abbildung eines Elementes in eine Tabelle spezifiziert, auch der Primärschlüssel der resultierenden Tabelle festgelegt werden muss (bzw. das Element oder

Falls die weitere Verarbeitung des XML-Dokumentes vorsieht, dass alle Dokumente einer Datenbank zu einem XML-Dokument zusammengefügt werden, kann dies ebenfalls mit ei- ner