Studienarbeit Erstellen einer graphischen Benutzerschnittstelle zur visuellen XML-Schema Erzeugung und XQuery Anfragenstellung. von Martin Nawrat Datum: 31.07.2003 Inhaltsverzeichnis 1. Inhalt und Aufgabenstellung 4 2. XML 5 2.1. Grundbausteine 5 2.2. XML- Schema 7 2.3. XQuery 8 3 2.3.1 Pfadausdrücke 8 2.3.2 FLWR-Ausdrücke 8 Java JAZZ 10 3.1 Einleitung 10 3.2 Jazz – Funktionalität 11 3.3 Jazz – Architektur und Primärkonzepte 12 3.3.1 Knoten und Sichtkomponente 13 3.3.2 Kamera 14 3.3.3 Fälle (Events) 14 3.3.4 Benutzerdefinierte Sichtkomponenten und Swing Visual 14 Components 15 3.4 Jazz – Zusammenfassung 3.5 Jazz als grundlegende Plattform für Datenbankschema Visualisierung 16 3.5.1 Plattform 16 3.5.2 Aufbau der Tabellendarstellung der Schemata 16 2 4 Applikation – GUI 18 4.1 Einlesen benutzerspezifischen Daten 18 4.2 XML-Schemadefinition 18 4.3 Datenbankviews 19 4.4 XQueries und XML-Data 20 4.5 Export XML-Data 20 5 Ausblick 21 6 Benutzerhandbuch 22 6.1 Anforderungen 22 6.2 Start des Programms 22 6.3 Ablauf 26 3 Kapitel 1 Inhalt und Aufgabenstellung Diese Arbeit befasst sich mit der Visualisierung der Datenbankschemata von Oracle Datenbanken, basierend auf einem vollintegrierten Programm zur vollautomatischen Erstellung von XML-Sichten auf objektrationale Datenbanken. Außerdem soll es um die Erzeugung von virtuellen XML-Dokumenten gehen, an die XQueries gestellt werden können. Das dabei zugrundeliegende Programm ist im Rahmen einer Diplomarbeit [1] am FG Datenbanksysteme entwickelt worden. Kern dieser Arbeit ist der Entwurf eines einfachen und benutzerfreundlichen FrontEnds, mit dem das Definieren von XML-Schemata, Grundlage der zu erzeugenden XML-Daten, möglichst übersichtlich ist. Dafür wurde eine spezielle Plattform ausgewählt, die möglichst viele benutzerfreundliche Interaktionen unterstützt, wie zum Beispiel Skalierung, Fokussierung und Drehung. Des Weiteren soll die vollständige Funktionalität des zugrundeliegenden Programms übernommen und integriert werden. Dabei handelt es sich um folgende Funktionalitäten: Erzeugung des XML-Dokuments, Ausführung der Anfragen in form einer XQuery und XML-Datenausgabe. 4 Kapitel 2 XML XML (eXtensible Markup Language) ist ein ideales Format zum Datenaustausch zwischen verschiedenen Programmen und verschiedenen Plattformen. XML ist ein selbsterklärendes Dateiformat mit eigener Struktur. 2.1 Grundbausteine Der Grundbaustein eines XML-Dokumenttyps ist ein Element: <Name> Inhalt </Name> Das Element besteht aus einem Start-Tag, dem Inhalt des Elements und einem EndTag. Auch dies ist ein Element: <Name> Zweiter Inhalt </Name> Es handelt sich um zwei Elemente mit auffallenden Ähnlichkeiten. Die jeweiligen Start-Tags und End-Tags sind gleich, weshalb man beide Elemente demselben Elementtyp zuordnet. Die Tags lassen sich verschachteln, so dass komplexere Strukturen entstehen: 5 <BUCH> <TITEL> Die Blechtrommel </TITEL> <AUTOR> Günter Grass </AUTOR> </BUCH> In jedem Element können Attribute definiert werden. Attribute werden stets in das Start-Tag der Elementdefinition eingefügt. Sie können nicht doppelt in einem Element auftreten. <Buch Kap1 = ’KapName1’ .. KapN = ’KapNameN’ > … Der Inhalt eines XML-Dokuments kann in Baumstruktur dargestellt werden. Jedem einzelnen Element wird ein Elementknoten zugewiesen. Jedes Kind eines solchen Knotens kann je nach Inhalt weitere Elementknoten, Textknoten oder Attributknoten besitzen. Letztendlich enthalten die Blätter des Baumes Informationen, wie Werte der Attribute oder den Textinhalt der Elemente. XML-Beispieldokument: <Buch ISBN=“051015“> <Titel> Die Blechtrommel </Titel> <Autor> Günter Grass </Autor> <Verlag> <Name> Springer Verlag </Name> <Ort> Springe </Ort> </Verlag> </Buch> Baumdarstellung zum obigen Beispieldokument: 6 Das obige Beispiel stellt einen Baum dar, dessen Knoten durch Kreise und dessen Blätter durch Rechtecke dargestellt sind. Die Namen der Elemente ergeben sich aus der Elementdefinition des XML-Dokuments. Das einzige Attribut erhielt den Namen der sich aus dem Präfix @ und dem Attributnamen zusammensetzt. Jedes Element, das keinen strukturierten Inhalt besitzt, wird als Elementknoten dargestellt und dessen Inhalt als Blatt. Der Wurzelknoten, der als Element interpretiert werden kann, repräsentiert die Dokumentwurzel, deren Inhalt das XML-Dokument ist. Mit XML lässt sich eine breite Palette von Dokumenttypen modellieren. Das wichtigste dabei ist, dass XML keine expliziten Schemata zur Beschreibung der enthaltenen Daten benötigt, weil sie im Dokument enthalten sind. Dabei ist der strukturelle Aufbau der XML-Dokumente dem Benutzer überlassen. 2.2 XML- Schema XML-Schema ist eine Sprache zur Modellierung strukturierter Informationen. Das XML-Schema ist selbst ein XML-Dokument. Die Sprache bietet viele verschiedene Datentypen an. In der Sprache können auch Elementinhalte typisiert, Wertebereichsbeschränkungen erstellt und Typen verschieden beschrieben werden. Folgendes Beispiel eines XML-Schemas namens LVBS sei wie in der Grafik definiert. Auf diesem Schema werden alle folgenden Beispiele aufbauen. Die genauere Beschreibung des XML-Schemas und dessen Definition ist [1] zu entnehmen. 7 2.3. XQuery In XQuery werden die Anfragen an XML- Schemata mit verschiedenen Arten von Ausdrücken formuliert. Diese Ausdrücke können beliebig verschachtelt sein und zu einem einzigen Anfrageausdruck kombiniert werden. Als Ergebnis liefert ein Ausdruck immer eine Liste, die sowohl einzelne Werte als auch Knoten enthalten kann. Da XQuery eine große Anzahl von verschiedenen Ausdrücken besitzt, werden im Folgenden nur die wichtigsten beschrieben. Die gesamte Syntax ist im aktuellen Working Draft des W3C beschrieben. 2.3.1 Pfadausdrücke Pfadausdrücke werden zur Adressierung von Elementen in XML-Schemata benutzt. Diese werden als Baum betrachtet. Mit einem Pfadausdruck kann man sich ausgehend von der Wurzel, die durch den ersten Tag gebildet wird, an den Kanten entlang zu jedem beliebigen Knoten im Baum bewegen. Jedes beliebige Element im XML-Schema ist so erreichbar. Als Ergebnis des Pfadausdrucks wird das gesuchte Element geliefert. 2.3.2 FLWR-Ausdrücke Die wichtigsten Ausdrücke in XQuery sind die FLWR-Ausdrücke (“FlowerAusdrücke“). Sie setzten sich aus den Teilen ’FOR’ bzw. ’LET’, ’WHERE’ und ’RETURN’ zusammen. ’FOR’ – bzw. ’LET’- Klauseln deklarieren Variablen und binden diese an einen oder mehrere Werte, die z.B. durch Pfadausdrücke erhalten wurden. Die ’FOR’- Klausel wird benutzt, wenn eine Iteration benötigt wird. Sie liefert dann eine Folge von Tupeln, deren einzelne Werte jeweils an die entsprechenden Variablen gebunden sind. Bei Verwendung der ’LET’- Klausel werden zwar auch eine oder mehrere Variablen gebunden, im Unterschied zur ’FOR’- Klausel allerdings jede Variable nur einmal. In einem ’FLWR’- Ausdruck können beliebig viele ’FOR’- und ’LET’- Klauseln enthalten sein. Das Resultat dieser Klauseln ist immer eine geordnete Folge von Tupeln gebundener Variablen. Mit Hilfe dieser Variablen werden im nächsten Schritt, der ’WHERE’- Bedingung, die Aussagen, die durch ’AND’ oder ’OR’ verknüpft werden können, ausgewertet. In einem ’FLWR’Ausdruck ist die ’WHERE’- Bedingung optional. Am Ende der ’FLWR’- Anweisung steht die ’RETURN’- Klausel. Sie liefert das Ergebnis eines XQuery Ausdrucks und wird für alle Daten ausgeführt, welche die Bedingungen der ’WHERE’- Klausel erfüllen. Das Ergebnis kann ein Knoten oder eine Sequenz von Knoten sein. 8 An einem Beispiel soll der Umgang mit ’FLWR’- Ausdrücken verdeutlicht werden. Die Anfrage bezieht sich auf das Schema „LVBS“: for $i in /LVBS/Kataloge/ITEM/faecher/ITEM for $j in /LVBS/lehrpersonen/ITEM where $i/apartner = $j/OID return { <Fach> {$i/name} </Fach> <Verantwortlicher> {$j/name } </Verantwortlicher> } Im obigen Beispiel wird zu jedem Fach die verantwortliche Lehrperson bestimmt. 9 Kapitel 3 Java Jezz In diesem Kapitel wird das verwendete Werkzeug zur Visualisierung von Datenbank Schemata vorgestellt. Es wird auf die Funktionalität und die Architektur von Jazz eingegangen. Anschließend wird die Implementierung der Aufgabe vorgestellt 3.1 Einleitung Heutzutage enthalten graphische Benutzerschnittstellen (GUIs) eine große Anzahl von eingebauten Objekten. Diese Fenster sind für den hierarchischen Entwurf von Standardvorrichtungen wie Buttons, Scrollbars und Textbereiche ausgezeichnet. Jedoch ist es für den Entwickler problematisch, wenn er versucht benutzerdefinierte Fenster zu entwerfen. Entwickler definieren gewöhnlich diese applikationsspezifischen Vorrichtungen, indem sie ein vorhandenes Fenster vererben und dessen Methoden überschreiben, um neue Funktionalität zu definieren. Jedoch sind GUIs sehr wichtig geworden und das Niveau der Funktionalität benötigt umso mehr Aufwand. Ein neues GUI Fenster zu entwickeln und einzuführen ist eine zeitaufwendige Aufgabe. Über das Schreiben des Codes hinaus, um das Fenster zu zeichnen, muss der Entwickler den Quellcode zu allen benötigten Fällen, wie Aktionen, Layout, Tastaturnavigation, empfindliche Hilfe des Kontextes, Popup Menüs, Zugänglichkeit usw. auch selbst implementieren. Somit ist die Einführung eines völlig neuen applikationsspezifischen funktionellen Fensters eine erschreckende Aufgabe. Ein bedeutendes Problem der benutzten Benutzerschnittstellen ist, dass sie "monolithischen" Konstruktionsprinzipien folgen. Das heißt, sie verwenden eine verhältnismäßig kleine Anzahl von Objektklassen, um eine große Menge Funktionalität zur Verfügung zu stellen. Infolgedessen neigen Objektklassen kompliziert zu sein und viele Methoden zu haben, und die Funktionalität, die durch jede Klasse bereitgestellt wird, ist schwer, im neuen Fenster wiederzuverwenden. 10 3.2 Jazz – Funktionalität Jazz ist ein neues Allzweckwerkzeug für die Entwicklung von ZUI-Anwendungen zoomfähigen/verkleinerungs- und vergrößerungsfähigen objektorientierten 2D Graphiken. Jazz ist vollständig in Java geschrieben und ist auf allen Plattformen, die Java 2 unterstützen, lauffähig. Jazz verwendet den Java2D Renderer und zielt auf effiziente Animation und schnellen Bildschirmaufbau. Viele der Strukturelemente von Jazz sind an gebräuchliche 3D Scene Graph Systeme, wie Java 3D von Sun oder OpenInventor von SGI angelehnt. Durch die Verwendung von einem einfachen hierarchischen Scene Graph Modell mit Kameras ist die Nutzung einer Vielzahl gewöhnlicher als auch forward-looking Schnittstellenmechanismen möglich. Dies beinhaltet auch hierarchische Gruppen von Objekten mit affinen Transformationen (Translation, Skalierung, Rotation), Ebenen, Zoom, internen Kameras (Portalen), Linsen, semantischen Zoom und Mehrfachdarstellung. Das Jazz-Design folgt dem Standard 3D Scene Graph Verfahren, Funktionalitäten in separate nicht-visuell gruppierte Knoten zu trennen. Dieser Ansatz gewährleistet ein modulares Scene Graph Design. Jazz hat einen Grundsatz der visuellen und interaktiven Erweiterbarkeit. Es beinhaltet einen kleinen Satz von Visualisierungsobjekten und eindeutig abgegrenzte Mechanismen für Anwendungen, um eigene visuelle Objekte zu definieren. Dieses Konzept wird ähnlich auch bei Interaktionsmechanismen wie Default Selection oder Navigation übernommen. Diese Mechanismen können übernommen werden oder von Anwendungen modifiziert werden. 11 3.3 Jazz – Architektur und Primärkonzepte Jazz basiert auf drei primären Konzepten: Knoten, visuellen Komponenten und Kameras. Die Objekthierarchie der öffentlichen Objekte die Anwendungen verwenden können. ZUIs stellen einzigartige Möglichkeiten zur Verfügung, weit über denen hinaus, die durch die zwei dimensionalen GUIs unterstützt werden. Einige von denen sind: 1. Kundenspezifische Applikation von Graphiken, die nicht-rechteckig oder transparent sein können, sowie traditionelle wechselwirkende Komponenten wie Tasten u.ä.. 2. Grosse Mengen von Objekten können gleichzeitig variiert, verschoben oder gedreht werden, dank effektiver Unterstützung. 3. Hierarchische Gruppierung aller willkürlichen Objekte ist immer vorhanden. 4. Ansichtnavigation wird ununterbrochen aktualisiert. 5. Mehrfache Darstellungen der Objekte, damit sie in den unterschiedlichen Kontexten an unterschiedlichen Skalen zugreifbar sind. 6. Mehrfache Ansichten auf die Oberfläche sind möglich, alle sind als unterschiedliche Fenster innerhalb der "Portals" oder "Objektive" zu verwenden. 7. Objekte sind örtlich festgelegt, bei der Änderung der Ansicht (Vergrößerung oder Verkleinerung). 8. Eigenschaften und Interaktionen der benutzerdefinierten Objektgruppen sind jederzeit änderbar oder ausführbar. Die Jazzplattform unterstützt alle diese Anforderungen. 12 Jazz basiert auf drei Primärkonzepten: Knoten, Sichtkomponente und Kameras. 3.3.1 Knoten und Sichtkomponente Der Scene Graph von Jazz besteht aus einer Hierarchie von Knoten (nodes), welche die Beziehung zwischen Objekten repräsentieren. Der Basisknotentyp ZNode ist ein einfacher Knoten. Eine Knotenhierarchie kann verwendet werden um „Gruppen“ und „Ebenen“, die in den meisten Graphik- und Zeichenprogrammen gefunden werden können, zu implementieren und es zu ermöglichen, eine Gruppe solcher Objekte gleichzeitig zu bewegen. Knoten eines Scene Graph haben keine visuelle Gestalt auf dem Bildschirm. Stattdessen gibt es spezielle Objekte (visueller Blattknoten und visueller Gruppenknoten), visuelle Komponenten genannt, die bestimmten Knoten eines Scene Graph angefügt sind, welche die Geometrie- und Farbattribute bestimmen. Mit anderen Worten bestimmen Knoten, wo etwas in der Hierarchie eines Scence Graphs gefunden werden kann und wie etwas aussieht. Alle Knoten haben einen gemeinsamen Elternknoten und folgen einer strikten Baumhierarchie. Visuelle Komponenten können wiederverwendet werden – dieselbe visuelle Komponente kann an verschiedenen Stellen eines Scene Graph erscheinen und somit auch mehrere Elternknoten haben. Es gibt eine klare Trennung, was in einem Knoten implementiert ist und was von einer visuellen Komponente gehandhabt wird. Knoten enthalten alle Objektcharakteristiken die an einen Kindknoten vererbt werden. Zum Beispiel werden Knoten verwendet um affine Transformationen (Translation, Skalierung, Rotation) von Kindknoten, um Unterbäume entsprechend der Vergrößerung auszuwählen und um die Transparenz für Gruppen von Objekten zu definieren. Visuelle Komponenten haben keine hierarchische Struktur und spezifizieren noch nicht einmal eine Transformation. Jede visuelle Komponente spezifiziert einfach, wie diese darzustellen ist, was ihre Attribute sind und wie diese ausgewählt werden kann. Diese Aufteilung zwischen Knoten und visuellen Komponenten trennt der Programmcode, der die Hierarchie des Graphen beinhaltet und Code der unabhängig von dieser arbeitet. Dies ermöglicht eine hierarchische Strukturierung von Scene Graph Knoten, aber zusätzlich auch die Wiederverwendbarkeit von visuellen Komponenten. Es trennt also die Struktur vom Inhalt. Visuelle Komponenten sind austauschbar, was es beispielhaft ermöglicht alle Kreise mit Rechtecken in einem Segment eines Scene Graph ohne Auswirkung auf die Gruppierung oder die Position eines Objektes zu ersetzten. 13 3.3.2 Kamera Eine Kamera ist eine visuelle Komponente die eine Ansicht eines Scene Graph von Jazz darstellt. Mit einer Kamera wird der Teil eines Scene Graph spezifiziert der unter Verwendung einer affinen Transformation sichtbar ist. Mehrerer Kameras können auf einen einzelnen Scene Graph gerichtet sein, wobei jeder eine eigene Sicht auf den Scene Graph definiert. 3.3.3 Fälle (Events) Jazz unterstützt Interaktion durch „Ereignishörer“ (event listener). Diese folgen dem Standard-Java Ereignismodell und können auf jedem Knoten des Jazz Scene Graph aufsetzen. Es gibt zwei Kategorien von Ereignissen: – Eingabeereignisse (input events) und Objektereignisse (object events). Eingabeereignisse resultieren aus der Anwenderinteraktion mit einem graphischen Objekt, wie einem Mausklick. Objektereignisse werden durch eine Veränderung des Scene Graph ausgelöst, wie beispielhaft einer Transformationsänderung oder der Einfügung eines Knoten. Alle Ereignisse können durch das Hinzufügen eines Listeners an einen Scene Graph Knoten verarbeitet werden. An einen Knoten können mehrer Listener angefügt werden. Im Gegensatz zu den Eventlistener-Modellen von Swing oder AWT wird in Jazz jedes Eingabeereignis an den in der Baumhierarchie des Graphen oberhalb befindlichen Listeners-Knoten oder Elternknoten weitergegeben. Wird allerdings von einem Listener das Ereignis erfasst, wird das Ereignis nicht mehr weitergegeben. Mit diesem Mechanismus können für bestimmte Knoten maßgeschneiderte Listeners programmiert werden, die mit einem graphischen Element korrespondieren. Es ist allerdings auch möglich einen Listener in einer höheren Hierarchiestufe des Scene Graph hinzuzufügen, der dann für das gesamte darrunterliegende Segment die Interaktion unterstützt. Ereignishörer können in einer spezifischen oder generellen Weise programmiert werden, abhängig von den jeweiligen Bedürfnissen In Jazz sind bereits Ereignisbehandlungsroutinen für einige Basisfunktionen, wie Navigation, Selektion und Hypertext-Links enthalten. Anwendung können auf diese zurückgreifen oder eigene definieren 3.3.4 Benutzerdefinierte Sichtkomponenten Visual Components und Swing Jede Leichtgewichtskomponente von Java Swing kann in Jazz Szene Diagramme eingefügt werden indem eine Jazz ZSwing visuelle Komponente eingefügt wird. Die Swing Komponente kann dann wie andere Komponenten von Jazz, verkleinert oder vergrößert werden. Als Beispiel kann eine Swing Schnittstelle mit Tabellen und Knöpfen in eine „Zoomoberfläche“ eingefügt werden und mit anwendungsspezifischer Visualisierung überlagert werden. Die Swing Komponenten 14 können auf die selbe Weise wie andere Jazz Komponenten manipuliert werden. Dies beinhaltet die Rotation, Skalierung, Transparenz und Mehrfachsichten. Die eingebettete Integration von Swing erfolgt transparent zu den graphischen Interaktionsobjekten von Swing und zu anderen Knoten des Szenediagramms. 3.4 Jazz – Zusammenfassung Diese Kapitel beschreibt die Architektur von Jazz, einem neuen Java Werkzeugsatz, der die Entwicklung von erweiterbaren, objektorientierten 2D Graphiken mit verkleinerungs- und vergrößerungsfähigen Darstellungen und Mehrfachdarstellung unterstützt. Während Jazz keine substantiell neuen Ideen einführt, besteht die Neuerung in der Kombination von verschiedenen, bereits existierenden Techniken aus verschiedenen Domänen. Jazz verwendet die von 3D Graphiken bekannten Szenediagramme, Darstellung- und Interaktionstechniken von zweidimensionalen graphischen Interaktionsobjekten, Funktionalitäten von vergrößerungsund verkleinerungsfähigen Anwenderschnittstellen und kombiniert diese mit einem klaren entkoppelten objekt-orientierten Design. Der Einsatz von Jazz ermöglicht die Programmierung von „zoomfähigen“ Anwendungen und fortgeschrittener Visualisierung mit einer Klarheit und Effizienz. Der größte Beitrag von Jazz ist die Schaffung eines graphischen Werkzeugkastens der einem “minilithischen” Design folgt. Dies vereinfacht die Instandhaltung und Erweiterung von Programmcode im Gegensatz zu monolithischen Ansätzen. Der Nachteil des „minilithischen“ Ansatzes ist, dass Anwendungsentwickler eine weitaus größere Anzahl an Objekten als unter Verwendung von traditionelleren Design verwalten müssen. Zwar muss nur für die verwendeten Funktionen Energie aufgewendet werden, allerdings wird für jede Funktion eine neue Knoteninstanz benötigt. Ein weiteres Problemfeld ist die Effizienz von Szenediagramm basierten Lösungen im Vergleich mit rein kundenspezifischen. Die Alternative zu Jazz für bestimmte Visualisierung wäre, eine eigene Datenstruktur, die das Modell repräsentiert, zu erstellen und dann eine Darstellungsmethode zu erzeugen, die einfach durch das Model läuft und die gesamte Szene darstellt. Dieser Ansatz ist einfach und sehr effizient. 15 3.5 Jazz als grundlegende Plattform für Datenbankschema Visualisierung Dieses Kapitel beschäftigt sich mit der eigentlichen Realisierung, Lösung des gestellten Problems, und mit der Implementierung der Schnittstelle zur Visualisierung der benutzerdefinierten XML-Schemata. 3.5.1 Plattform Das Fenster zum Definieren eines XML-Schemas ist ein JFrame von Java Swing. In dessen Struktur wurde Jazz ZCanavas, als ContentPane eingebettet. Dem Content Pane wurden Auswahl-Händler und diverse Listeners hinzugefügt, damit das darzustellende XML-Schema und alle seine Elemente verschoben, gelöscht oder fokussiert werden kann. 3.5.2 Aufbau der Tabellendarstellung der Schemata In dem Abschnitt wird nur eine beschränkte und nicht zu tiefgehende Sicht auf den Aufbau der zu visualisierenden Objekte vorgestellt, weil man ansonsten auf zu viele schon im Kapitel 3.2 besprochenen jazzspezifischen - Merkmale wiederholt eingehen müsste. Jede Einzelne Tabelle wird als ZGroup definiert und durch ZVisualGroup Sichtkomponente abgebildet. Sie setzt sich zusammen aus dem Tabellentitel (ZLabel), Closebutton (ZSwing), Spalten (ZSwing) und ein- oder ausgehenden Referenzen (ZPolyline). Der Titel wird als ZLabel Objekt definiert und als ZVisualLeaf in der Gruppenkomponente platziert. Er beinhaltet den Tabellennamen der darstellenden Tabelle. Der Löschknopf und die Tabellenattribute sind ZSwing Objekte. Der Löschknopf ist ein integrierter JButton, dessen Aufgabe ist die gesamte ZGroup, der er angehört, zu entfernen. Das Löschen erfolgt auf eine sehr einfache Weise, weil der hierarchische Aufbau von Jazz einen schnellen und direkten Durchgang zum Elternknoten, (hier der ZGroup) ermöglicht. Die Tabellenattribute werden wiederum durch eine in ZSwing Objekt integriertes mehrfachauswählbares JList dargestellt. Die Auswahl der Tabellenattribute dient zur Objekttyperstellung der Tabellen. Diese sind für das zugrundeliegende Programm notwendig, um Anfragen an erstellte XML-Schemata ausführen zu können. Genaueres über die Objekttypen ist dem Schreiben [1] zu entnehmen. Die Referenzen sind durch ein ZPolyLine Objekt dargestellt, der als ZVisualLeaf angezeigt wird. Diese Objekte werden nur dann erzeugt, wenn das benutzerdefinierte 16 XML-Schema mindestens zwei Tabellen enthält, deren Attribute aufeinander zeigende Referenzen vorweisen. Die Referenzen werden direkt aus der Oracle Datenbank gelesen. Ansonsten werden sie nicht angezeigt. Der Titel, der Löschknopf, die Tabellenattributliste und die Referenzen werden alle einer Gruppen-Sichtkomponente hinzugefügt und stellen eine Datenbanktabelle dar. Durch die Jazz-Eigenschaften ist Skalierung und Fokussierung ohne Implementationsaufwand bereitgestellt. 17 Kapitel 4 Applikation GUI Die Applikation stellt eine Schnittstelle zwischen dem Benutzer und der Datenbank dar, die ihm leichten Zugriff auf die Daten ermöglicht. Außerdem soll der Benutzer jeder Zeit neue XML-Schemata, Datenbankviews erzeugen und Anfragen in Form einer XQuery stellen können. Des weiteren muss die Schemadefinition jeder Zeit visuell dargestellt sein können. Aufgrund der im Benutzerhandbuch beschriebenen Anforderungen beinhaltet dieser Kapitel nur die Beschreibung der Implementationsmerkmale. 4.1 Einlesen benutzerspezifischen Daten Direkt nach dem Start des Programms wird Verbindung zur Datenbank aufgebaut, die stets erhalten bleibt. Als nächstes erfolgt das Einlesen den Benutzer zur Verfügung stehenden Objekttabellen, deren Typen und deren Referenzen. Es wird ein rein leserlicher Zugriff auf die Datenbank benötigt, daher muss die Applikation keine wiederholt aktualisierbare Pufferung der Daten zur Verfügung stellen. Neben der datenbankspezifischen Daten werden die vorhandenen Schemaspezifikationen eingelesen. Jede XML-Schemaspezifikation ist, als eine Datei vorhanden. Diese Form der Speicherung von Schemaspezifikationen ist auf das Programm von Christian Schlueter zurückzuführen [1]. Im Laufe des Programms bietet die Applikation das Einlesen und Speichern von XQueries. Diese werden ähnlich wie Schemaspezifikationen, als eine Datei abgelegt. 4.2 XML-Schemadefinition XML-Schema kann sehr unterschiedlich aufgebaut werden. Ausgehend von einem einfachen Schema, das nur aus einer Objekttabelle besteht, bis zu einem Schema das alle Objekttabellen beinhaltet, die dem Benutzer zur Verfügung stehen. Selbstverständlich müssen die grundliegende Regel beibehalten werden, wie zum Beispiel das zyklenfreie Definition von XML-Schema. Zyklenfrei heißt, das es keine 18 geschlossene Kreise von Referenzen geben kann. Dieses würde ein hierarchisches Aufbau von XML-Schema verhindern. Jede einzelne Referenz kann jeweils entfernt werden, wenn sie nicht benötigt wird. Jedes XML-Schema wird durch folgende Parameter spezifiziert: - Name - Targetnamespace - Tabellen - Tabellentypen - Modifiers Der Schemaname kann beliebig vergeben werden, sollte aber keine Sonderzeichen beinhalten. Der Targetnamespace ist in der Applikation standardmäßig gesetzt. Die Tabellen repräsentieren Objekttabellennamen der Datenbank. Tabellentypen repräsentieren die Typen der gewählten Objekttabellen. Im Gegenteil zu den vorherigen müssen Modifiers nicht immer vorhanden sein. Diese repräsentieren die umgedrehte Referenzen zweier Tabellen, charakterisiert durch den Namen des Objektstyps und dem entsprechenden Referenzattribut. Das Beispiel von LVBS-Schema ist darunter zu sehen: 4.3 Datenbankviews Das XML-Schema ist ein XML-Dokument mit hierarchischer Struktur, auf dessen Basis XQeries gestellt werden können. Jedoch enthält dieses Dokument keine Daten, 19 die man anfragen kann. Ein View ist eine Repräsentation von XML-Schema auf der Datenbank. Dieses View wird anschließend durch in SQL übersetzte XQuery angefragt. Die erstellten Datenbankviews sollten bei jeder Änderung von XML Schema erneut überschrieben werden. Nachdem ein definiertes Schema gelöscht worden ist, wird das entsprechende Datenbankview ebenso von der Datenbank gelöscht. 4.4 XQueries und XML-Data Die Anfragen sind in der Applikation selbst dem Benutzer überlassen. Es kann jeweils nur eine Anfrage, an das XML-Schema gestellt werden. Bei einer fehlerhaften Anfragestellung wird die Fehlermeldung des Parsers aufkommen. In den XQueries können alle FLWR-Ausdrücke, die schon in Kapitel 2.3 beschrieben, benutzt werden, so wie miteinander verkoppelt werden. Alle Eigenschaften und Vorteile der XQueries können in der Applikation genutzt werden. Leider ist es nicht gelungen eine Unterstützung zur Anfragestellung zu entwickeln. 4.5 Export XML-Daten Die XML-Ausgabedaten können in eine Text- oder HTML-Datei ausgegeben werden Dieses ermöglicht weitere Benutzung der Ausgabedaten. 20 Kapitel 5 Ausblick Die Implementierung einer idealen graphischen Benutzerschnittstelle ist eine sehr umfangreiche und damit auch fast unmögliche Aufgabe. Durch die nahezu unbeschränkten Möglichkeiten lassen sich heutzutage fast alle Ideen und Wünsche verwirklichen. Leider ist es aber nicht möglich, selbst aus Zeitgründen, alle diese denkbaren Futures zu errichten. Die entwickelte Benutzerschnittstelle umfasst alle wesentlichen Anforderungen des zugrundeliegenden Programms [1]. XML-Schemata lassen sich sehr einfach erstellen, und bieten eine klare Übersicht an. Die XQueries können geladen, gespeichert und selbst entworfen werden. Es besteht auch die Möglichkeit die Ausgabedaten zu exportieren. Mit Hilfe dieser Applikation ist das Anfragen an objektrationale Datenbankschemata sehr einfach. Den wesentlichen Überblick über das selbstdefinierte XML-Schema hat der Benutzer jederzeit zur Hand. Die Anfragen können im Format einer XQuery gestellt werden, was einen großen Vorteil darstellt. Im Vergleich zur SQL-Anfrage ist eine äquivalente XQuery wesentlich einfacher aufgebaut und strukturiert. Selbst bei den besten graphischen Benutzerschnittstellen führen fehlerhafte Handlungen zur unerwarteten (Fehl-) Aktionen. Auch in diesem Projekt kann zu solchen Geschähen kommen, wenn man sich nicht an die Vorgehensweise hält, die im Kapitel 6.3 beschrieben ist. Die meisten, in der Entwicklungsphase entdeckten fehlerhaften Vorgehen, werden abgefangen. Es ist aber nicht auszuschließen dass, noch weitere unvorgesehene Aktionen zur fehlerhaften Ablauf des Programms führen könnten. 21 Kapitel 6 Benutzerhandbuch In diesem Kapitel werden die Funktionalitäten des Programms erläutert und außerdem die Anforderungen und Standardvorgänge erklärt. 6.1 Anforderungen Zum Lauf des Programms ist eine Java 1.4 Umgebung erforderlich. Außerdem ist ein Erweiterungspackage von Jazz als Classpath beim Aufruf des Programms anzugeben. Alternative Lösung ist die Datei im Java Installationsverzeichnis einzufügen, .../jre/lib/ext/jazz.jar. damit sie stets zur Verfügung steht. Ansonsten sind alle Anforderungen des grundlegenden Programms von Christin Schlueter einzuhalten. 6.2 Start des Programms Das Programm ist auf folgende Art und Weise aus dem DBVisualScheme Verzeichnis aufzurufen. ! java –classpath <vollständiger Pfad zur Datei jazz.jar> de/unihannover/dbs/dbvs/gui/GUI Oder man startet das Programm ohne –classpath und dem vollständigen Pfad der jazz.jar Datei, wenn sie sich im Java Installationsverzeichnis befindet. Gleich nach dem Start des Programms folgt die Anmeldung an die Oracle Datenbank, um den ununterbrochenen Zugriff auf die benutzerspezifischen Daten zu haben. Es handelt sich hier um Tabellen, Referenzen und Typen, die notwendig sind, um die XML-Schemata anzulegen. Es gibt drei Anmeldungsversuche. Nach dem dritten gescheiterten Versuch wird das Programm beendet. Die Datenbankverbindung ist zum fehlerfreien Ablauf des Programms stets erhalten. 22 Beim ordnungsgemäßen Ausschalten des Programms wird die bestehende Datenbankverbindung geschlossen. Nach der erfolgreichen Anmeldung wird ein Fenster angezeigt, in dem die vorhandenen XML-Schemata in einem Auswahlfeld anzeigt werden. Der nebenliegende Knopf visualisiert das gewählte Schema mit spezifischen Schemaeigenschaften. Zusätzlich ist der Anfragebereich und der Ausgabebereich zu sehen. In der Fußleiste ist der Alias? des an der Oracle Datenbank angemeldeten Benutzers zu sehen. XML-Schemata: Alle auswählbaren XML-Schemata sind in Form einer Textdatei im Verzeichnis ../DBVisualScheme/de/unihannover/dbs/dbvs/gui/Schlueter/ abgelegt. Es wurde diese Form der Speicherung der Schemata ausgewählt aufgrund der Anforderungen des Programms von Christian Schlueter [1]. Bei jedem Start des Programms werden alle in oben genannten Ordner abgelegte Dateien deren Endung „.spec“ sind, eingelesen. Jede solche Datei beinhaltet Namen der XML-Schema, die verwendete Tabellennamen, deren ausgewählte Attribute und die Objekttypen der Tabellen. Die Namen der XML-Schematabellen, deren Attribute und die Objekttypen entsprechen namentlich den in der Oracle Datenbank angelegten Tabellen, Attributen. und Objekttypen. Bei jeder neuen XML-Schemadefinition wird eine neue Datei angelegt. 23 Anfragebereich: Im Anfragebereich sind Anfragen im Format einer XQuery an das gewählte XMLSchema zu Stellen. Anfragen an ausgewählte XML-Schemata können geladen und gespeichert werden. Diese werden in Form einer Textdatei im demselben Ordner wie die XML-Schemadefinitionen abgespeichert und stehen dem Benutzer immer zur Verfügung. Ausgabebereich: Im Ausgabebereich werden Ergebnisse einer Anfrage, die an das früher gewählte XML-Schema gestellt worden ist, geliefert. 24 In dem Fenster können alle wesentlichen Aktionen des Programms ausgeführt werden. Die Menüs enthalten alle relevanten Aufrufe von Funktionen des Programms, wie Einloggen auf der Datenbank, XML-Schema erzeugen, Datenbankview erzeugen, XML-Anfrage ausführen, sowie XML-Anfrage laden, speichern und XML-Data exportieren. Einloggen auf der Datenbank ist nach dem Start des Programms wiederholt möglich indem man im Menü ’Database’ Log In wählt. Erzeugung XML-Schema – Auswahl dieser Funktion führt zur Erstellung eines XML-Schemas, dessen durch den Benutzer ausgewählte Name angezeigt wird mit hierarchischen Struktur, so dass jedes Element zugreifbar ist. Datenbankview erzeugen - Diese Funktion legt für das vorerst definierte und erzeugte XML-Schema eine Sicht (View) auf der Oracle Datenbank an. An diese Sicht wird im nachhinein die SQL-Anfrage gestellt, die die SQL-Repräsentation der XML-Anfrage darstellt. Der Mechanismus zur Erzeugung solcher SQL-Anfragen ist der Arbeit [1] zu entnehmen. XML-Anfrage ausführen – Aufruf dieser Funktion ruft den eigentlichen und wichtigsten Algorithmus des Programms auf. Die XML-Anfrage wird an das XMLSchema gestellt und ausgewertet. Die einzelnen Phasen und Abläufe sind im Schreiben [1] genau beschrieben, daher wird darauf auf dieser Stelle nicht mehr genauer eingegangen. 25 6.3 Ablauf Nach dem erfolgreichem Start des Programms ist nun der korrekte Ablauf beizubehalten. 1. Schritt. Neudefinition oder Änderung von XML-Schema Durch Auswahl des Menus ‚Neues Schema’ wird ein neues Fenster geöffnet, in dem die Definition des neuen XML-Schemas erfolgt. Zuvor wird der Benutzer nach dem Namen von dem zu erstellenden XML-Schema durch ein Dialogfenster gefragt. In der Anzeige wird vorerst nichts angezeigt. Im Menu ’Tabellen’ stehen alle objektrationalen Tabellen der Datenbank, auf die der angemeldete Benutzer Zugriff hat, zur Verfügung. Nach dem Auswahl einer der Tabellen aus dem Menu, wird sie dem geöffneten Anzeigefenster hinzugefügt. Ein XML-Schema muss mindestens aus einer Tabelle bestehen. Wenn es mindestens zwei oder mehrere Tabellen gibt, die aufeinander referenzzierende Tabellenattribute besitzen, so werden diese Referenzen in Form eines Pfeils angezeigt. Ab jetzt ist es dem Benutzer überlassen, welche Tabellen das neue XML-Schema beinhalten soll, und welche Attribute ausgewählt werden. Auswahl der Attribute erfolgt durch Markieren der Spalten entsprechender Tabellen. Es können mehrere Tabellenattribute ausgewählt werden. Dies erreicht man durch Anklicken mit gleichzeitig gedrückter Steuerungstaste der Tabellenattribute. Diese Attribute werden in dem erstellten XML-Schema als Elementknoten enthalten, so dass die Anfrage auf die Attribute erfolgen kann. Jede Tabelle, die nicht dem XML-Schema angehören sollte, kann einfach entfernt werden. Dazu dient der Löschknopf, der sich in der rechten oberen Ecke der Tabellendarstellung befindet. Nach der XML-Schemaspezifizierung ist das Speichern des neuen XML-Schemas erforderlich. Dies geschieht durch Betätigen des Menu ’Speichern’. Ein bestehendes XML-Schema kann auch geändert werden. Um Änderungen an einem XML-Schema vorzunehmen wählt man das Schema aus und betätigt den Knopf ’Visualisiere’ im Hauptfenster. Nun werden nur diejenigen Tabellen angezeigt, die in der Schemadefinition vorkommen. Es können wieder einige entfernt und es können neue Tabellen hinzugefügt werden. Das Speichern erfolgt wie beim der Neudefinition. Das Fenster wird nach dem Speichern der XML-Schema geöffnet bleiben, damit man die genaue Übersicht behält. Das Fenster kann aber auch geschlossen werden. Der Name des aktuellen XML-Schemas wird immer im Hauptfenster angezeigt. 2 Schritt: Erstellen oder Ändern einer Datenbanksicht Um eine Datenbanksicht zu erstellen, muss man im Hauptfenster das Menü ’Datenbankview erzeugen’ auswählen. Die Erstellung der Datenbanksicht bezieht sich immer auf das ausgewählte XML-Schema. Solange ein XML-Schema nicht geändert wurde, ist die zugehörige Datenbanksicht für dieses Schema gültig. Nach jeder Änderung von XML-Schema ist ein Überschreiben der Datenbanksicht notwendig. 3 Schritt: Anfrageformulierung Die Anfragen werden im Hauptfenster im gekennzeichnetem Textfeld gestellt. Jede Anfrage an XML-Schema muss im XQuery Format gestellt werden. Die XQueries 26 können aus einer Datei geladen oder selbst geschrieben werden. Alle Anfragen sind in Form einer Textdatei im Verzeichnis ../DBVisualScheme/de/unihannover/dbs/dbvs/gui/Schlueter/ zu finden. Selbstgeschriebene XQueries können auch abgespeichert werden. Dazu benutzt man den Menüeintrag ’XQuery speichern’. Es zeigt sich dann der unten angezeigte Dialog an. Nach dem erfolgreichen Speichern befindet sich die Datei im oben genanten Verzeichnis. 4. Schritt: Anfragestellung und Auswertung der Daten Um die Anfrage zu starten, wählt man im Menü des Hauptfensters den Eintrag ’Anfrage ausführen’ aus. Diese Aktion stellt die XQuery Anfrage an das gewählte XML-Schema. Anschließend gibt die Funktion die Ergebnisse der Anfrage zurück. Diese werden im XML-Format in dem Ausgabebereich angezeigt. Die Ausgabedaten können in eine HTML- oder Textdatei exportiert werden. Dafür ist das Menü ’XML-Data speichern’ im Hauptfenster zuständig. Die Ausgabedatei wird sich in dem Ordner ../DBVisualScheme/ befinden. 27 Literaturverzeichnis: [1] Schlüter, Christian - XML - Sichten auf objekt-relationale Datenbanken. Universität Hannover, November 2002, online verfügbar unter: http://www.dbs.uni-hannover.de/ftp/theses/schlueter/Diplomarbeit.pdf. Letzter Abruf am 12.07.2003. [2] Chamberlin, Don; Robie, Jonathan; Florescu, Daniela: Quilt – An XML Query Language for Heterogeneous Data Sources, 2000, online verfügbar unter: http://www.almaden.ibm.com/cs/people/chamberlin/quilt_lncs.pdf. Letzter Abruf am 12.07.2003. [3] The World Wide Web Consortium: XML Query (XQuery) Requirements, 2003, online verfügbar unter: http://www.w3.org/TR/xquery-requirements/. Letzter Abruf am 12.07.2003. [4] Human-Computer Interaction Lab. Institute for Advanced Computer Studies, Computer Science Department: Jazz: An Extensible Zoomable User Interface Graphics Toolkit in Java, 2000 http://www.cs.umd.edu/hcil/jazz/ [5] Java [Web Page] (2003) : http://www.javasoft.com. 28