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;