MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Gruppenmitglieder:
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
•Heiko Kahmann
•Mariusz Kukulski
•Sven Bittner
•Kilian Lenz
•Valerie Bures
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokumentes
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
<?xml ...>
<Strasse>
<Haus Hausnummer=„2“>
<Stockwerk Stock=„1“>
<Wohnung>
Müller
</Wohnung>
<Wohnung>
Meier
</Wohnung>
</Stockwerk>
<Stockwerk Stock=„2“>
<Wohnung>
Lehmann
</Wohnung>
</Stockwerk>
</Haus>
</Strasse>
</xml>
XMLDokument
Element
Elementwert
Attributwert
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Attribut
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Teilobjekte eines XMLDokumentes
Wie erreicht man in der Datenbank
die gewünschte Objekt-Hierachie ?
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
<?xml ...>
<Strasse>
<Haus Hausnummer=„2“>
<Stockwerk Stock=„1“>
<Wohnung>
Müller
</Wohnung>
<Wohnung>
Meier
</Wohnung>
</Stockwerk>
<Stockwerk Stock=„2“>
<Wohnung>
Lehmann
</Wohnung>
</Stockwerk>
</Haus>
</Strasse>
</xml>
XMLDokument
Element
Elementwert
Attributwert
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Attribut
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Problemlösung : Arbeiten mit der ID
Wir numerieren alle Teilobjekte aufsteigend für alle
XMLDokumente
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
<?xml ... (Id=1)>
<Strasse (Id=2)>
<Haus (id=3) Hausnummer=„2“ (Id=4)>
<Stockwerk (id=5) Stock=„1“ (Id=6)>
<Wohnung (Id=7)>
Müller
</Wohnung>
<Wohnung (Id=8)>
Meier
</Wohnung>
</Stockwerk>
<Stockwerk (id=9) Stock=„2“ (Id=10)>
<Wohnung (Id=11)>
Lehmann
</Wohnung>
</Stockwerk>
</Haus>
</Strasse>
</xml>
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Tabellen - Übersicht
Grundstruktur der Grunddaten
Arbeiten mit der ID
Tabellen - Übersicht
Tabelle XMLDokument
Ein Beispiel
name
id
Das Java-Programm
Strukturübersicht
Tabelle Element
Tabelle Elementwert
name
id
wert
parentid
Aufgabe des 1.Trigger
Tabelle Attribut
Tabelle Attributwert
Lösung des 1.Trigger
name
id
wert
parentid
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Tabellen - Übersicht
Grundstruktur der Grunddaten
Arbeiten mit der ID
Tabellen - Übersicht
Tabelle XMLDokument
Ein Beispiel
name
id
Das Java-Programm
Strukturübersicht
Tabelle Element
Tabelle Elementwert
name
id
wert
parentid
Aufgabe des 1.Trigger
Tabelle Attribut
Tabelle Attributwert
Lösung des 1.Trigger
name
id
wert
parentid
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Wie stellen wir jetzt noch die Hierachie
der Objekte mit unserer neu eingeführten ID her ?
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Tabellen - Übersicht
Grundstruktur der Grunddaten inklusive
Assoziationstabellen
Arbeiten mit der ID
Tabellen - Übersicht
Tabelle XMLDokument
Ein Beispiel
name
id
Das Java-Programm
Tabelle XMLDokumentElementAssoziation
id
parentid
Strukturübersicht
Tabelle Element
Die Abfrage
SQL - Abfrage
name
id
Tabelle ElementElementAssoziation
id
parentid
Tabelle Elementwert
wert
parentid
Umsetzung der Trigger
Aufgabe des 1.Trigger
Tabelle Attribut
Lösung des 1.Trigger
name
id
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Tabelle Attributwert
Tabelle ElementAttributAssoziation
id
parentid
wert
parentid
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Tabellen - Übersicht
Grundstruktur der Grunddaten inklusive
Assoziationstabellen
Arbeiten mit der ID
Tabellen - Übersicht
Tabelle XMLDokument
Ein Beispiel
name
id
Das Java-Programm
Tabelle XMLDokumentElementAssoziation
id
parentid
Strukturübersicht
Tabelle Element
Die Abfrage
SQL - Abfrage
name
id
Tabelle ElementElementAssoziation
id
parentid
Tabelle Elementwert
wert
parentid
Umsetzung der Trigger
Aufgabe des 1.Trigger
Tabelle Attribut
Lösung des 1.Trigger
name
id
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Tabelle Attributwert
Tabelle ElementAttributAssoziation
wert
parentid
id
parentid
Woher wissen wir jetzt, in welcher Tabelle die
höchste id ist? Wie verwalten wir die höchste id ?
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Tabellen - Übersicht
Grundstruktur der Grunddaten inklusive
Assoziationstabellen und der ID-Tabelle
Arbeiten mit der ID
Tabellen - Übersicht
Tabelle XMLDokument
Ein Beispiel
name
id
Das Java-Programm
Tabelle XMLDokumentElementAssoziation
Tabelle ID
id
id
parentid
Strukturübersicht
Tabelle Element
Die Abfrage
SQL - Abfrage
name
id
Tabelle ElementElementAssoziation
id
parentid
Tabelle Elementwert
wert
parentid
Umsetzung der Trigger
Aufgabe des 1.Trigger
Tabelle Attribut
Lösung des 1.Trigger
name
id
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Tabelle Attributwert
Tabelle ElementAttributAssoziation
id
parentid
wert
parentid
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Ein Beispiel
<?xml ... (Id=1)>
<Strasse (Id=2)>
<Haus (id=3) Hausnummer=„2“ (Id=4)>
<Stockwerk (id=5) Stock=„1“ (Id=6)>
<Wohnung (Id=7)>
Müller
</Wohnung>
<Wohnung (Id=8)>
Meier
</Wohnung>
</Stockwerk>
<Stockwerk (id=9) Stock=„2“ (Id=10)>
<Wohnung (Id=11)>
Lehmann
</Wohnung>
</Stockwerk>
</Haus>
</Strasse>
</xml>
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Element
name
Strasse
Haus
Stockwerk
Wohnung
Wohnung
Stockwerk
Wohnung
id
2
3
5
7
8
9
11
XMLDokument
name
id
*.xml
1
Elementwert
wert
parentid
Müller
7
Meier
8
Lehmann
11
XMLDokumentElementAssoziation
id
parentid
2
1
ElementElementAssoziation
id
parentid
3
2
5
3
7
5
8
5
9
3
11
9
ElementAttributAssoziation
id
parentid
4
3
6
5
10
9
ID
id
11
Attribut
name
id
Hausnummer 4
Stock
3
Stock
5
Attributwert
wert
2
1
2
parentid
4
6
10
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Strukturübersicht des Systems zum Einlesen
von XML-Dokumenten in die Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
Starter
String
SQL - Abfrage
SAX
XMLDataBase
(Object)
Oracle8i
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Start
Aufgabe des 2.Trigger
XML
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Transaktionshandling :
Die Klasse XMLDataBase verwaltet die
Datenbank und die Transaktionen
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Die SQL-Abfrage
Gesucht ist :
Der Wert jedes Elementes <x> mit dem Attribut <y>=„z“, wenn <x>
noch genau ein Geschwisterelement <x> besitzt
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Die SQL-Abfrage
Gesucht ist :
Der Wert jedes Elementes <x> mit dem Attribut <y>=„z“, wenn <x>
noch genau ein Geschwisterelement <x> besitzt
Das SQL - Programm lautet dann :
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Suchen aller
Elemente, die
den Name x
haben, ein
Attribut
namnes y, und
deren
Attributwert z
ist und deren
id
in der unteren
Tabelle zu
finden ist.
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Id´s aller
Elemente, die
genau 2 Kinder
mit dem
Namen x
haben.
select xmlev.value
from XMLElement xmle, XMLAttribut xmla, XMLAttributValue xmlv,
XMLElementAttributAssoziation xmlea, XMLElementElementAssoziation xmlee,
XMLElementValue xmlev
where xmle.name = x
and xmlea.parentid = xmle.id and xmla.id = xmlea.id
and xmla.name = y and xmlv.parentid = xmla.id
and xmlv.value = z and xmlev.parentid = xmle.id
and xmlee.id = xmle.id and xmlee.parentid in
(select pid from
(select xmlee.parentid as pid, count(xmle.name) as pidcnt
from XMLElement xmle, XMLElementElementAssoziation xmlee
where xmle.name = x
and xmlee.id = xmle.id
group by xmlee.parentid)
where pidcnt=2 ))
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Die SQL-Abfrage
Eingabe ist :
X
Y
Z
Java m1.XMLDataBase.ReadDataBase author position 00
XMLDokument - Ausschnitt
Ergebnis - Ausschnitt
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
<SigmodRecord>
<issue>
<volume>11</volume>
<number>1</number>
<articles>
<article>
<title>
Annotated Bibliography on Data Design.
</title>
<initPage>45</initPage>
<endPage>77</endPage>
<authors>
<author position="00">
Anthony I. Wasserman
</author>
<author position="01">
Karen Botnich
</author>
</authors>
</article>
....
Wert: Anthony I. Wasserman
Wert: Lawrence A. Rowe
Wert: Robert P. Trueblood
Wert: Catriel Beeri
Wert: Kn. I. Kilov
Wert: Colette Rolland
Wert: Ricky Overmyer
Wert: Michael L. Brodie
Wert: P. De Bra
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Aufgabe des 1. Triggers:
Weise alle SigmodRecord-Ausgaben (issue) ab, die Artikel enthalten,
die von mehr als 3 Autoren stammen!
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Aufgabe des 1. Triggers:
Weise alle SigmodRecord-Ausgaben (issue) ab, die Artikel enthalten,
die von mehr als 3 Autoren stammen!
Ergebnis ist :
CREATE TRIGGER less_than_three_authors
AFTER INSERT ON xmlElementElementAssoziation FOR EACH ROW
DECLARE
element_name VARCHAR(100);
author_count NUMBER;
id NUMBER;
parent NUMBER;
name VARCHAR(100);
BEGIN
SELECT xmlElement.name INTO element_name FROM xmlElement WHERE xmlElement.id = :new.id
Zählen
IF element_name = `author` THEN
aller
SELECT COUNT(xmlElementElementAssoziation.parent) INTO author_count
Autoren
FROM xmlElementElementAssoziation WHERE xmlElementElementAssoziation.parent = :new.parent
IF author_count>3 THEN
Bedingung
id := :new.id
prüfen
parent := `foo`
WHILE name <> `issue`
Hochlaufen
LOOP
bis zum
SELECT xmlElementElementAssoziation.parent INTO parent
aktuellen
FROM xmlElementElementAssoziation WHERE xmlElementElementAssoziation.id = id
„issue“
SELECT xmlElement.name INTO name FROM xmlElement WHERE xmlElement.id = parent
END LOOP;
Löschen der
DELETE FROM xmlElement WHERE xmlElement.id>=parent
„issue“-- weitere Delete-Anweisungen für alle anderen Tabellen analog
Daten
DELETE FROM xmlID
Update ID
INSERT INTO xmlID VALUES (parent-1)
RAISE_APPLICATION_ERROR (-20001, `Too much authors in articles!`);
Meldung
END IF;
END IF;
END less_than_three_authors;
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Aufgabe des 2. Triggers:
Fülle eine Tabelle mit Informationen (Autor, Titel, Ausgabe)
zu Artikeln die „database“ im Titel enthalten!
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Aufgabe des 2. Triggers:
Fülle eine Tabelle mit Informationen (Autor, Titel, Ausgabe)
zu Artikeln die „database“ im Titel enthalten!
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Problem ist :
Aufwendig zu implementieren (siehe Trigger 1)
• Ein „issue“ wird stückweise eingetragen.
• Prüfung/Trigger kann erst erfolgen, wenn ein Autor eingetragen wurde!
• Für jeden eingetragenen Autor muß dann die Informationstabelle gefüllt
werden.
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Vorgehensweise zur Lösung :
• Nach
Eintrag eines ‚author‘-Elements muß dazu mit LOOP- und SELECTStatements die Element-Tabelle nach zugehörigen ‚title‘-Element durchsucht
werden.
• Prüfung des ‚title‘-Elementwertes auf „database“ mittels LIKE
`%database%`
• Dann wieder mit LOOP- und SELECT die zugehörigen Elemente ‚title‘,
‚volume‘ und ‚number‘ finden und zusammen mit ‚author‘ in neue Tabelle
eintragen.
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Aufgabe des 3. Triggers:
Weise alle Bände (volume) mit neuen Artikeln eines Autors/Co-Autors
ab, wenn von diesem schon 10 Artikel publiziert wurden.
MiniProjekt XMLDatenbank
Einleitung
Aufbau der Datenbank
Teilobjekte eines XMLDokuments
Arbeiten mit der ID
Tabellen - Übersicht
Ein Beispiel
Das Java-Programm
Strukturübersicht
Die Abfrage
SQL - Abfrage
Umsetzung der Trigger
Aufgabe des 1.Trigger
Lösung des 1.Trigger
Aufgabe des 2.Trigger
Lösung des 2.Trigger
Aufgabe des 3.Trigger
Lösung des 3.Trigger
Aufgabe des 3. Triggers:
Weise alle Bände (volume) mit neuen Artikeln eines Autors/Co-Autors
ab, wenn von diesem schon 10 Artikel publiziert wurden.
Ergebnis ist :
CREATE TRIGGER more_than_10_publications
AFTER INSERT ON xmlElementWert FOR EACH ROW
DECLARE
publications NUMBER;
BEGIN
SELECT COUNT (xmlElementWert.value) INTO publications
FROM xmlElementWert
WHERE xmlElementWert.value = :new.value
IF publications >=10 THEN
-- nun wieder hochlaufen bis zum aktuellen ‚issue‘-Element
-- Lösche in allen Tabellen alle Zeilen mit id>= issue-id (analog Trigger 1)
INSERT INTO xmlID VALUES (parent-1)
RAISE_APPLICATION_ERROR (-20001, `Too much authors in articles!`);
END IF;
END more_than_10_publications;

Aufgabe des 1. Triggers