02.08.2013 Aufrufe

Diplomarbeit

Diplomarbeit

Diplomarbeit

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Otto-von-Guericke-Universität Magdeburg<br />

Fakultät für Informatik<br />

Institut für Technische und Betriebliche Informationssysteme<br />

<strong>Diplomarbeit</strong><br />

Konzept und Entwicklung eines Offline-Tools zum<br />

Graphmining auf integrierten molekularbiologischen<br />

Daten<br />

Verfasser:<br />

Michael Soffner<br />

7. September 2005<br />

Betreuer:<br />

Dipl.-Inf Matthias Lange<br />

Prof. Dr.-Ing. habil. Georg Paul<br />

Universität Magdeburg<br />

Fakultät für Informatik<br />

Postfach 4120, D–39016 Magdeburg<br />

Germany


Soffner, Michael:<br />

Konzept und Entwicklung eines Offline-Tools<br />

zum Graphmining auf integrierten molekularbiologischen<br />

Daten<br />

<strong>Diplomarbeit</strong>, Otto von Guericke Universität<br />

Magdeburg, 2005.


Danksagung<br />

An dieser Stelle möchte ich meinen Betreuern danken. Zum einen meinem Betreuer an<br />

der Otto-von-Guericke Universität in Magdeburg, Prof. Dr.-Ing. habil. Georg Paul, und<br />

andererseits meinem Betreuer am Institut für Pflanzengenetik und Kulturpflanzenforschung,<br />

Matthias Lange.<br />

i


INHALTSVERZEICHNIS iii<br />

Inhaltsverzeichnis<br />

Abbildungsverzeichnis viii<br />

Tabellenverzeichnis ix<br />

Listingverzeichnis xii<br />

Verzeichnis der Abkürzungen xiii<br />

1 Einleitung 1<br />

1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />

1.2 Zielstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

1.3 Gliederung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.4 Technische Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.4.1 Extended Backus-Naur Form (EBNF) der XML Spezifikation des<br />

W3C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

1.4.2 UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2 Grundlagen 9<br />

2.1 Biologische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

2.2 Aufbau der Proteomics-DB . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.3 Datenbankmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.3.1 Relationale Datenbanken . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.3.2 Objektdatenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

2.4 XML - hierarsche Datenstrukturen . . . . . . . . . . . . . . . . . . . . . 22


iv INHALTSVERZEICHNIS<br />

2.4.1 XML-Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

2.5 Grundlagen in der Graphentheorie . . . . . . . . . . . . . . . . . . . . . . 27<br />

3 Anfragetechnologien über Graphenstrukturen 29<br />

3.1 Aktueller Ansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.2 Konstruktion eines Referenzbeispiels . . . . . . . . . . . . . . . . . . . . 30<br />

3.3 Anfragesprachen auf relationalen Datenbanken . . . . . . . . . . . . . . . 33<br />

3.3.1 Anwendung des relationalen Konzepts . . . . . . . . . . . . . . . 36<br />

3.4 XML-basierte Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

3.4.1 Anwendung des XML-basierten Konzepts . . . . . . . . . . . . . . 42<br />

3.5 Objektorientiertes Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

3.5.1 Anwendung des Konzepts von ODBMS . . . . . . . . . . . . . . . 49<br />

3.6 Gesamtbewertung und resultierendes Konzept . . . . . . . . . . . . . . . 51<br />

4 Entwurf des Offlinewerkzeugs 53<br />

4.1 Problemdefinition und Anforderungsanalyse . . . . . . . . . . . . . . . . 53<br />

4.2 Spezifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

4.2.1 Plugin-Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57<br />

4.2.2 Interne Datenstruktur . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

4.2.3 Generierung der Relation-Attribut Informationen . . . . . . . . . 60<br />

4.2.4 Komprimierung des Datenpools . . . . . . . . . . . . . . . . . . . 61<br />

4.3 Entwurf und Implementation . . . . . . . . . . . . . . . . . . . . . . . . 63<br />

4.3.1 Relationenmodell der internen Daten . . . . . . . . . . . . . . . . 63<br />

4.3.2 Plugin-Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

4.3.3 Das Paket GraphExportParser . . . . . . . . . . . . . . . . . . . . 73<br />

4.3.4 Import der RelationAttribut-Wertepaare und Graphinformationen 74<br />

5 Zusammenfassung und Ausblick 79<br />

A Screenshots vom OfflineTool BioDataPathQuery 83<br />

A.1 Allgemeine Bestandteile . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

A.2 Beispiel eines Eingabeplugins . . . . . . . . . . . . . . . . . . . . . . . . 86


INHALTSVERZEICHNIS v<br />

B XML-Schema 89<br />

Literaturverzeichnis 93


vi INHALTSVERZEICHNIS


ABBILDUNGSVERZEICHNIS vii<br />

Abbildungsverzeichnis<br />

1.1 Beschreibung des Vorgehens eines Biologen bei der Suche einer Annotation 3<br />

1.2 Notation des Aktivitätsdiagramms [Dum00] . . . . . . . . . . . . . . . . 8<br />

2.1 Ausschnitt aus dem Datenbankschema der Proteomics-DB . . . . . . . . 12<br />

2.2 Graphische Notation eines Relationenschmas [HS00] . . . . . . . . . . . . 16<br />

2.3 Schematische Darstellung des Aufbaus eines wohlgeformten XML-<br />

Dokuments [ABK + 00] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.1 aktueller Ablauf einer Anfrage . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.2 Graph G1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.3 Graph G2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.4 JAXB Überblick [OM03] . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

4.1 Drei grundlegenden Anwendungsfälle im Umfeld des Tools . . . . . . . . 55<br />

4.2 Teilaufgabe der Datenbereitstellung . . . . . . . . . . . . . . . . . . . . . 56<br />

4.3 Aktivitätsdiagramm zur Beschreibung der Datenbeschaffung . . . . . . . 57<br />

4.4 Komponentendiagramm der Plugin-Struktur . . . . . . . . . . . . . . . . 58<br />

4.5 Aktivitätsdiagramm zur Darstellung der Aktivitäten bei der Benutzung<br />

des Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59<br />

4.6 ER-Schema der internen, temporären Daten . . . . . . . . . . . . . . . . 60<br />

4.7 Generierung der Einschränkungsteils für das XML Schema und die Text-<br />

datei zum Import der RelationAttribut Werte . . . . . . . . . . . . . . . 61<br />

4.8 Datenfluss der Pfaddaten vom DBS zum OfflineTool . . . . . . . . . . . . 62<br />

4.9 Aktivitätsdiagramm zur Funktionsweise des Komprimierungstool . . . . . 63


viii ABBILDUNGSVERZEICHNIS<br />

4.10 Klassendiagramm zum Packet datapathquery.inputPlugin . . . . . . . . . 67<br />

4.11 Klassendiagramm zum Packet datapathquery.inputPlugin - Dialog zur De-<br />

finition der regulären Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . 68<br />

4.12 Klassendiagramm zum Packet datapathquery.outputPlugin . . . . . . . . 69<br />

4.13 Klassendiagramm zum Packet datapathquery.queryModule (Teil 1 - Stan-<br />

dardQueryModule) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

4.14 Klassendiagramm zum Packet datapathquery.queryModule (Teil 2 - Gra-<br />

phfilter) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

4.15 Klassendiagramm zum Packet datapathquery.queryModule (Teil 3 - Reg-<br />

ExpAnalyser) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

4.16 Klassendiagramm zum Packet datapathquery.queryModule (Teil 4) . . . . 73<br />

4.17 Paketübersicht der Subpakete des Pakets datapathquery.graphExportParser 74<br />

4.18 Klassendiagramm zum Packet datapathquery.graphExportParser . . . . . 75<br />

4.19 Klassendiagramm zum Packet importGenerator . . . . . . . . . . . . . . 76<br />

A.1 Einträge des Menüs Options . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

A.2 Preference Dialogfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

A.3 Menü Plugin, dessen Einträge die regristrierten Plugins sind . . . . . . . 85<br />

A.4 Das Eingabeplugin BlastXInputPlugin . . . . . . . . . . . . . . . . . . . 86<br />

A.5 Das Eingabeplugin BlastXInputPlugin - Auswahl der Zuordnugnsdatei der<br />

Token der regulären Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . 87<br />

A.6 Der Dialog zum Erstellen eines regulären Ausdrucks . . . . . . . . . . . . 88


TABELLENVERZEICHNIS ix<br />

Tabellenverzeichnis<br />

2.1 Gegenüberstellung von Fragestellungen in der Proteomik und den zuge-<br />

örigen Verfahrenstechniken zur Informationsgewinnung [Wik] . . . . . . . 10<br />

3.1 Liste der zu betrachtenden Berwertungskriterien . . . . . . . . . . . . . . 29<br />

3.2 Graph G1 im RGraph (die Spaltennamen wurden zwecks Platzersparnis<br />

verkürzt geschrieben) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.3 Ausgabe zu den Anfrage der Listings 3.2,3.3 . . . . . . . . . . . . . . . . 39<br />

3.4 Bewertung der Anfragetechnologien . . . . . . . . . . . . . . . . . . . . . 51<br />

4.1 Abbildung eines ER-Schemas auf ein relationales Schema [HS00] . . . . . 64


x TABELLENVERZEICHNIS


LISTINGS xi<br />

Listings<br />

1.1 Produktionsregel zur Definition eines neuen Symbols . . . . . . . . . . . 6<br />

2.1 Rohdaten ohne Marken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.2 Daten aus Listing 2.1 als XML . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

2.3 Beispiel für XML DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

2.4 Beispiel für XML-Schema Instanz . . . . . . . . . . . . . . . . . . . . . . 26<br />

2.5 Einbettung des im Listing 2.4 entworfenen Dokumenttyps . . . . . . . . . 26<br />

3.1 Start-Ziel Anfrage ohne konkrete Pfadinformationen . . . . . . . . . . . . 37<br />

3.2 Selbstverbund über der Relation RGraph . . . . . . . . . . . . . . . . . . . 38<br />

3.3 Pfadausgabe mittel CONNECT BY-Klausel (nur Oracle) . . . . . . . . . 39<br />

3.4 Definition eines Lokalisierungsschritts nach [CD99] . . . . . . . . . . . . . 41<br />

3.5 Ausschnitt der Definition der Achsenbeschreibung und des Knotentests<br />

nach [CD99] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

3.6 XML-Schema Datei zur Definition der XML-Struktur für Graphen . . . . 43<br />

3.7 Ausschnitt der XML-Dokumenteninstanz des Dokumententyps aus Listing<br />

3.6 über der Graphenmengen G . . . . . . . . . . . . . . . . . . . . . . . 45<br />

3.8 Pfadanfragen über Graphen als XPath Ausdrücke . . . . . . . . . . . . . 46<br />

3.9 XPath Ausdrücke mit Pfadauswertung . . . . . . . . . . . . . . . . . . . 47<br />

3.10 Ausschnitt aus der ODL Grammatik [CBB + 97] . . . . . . . . . . . . . . 48<br />

3.11 Ausschnitt der OQL Grammatik aus [CBB + 00] . . . . . . . . . . . . . . 49<br />

3.12 Darstellung der Graphen durch ODL . . . . . . . . . . . . . . . . . . . . 50<br />

3.13 OQL Anfrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

4.1 Beispiel einer Link-Datei für die Klasse RegularExpressionVocabularyLinker 73


xii LISTINGS<br />

4.2 Anweisung zur Generierung des Javaklassen entsprechend der Schema-<br />

Datei durch JAXB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

B.1 XML-Schema Datei der Graphstruktur . . . . . . . . . . . . . . . . . . . 89<br />

B.2 Auszug des XML-Schema Teils für die Knotenbeschreibungen . . . . . . . 90


Verzeichnis der Abkürzungen<br />

ANU The Australian National University<br />

BLAST Basic Local Alignment Search Tool<br />

DBMS Datenbankmanagementsystem<br />

DDL Data Definition Language<br />

DML Data Manipulation Language<br />

DNS Desoxyribonukleinsäure<br />

DOM Document Object Model<br />

EBI European Bioinforamtics Institute<br />

EBNF Extended Backus-Naur Form<br />

EMBL European Molecular Biology Laboratory<br />

GenBank Archivierungsdatenbank für Gensequenzen der NCBI<br />

HMM Hidden Markov Models<br />

HUPO Human Proteome Organization<br />

IUBMB International Union of Biochemistry and Molecular Biology<br />

NCBI National Center for Biotechnology Information<br />

ODBMS objektorientiertes Datenbankmanagementsystem<br />

ODL Object Definition Language<br />

ODMG Object Data Management Group<br />

OID Objektidentifikator<br />

OML Object Manipulation Language<br />

OQL Object Query Language<br />

PDB Protein Data Bank, Archiv über dreidimensionale<br />

Strukturen biologischer Makromoleküle<br />

PIR Protein Information Resource<br />

RDBMS relationales Datenbankmanagementsystem<br />

SAX Simple API for XML<br />

SGD Saccharomyces Genome Database<br />

SGML Standard Generalized Markup Language<br />

SIB Swiss Institute of Bioinformatics<br />

TIGR The Institute for Genomic Research<br />

UniProt Universal Protein Resource<br />

W3C World Wide Web Consortium<br />

XML Extensible Markup Language<br />

xiii


xiv<br />

ZFIN The Zebrafisch Information Network


Kapitel 1. Einleitung 1<br />

Kapitel 1<br />

Einleitung<br />

Anliegen dieses Kapitels ist es, dem Leser den Inhalt dieser Arbeit motivierend zu beschreiben.<br />

Der Leser soll einen Einblick in die Problematik der bestehenden Aufgabe<br />

bekommen, um sich ein besseres Bild über die Vorgehensweise bei der Entwicklung und<br />

Entwicklungstendenzen im Allgemeinen machen zu können.<br />

1.1 Motivation<br />

Viele Projekte wurden seit den Anfängen der Molekularbiologie gestartet und wachsende<br />

technologische Möglichkeiten waren und sind Ursache für die Ansammlung riesiger Datenbestände.<br />

Damit diese Datenbanken nicht zu einen Datenfriedhof werden, muss die<br />

Möglichkeit der Informationsextraktion gewährleistet sein. Meist treten zunächst Fragestellungen<br />

der folgenden Art auf: Gegegeben sei eine Sequenz oder ein Sequenzbruchstück.<br />

Gibt es in der Datenbank weitere ähnliche Sequenzen bezüglich dieser Sequenz?<br />

Dies ist in der Bioinformatik eine zentrale Fragestellung. Für dieses Problem gibt es<br />

derzeit schon effiziente Lösungen. Diese sind unter dem Namen BLAST bekannt. BLAST<br />

ist ein Akronym und steht für Basic Local Alignment Search Tool. Es sucht homologe<br />

Sequenzen zur Eingabesequenz. Homologien sind Ähnlichkeiten, die auf einen gemeinsamen<br />

Vorfahren zurückzuführen sind. Es ist also möglich, daß zwei DNS-Sequenzen sehr<br />

ähnlich sind jedoch nicht homolog, weil die Ähnlichkeit nicht auf einen Vorfahren beider<br />

Spezies zurückführbar war.<br />

Es existieren verschiedene BLAST Varianten, die durch die Art der Eingabedaten und<br />

der Art der Daten, in denen gesucht wird, unterschieden werden. Die folgende Auflistung<br />

zeigt die einzelnen BLAST-Typen.<br />

• Blastn : DNA- Anfrage/ DNA- Datensammlung<br />

• Blastp : Protein- Anfrage/ Protein- Datensammlung<br />

• Blastx : translatierte DNA- Anfrage/ Protein- Daten


2 1.1. Motivation<br />

• Tblastn : Protein- Anfrage/ translatierte DNA- Daten<br />

• Tblastx: translatierte DNA- Anfrage/ DNA- Daten<br />

Wieso wurde BLAST an dieser Stelle erwähnt? Um diese Frage zu beantworten, muss<br />

ein klein wenig ausgeholt werden. Zunächst ist es wichtig, den Begriff der funktionalen<br />

Annotation zu verstehen. Die Annotationen sind gerade die Informationen, die für den<br />

praktischen Gebrauch von Bedeutung sind. Sie beschreiben welche Funktion dem jeweiligen<br />

Objekt zuzuordnen ist. Beispielsweise die aktuelle Sequenz ist Bestandteil der<br />

codierenden Sequenz eines bestimmten Proteins, welches bei Gerste eine Resistenz gegen<br />

eine betimmten Schädling bewirkt. Dieser Zusammenhang könnte direkt bei einer Beobachtung<br />

von eigens veränderten Proben erkannt werden. Ganz einfach aus dem Grund,<br />

weil die entsprechend auf molekularer Ebene veränderten Pflanzen keinem Befall des<br />

Schädlings unterlagen. Hingegen die nicht-veränderten Pflanzen angegriffen wurden. Somit<br />

ist klar, daß die Änderung der DNS diesen Unterschied hervorgebracht hat und die<br />

entsprechenden Sequenz dieser Resistenz zugeschrieben werden kann.<br />

Solche Informationen wurden bereits in vielen Projekten gewonnen. Dieses Wissen<br />

kann sich zu Nutze gemacht werden, wenn bei Sequenzierarbeiten neue, unbekannte Sequenzen<br />

erschlossen werden und es daraufhin unweigerlich zu der Frage kommt, welche<br />

Aufgabe diese Sequenz haben wird. Genau hier findet das BLAST seine Anwendung im<br />

ersten Schritt der funktionalen Annotation einer noch nicht annotierten Sequenz. Durch<br />

BLAST-Anfragen werden homologe Sequenzen gefunden. Die Ergebnisse können aus Experimenten<br />

aus Projekten mit molekularem Material verschiedenster Spezies stammen.<br />

Einige Treffer sind unbrauchbar, andere lassen jedoch Vermutungen erahnen. Werden<br />

unter den Ergebnissen gerade solche gefunden, die auf Objekte der gleichen Gattung<br />

verweisen, so ist es aufgrund der Homologie recht wahrscheinlich, daß die Ursprungssequenz<br />

der BLAST-Anfrage ebenfalls die gleiche Funktion hat, wie die des Treffers des<br />

BLAST-Vorgangs. Somit kann die nachfolgende Arbeit zielgerichtet organisiert werden.<br />

Um sich eine Vorstellung von dem Aufwand zu machen, der für das Finden der<br />

gewünschten Information nötig ist, soll jetzt der Suchvorgang eines Biologen erläutert<br />

werden. Im Aktivitätsdiagramm in Abbildung 1.1 wird das Vorgehen dargestellt. Allein<br />

die Struktur läßt hier schon den Aufwand erkennen. Nur mit etwas Glück kann die<br />

Suche recht schnell zum Ziel führen. Angenommen es wird gleich beim ersten auffälligen<br />

BLAST-Resultat die gewünschte Information gefunden und es werden keine weiteren<br />

Informationen benötigt, ist das Ende der Suche erreicht. Eher wahrscheinlich ist aber,<br />

daß der zuerst gewählte Eintrag nicht direkt die Information beinhaltet. Dann eröffnen<br />

sich zwei weitere Möglichkeiten:<br />

1. es wird zurück zum BLAST-Resultat gegangen und dort ein weiterer Eintrag ausgewählt,<br />

oder<br />

2. es wird nach Verbindungen innerhalb des aktuellen Eintrags gesucht.<br />

Die zweite Variante beschreibt den Fall, in dem die nächste Rekursionsstufe erreicht wird.<br />

Wird auch hier die gewünschte Information nicht gefunden, bestehen auch wieder die


Kapitel 1. Einleitung 3<br />

eben genannten Möglichkeiten für diesen Eintrag mit einem Unterschied. Der Rückschritt<br />

zum vorherigen Eintrag ist nun kein direktes Resultat der BLAST-Anfrage, sondern<br />

der Eintrag auf der letzte Rekursionsstufe. Der Suchprozess beschreibt letztlich eine<br />

Tiefensuche.<br />

+ 0<br />

! + /<br />

0# # +<br />

$ %<br />

! " #<br />

$<br />

%<br />

$ 2<br />

! " #<br />

1<br />

$ %<br />

$<br />

$ %<br />

, %<br />

+'! 0 &<br />

%<br />

$<br />

$ %<br />

&<br />

'<br />

( ) %<br />

$<br />

* +'!<br />

%<br />

$ %<br />

- , &<br />

.<br />

Abbildung 1.1: Beschreibung des Vorgehens eines Biologen bei der Suche einer Annotation<br />

Mit etwas Erfahrung ist es sicher möglich eine geeignete Auswahl der Einträge zu<br />

treffen, jedoch besteht dabei immer eine Gefahr. Der Biologe setzt vorraus, daß wenn<br />

er bei seiner Auswahl, die normalerweise zum Ziel führt, die Information nicht erhält,<br />

darausfolgend auch kein Zusammenhang mit der von ihm vermuteten Funktion seines<br />

Objekts bestehen kann. Aber es ist durchaus vorstellbar, daß über einen anderen Pfad


4 1.2. Zielstellung<br />

der gerade ausgeschlossene Zusammenhang doch belegt werden könnte. So wäre dem<br />

Biologen die Information verloren gegangen. Durch die Beschreibung des Vorgangs ist<br />

sicherlich klar, daß das Problem recht zeitaufwendig und durchaus ein größeres Maß<br />

an Komplexität annehmen kann. Aus diesem Grund ist die manuelle Suche auf den<br />

Daten ein eher unbefriedigendes Unterfangen. Es wäre sinnvoll und wünschenswert eine<br />

automatisierte Suche über den Daten zu entwickeln, die zum Einen effizient und mit<br />

ausreichender Tiefe operiert.<br />

Beim Lesen des Vorgehens eines Biologen auf der Suche nach den Informationen die<br />

er wünscht, stellt sich eventuell die Frage, warum keine einheitliche, integrierte Datenbanklösung<br />

entwickelt wurde. Zum Einen sind die Daten nicht auf einmal entstanden.<br />

Es war ein langwieriger Prozess bis die heutige Datenmenge erforscht war. Somit hatte<br />

jedes Projekt zunächst seine eigene Datenmengen. Deshalb ist es nur nachvollziehbar,<br />

dass die einzelnen Datenbestände stark heterogen sind und es daher, wenn überhaupt,<br />

nur sehr schwer möglich ist, eine gesamt-integrierte Lösung zu finden. Aus diesem Grund<br />

gibt es viele Web-Portale, die die Daten zu den entsprechenden Experimenten zur Verfügung<br />

stellen und über Hyperlinks auf andere Datenbestände verweisen. Durch diese<br />

Verzweigung ist es möglich neue Informationen zu gewinnen, da jede Referenz zusätzliche<br />

Informationen zum ursprünglichen Datensatz liefert. Auf diese Art und Weise ist die<br />

Struktur der Proteomics-Datenbank entstanden. Aus exportierten flachen Dateien des<br />

Uni-Prot Datensystems ging vor allem die Struktur der Proteomics-Datenbank hervor.<br />

Zusätzliche Daten zu einzelnen Teilbereichen wurden dann aus weiteren Datenquellen<br />

gewonnen und in den Datenbestand der Proteomicsdatenbank integriert.<br />

Die Proteomics-Datenbank wurde dann zur Generierung von Graphen verwendet.<br />

Dabei wurde eine Tiefensuche über den Fremdschlüsselattributen durchgeführt. Das Resultat<br />

ist eine Menge von Graphen. Genau diese Graphen spiegeln das Suchen der Biologen<br />

im Netz wieder. Auf der Basis dieser Graphen ist es nun möglich den Suchprozess<br />

zu automatisieren und somit das versteckte Wissen der Verzweigungsstruktur nutzbar<br />

zu machen.<br />

Die eben gelieferte Motivation sollte einerseits zeigen welchen biologischen Wert bzw.<br />

Hintergrund dieses Tool hat und auf der anderen Seite wie die Datenstruktur zur Bewältigung<br />

der automatisierten Verarbeitung dieser Vorgänge entstand. Im nachfolgenden<br />

Abschnitt wird zunächst kurz Zielstellung dieser Arbeit eingegangen.<br />

1.2 Zielstellung<br />

Das Ziel dieser Arbeit ist ein Konzept zur Anfrageverarbeitung auf Basis einer Menge<br />

von bereits vorberechneten Graphen. Diese Graphen basieren auf Verlinkungen zwischen<br />

den Web-Portalen von Datenbestände, wie im vorherigen Abschnitt beschrieben. Dabei<br />

soll bei der Anfrage analysiert werden, ob, ausgehend von einer Menge von Startwerten,<br />

Zusammenhänge mit einer gewünschten Zielwertmenge bestehen. Ausserdem soll es<br />

möglich sein Pfade zu charakterisieren, um Zusammenhänge verwerfen zu können, die<br />

über semantisch unrelevanten Pfaden entstanden sind.


Kapitel 1. Einleitung 5<br />

Nachdem die Zielstellung erläutert wurde, soll jetzt eine Beschreibung der Gliederung<br />

der Arbeit erfolgen.<br />

1.3 Gliederung der Arbeit<br />

Im folgenden Abschnitt wird die Gliederung der Arbeit kurz erläutert. Dazu werden eine<br />

paar beschreibende Worte, wie der Name der Kapitelüberschrift sowie eine Zusammenfassung<br />

des wesentlichen Inhalts, zu jedem Kapitel formuliert.<br />

Einleitung gibt einen Einblick in die Problematik. Sie beschreibt motivierend welche<br />

Hilfestellung das Konzept und letzten Endes auch das Tool leisten soll.<br />

Gundlagen In dieser Arbeit werden verschiedene Anfragesprachen-Technologien angesprochen.<br />

Um einen Einblick in diese Technologien zu bekommen, werden in diesem<br />

Kapitel u.a. die Technologien und Konzepte erläutert auf denen diese Anfragesprachen<br />

arbeiten. Im wesentlichen werden dies Datenbankmodelle und Dokumentenstrukturen<br />

sein. Ausserdem soll in diesem Kapitel grundlegend der Biologische<br />

Hintergrund erläutert werden, um die zu verarbeitetenden Daten besser zu verstehen.<br />

Anfragetechnologien über Graphenstrukturen Dieses Kapitel wird die untersuchten<br />

Anfragekonzepte erläutern und sie hinsichtlich verschiedener Kriterien bewerten.<br />

Entwurf des Offlinewerkzeugs Der Kern dieses Kapitel ist die Beschreibung des Entwicklungsprozesses<br />

des Offlinewerkzeugs. Dazu wird sich dem Softwarelebenzyklus<br />

bedient, um kurz die einzelnen Phasen der Entstehung des Softwaretools zu beschreiben.<br />

Zusammenfassung und Ausblick Hierbei wird noch einmal die gesamte Arbeit resümiert<br />

und ein kleiner Ausblick gegeben.<br />

Nachdem jetzt die Gliederung der Arbeit gegeben wurde, wird jetzt auf die in dieser<br />

Arbeit verwendeten stilistischen Mittel eingegangen.<br />

1.4 Technische Hinweise<br />

1.4.1 Extended Backus-Naur Form (EBNF) der XML Spezifikation<br />

des W3C<br />

Die Extended Backus-Naur Form wird im Kapitel 3 verwendet. Sie wird in der W3C<br />

Recommendation zur Extensible Markup Language [BPSM + 04] definiert. Dort wird die


6 1.4. Technische Hinweise<br />

vollständige Definition gegeben. Diese Grammatik besteht aus einer Menge von Regeln<br />

der Form:<br />

symbol ::= e x p r e s s i o n<br />

Listing 1.1: Produktionsregel zur Definition eines neuen Symbols<br />

Jede Regel definiert eine neues Symbol. Symbole beginnen mit einem Großbuchstaben,<br />

wenn sie Startsymbole eines regulären Ausdrucks sind, ansonsten werden sie<br />

kleingeschrieben. Strings werden quotiert.<br />

Die folgenden Ausdrücke dienen zum Vergleich von Zeichketten mindestens der Länge<br />

eins:<br />

#xN wobei N eine hexadezimaler Wert ist. Der Ausdruck entspricht dem Zeichen, dessen<br />

(code point) im IS0/IEC 10646 Standard N entspricht. Anführende Null-Ziffern<br />

werden nicht beachtet.<br />

[a-zA-Z], [#xN-#xN] entspricht jedem Zeichen, dessen Wert im angegeben Bereich<br />

liegt.<br />

[abc], [#xN#xN#xN] entspricht jedem Zeichen, dessen Wert in der Aufzählung vorkommt.<br />

Aufzählungen und Bereichsangaben können zusammen innerhalb eines<br />

Klammerpaares verwendet werden.<br />

[^a-z], [^#xN-#xN] entspricht jedem Zeichen, dessen Wert keinem der Wert entspricht,<br />

die durch die Bereichsangabe beschrieben werden.<br />

[^abc], [^#xN#xN#xN] entspricht jedem Zeichen, dessen Wert keinem der angegeben<br />

Werte entspricht. Aufzählungen und Bereichsangaben von verbotenen Werten<br />

können zusammen innerhalb eines Klammerpaares verwendet werden.<br />

”string” entspricht einem String, der innerhalb der Gänsefüßchen angegeben wurde.<br />

’string’ entspricht einem String, der innerhalb der Hochkommas angegeben wurde.<br />

Symbole können wie folgt zu komplexen Pattern zusammengesetzt werden, dabei sind A<br />

und B einfache Ausdrücke:<br />

(expression) expression wird als Einheit aufgefasst und kann wie hier beschrieben verwendet<br />

werden.<br />

A? entspricht A oder nichts; Optionalität.<br />

A B entspricht der Folge von A und B. Diese Operation ist stärder bindend als die<br />

oder-Verknüpfung; somit ist A B | C D identisch mit (A B) | (C D).<br />

A | B entspricht A oder B.


Kapitel 1. Einleitung 7<br />

A - B entspricht jedem String der A entspricht und nicht B entspricht.<br />

A+ entspricht einem oder beliebig vielen A. Die Konkatenation ist stärker bindend als<br />

die oder-Verknüpfung; somit ist A+ | B+ identisch zu (A+) | (B+).<br />

A* entspricht keinem oder beliebig vielen A. Die Konkatenation ist stärker bindend als<br />

die oder-Verknüpfung; somit ist A* | B* identisch zu (A*) | (B*).<br />

Weiter Notationen die in den Produktionsregeln auftreten sind:<br />

/* . . . */ Kommentar.<br />

[wfc: . . . ] die Wohlgeformtheitsbedingung; well-formedness constraint; this identifies by<br />

name a constraint on well-formed documents associated with a production.<br />

[vc: . . . ] die Gültigkeitsbedingung; validity constraint; this identifies by name a constraint<br />

on valid documents associated with a production.<br />

1.4.2 UML<br />

Dieser Abschnitt erklärt kurz die in den folgenden Kapiteln verwendeten Diagrammarten.<br />

Begonnen wird mit dem Aktivitätsdiagramm.<br />

Aktivitätsdiagramm<br />

Das Aktivitätsdiagramm dient zur Beschreibung von Aktivitätsabläufen. Dabei unterstützt<br />

es parallele Abläufe und bietet eine verzweigte Prozessstruktur. Die Abbildung 1.2<br />

beschreibt die Notation des Aktivitätsdiagramms. Mit einer Splittung wird eine parallele<br />

Auführung gestartet. Und die Synchronisation synchronisiert parallele Abläufe. Die<br />

Synchronisation entspricht einem logischen UND. Verzweigungen verhalten sich sich wie<br />

if-then-else Konstrukte und steuern somit den Prozessfluss. Die Zusammenführung stellt<br />

Semantisch ein logisches ODER dar. Wird midnestens ein Eingangspfeil durchlaufen so<br />

wird auch der Ausgangspfeil durchlaufen.<br />

Die gestichelten Pfeile werden im Dumke als Zustandserzeugung bezeichnet. Diese<br />

können als Objektfluss interpretiert werden. Zunächst wird ein gewisses Objekt aus einer<br />

Aktion heraus erzeugt und dann an anderer Stelle verwendet. Neben den eigentlichen<br />

Aktivitäten kennzeichnet das Aktivitätsdiagramm auch einen zeitlichen Verlauf. Da es<br />

eine Folge von zeitlich aufeinanderfolgenden Aktivitäten beschhreibt.<br />

Nach diesem Einblick in die Problematik und die Gliederung der Arbeit wird im Weiteren<br />

die in der Entwicklung entstandenen Lösungen vorgestellt. Dabei wird im nächsten<br />

Kaptitel auf die notwendigen Grundlagen eingegangen.


8 1.4. Technische Hinweise<br />

Abbildung 1.2: Notation des Aktivitätsdiagramms [Dum00]<br />

!<br />

!


Kapitel 2. Grundlagen 9<br />

Kapitel 2<br />

Grundlagen<br />

Im Kapitel Grundlagen werden verschiedene Themengebiete einführend beschrieben. Es<br />

werden Begriffe eingeführt die zum Verständnis notwendig sind. Zu Beginn werden allgemeine<br />

biologische Begriffe erklärt. Diese sind für das Verständnis der Informationen der<br />

Proteomics-Datenbank nötig. Daraufhin wird die Struktur der Proteomics-Datenbank<br />

selbst erläutert und deren Komponenten mit kurzen inhaltlichen Erläuterungen versehen.<br />

Anschließend daran werden Datenbankmodell beschrieben, die später die Grundlage<br />

für die Analyse der Anfragetechnologien bilden. Zusätzlich zu den Datenbankmodellen<br />

wird der Aspekt der Dokumentenverarbeitung durch Markup Sprachen erläutert. Abschließend<br />

werden einige grundlegende Begriffe der Graphentheorie beschrieben.<br />

2.1 Biologische Grundlagen<br />

Auf der Basis der Desoxyribosenukleinsäure (kurz DNS) arbeitet der Zweig der Molekularbiologie<br />

bzw. der Genetik. Was ist unter diesem Objekt zu vestehen? Aus chemischer<br />

Sicht handelt es sich bei der DNS um ein riesiges Kettenmolekül. Wie der Name schon<br />

verrät, ist es also eine Kette von Molekülen. Die charakteristische Eigenschaft einer Kette<br />

ist, daß sie aus Gliedern besteht. Die Glieder der DNS sind die Nukleotide. Dabei<br />

besteht jedes Nukleotid aus drei Bestandteilen:<br />

• Base (Adenin, Thymin, Guanin, Cytosin)<br />

• Desoxyribose-Zucker<br />

• Phosphat<br />

Neben der DNS gibt es eine weitere Nucleinsäure die sogenannte RNS. Sie ist vom<br />

Aufbau her einem DNS-Einzelstrang sehr ähnlich. Prinzipiell sogar identisch, jedoch gibt<br />

es zwei wesentliche Unterschiede. Erstens, das Zuckermolekül ist Ribose, nicht wie bei der<br />

DNS die Desoxyribose. Zweitens, aus Thymin wird Urazil. Die RNS spielt eine wichtige<br />

Rolle bei der Genexpression.


10 2.2. Aufbau der Proteomics-DB<br />

Es stellt sich nun die Frage, was unter Genexpression zu verstehen ist. Kurz und bündig<br />

gesagt, ist es ein Prozess, der aus zwei Teilprozessen besteht. Diese Teilschritte sind<br />

unter dem Namen Transkription und Translation bekannt. Sie laufen in der genannten<br />

Reihenfolge ab und, zusammenfassend gesagt, werden dabei unter Verwendung des genetischen<br />

Codes Proteine erzeugt. Was genau dahinter steckt soll an dieser Stelle nicht so<br />

wichtig sein. Wichtig zu wissen ist jedoch, daß aus Nukleotidsequenzen Proteine erzeugt<br />

werden.<br />

Viele Aufgaben und Steuerungen werden von den Proteinen bewältigt und organisiert.<br />

Aus diesem Grund ist es von Interesse, welche Proteinen in einem Organismus<br />

vorliegen. Dies führt uns zum Begriff der Proteomik. Die Proteomik (englisch: proteomics)<br />

umfasst die Erforschung des Proteoms, d.h. der Gesamtheit aller in einer Zelle oder<br />

einem Lebewesen exprimierten Proteine.[Wik]<br />

In der Tabelle 2.1 wird eine Übersicht über Fragestellungen und Methoden der Informationsgewinnung<br />

gegeben. Die Methoden sollen hier nicht weiter genau aufgeführt<br />

werden. Der interessante Teil der Tabelle ist der der Proteinexpression. Daran läßt sich<br />

erkennen, daß der Begriff der 2D-Page als ein Synonym für die Gelelektrophorese anzusehen<br />

ist.<br />

Fragestellung Technik<br />

Proteinsequenzierung Edman-Sequenzierung<br />

Proteinidentifikation Massenspektrometrie (MALDI-TOF,<br />

ESI-MS/MS, LC-MS/MS)<br />

3-D-Struktur Röntgenbeugungsanalyse (XRD), NMR<br />

Proteinexpression Gelelektrophorese (2D-PAGE),<br />

Proteinarrays<br />

Proteinfunktion/ Yeast-2-Hybrid-Systeme<br />

Protein-Protein-Interaktion<br />

Tabelle 2.1: Gegenüberstellung von Fragestellungen in der Proteomik und den zugeörigen<br />

Verfahrenstechniken zur Informationsgewinnung [Wik]<br />

2.2 Aufbau der Proteomics-DB<br />

Die Proteomics-Datenbank ist die Grundlage für die Anfragen. Sie enthält die Daten,<br />

die Ableitung zu bestimmten Fragestellungen hinsichtlich der Annotation von EST-<br />

Sequenzen und den mit diesen in Verbingung stehenden Proteinen ermöglicht. Die Herkunft<br />

der Daten ist weit gefächert. Weltweit gibt es diverse Projekte, die sich mit der<br />

Analyse von Proteomen beschäfftigen und ihre Forschungsdaten auf Webseiten zur Verfügung<br />

stellen.<br />

Dort ist es möglich die frei verfügbaren Daten herunterzuladen. Auf diesem Sachverhalt<br />

basiert der Datenbestand der Proteomics-Datenbank. Es wurden Datendateien vom


Kapitel 2. Grundlagen 11<br />

Uni-Prot System heruntergeladen und mittels eines Parser ausgelesen. Dabei entstand<br />

die Struktur der Proteomics-Datenbank.<br />

Die Abbildung 2.1 stellt einen Ausschnitt aus dem kompletten Datenbankschema dar.<br />

Das vollständige Schema besteht aus 84 Tabellen. Dieses Schema unterliegt Veränderungen.<br />

Es können neue Tabellen hinzugefügt werden oder eventuell vorhandene Tabellen<br />

gelöscht werden.<br />

Im Folgenden werden die im aktuell vorliegenden Datenbankschema aufzufindenden<br />

Relationenschemata aufgelistet und bezüglich ihres Inhalts kurz erläutert. Diese Auflistung<br />

erhebt keinen Anspruch der Vollständigkeit. Ihre Aufgabe soll hierbei nur zur<br />

Beschreibung der für diese Arbeit grundlegenden Daten dienen.<br />

MaizeDB http://www.maizegdb.org/ Maize Genetics/Genomics Database project;<br />

allgemeine biologische Informationen über Mais<br />

Tuberculist-Link http://genolist.pasteur.fr/TubercuList/; Daten rund um die<br />

Analyse des Tuberkelbazilus; dieses Projekt umfasst Informationen zu DNS-<br />

Strängen und Proteinsequenzen gewonnen aus dem Beispielbakterienstamm (paradigm<br />

strain??) M. tuberculosis H37Rv (M. –> Mycobacterium).<br />

Listi-Link http://genolist.pasteur.fr/ListiList/; hervorgegangen aus The Listeria<br />

Monocytogenes and Listeria innocua genomes sequencing project; enthält<br />

Daten entstanden bei der Analyse des Erregers Listeria monocytogenes und seines<br />

nicht-krankheitserregenden Verwandten Listeria innocua<br />

Subti-Link http://genolist.pasteur.fr/SubtiList/; hervorgegangen aus The Bacillus<br />

subtilis genome sequencing project; enthält Daten entstanden aus der Analyse<br />

des Genoms des Bacillus subtilis<br />

MypuList-Link http://genolist.pasteur.fr/MypuList/help/about.html; hervorgegangen<br />

aus The Mycoplasma pulmonis genome sequencing project; enthält<br />

Daten entstanden aus der Analyse des Genoms vom Mycoplasma pulmonis<br />

Leproma-Link http://genolist.pasteur.fr/Leproma/; hervorgegangen aus dem<br />

The Mycobacterium leprae genome sequencing project; enthält Daten die aus der<br />

Analyse des Lepra verursachenden Bazillus Mycobacterium leprae<br />

SGD-Link Bestandteil von Forschungen an der Stanford University (Stanford Genomic<br />

Resources); SGD steht für Saccharomyces Genome Database; sie beinhaltet molekularbiologischen<br />

und -genetische Daten über Hefe (saccharomyces cerevisiae), die<br />

übliche Hefe zum Backen<br />

SagaList-Link http://genolist.pasteur.fr/SagaList/; original Daten stammen<br />

aus dem The Streptococcus agalactiae genome sequencing project; Datenbank die<br />

Daten enthält, die aus der Analyse des Genoms des Erregers Streptococcus agalactiae<br />

(durch Nahrung übertragen)


12 2.2. Aufbau der Proteomics-DB<br />

Abbildung 2.1: Ausschnitt aus dem Datenbankschema der Proteomics-DB


Kapitel 2. Grundlagen 13<br />

PIR-Link http://pir.georgetown.edu/home.shtml; bereits seit 1984 laufendes Projekt,<br />

welches eine Datenbank PSD oder auch PIR-PSD (Protein Sequence Database)<br />

pflegt um funktionale Annotationen bereitzustellen; aktuell ist es integriert in<br />

der UniProt Wissenbasis<br />

PROSITE-Link<br />

Swiss2DPage-Link<br />

Hamap-Link http://www.expasy.org/sprot/hamap/; Teil vom ExPASy; beinhaltet<br />

Daten zu Proteinfamilien, -profilen und -alignments; steht in Verbindung mit Swiss-<br />

Prot und TrEMBL<br />

Interpro-Link http://www.ebi.ac.uk/interpro/; Bestandteil des EMBL-EBI ; eine<br />

Datenbank über Daten von Proteinfamilien, -domänen und functional sites<br />

ProDom-Link http://protein.toulouse.inra.fr/prodom/current/html/home.<br />

php; automatisch Generierte Menge von Proteindomänfamilien aus der Swiss-<br />

PROT und TrEMBL Datenbank.<br />

TIGR-Link http://www.tigr.org/; eine Ansammlung von mehreren Datenbanken<br />

entstanden aus den Genom Projekten TIGR’s; gegründet 1992; diverse Daten<br />

von Proteinensequenzen, DNA-sequenzen, Taxonomiedaten, Genexpressionsdaten,<br />

Proteinfamilien etc...<br />

TIGRFams-Link http://www.tigr.org/TIGRFAMs/; eine der TIGR-Datenbanken;<br />

enthält Proteinfamilien entsprechend den Hidden Markov Models (HMM)<br />

PRINTS-Link http://umber.sbs.man.ac.uk/dbbrowser/PRINTS/; ist eine übersicht<br />

an Protein ”Fingerabdrücken”; Ein Fingerabdruck ist dabei eine Menge von<br />

Motiven, die eine bestimmte Protein-Familie charakterisieren<br />

PDB-Link Datenbank über 3D Abbildungen von Makromolekülen<br />

EMBL-Link http://www.embl.org/; EMBL (European Molecular Biology Laboratory)<br />

ist ein wissenschaftliches Institute gefördert durch seine 17 Migliedsstaaten;<br />

es besteht aus 5 Einheite: dem Hauptsitz in Heidelberg und den0 Aussenstelle in<br />

Hixton (EBI), Grenoble, Hamburg und Monterotondo (bei Rom); in der EMBL-<br />

Datenbank werden Nukleotidsequnzen gespeichert, die in einer internationalen Zusammenarbeit<br />

mit der GenBank(USA) und der DNA Database of Japan (DDBJ)<br />

produziert wurde<br />

EcoGene-Link http://bmb.med.miami.edu/EcoGene/EcoWeb/; eine Ansammlung<br />

von Genen, Proteinen zum E.coli K-12 Genom and Proteom, welche aus sequenzierungsanalysen


14 2.2. Aufbau der Proteomics-DB<br />

ZFIN-Link http://zfin.org/cgi-bin/webdriver?MIval=aa-ZDB_home.apg; The<br />

Zebrafish Information Network; ein Fisch der in der Genforschung von Wirbeltieren<br />

als Modell Organismus genutzt wird; enthält? wahrscheinlich<br />

WormPep-Link http://www.sanger.ac.uk/Projects/C_elegans/; enhält Proteininformationen,<br />

die aus dem Caenorhabditis elegans genome sequencing project<br />

hervorgehen<br />

Genew-Link http://nar.oupjournals.org/cgi/content/full/30/1/169; the Human<br />

Gene Nomenclature Database; Daten über Gene des Menschen<br />

Rebase-Link http://rebase.neb.com/rebase/rebase.html; The Restriction Enzyme<br />

Database; Daten über Restriktionsenzymen<br />

siena2Dpage-Link http://www.bio-mol.unisi.it/2d/2d.html; Two-dimensional<br />

polyacrylamide gel electrophoresis database; University of Siena, Italy; Gelelektrophoresis<br />

Abbildungen von menschlichen Genen<br />

PHCI-2Dpage-Link http://www.gram.au.dk/ Department of Medical Microbioloy<br />

and Immunology, University of Aarhus, Denmark; Gelelektrophoresebilder von Proteinen<br />

des Parasits Chlamydia trachomatis, Chlamydia pneumoniae und Proteinen<br />

von HeLa cell; Chlamydien sind Paraiten die den Uretaltrakt infizieren (Eileiter<br />

schädigen und zur Unfähigkeit des Kinder kriegens führen)<br />

Merops-Link http://merops.sanger.ac.uk/; Informationen zu Peptidasen und Proteinen<br />

die diese in ihrer Wirkungsweise hemmen; Peptidasen sind Protein- und<br />

Peptidspaltende Enzyme<br />

ANU-2D-Link http://semele.anu.edu.au/2d/2d.html; Proteininformationen von<br />

Reis (Oryzita sativa) und zur Medicago truncatula, einer im Mittelmeer beheimateten<br />

Verwandten der Luzerne und Modellpflanze für Genomforschung an Leguminosen<br />

(=Hülsenfrüchtler)<br />

GlycosuiteDB-Link https://tmat.proteomesystems.com/glycosuite/; Informationen<br />

über Polysaccharide (Kohlenhydrate) wie Typ, Verbindung, anormerische<br />

konfiguration, Masse; erstellt Querverweise zur Swiss-Prot/TrEMBL und PubMed<br />

DictyDB-Link http://www-biology.ucsd.edu/others/dsmith/dictydb.html#C;<br />

Informationen zur Amöbe Dictyostelium discoideum (z.B. Gene, Gene Ontology<br />

Terms, Gen Produkte); jetzt DictyBase http://dictybase.org/<br />

StyGene-Link http://www.expasy.org/cgi-bin/get-entries?DR=StyGene; Salmonella<br />

typhimurium LT2 genome database; eine Salmonellenart die Thyphus<br />

verursacht; Thyphus ist eine fieberhafte Infektionskrankeit begleitet durch<br />

Durchfall; Salmonellen sind eine Art der Enterobakterien (Darmbakterien)


Kapitel 2. Grundlagen 15<br />

CompluYeast-2D-Link http://babbage.csc.ucm.es/2d/2d.html; Projekt an der<br />

Universidad complutense Madrid, Spanien; Gelelektorphoresebilder von Genen des<br />

Hefepilzes (Candida albicans) und der Backhefe (Saccharomyces cerevisiae)<br />

Gramene-Link http://www.gramene.org/; A Resource for Comparative Grass Genomics;<br />

Aufgrund von ähnlichkeiten können Aussagen getroffen werden, die für mehrere<br />

Getreidearten (Roggen(rye),Gerste(barley),Mais(maize)) gelten; Basis dafür<br />

ist das Reis Genom; diese Wissen soll genutzt werden um einerseits eine Identifikation<br />

und andererseits ein Verständnis für Gene, Enzymatische Wege und Phenotypen<br />

in Feldfrüchten zu entwickeln<br />

HSC-2DPage-Link http://www.doc.ic.ac.uk/vip/hsc-2dpage/index.html; Proteininformationen<br />

aus den Ventrikeln des Herzes vom Menschen, Hunden und Ratten,<br />

sowie den in den Blustbahnen des Menschen befindlichen Zellen endothelial<br />

cells<br />

Pfam-Link http://www.expasy.org/cgi-bin/dbxref?Pfam; Protein families database<br />

of alignments and HMMs;<br />

Phossite-Link http://ca.expasy.org/cgi-bin/dbxref?PhosSite; Proteine von<br />

Prokaryotischen Organismen, welche eine sogenannte kovalente Phosphorylation<br />

an ihren hydroxyl Randketten der Serin-, Threonin- und/oder Thyrosin-Reste<br />

FlyBase http://flybase.bio.indiana.edu/; Daten über die Drosophila melanogaster<br />

2.3 Datenbankmodelle<br />

2.3.1 Relationale Datenbanken<br />

Das Relationenmodell wurde 1970 von Codd eingeführt. Im wesentlichen werden Relationschemata<br />

definiert. Jedes Relationsschema umfaßt eine bestimmt Menge von Attributen.<br />

Diesen Attributen werden bestimmte Wertebereiche (integer, string, etc.) zugeordnet.<br />

Bisher ist es eine Beschreibung der Daten. Die Daten selber werden durch die<br />

Relationen beschrieben. Eine Relation ist eine Teilmenge des Kreuzprodukts der Wertebereiche<br />

der Attribute des Relationenschemas, über welchem die Relation gebildet wird.<br />

Jedes Element einer Relation wird als Tupel bezeichnet. Ein Datenbankschema ist eine<br />

Menge von Relationenschemata. Es ist also die Beschreibung einer Datenbank. Die<br />

Datenbank selbst, ist die Instanz des Datenbankschemas [HS00].<br />

Um sich Relationenschemata und Relation besser vorstellen zu können, kann man<br />

sich diese Begriffe als Tabelle veranschaulichen, wobei deren Tabellenkopf dem Relationenschmema<br />

der Relation entspricht. In Abbildung 2.2 wird eine Relation in ihrer<br />

tabellarischen Form dargestellt.


16 2.3. Datenbankmodelle<br />

Attribute<br />

Sei U eine nichtleere, endliche Menge, das Universum der Attribute. Ein Element A ɛ U<br />

heißt Attribut. Sei D = {D1, . . . , Dm} eine Menge endlicher, nicht-leerer Mengen mit<br />

m ɛ N . Jedes Di wird Wertebereich oder Domäne genannt. Es existiert eine total<br />

definierte Funktion dom: U → D. dom(A) heißt Wertebereich von A. Ein w ɛ dom(A)<br />

wird Attributwert für A genannt. [HS00]<br />

Relationenschemata und Relationen<br />

Eine Menge R ⊆ U heißt Relationenschema. Eine Relation r über R = {A1, . . . , An}<br />

(kurz r(R)) mit n ɛ N ist eine endliche Menge von Abbildung<br />

m<br />

t : R −→ Di<br />

i=1<br />

die Tupel genannt werden, wobei t(A) ɛ dom(A) gilt. t(A) ist dabei die Restriktion der<br />

Abbildung t auf A ɛ R . Für X ⊆ R heißt die Einschränkung der Abbildung t auf X<br />

(bezeichnet mit t|X oder ebenfalls vereinfachend mit t(X )) X -Wert von t. [HS00]<br />

Datenbankschema und Datenbank<br />

Eine Menge von Relationschemata S := {R1, . . . , Rp} mit p ɛ N heißt Datenbankschema.<br />

Ein Datenbankwert (kurz: Datenbank) über einem Datenbankschema S ist eine Menge<br />

von Relationen<br />

d := {r1, . . . , rp},<br />

wobei ri(Ri) für alle i ɛ {1, . . . , p} gilt. Eine Datenbank d über S wird mit d(S) bezeichnet,<br />

eine Relatioin r ɛ d heißt Basisrelation. [HS00]<br />

Integritätsbedingungen<br />

Beim Relationenmodell ist es möglich identifizierende Attributmengen für ein Relationenschema<br />

anzugeben. Sind die Attributmengen beüglich der Teilmengeninklusion ⊆<br />

Relationname Attribute<br />

R A1 … An<br />

…<br />

… Relation<br />

… Tupel<br />

Relationenschema<br />

Abbildung 2.2: Graphische Notation eines Relationenschmas [HS00]


Kapitel 2. Grundlagen 17<br />

minimal, werden sie als Schlüssel für das Relationenschema bezeichnet. Ferner sei ein Primärschlüssel,<br />

ein von einem Datenbankadministrator speziell ausgezeichneter Schlüssel.<br />

[HS00] Eine identifizierende Attributmenge für ein Relationenschema R ist eine Menge<br />

K := {B1, . . . , Bk} ⊆ R, so das für jede Relation r(R) gilt [HS00]:<br />

Lokale Integritätsbedingung<br />

∀t1, t2 ∈ r[ t1 = t2 =⇒ ∃B ɛ K : t1(B) = t2(B) ].<br />

Durch die lokalen Integritätsbedingungen werden alle Relationen zu einem Relationenschema<br />

auf true oder false abgebildet. Es existieren somit Relationen, die die Bedingungen<br />

erfüllen und solche die sie nicht erfüllen. Lokale Integritätsbedingungen für ein<br />

Relationenschema R sind Abbildungen b ɛ B<br />

b : {r|r(R)} → {true, false}<br />

von der Menge aller Relationen über R auf die Wahrheitswerte. [HS00]<br />

Fremdschlüssel<br />

Ein Fremdschlüssel ist eine Attributliste X in einem Relationenschema R1, wenn in einem<br />

Relationenschema R2 eine kompatible Attributliste Y Primärschlüssel ist und die<br />

Attributwerte zu X in der Relation r1(R1) auch in den entsprechenden Spalten Y der<br />

Relation r2(R2) enthalten sind. Wir haben von Attributlisten anstelle von Attributmengen<br />

gesprochen, um deutlich zu machen, daß eine eindeutige Zuordnung zwischen den<br />

beteiligen Attributen existieren muß.<br />

Eine Fremdschlüsselbedingung für eine Relation r1(R1) ist ein Ausdruck<br />

X(R1) −→ Y (R2)<br />

mit X ⊆ R1, Y ⊆ R2. X nennt man dann Fremdschlüssel für R1 bezüglich Y in R2.<br />

[HS00]<br />

2.3.2 Objektdatenbanken<br />

Objektdatenbankmodell basieren auf Objektdatenbankmodellen. Diese Objektdatenbankmodelle<br />

beinhalten grundlegende objektorientierte Konzepte. In diesem Abschnitt<br />

werden diese Grundkonzepte kurz erläutert.<br />

Der Zentrale Begriff im Umfeld der Objektorientierung ist der Begriff des Objekts.<br />

Ein Objekt ist eine Modellierungseinheit, die eine eingekapselten Zustand (die aktuelle<br />

Attributwertmenge) hat und ausserdem Operationen (Methoden) besitzt bzw. bereitstellt.<br />

Objekte können miteinander kooperieren, indem sie Botschaften austauschen. Dabei<br />

greift der Sender einer Boschaft auf Dienste des Empfängers zu. Die Dienste sind<br />

gerade die Methoden bzw. Operationen die der Empfänger der Botschaft bereitstellt.


18 2.3. Datenbankmodelle<br />

Die vom Sender aufgerufene Operation kann Veränderungen im Zustand des aufgerufenen<br />

Objekt hervorrufen. Weiterhin besteht die Möglichkeit ein Ergebnisse an den Sender,<br />

der die Botschaft geschickt hat, zurückzuschicken. [STS97]<br />

Neben dieser allgemeinen Definition eines Objekts ist ein weiterer Aspekt, insbesondere<br />

für die Modellierung eines bestimmten Sachverhalts, von Bedeutung. In den meisten<br />

objektorientierten Systemen wird eine Trennung zwischen den Begriffen Objekt und Wert<br />

getroffen. Soll nun ein Sachverhalt als Objekt oder Wert modelliert werden? Um dies zu<br />

entscheiden sind die folgenden Unterscheidungsmerkmale zwischen Werten und Objekten<br />

hilfreich führen jedoch nicht immer zu einer eindeutigen Entscheidung [STS97]:<br />

• Objekte<br />

• Werte<br />

– haben einen veränderbaren Zustand<br />

– besizten zustandsunabhängige Identitäten<br />

– werden explizit bei der Modellierung eines bestimmten Problembereichs entworfen<br />

– haben einen unveränderbaren Zustand<br />

– werden durch sich selbst identifizert<br />

– sind in der Regel von Typsystem vorgegeben<br />

Wie schon im ersten Absatz dieses Abschnitts definiert sich ein Objekt über seinem<br />

Zustand und seinem Verhalten. In den folgenden Absätzen wird auf die Möglichkeiten<br />

der Definitionen von Attributen eingegangen, denn die Attribute definieren den Zustand<br />

eines Objekts. Weiterhin wird Objektverhalten anhand der Methoden bzw. Operationen<br />

des Objektes erläutert.<br />

Attribute und Datentypen<br />

Attribute eines Objekts sind Modellierungsmittel, mit deren Hilfe bestimmte Objekteigenschaften<br />

ausgedrückt werden. Beim Entwurf eines Objektes wird eine Menge von<br />

Attributnamen festgelegt, wobei jedem Attributnamen eine Datentyp zugeordnet wird.<br />

Zur Laufzeit werden den Attributen des Objekts Werte zugewiesen. Diese Wertemenge<br />

wird dabei vom Datentyp festgelegt. Der Datentyp bestimmt ausserdem welche Operationen<br />

auf dessen Werte ausgeführt werden können. Anders formuliert ergibt sich der<br />

Zustand eines Objekts in einem bestimmten Zeitpunkt aus den momentan angegebenen<br />

Werten aller Attribute der Attributmenge des Objekts.<br />

Ein objektorientes System stellt eine Menge von vordefinierten Datentypen bereit<br />

und erlaubt durch Typkonstruktoren neue Datentypen zu definieren. Vor allem dies<br />

unterscheidet ODBMS von RDBMS. In relationalen Datenbanksystemen verwirklichen


Kapitel 2. Grundlagen 19<br />

das Relationenmodell, welches nur den Datentyp Relation erlaubt 2.3.1. Also eine Menge<br />

von Tupel, die wiederum eine Menge von Attributen sind die einem atomaren Datentyp<br />

zugeordnet werden.<br />

Im objektorientierten System gibt es neben den elementaren Datentypen, meist integer,<br />

boolean, char etc., sogenannte parametrisierbare Datentypen (auch Typkonstruktoren<br />

genannt). Diese arbeiten auf der Basis der elementaren Datentypen und und sind<br />

beliebig miteinander verschachtelbar. In einem objektorientierten System werden dabei<br />

üblicherweise eine Menge von Standardtypkonstruktoren vordefiniert. Dazu gehören die<br />

Typkonstruktoren Tupel, Set, Bag, List und Array. Für eine nähere Erläuterung der<br />

einzelnen Typkonstruktoren wird auf Buch [STS97] verwiesen. Eine Sonderrolle nimmt<br />

der Aufzählungsdatentyp ein. Durch die explizite Angabe aller möglichen Werte wird<br />

dieser Typ definiert. Er definiert weder einen neuen Datentyp, noch ist er vom System<br />

vordefiniert.<br />

Methoden<br />

Die Einheit aus Zustand und Verhalten beschreibt ein Objekt. Zuvor wurde erläutert<br />

wie sich der Zustand eines Objekts definiert. Nun soll das Verhalten dargestellt werden.<br />

Unter dem Verhalten eines Objekts ist die Gesamt der Funkionalität des Objekts zu<br />

verstehen. Ausgedrückt wird diese Funktionalität durch das Definieren von Methoden.<br />

Methoden sind Programmiersprachenkonstrukte die in der Regel folgende Bestandteile<br />

besitzen:<br />

Methodenname dient zur Idenfikation der Methode<br />

Übergabeparameter sind Variablen, denen beim Aufruf der Methode Werte zugewiesen<br />

werden und Einfluß auf die Abarbeitung der Methode nehmen<br />

Rückgabeparameter dient zur Rückgabe von Werten an den Aufrufer der Methode<br />

Methodenrumpf hier wird die Funktionalität der Methode beschrieben<br />

Der Methodenname, die Übergabeparameter und der Rückgabeparameter wird zusammen<br />

auch als Methodensignatur bezeichnet.<br />

Objektidentität<br />

Der Begriff Objektidentität beschäfftigt sich mit dem Sachverhalt, daß es möglich sein<br />

muss Objekte eindeutig identifiziert zu können. Wird diese Problematik mit relationalen<br />

Datenbanksystemen verglichen, so ist das Konzept hierbei die Definition von Primärschlüsseln<br />

zur Identfikation der Tupel einer Relation 2.3.1.<br />

Nach Khoshafian und Copeland [KC86] ist Objektidentität die Eigenschaft eines Objektes,<br />

die es von allen anderen Objekten unterscheidet. Identität wird somit für Objekte<br />

betrachtet. Werte hingegen besitzen keine Identität. Sie definieren sich durch sich selbst.


20 2.3. Datenbankmodelle<br />

Somit gibt es keine Zustandsänderung in Bezug auf Werte, so wie es bei Objekten der Fall<br />

wäre. Bei Werte wird vom Übergang von einem Wert zu einem anderen Wert gesprochen.<br />

Im Zusammenhang zur Objektidentität entsteht der Begriff des Objektidentifikators<br />

(kurz OID). Da die Objektidentität nichts Konkretes darüber aussagt, wie die Objekte<br />

unterschieden werden. Dafür verwenden objectorientierte Systeme Objektidentifikatoren.<br />

Diese werden selbstständig vom System und unabhängig vom Nutzer verwaltet<br />

und vergeben. Dabei werden gewisse Anforderungen an einen Objektidentfikator gestellt.<br />

[STS97]<br />

Diese Anforderungen sind an der Zahl vier:<br />

1. Ein Objektidentifikator muß vom System vergeben werden.<br />

2. Objektidentifikatoren müssen Objekte räumlich eindeutig identifizieren.<br />

3. Objektidentifikatoren müssen Objekte zeitlich eindeutig identifizieren.<br />

4. Der Wert eines Objektidentifikators darf nur dem System bekannt sein.<br />

Unter räumlicher und zeitlich Eindeutigkeit ist im wesentlichen zuverstehen, daß<br />

der Objektidentifikator in einem bestimmten Geltungsbereich bzw. innerhalb eines bestimmten<br />

Zeitrahmens eindeutig sein muss. Eine nähere Beschreibung wird im [STS97]<br />

gegeben.<br />

Klassen und Beziehungen<br />

Bisher war immer die Rede von einzelnen Objekten und deren Indentifikation über die<br />

OID. In ODBMS ist es jedoch in der Regel der Fall, daß das System eine sich dynamisch<br />

entwickelnde Anzahl von Objekten verwalten muss. Aus diesem Sachverhalt ergibt sich<br />

der Begriff der Klasse. In objektorientierten Systemen wird bei einer Klasse von einer<br />

Guppe von Objekten mit gleichen Merkmalen und gleichen Verhalten gesprochen.<br />

Klassen entstehen durch Anwendung eines Abstraktionsprozesses, wobei versucht wird<br />

Objekte in Klassen zu gruppieren. Im Kontekt der Abstraktion werden zwei Aspekte,<br />

die unter dem Namen Intension und Extension einer Klasse bekannt sind. Die Intension<br />

einer Klasse ist die Beschreibung der Merkmale und das Verhalten ihrer Objekte zu<br />

verstehen. Es wird auch von der Festlegung des Objekttyps gesprochen, sprich der Attribute<br />

und Methoden eines Objekts. Die Extension einer Klasse ist die Menge der aktuell<br />

existierenden Objekte dieser KLasse. Bei den Objekten einer Klasse ist auch häufig die<br />

Rede von Instanzen dieser Klasse. Eine Regel für Objekte ist das sie jederzeit mindestens<br />

zu einer Klasse zugehörig sein muss. Die Zuordnung eines Objektes kann auf explizite<br />

Weise (Instantiierung, Objektmigration, Rollen) oder implizite Weise, durch Prädikate<br />

über dem Objektzustand, erfolgen.<br />

Neben Objekt und Klassen ist es absolut notwendig Beziehungen zwischen den Objekten<br />

einzubeziehen. Diese Beziehungen werden auf Ebene der Klassen abstrahiert und


Kapitel 2. Grundlagen 21<br />

werden dann als Klassenbeziehung bezeichnet. Im Zusammenhang mit Klassenbeziehungen<br />

fallen Begriffen wie Stelligkeit, Kardinalität, Beziehungsattribute, gerichtete Beziehungen<br />

und inverse Referenzen. An dieser Stelle soll nur auf den Punkt der gerichteten<br />

Beziehungen und inversen Referenzen kurz eingegangen werden. Diese zwei Aspekte behandeln<br />

die Situation, daß in Entwurfsmodellen normalerweise symmetrische Beziehungen<br />

angegeben werden, aber in Implementierungsmodellen Beziehungen in bestimmten<br />

Richtungen definiert werden. Es wäre durchaus möglich eine symmetrische Beziehung im<br />

Implementierungsmodell durch zwei gerichtete Beziehungen zu formulieren (einmal von<br />

Objekt1 nach Objekt2 und zurück). Problem ist dann nur, daß die eigentliche Beziehung<br />

durch zwei Beziehungen beschrieben wird und damit Redundanzen erzeugt werden. Um<br />

das zu vermeiden, bieten Implementierungsmodelle inverse Referenzen an, indem die Definition<br />

der Beziehung auf beiden Seiten (Objekt1 und Objekt2) durch die Angabe der<br />

inversen Beziehung erweitert wird. Werden vom Implementierungsmodell keine inverse<br />

Referenzen angeboten, so besteht die Möglichkeit die betreffenden Attribute innerhalb<br />

von Methodenimplementierungen berechnen zu lassen.<br />

Referentielle Integrität<br />

Referentielle Integrität im Umfeld des Objektparadigmas fordert, daß beim Navigieren<br />

über Referenzattributen immer nur gültige Objekte zurückgeliefert werden. Referenzattribute<br />

können drei Zustände annehmen:<br />

1. bei optionalen Referenzattributen kann ein NULL Wert zugeordnet werden, d.h.<br />

eine nicht vorhandene Referenz liegt vor<br />

2. eine Referenz zu einem vorhandenen Objekt<br />

3. eine Referenz auf ein gelöschtes Objekt; stellt eine ungültige Referenz dar<br />

Es gibt verschiedene Strategien ungültige Referenzen zu vermeiden. Eine ist solche<br />

zu verbieten. In diesem Fall muss der Anwendungsprogrammierer dafür sorgen, daß es<br />

zur Einhaltung dieser Forderung kommt. Eine weitere Strategie ist das Verhindern von<br />

ungültigen Referenzen. Hierbei bietet das Implementierungsmodell eigene Methoden zur<br />

Einhaltung der referentiellen Integrität. Eine letzte Variante ist das automatische Entdecken<br />

und Löschen von ungültigen Referenzen. Hier ist das Stichwort ”garbage collection”<br />

zu nennen. Es werden automatisch alle Objekte gelöscht auf denen keine Referenzen<br />

mehr verweisen.<br />

Neben der Objektidentität, der Referentiellen Integrität, den Begriffen Klassen, Beziehungen<br />

und Objekts gibt es noch weitere Eigenschaften die im Objektparadigma mit<br />

den Begriffen Polymorphie, Spezialisierung- und Generalisierungsbeziehung, Aggregation.


22 2.4. XML - hierarsche Datenstrukturen<br />

2.4 XML - hierarsche Datenstrukturen<br />

Die eXtensible Markup Language (XML) entwickelte sich aus der Standard Generalized<br />

Markup Language (SGML). Generell verfolgen beide Ansätze den gleichen Kerngedanken.<br />

Dieser umfasst das Definieren einer Markup Language oder auch Auszeichnungssprache.<br />

Eine solche Sprache besteht aus einer Menge vom Einheiten, die dem eigentlichen<br />

Text Meta-Informationen hinzugefügt. Diese Einheiten sind unter dem Begriff TAGS<br />

bekannt. Die TAGS vereinen im wesentlichen zwei Funktionen, das Begrenzen und das<br />

Beschreiben der Daten.<br />

SGML ist eine sehr mächtige Sprache und es ist aufgrund dessen sehr schwierig einen<br />

Parser zu entwerfen, der entsprechende Dateien verarbeiten kann. Aus diesem Grund begann<br />

das World Wide Web Consortium (W3C) die XML zu entwerfen, mit dem Ziel die<br />

Flexibiliät und Erweiterbarkeit von SGML zu erhalten und eine Akzeptanz vergleichbar<br />

zur Akzeptanz von HTML zu erreichen. XML und SGML werden auch als Metasprache<br />

bezeichnet. Dies resultiert aus der Eigenschaft von XML beliebig erweitert werden zu<br />

können. Es ist durch XML möglich, für spezielle Anwendungsbereiche und -fälle spezifische<br />

Sprachen zur Beschreibung der Dokumenteninformationen zu definieren. So wurde<br />

zum Beispiel HTML durch XML definiert, auch bekannt als XHTML. Das Definieren<br />

neuer Sprachen wird in der Literatur auch als Definition von XML-Vokabularen bezeichnet.<br />

XHTML ist ein Vertreter aus der Menge der Vokabularen, die durch XML erzeugt<br />

werden können.<br />

Neben der Erweiterbarkeit besitzt XML noch weiter grundlegende Eigenschaften, die<br />

im Folgenden kurz angesprochen werden.<br />

Selbstbeschreibend<br />

Ein XML-Dokument hat einen selbstbeschreibenden Charakter. In einem XML-<br />

Dokument werden TAGS genutzt, um Elemente dieses Dokuments zu markieren. Jedes<br />

TAG bzw. hat einen bestimmten Namen bzw. eine bestimmte Bezeichnung, die struktureller<br />

aber auch semantischer Art sein kann. Dazu kann sich folgendes Beispiel forgestellt<br />

werden: Im Listing 2.1 werden einfach mehrere Zahlen präsentiert, deren Semantik aus<br />

dieser Darstellung nicht direkt erkannt werden kann.<br />

10 10 97 10 10 "Motorwerk Haupttor "<br />

11 10 97 06 00 " Flughafen B e r l i n Tegel "<br />

Listing 2.1: Rohdaten ohne Marken<br />

Im Listing 2.2 werden, durch das Setzen von Markierungen, die Daten für den Leser<br />

interpretierbar, ohne weitere Informationen, wie zum Beipiel die Herkunft der Daten.<br />

Das Dokument selbst enthält die Information um die Daten interpretieren zu können.<br />

<br />


Kapitel 2. Grundlagen 23<br />

<br />

<br />

10<br />

10<br />

97<br />

<br />

<br />

10<br />

10<br />

<br />

<br />

Motorwerk Hauptor<br />

<br />

<br />

<br />

Listing 2.2: Daten aus Listing 2.1 als XML<br />

Trennung von Präsentation und Inhalt<br />

Eine weitere Eigenschaft von XML ergibt sich direkt aus der Eigenschaft der Erweiterbarkeit.<br />

Es ist möglich XML-Vokabulare 2.4 zu definieren, die es erlauben, Dokumente<br />

sowohl inhaltlich wie auf die Präsentation bezogen auszuzeichnen, ohne die beiden<br />

Ebenen zu vermengen. Dadurch ist es möglich, denselben Inhalt unterschiedlich zu<br />

präsentieren.[WK03]<br />

Wohlgeformtheit und Gültigkeit<br />

Ein weiterer Begriff, der die Thematik XML begleitet, ist die Wohlgeformtheit von<br />

XML-Dokumenten (engl. well-formed xml). Die Wohlgeformtheit besagt, daß jedes<br />

XML-Dokument den Empfehlungen der XML 1.0 Spezifikation des W3C Folge leisten<br />

muss. Die Wohlgeformtheit ist die Minimalanforderung an ein XML-Dokument.<br />

Zusätzlich dazu kann einem XML-Dokument ein Dokumenttyp zugeordnet werde, was<br />

den Gültigkeitsbegriff begründet. Ein Dokument ist genau dann gültig, wenn es den in<br />

der Dokumenttypen-Beschreibung festgelegten Kriterien einhält. Die Definition solcher<br />

Dokumenttyp-Beschreibung wird durch weitere W3C Standards wie DTD und XML<br />

Schema. XML Schema wird im Abschnitt 2.4.1 genauer betrachtet.<br />

Ein wohlgeformtes XML-Dokument besteht aus drei Teilen:<br />

• einem optionalen Prolog<br />

• dem Dokumentenkörper (engl. body), dieser enthält ein Element, welches der Wurzelknoten<br />

eines hierarischen Baums von Elementen<br />

• einem optionalen Epilog


24 2.4. XML - hierarsche Datenstrukturen<br />

Die Abbildung 2.3 zeigt den Aufbau noch einmal schematisch. Der Body eines XML-<br />

Dokuments besteht aus Blockstrukturen, den Elementen. Jedes Element hat einen Namen,<br />

welcher in spitzen Klammern eingeklammert wird. Jedes Element hat eine Startund<br />

End-Marke. Ein Element ist ein Sammelbehälter, der weitere Elemente, Text und<br />

andere Auszeichnungen (wie Kommentare, Procession Instructions(PI), etc.) enthalten<br />

kann.<br />

Eine vollständig Defintion eines wohlgeformten Dokuments wird, wie schon erwähnt,<br />

in der XML 1.0 Recommendation des W3C (http://www.w3.org/XML/Core/<br />

#Publications) gegeben. Im folgenden Abschnitt 2.4.1 wird auf die Definition eines<br />

Dokumenttyps durch die XML-Schema Technologie genauer betrachtet.<br />

Abbildung 2.3: Schematische Darstellung des Aufbaus eines wohlgeformten XML-<br />

Dokuments [ABK + 00]<br />

2.4.1 XML-Schema<br />

Validierende Parser benötigen Dokumenttypdefinition, um die Gültigkeit eines XML-<br />

Dokumentes zu bestimmen. In der XML 1.0 Recommendation des W3C wird der Auf-


Kapitel 2. Grundlagen 25<br />

bau einer XML DTD festgelegt. Jedoch bringen XML DTD’s einige Probleme mit sich<br />

[ABK + 00]:<br />

• sie sind nicht erweiterbar<br />

• sie unterstützen keine Namespaces<br />

• sie unterstützen keine Vererbung<br />

• es gibt keine Unterstützung von Datentypen<br />

Diese Probleme veranlaßten das W3C eine neue Variante zur Definition eines Dokumententyps<br />

zu entwerfen. Dieses Vorhaben resultierte in der XML-Schema Spezifikation.<br />

Diese Spezifikation teilt sich in zwei Teile auf:<br />

XML-Schema Part 1: Structures behandelt die Defintion von Elementen und Attributen.<br />

XML-Schema Part 2: Datatypes definiert eine Standardmengen von Datentypen<br />

und Regeln um aus dieser Standardmenge neue Datentypen zu generieren.<br />

Der Unterschied zwischen XML DTD und XML Schema wird am besten in einem<br />

Beispiel deutlich. Im Listing 2.3 wird XML DTD verwendet um den Dokumenttyp ”name”<br />

zu definieren. Im Listing 2.4 wird der gleiche Dokumenttyp definiet unter Anwendung<br />

von XML-Schema. Das dritte Listing 2.5 zeigt, wie das ein in XML-Schema definierter<br />

Dokumenttyp an ein XML-Dokument gebunden wird.<br />

<br />

<br />

<br />

<br />

<br />

<br />

]<br />

><br />

<br />

Martin<br />

Andrea<br />

Müller <br />

<br />

Listing 2.3: Beispiel für XML DTD


26 2.4. XML - hierarsche Datenstrukturen<br />

Ein Name besteht dabei mindestens aus einem Vor- und Nachnamen. Optional kann<br />

vor dem Vornamen ein Titel, zwischen Vor- und Zunamen ein Mittelname und hinter<br />

dem Nachnamen ein Suffix angegeben werden.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Listing 2.4: Beispiel für XML-Schema Instanz<br />

<br />

<br />

Martin<br />

Andrea<br />

Müller


Kapitel 2. Grundlagen 27<br />

<br />

Listing 2.5: Einbettung des im Listing 2.4 entworfenen Dokumenttyps<br />

2.5 Grundlagen in der Graphentheorie<br />

Um überhaupt Aussagen und Anfragen stellen zu können, müssen Begriffe, wie Graphen,<br />

Kantenzug, Kreise und andere, näher erläut werden.<br />

Der Begriff des Graphen wird in der Mathematik wie folgt definiert. Ein Graph G<br />

ist ein Tupel G = (V, E), wobei V eine endliche Menge und E ⊆ V<br />

2<br />

eine Teilmenge<br />

der zweielementigen Teilmengen von V ist. Die Elemente v ∈ V heißen die Knoten, die<br />

Elemente aus e ∈ E die Kanten von G. Ein besonderer Reiz der Graphentheorie ist, daß<br />

sich ihre Objekte leicht graphisch veranschaulichen lassen. Die Anzahl der Knoten eines<br />

Grpahen G wird als die Ordnung von G beziechnet, die durchweg mit n := n(G) := |V |<br />

notiert wird. Die Anzahl seiner Kanten, in Zeichen m := M(G) := |E|, heißt auch die<br />

Größe von G. Ein Graph heißt gerade bzw. ungerade je nach Parität seiner Knotenmenge.<br />

Für eine Kante {u, v} ∈ E werden die Knoten u und v ihre Endpunkte genannt. Das<br />

Komplement (V, <br />

V<br />

\ E) eines Graphen wird notiert mit G. Ein Graph (V, ∅) ohne<br />

2<br />

Kanten heißt auch leer oder trivial. Sein Komplement, der Graph Kn := (V, <br />

V<br />

), heißt<br />

2<br />

vollständig; bei n Knoten hat er m = <br />

n<br />

Kanten. [EWHK 2<br />

+ 96]<br />

Ein Knoten v ∈ V und eine Kante e ∈ E in einem Graphen G = (V, E) inzidieren<br />

oder überdecken einander, falls v ∈ e. Zwei Knoten u, v ∈ V heißen adjazent, verbunden<br />

oder benachbart, falls {ucv} ∈ E. Die Nachbarschaft eines Knotens v ∈ V ist die Menge<br />

Γ(v) := {u ∈ V |{ucv} ∈ E} der Nachbarn von v. Der Grad d(v) := |Γ(v)| enes Knotens<br />

v ∈ V zählt die Kanten, die in dem Graphen mit v inzidieren. Mit dG(v) wird betont,<br />

das sich der Grad auf einen Graphen G bezieht. [EWHK + 96]


28 2.5. Grundlagen in der Graphentheorie


Kapitel 3. Anfragetechnologien über Graphenstrukturen 29<br />

Kapitel 3<br />

Anfragetechnologien über<br />

Graphenstrukturen<br />

Im Kontext der integrierten Daten ist nun eine effiziente Möglichkeit für die Suche über<br />

den bereits vorliegenden Graphen wünschenswert. Um dynamisch Anfragen generieren<br />

zu können, muss es möglich sein, diese in Form von Suchanfragen auf den Graphen zu<br />

stellen. Die Techniken werden dabei nach den folgenden Kriterien untersucht:<br />

Bewertungskriterien<br />

Technische Realisierbarkeit<br />

Erläuterung<br />

widmet sich der Frage nach der Technischen Umsetzbarkeit<br />

auf Basis der momentan angebotenen Technologien<br />

zur Anfrageverarbeitung in den bestimmten Konzepten<br />

Integrationsgrad umfasst den Aspekt, wie gut das Konzept als selbständig,<br />

integrierte Lösung im Rahmen des Tools genutzt<br />

werden kann<br />

Kompatibilität bewertet die Möglichkeiten an Schnittstellen zur Pro-<br />

zu Java grammiersprache Java<br />

Effizienz die Leistungsfähigkeit der Anfragetechnologie besonders<br />

unter dem Aspekt des hohen Datenvolumens und<br />

der Zuwachs der Daten durch Zusatzinformationen, die<br />

Anwendbarkeit<br />

auf Problematik<br />

durch das Konzept benötigt werden<br />

inwiefern die Anfragetechnologie zur Zielstellung passt<br />

und damit auch die gewünschte Funktionalität umsetzen<br />

läßt<br />

Tabelle 3.1: Liste der zu betrachtenden Berwertungskriterien


30 3.1. Aktueller Ansatz<br />

3.1 Aktueller Ansatz<br />

Der momentan vorliegende Lösungsansatz besteht aus folgenden Teilen:<br />

• Proteomics-DB Schema<br />

• aus der Proteomics-DB ausgelesenen Graphen<br />

• statische SQL-Anfragen auf der Menge dieser zuvor erwähnten Graphen<br />

Der schematischen Ablauf einer solchen Anfrage wird in der Abbildung 3.1 in Form<br />

eines Aktivitätsdiagramms dargestellt. Ein Mitglied der biologischen Abteilung hat eine<br />

bestimmt Frage bezüglich einer Menge von EST-Sequenzen. Er übermittelt mit dieser<br />

Anfrage implizit 2 Informationen. Einerseits natürlich die EST-Sequenzen und zum<br />

anderen die Zielinformation, die letztendlich analysiert werden soll. Die anschließende<br />

Vorgehensweise besteht prinzipiell aus zwei Gedanken. Zunächst werden aus den Eingabedaten<br />

die zugehörige Accession-Nummer und Tabellen-Namen aus der Proteomics<br />

Datenbank bestimmt. Sind die Werte bekannt, werden zwei SQL-Anfragen gestartet. Wobei<br />

die Reihenfolgen dieser Anfragen unerheblich ist. Zu Beginn kann beipielsweise die<br />

SQL-Anfrage gestellt werden, die alle Pfade identifiziert, die den Tabellen-Namen und<br />

die Accession-ID der aus den EST-Sequenzen hervorgehenden Eingabewerte. Daraufhin<br />

muss dann die zweite SQL-Anfrage ausführen, die alle Pfade identifiziert, deren Knoten<br />

mit Elementen aus der Menge der Zieldatentabelle und deren Werte übereinstimmt.<br />

Nun liegen zwei Mengen von Pfad-Identifikatoren vor. Jetzt werden diese zwei Mengen<br />

auf übereinstimmenden Pfad-Identifikatoren geprüft. Mit anderen Worten, es wird die<br />

Schnittmenge der beiden Mengen gebildet. Ergibt diese Prüfung eine nichtleere Menge<br />

von Identifikatoren, so gibt es Kantenzüge zwischen den Eingabewerten und den Zieldaten.<br />

Damit kann nun die Frage beantwortet werden, die der Ausgangspunkt gestellt<br />

wurde.<br />

3.2 Konstruktion eines Referenzbeispiels<br />

Um die im Folgenden aufgeführten Technologien vergleichen zu können, soll an dieser<br />

Stelle ein einfaches Beispiel konstruiert werden, welches vom Grundsatz her einem tatsächlichen<br />

Anwendungsfall entsprechen könnte. Dabei soll folgende Zielstellung verfolgt<br />

werden:<br />

An welchen Stoffwechselwegen sind die angegebenen EST-Sequenzen beteiligt?<br />

Die Menge der EST-Sequenzen besteht aus drei Sequenzen, die der Einfachheit halber<br />

mit A,B bezeichnet werden. Weiterhin existiert eine binäre Relation (B) der Form:<br />

xBy ⇐⇒ eine EST − Sequenz x ∈ X mit


Kapitel 3. Anfragetechnologien über Graphenstrukturen 31<br />

&<br />

, &&<br />

% && ! ) &<br />

*&<br />

' $<br />

% &&<br />

% &&<br />

!<br />

! " #<br />

% && & ( &<br />

$$ % &&<br />

'<br />

Abbildung 3.1: aktueller Ablauf einer Anfrage<br />

'<br />

$ + $<br />

) *


32 3.2. Konstruktion eines Referenzbeispiels<br />

einem Knoten y ∈ Y des Graphen in Zusammenhang steht<br />

MB = {(A, a.4.1), (A, r.15.2), (B, a.4.3)}<br />

wobei X die Menge der EST-Sequenzen ist und Y die Menge der Knoten des Graphen.<br />

Jeder Knoten hat eine Beschreibung, bestehend aus einem Relationennamen und einem<br />

Attributnamen, und einen Wert. Ausserdem sei eine Menge G von Graphen, bestehend<br />

aus zwei Graphen G1, G2 (siehe Abb. 3.2 und 3.3), gegeben. Neben diesen Informations<br />

ist ebenfalls das Ziel des Interesses bekannt. In diesem Beispiel werden alle Knoten mit<br />

der Beschreibung h.6 unabhängig vom Wert gesucht. Zusätzlich sind nur die Pfade von<br />

Bedeutung, die keine Knoten mit der Beschreibung o.13 enthalten bzw. bei denen keiner<br />

solcher Knoten durchlaufen werden.<br />

Abbildung 3.2: Graph G1<br />

Abbildung 3.3: Graph G2


Kapitel 3. Anfragetechnologien über Graphenstrukturen 33<br />

3.3 Anfragesprachen auf relationalen Datenbanken<br />

Auf dem Gebiet der relationalen Datenbanken hat sich die Anfragesprache Structured<br />

Query Language (kurz: SQL) durchgesetzt und ist als Standard anzusehen. SQL basiert<br />

dabei auf der Relationenalgebra und dem Relationenkalkül namens Tupelkalkül, welche<br />

im Folgenden erläutert werden.<br />

Relationenalgebra<br />

Das Konzept der Algebra besteht darin, daß eine Menge von Werten vorliegt auf deren<br />

Basis Operationen definiert werden, die entsprechende Werte der Wertemenge als<br />

Eingabe erhält. Die Relationenalgebra ist nun eine Algebra basierend auf dem Relationenmodell.<br />

Somit entspricht die Wertemenge der Relationenalgebra einer Menge von<br />

Relationen. Desweiteren wird bei der Relationenalgebra von einer einsortigen Algebra<br />

gesprochen. Dies bedeutet, daß alle Operationen der Relationenalgebra nur Relationen<br />

als Eingabevariablen erhalten und ausschließlich Relationen zurückliefern.<br />

Die Menge der Operationen einer Relationenalgebra nach [HS00] besteht aus den<br />

Elementen Selektion, Projektion, Verbund, Vereinigung, Differenz und Umbenennung.<br />

Selektion:<br />

Die Syntax der Selektion<br />

Die Semantik wirk erklärt durch<br />

σ[bedingung](relation)<br />

σF (r) := {t | t ∈ r ∧ F (t) = true}<br />

wobei die Formel F eine bedingung darstellt und folgende Form annehmen kann:<br />

1. F ist eine Konstanten-Selektion der Form<br />

Attribut Θ Konstante<br />

mit Θ ∈ {=, =, ≤, , ≥}. Es wird für jedes Tupel der Wert eines Attributs mit<br />

einer angegebenen Konstante verglichen.<br />

2. F kann eine Attribut-Selektion der Form<br />

Attribut1 Θ Attribute2<br />

wobei für jedes Tupel zwei Attributwerte verglichen werden.<br />

3. F kann eine logische Verknüpfung mehrere Konstanten- oder Attribut-Selektionen<br />

mit ∨, ∧ oder = sein.


34 3.3. Anfragesprachen auf relationalen Datenbanken<br />

Projektion:<br />

Die Syntax der Projektion ist<br />

Die Semantik wirk erklärt durch<br />

π[attributmenge](relation)<br />

πX(r) := {t(X) | t ∈ r}<br />

für eine Relation r(R) und X ⊆ R Attributmenge in R. Wichtig ist dabei das das<br />

Ergebnis immer eine Tupelmenge wird in der doppelte Einträge eliminiert werden, da in<br />

der Definition einer Relation Multimengen ausgeschlossen werden.<br />

Verbund:<br />

Die Syntax des (natürlichen) Verbunds ist:<br />

Die Semantik wirk erklärt durch<br />

Relation1 ✶ Relation2<br />

r1 ✶ r2 := {t | t(R1 ∪ R2) ∧ [∀i ∈ {1, 2} ∃ti ∈ ri : ti = t(Ri)]}<br />

Die Formel bedeutet, daß genau diejenigen Tupel t ins Ergebnis aufgenommmen werden,<br />

für die es passende Gegenstücke t1 und t2 in r1 ud r2 gibt. Der Verbund verknüpft somit<br />

Tabellen über gleichbenannten Spalten bei gleichen Attributwerten. Gibt es Tupel die<br />

keinen Partner in der gemeinsamen Spalte haben, so werden diese eliminert und tauchen<br />

in der resultierenden Relation nicht auf. Ein Sonderfall ist, wenn es keine gemeinsamen<br />

Attributnamen gibt, dann gilt:<br />

R1 ∩ R2 = ∅ =⇒ r1 ✶ r2 = r1 × r2<br />

Der Verbund entartet zum kartesischen Produkt.<br />

Umbenennung:<br />

Die Syntax der Umbenennung ist<br />

β[neu ← alt](relation)<br />

In der Ausgangsrelation relation wird der Attributename alt in neu geändert. Die Semantik<br />

der Umbennenung ist folgendermaßen:<br />

Vereinigung:<br />

βB←A(r) := {t ′ | ∃t ∈ r : t ′ (R − A) = t(R − A) ∧ t ′ (B) = t(A)}


Kapitel 3. Anfragetechnologien über Graphenstrukturen 35<br />

Die Syntax der Vereinigung ist<br />

Die Semantik der Vereinigung lautet:<br />

relation1 ∪ relation2<br />

r1 ∪ r2 := {t | t ∈ r1 ∨ t ∈ r2}<br />

wobei r1(R), r2(R), sprich beide Relationen über dem gleichen Schema gebildet werden.<br />

Differenz:<br />

Die Syntax der Differenz ist<br />

relation1 − relation2<br />

Die Semantik der Differenz definiert sich folgendermaßen:<br />

r1 − r2 := {t | t ∈ r1 ∧ t /∈ r2}<br />

Genau wie bei der Vereinigung, so muss auch hier gelten: r1(R), r2(R).<br />

Relationenkalküle<br />

Allgemein basieren die Kalküle auf einer formalen Sprache zur Formulierung von Aussagen.<br />

Es lehnt sich an der expliziten Definition von Mengen in der Mathematik. Wird<br />

diese Semantik auf Datenbankobjekte angewandt kommt es zu folgendem Ansatz.<br />

{f(¯x) = p(¯x)}<br />

wobei die Bestandteile folgendermaßen aussehen:<br />

• ¯x ist eine Menge freier Variablen ¯x = {x1 : D1, . . . , xn : Dn}; Di ist der Wertebereich<br />

an den xi gebunden ist.<br />

• Die Funktion f bezeichnet eine Ergebnisfunktion über den freien Variablen.<br />

• p ist ein Selektionsprädikat über den freien Variablen. Diese bestehen aus:<br />

– Termen zu den Wertebereichen (Konstanten, Variablen und Funktionsanwendungen)<br />

– atomare Formeln gebildet aus den Prädikaten der Datentypen<br />

– Datenbankprädikate, die den Bezug zu Datenbank herstellen, zum Beispiel<br />

der Relationenname im Relationenmodell als Prädikatensymbol<br />

– Formeln, die aus einer Zusammensetzung von atomaren Formeln durch prädikatenlogischen<br />

Operatoren ∧, ∨, ¬, ∀, ∃ enstehen


36 3.3. Anfragesprachen auf relationalen Datenbanken<br />

Im Bereich des Relationenmodells sind zwei Kalküle verbreitet das Bereichs- und das<br />

Tupelkalkül.<br />

• Bereichskalkül ist der Ansatz, indem den freien Variablen Werte elementarer Datentypen<br />

zugewiesen werden. Es wird oft auch als Domänen-Kalkül bezeichnet.<br />

• im Tupelkalkül wird davon ausgegangen, daß über Variablen als Tupelwerte aufgefasst<br />

werden<br />

Nähere Erläuterungen zum Tupelkalkül und Bereichskalkül werden im [HS00] gegeben.<br />

Wie zu Beginn dieses Abschnitts gesagt, sind das Tupelkalkül und die Relationenalgebra<br />

die Konzepte, die von der Anfragesprache SQL abgedeckt werden. Der Kern der<br />

SQL-Anfragesprache ist der SFW-Block. SFW steht dabei für Select-F rom-W here.<br />

Mit der Select-Klausel wird eine Projektionliste gegeben und es ist an dieser Stelle<br />

möglich arithmetische Operationen und Aggregatfunktionen zu verwenden. Die From-<br />

Klausel spezifiziert die Relationen, die dann mittels kartesischen Produkts verknüpft<br />

werden. Ausserdem können hier Umbenennungen vorgenommen, oder anders formuliert<br />

Tupelvariablen definiert werden, wie es im Tupelkalkül möglich ist. Die Where-Klausel<br />

bietet die Möglichkeit Selektionsbedingungen zu formulieren oder Verbundbedingungen<br />

zu definieren.<br />

Es gibt zusätzlich zum diesen drei Klauseln auch noch die Group- und Having-Klausel,<br />

die Gruppierungen innerhalb ein Relation ermöglichen bzw. Selektionbedingungen auf<br />

diesen Gruppen. Eine genauere Beschreibung aller Klauseln wird im [HS00] gegeben.<br />

Nachdem nun die Anfragesprache skizziert wurde, soll nun das relationale Konzept auf<br />

Tauglichkeit zu dem vorliegenden Problem geprüft werden.<br />

3.3.1 Anwendung des relationalen Konzepts<br />

Dieser Abschnitt wird sich mit den Möglichkeiten, die das relationale Konzept ermöglicht,<br />

auseinandersetzen und bewerten inwiefern das Konzept auf das Problem anwendbar ist<br />

oder nicht anwendbar ist und welche Möglichkeiten die aktuellen Systeme bieten. Dabei<br />

wird der im Abschnitt 3.2 eingeführte Anwendungsfall verwendet.<br />

Da als Programmiersprache Java gewählt wurde ist zunächst die Frage, wie gut relationale<br />

Datenbanken mit Java genutzt werden können. Die Schnittstelle JDBC stellt eine<br />

einfache Variante dar, um mit relationalen Datenbanken zu kommunizieren. Was genau<br />

an Funktionalität angeboten wird, hängt vom verwendeten JDBC-Treiber des jeweiligen<br />

DBMS ab. Einheitlich ist jedoch, daß jeder Treiber eine gewissen Konformität mit<br />

SQL-Standards aufweist. Ausserdem gibt es eine Reihe freier relationaler Datenbankmanagementsysteme<br />

wie MySQL, PostgreSQL oder MaxDB. Weiterhin gibt es kommerzielle<br />

DBMS wie Oracle oder DB2. Ein weiteres frei verfügbares DBMS ist HSQLDB. Es ist in<br />

Java geschrieben und kann problemlos in das Tool integriert werden. Dazu muss lediglich<br />

ein JAR-Archiv mitgeführt und in den Java-Classpath aufgenommen werden. Somit ist<br />

auf einfache Weise gewährleistet, daß das Tool auf jeder Plattform funktioniert, ohne


Kapitel 3. Anfragetechnologien über Graphenstrukturen 37<br />

ein externes DBMS installieren zu müssen. Durch die JDBC Schnittstelle besteht zusätzlich<br />

die Möglichkeit andere DBMS mit dem Tool zu verwenden. Es muss dann der<br />

entsprechende JDBC-Treiber geladen werden. Das relationale Konzept ist somit in puncto<br />

technische Realisierbarkeit, Kompatibilität mit Java und im Integrationsgrad speziell<br />

durch HSQLDB sehr gut geeignet. Nach der Betrachtung der rein technischen Aspekte ist<br />

es nun von Interesse inwiefern das relationale Konzept für die Problemstellung ausreicht.<br />

Speicherung und Anfrage<br />

Im IPK werden die Graphdata bereits vorberechnet und in einer Relation r(RGraph) der<br />

folgenden Form abgelegt.<br />

RGraph = {pathid, depth, parent_tablename, parent_columnname,<br />

child_tablename, child_columnname, parent_value, child_value}<br />

pathid depth p_tname p_col c_tname c_col p_val c_val<br />

0 0 a 4 1<br />

0 1 a 4 b 4 1 1<br />

0 2 b 4 c 4 1 2<br />

0 2 b 4 d 4 1 3<br />

0 2 b 4 e 2 1 4<br />

0 3 c 4 f 5 2 2<br />

0 3 c 4 g 4 2 2<br />

0 3 c 4 h 6 2 2<br />

0 3 d 4 i 7 3 3<br />

0 3 e 2 j 5 4 4<br />

0 3 e 2 k 2 4 4<br />

Tabelle 3.2: Graph G1 im RGraph (die Spaltennamen wurden zwecks Platzersparnis verkürzt<br />

geschrieben)<br />

Wie sieht nun eine Anfrage aus, die ermitteln kann, ob ein bestimmter Pfad in diesem<br />

Graphen existiert. Dazu wird zunächst eine Verbund über dieser Relation mit sich selbst<br />

ausgeführt. In dem skizzierten Anwendungsfall wird nach Pfaden gesucht, die als Ziel<br />

Knoten mit der Beschreibung h.6 haben und unabhängig vom Wert sind. Wird Enzyme<br />

A zunächst betrachtet, ergibt sich die Menge von Startknoten {a.4.1, r.15.2}. Die Anfrage<br />

die einem die Werte des Attributs pathid ausgibt, würde folgendermaßen aussehen:<br />

SELECT DISTINCT pathid<br />

FROM Graph source , Graph dest<br />

WHERE source . pathid = dest . pathid and


38 3.3. Anfragesprachen auf relationalen Datenbanken<br />

source . child_tablename l i k e "a" and source . child_columnname =<br />

»4<br />

and source . child_value = 1 and dest . child_tablename l i k e "h"<br />

»and<br />

dest . child_columnname = 6 ;<br />

Listing 3.1: Start-Ziel Anfrage ohne konkrete Pfadinformationen<br />

Diese Anfrage klärt somit die Frage, ob es einen Pfad vom Start zum Ziel gibt. Jedoch<br />

wird der Pfad nicht genauer spezifiziert. Genau das ist aber notwendig, wenn die bisher<br />

unangetastete Anforderung, das Pfade nur dann gültg sind, wenn keine Knoten mit der<br />

Beschreibung o.13 passiert werden, hinzugenommen wird. Theoretisch möglich wäre es,<br />

wenn man die Relation RGraph mehrmals eine Verbund mit sich selbst durchführt.<br />

SELECT ’ / ’ | | source . child_tablename | | ’ . ’ | | source . child_columnname<br />

» | | ’ . ’ | | source . child_value | | ’ / ’ | | zw1 . child_tablename | | ’ . ’ | | zw1 .<br />

»child_columnname | | ’ . ’ | | zw1 . child_value | | ’ / ’ | | zw2 . child_tablename<br />

» | | ’ . ’ | | zw2 . child_columnname | | ’ . ’ | | zw2 . child_value | | ’ / ’ | | dest .<br />

»child_tablename | | ’ . ’ | | dest . child_columnname | | ’ . ’ | | dest .<br />

»child_value as Path<br />

FROM Graph source , Graph zw1 , Graph zw2 , Graph dest<br />

WHERE source . pathid = dest . pathid and source . pathid = zw1 . pathid and<br />

source . child_tablename = zw1 . parent_tablename and source .<br />

»child_columnname = zw1 . parent_columnname and source .<br />

»child_value = zw1 . parent_value and<br />

zw1 . child_tablename = zw2 . parent_tablename and zw1 .<br />

»child_columnname = zw2 . parent_columnname and zw1 .<br />

»child_value = zw2 . parent_value and<br />

zw2 . child_tablename = dest . parent_tablename and zw2 .<br />

»child_columnname = dest . parent_columnname and zw2 .<br />

»child_value = dest . parent_value and<br />

source . child_tablename like ’ a ’ and source . child_columnname =<br />

»4<br />

and source . child_value = 1 and<br />

not ( ( zw1 . child_tablename like ’ o ’ and<br />

zw1 . child_columnname = 13) or<br />

( zw2 . child_tablename like ’ o ’ and<br />

zw2 . child_columnname = 13) ) and<br />

dest . child_tablename l ike ’h ’ and<br />

dest . child_columnname = 6 ;<br />

Listing 3.2: Selbstverbund über der Relation RGraph<br />

Die Ausgabe dieser Anfrage wird in Tabelle 3.3 dargestellt. Diese Variante würde zwar<br />

zum Ziel führen, ist aber, wie unschwer zu erkennen, ineffektiv und sehr kompliziert. Für<br />

Pfade der Länge x, wäre es notwendig genau x-mal einen Verbund über der Relation<br />

RGraph durchzuführen. Dabei ist zu bedenken, daß es im vorraus keine Informationen


Kapitel 3. Anfragetechnologien über Graphenstrukturen 39<br />

über die tatsächliche Länge eines Pfades gibt. Wie beispielsweise im Graph G2 3.3 zu<br />

erkennen ist, gibt es Pfade unterschiedlicher Länge. Dies erschwert die Suche zusätzlich.<br />

Im folgenden wird gezeigt, daß es im DBMS Oracle eine Möglichkeit gibt, hierarische<br />

Anfrage zu formulieren. Dazu wird die CONNECT BY -Klausel verwendet. Jedoch ist<br />

es dabei nicht möglich eine Einschränkung bezüglich der durchlaufenen Knoten zu formulieren.<br />

Es ist nur möglich die Pfade generieren zu lassen, die vom Startknoten zum<br />

Zielknoten führen. Eine Analyse der ”inneren” Knoten müsste andersweitig durchgeführt<br />

werden.<br />

s e l e c t<br />

sys_connect_by_path ( child_tablename | | ’ . ’ | | child_columnname | | ’ . ’ | |<br />

»child_value , ’ / ’ ) as path<br />

from Graph<br />

where child_tablename l i k e ’h ’ and child_columnname = 6<br />

s t a r t with child_tablename l i k e ’ a ’ and child_columnname = 4<br />

and child_value = 1<br />

connect by p r i o r child_tablename = parent_tablename and<br />

p r i o r child_columnname = parent_columnname and<br />

p r i o r child_value = parent_value ;<br />

Listing 3.3: Pfadausgabe mittel CONNECT BY-Klausel (nur Oracle)<br />

PATH<br />

/a.4.1/b.4.1/c.4.2/h.6.2<br />

Tabelle 3.3: Ausgabe zu den Anfrage der Listings 3.2,3.3<br />

Fazit zu den relationalen Konzept ist, daß es technisch gesehen ein sehr ausgereiftes<br />

und stabiles Konzept ist, welches sich einer breiten Akzeptanz erfreut. Dadurch bedingt<br />

auch viele Datenbankmanagementsysteme vorliegen, mit denen durch die Schnittstelle<br />

JDBC auf einfache Weise kommuniziert werden kann. Eine Start-Ziel Suche, bei der die<br />

Pfadinformationen nicht erfasst werden, kann im relationalen Konzept effizient durchgeführt<br />

werden. Die Grenze dieses Konzept liegt beim Erschließen der vollständigen<br />

Beschreibung des Pfads ausgehend von einem Startknoten bis zu einem spezifizierten<br />

Zielknoten.<br />

3.4 XML-basierte Lösungen<br />

Diese Idee basiert auf der Möglichkeit von XML, Strukturen zu definieren. Damit werden<br />

die Daten in einem XML-Dokument abgelegt. Auf diesem Dokuments können jetzt die im<br />

Bereich von XML anzutreffenden Anfragesprachen angewendet werden. Die wichtigsten<br />

sind XQuery 1.0, XPath 2.0 und XPath 1.0. Zwischen diesen drei Anfragetechnologien


40 3.4. XML-basierte Lösungen<br />

besteht folgender Zusammenhang:<br />

XP ath 1.0 ⊂ XP ath 2.0 ⊂ XQuery1.0<br />

Sowohl XPath 2.0 und XPath 1.0 arbeiten auf ein nicht XML-konformen Syntax. Mit<br />

diesen Sprachen wird das Ziel verfolgt, Bestandteile eines XML-Baum gezielt und standardisiert<br />

zu adressieren. XQuery 1.0 wurde entwurfen um den Anforderungen gerecht<br />

zu werden, die durch die W3C XML Query Workung Group [CFMR] und durch Anwendungsfälle<br />

[CFM + ] definiert werden. Allgemein hat XQuery wiederum eine nicht XMLkonforme<br />

Anfrage Syntax. XQuery ist ableitet von der XML Anfrage Sprache QUILT<br />

[RFC00] und bietet dank ihrer Felxibilität die Möglichkeit an verschiedene XML Informationsquellen,<br />

wie beispielsweise Datenbanken und Dokumente, Anfragen zu stellen.<br />

Da XQuery eine sehr neue Technologie ist, gibt es bisher keine schlanke und ausgereifte<br />

Möglichkeit, um sie in das zu entwickelnde System einzubinden. Das ist auch nicht<br />

weiter problematisch, denn schon XPath 1.0 bietet die Funktionalität an, Pfadausdrücke<br />

auf der Hierarchie eines XML-Dokuments zu formulieren. Zudem gibt es durch JXPath<br />

[PM] eine einfache Möglichkeit XPath in Java einzubinden, doch dazu später. Zuerst<br />

wird eine kurze Beschreibung des Aufbaus von XPath gegeben.<br />

XPath<br />

Wie bereits erwähnt, ist es mit XPath möglich, durch die Struktur von XML-Dokumenten<br />

zu navigieren. Das allgemeinser grammatikalische Konstrukt wird Ausdruck genannt. Ein<br />

solcher Ausdruck gibt nach seiner Auswertung ein Objekt zurück, welches von einem der<br />

Basistypen ist:<br />

• node-set (eine ungeordnete Menge von Knoten ohne Dubkikate)<br />

• boolean<br />

• number (Fließkommazahl)<br />

• string<br />

Die Auswertung eines Ausdrucks erfolgt immer in Bezug auf einen Kontext. Dieser<br />

Kontext besteht dabei aus:<br />

• einem Knoten (der Kontextknoten<br />

• ein Paar Integer-Werten ungleich 0 (die Kontextposition und die Kontextgröße)<br />

• eine Menge von gebundenen Variablen<br />

• einer Funktionsbibliothek<br />

• eine Menge von Namensraumdeklarationen im Rahmen des Ausdrucks


Kapitel 3. Anfragetechnologien über Graphenstrukturen 41<br />

Gebunden Variablen bedeutet, daß die Variablennamen auf Werte abgebildet werden.<br />

Die Werte können vom Typ einem der Basistyper für die Rückgabewerte eines<br />

Ausdrucks entsprechen. Die Namensraumdeklarationen sind Abbildungen von Präfixen<br />

auf Namensraum URI. Die gebundenen Variablen, die Funktionsbibliotheken und Namensraumdeklarationen<br />

werden für alle Sub-Ausdrücke und dem Ausdruck, in dem sie<br />

definiert werden verwendet und verändern sich nicht. Der Kontextknoten, die Kontextposition<br />

und die Kontextgröße können durch Prädikate verändert werden. Wird nichts<br />

über die drei Bestandteile ausgesagt, bleiben sie für Sub-Ausdrücke unverändert.<br />

An dieser Stelle soll nicht die komplette Vielfalt von mögliche Ausdrücken erklärt<br />

werden, wer daran interessiert ist, findet diese unter [CD99]. Lediglich ein besonderer<br />

Typ soll im folgenden genauer beschrieben werden. Dieser Ausdrückstyp wird Lokalisierungspfad<br />

genannt. Es existieren zwei Arten von Lokalisierungspfaden zum einmal die<br />

absoluten und zum anderen die relativen Lokalisierungspfade. Im wesentlichen bestehen<br />

diese Ausdrücke auf einer Folge von Lokalisierungsschritten, die durch das Zeichen ”/”<br />

abgetrennt werden. Jeder Lokalisierungsschritt selektiert eine Menge von Knoten aus<br />

dem XML-Baum ausgehend von seinem Kontextknoten. Jeder Knoten dieser Menge ist<br />

wiederum Kontextknoten für den nächsten Lokalisierungsschritt.<br />

Ein absolut Lokalisierungspfad besteht aus dem ”/” gefolgt von einem optionalen<br />

relativen Lokalisierungspfad. Der absolute Lokalisierungspfad ”/” selektiert den Wurzelknoten<br />

des XML-Dokuments.<br />

[ 4 ] Step ::= A x i s S p e c i f i e r NodeTest P r e d i c a t e ∗<br />

| AbbreviatedStep<br />

Listing 3.4: Definition eines Lokalisierungsschritts nach [CD99]<br />

Die Notation im Listing 3.4 entspricht einer erweiterten Backus-Naur Form, die im<br />

Abschnitt 1.4.1 erläutert wird. Wie im Listing 3.4 beschrieben, besteht ein Lokalisierungsschritt<br />

aus einer Achsenbeschreibung, gefolgt von einem Knotentest und keinem<br />

oder beliebig vielen Prädikaten. Alternativ kann auch eine Kurzform eines Lokalisierungsschritts<br />

verwendet werden.<br />

[ 5 ] A x i s S p e c i f i e r ::= AxisName ’ : : ’<br />

| A b b r e v i a t e d A x i s S p e c i f i e r<br />

[ 6 ] AxisName ::= ’ ancestor ’<br />

| ’ ancestor −or−s e l f ’<br />

| ’ a t t r i b u t e ’<br />

| ’ c h i l d ’<br />

| ’ descendant ’<br />

| ’ descendant−or−s e l f ’<br />

| ’ f o l l o w i n g ’<br />

| ’ f o l l o w i n g −s i b l i n g ’<br />

| ’ namespace ’


42 3.4. XML-basierte Lösungen<br />

| ’ parent ’<br />

| ’ preceding ’<br />

| ’ preceding −s i b l i n g ’<br />

| ’ s e l f ’<br />

[ 7 ] NodeTest ::= NameTest<br />

| NodeType ’ ( ’ ’ ) ’<br />

| ’ p r o c e s s i n g −i n s t r u c t i o n ’ ’ ( ’ L i t e r a l ’ ) ’<br />

Listing 3.5: Ausschnitt der Definition der Achsenbeschreibung und des Knotentests nach<br />

[CD99]<br />

Die Kombination aus Achsenbeschreibung und Knoten-Test selektiert eine initiale<br />

Menge von Knoten ausgehend vom Kontextknoten. Die Achsenbeschreibung besteht aus<br />

einem Achsennamen (siehe 3.5) gefolgt von zwei Doppelpunkten ”::”. Beispielsweise bedeutet<br />

child :: adresse, daß ausgehend vom aktuellen Kontextknoten alle Kinderknoten,<br />

die dem address-Elementtyp entsprechen, gewählt werden. In diesem Fall wurde ein Namentest<br />

als Knotentest gewählt. Es hätte nun auch noch ein Prädikat folgen können,<br />

welches die selektierte Menge von Knoten zusätlich hätte filtern können. Im nächsten<br />

Abschnitt wird der in Abschnitt 3.2 skizzierte Anwendungsfall herangezogen, um dieses<br />

Konzept bewerten zu können.<br />

3.4.1 Anwendung des XML-basierten Konzepts<br />

Zunächst stellt sich die Frage, wie aus Java heraus auf XML Daten zugegriffen werden<br />

kann. In diesem Zusammenhang fallen normalerweise die Technologien Document<br />

Object Model (DOM) und Simple API for XML (SAX). Beides sind Implementationen<br />

eines XML-Parsers. Eine etwas andere Technik ist unter dem Begriff Java Architecture<br />

for XML Binding (JAXB) bekannt. Die Abbildung 3.4 zeigt einen Überblick über diese<br />

Technologie. Das Konzept ist recht einfach. Der JAXB Binding Compiler erhält als<br />

Input ein XML Schema und produziert ein Java Package, bestehend aus Klassen und<br />

Schnittstellen, welche den im XML Schema definierten Bestandteilen entsprechen. Die<br />

Klassen and Schnittstellen werden kompiliert und werden zusammen mit einer Menge<br />

von allgemeinen JAXB packages als JAXB binding framework bereitgestellt. Das JAXB<br />

binding framework ermöglicht es Vor allem durch JAXB ist eine sehr gute Kompatibilität<br />

zu Java gewährleistet. JAXB ist Bestandteil des Java Web Services Developer Pack,<br />

welches aktuell in der Version 1.6 angeboten wird. Daraus geht hervor, daß JAXB ausgereift<br />

ist. Somit ist das integrieren von XML-Informationen in Java und somit auch in<br />

das Tool technisch realisierbar.<br />

Der Compilierungsprozesses wird einmal extern ausgeführt. Das daraus entstandene<br />

JAXB binding framework wird dann in den Klassenpfad des Projekts aufgenommen<br />

und die entsprechende Java Objekte können wie normale Objekt verwendet werden. Das<br />

JAXB binding framework enthält alle Daten, die benötigt werden, um die erzeugten<br />

Klassen und Schnittstellen zu nutzen. Es muss nicht weiter installiert werden. Somit läßt


Kapitel 3. Anfragetechnologien über Graphenstrukturen 43<br />

sich diese Technologie sehr gut in das Werkzeug integrieren.<br />

Abbildung 3.4: JAXB Überblick [OM03]<br />

Um mit den im JAXB binding framework arbeiten zu können, wird ein Package mit<br />

Namen JXPath verwendet. Es ermöglicht XPath Ausdrücke unter anderem auf Java-<br />

Beans auszuführen. Somit ist auch die Anbindung von XPath gegeben. Die Effiziens<br />

bezüglich XPath ist fraglich, denn in der Spezifikation von XPath 1.0 [CD99] ist keine<br />

Anfrage-Optimierung vorgesehen. Es liegt beim Anwendungsprogrammierer die optimale<br />

Variante zu finden.<br />

Ein weiteres Problem ist das Datenvolumen. Durch das Begrenzen der Rohdaten mit<br />

Tags, steigt das Datenvolumen. Dies ist sehr schön im Listing 3.7 zu beobachten. Bei<br />

der riesigen Menge an Rohdaten, die im Umfeld des zu entwickelnden Werkzeugs gegeben<br />

ist, ist das ein schwerwiegender Nachteil. Es ist bei den Endanwendern, deren<br />

Arbeitsplatzrechner die Zielplattform darstellen, nicht davon auszugehen, daß eine unbeschränkt<br />

hohe Speicherkapazität vorliegt. Deswegen muss es das Bestreben sein, die<br />

Datenmenge so gering wie möglich zu halten. Aus diesem Grund ist XML zum Speichern<br />

der kompletten Graphinformationen eher ungeeignet.<br />

Betrachten wir zunächst wie die Daten unseres Anwendungsfalls aus Abschnitt 3.2<br />

in einer XML Struktur abgelegt weden können. Dazu wird zunächst eine XML Schema<br />

(Listing 3.6) definiert, welches die Graphenstruktur abbildet.<br />


44 3.4. XML-basierte Lösungen<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


Kapitel 3. Anfragetechnologien über Graphenstrukturen 45<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Listing 3.6: XML-Schema Datei zur Definition der XML-Struktur für Graphen<br />

Das folgende Listing 3.7 ist eine Dokumenteninstanz des Dokumenttyps, der im XML<br />

Schema des Listings 3.6 definiert wurde.<br />

<br />

<br />

<br />

<br />

a.4<br />

1<br />

<br />

b.4<br />

1<br />

<br />

e .2<br />

4<br />

<br />

j .5<br />

4<br />

<br />

<br />

k.2<br />

4<br />

<br />

<br />

<br />

d.4<br />

3


46 3.4. XML-basierte Lösungen<br />

. . .<br />

<br />

i .7<br />

3<br />

<br />

<br />

<br />

c .4<br />

2<br />

<br />

f .5<br />

2<br />

<br />

<br />

g.4<br />

2<br />

<br />

<br />

h.6<br />

2<br />

<br />

<br />

<br />

<br />

<br />

<br />

Listing 3.7: Ausschnitt der XML-Dokumenteninstanz des Dokumententyps aus Listing<br />

3.6 über der Graphenmengen G<br />

Jetzt ist die XML-Strukur definiert, in der die Graphen vorliegen. Wie sehen nun<br />

Pfadanfragen unter Anwendung der XPath Technologie aus? Im Listing 3.8 werden zwei<br />

Anfragen formuliert. Auch hier werden wiederum die Pfade vom Start zum Zielknoten<br />

zurückgeliefert. Die geordnete Menge der Vorgängerknoten bilden den Pfad, der bis zum<br />

Endknoten durchlaufen wurde. Dies zeigt das es recht einfach ist, die Pfadinformationen<br />

zu erlangen.<br />

// node [ c h i l d : : nodeDesc = ’ a . 4 ’ and c h i l d : : nodeValue = ’ 1 ’ ] /<br />

»descendant : : node [ c h i l d : : nodeDesc = ’ h . 6 ’ ] / ancestor −or−s e l f : : node<br />

// node [ c h i l d : : nodeDsc = ’ r . 1 5 ’ and c h i l d : : nodeValue = ’ 2 ’ ] /<br />

»descendant : : node [ c h i l d : : nodeDesc = ’ h . 6 ’ ] / ancestor −or−s e l f : : node<br />

Listing 3.8: Pfadanfragen über Graphen als XPath Ausdrücke


Kapitel 3. Anfragetechnologien über Graphenstrukturen 47<br />

Jedoch wurden die Pfade bisher nicht weiter eingeschränkt. Eine Möglichkeit ist die<br />

Analyse von Einschränkungen von XPath zu entkoppeln. Dazu wird einfach die Vorgängermenge<br />

zurückgegeben. Wichtig zu wissen ist, daß durch den ancestor-or-self Achennamen<br />

eine geordnete Knotenmengen in umgekehrter Dokumentenordnung geliefert wird.<br />

Das heißt, daß sich der Startknoten am Ende der geordneten Mengen befindet. Eine<br />

andere Variante wäre im XPath-Ausdruck direkt eine Funktion zu nutzen, die den Pfad<br />

auf die Beschränkungen hin untersucht.<br />

Das Listing 3.9 zeigt, wie eine Funktion als Ausdruck verwendet werden kann. Die<br />

Funktion checkPath hat zwei Argumente. Einmal die geordnete Menge von Vorgängerknoten<br />

des Kontextknotens und drei Variablen sourceDesc, sourceValue, pattern.<br />

sourceDesc die Beschreibung des Startknotens<br />

sourceValue der Wert des Startknotens<br />

pattern ein regulärer Ausdruck der ein Pattern für gültige Pfade beschreibt<br />

Der Rückgabewert dieser Methode muss ein Wahrheitswert sein. Die Funktion muss für<br />

jeden Knoten, der über einen gültigen Pfad erreicht wurde, den Wahrheitswert wahr<br />

zurückgeben. Dann wird dieser Knoten node in die resultierende Knotenmenge aufgenommen.<br />

// node [ c h i l d : : nodeDesc = ’ a . 4 ’ and c h i l d : : nodeValue = ’ 1 ’ ] /<br />

»descendant : : node [ c h i l d : : nodeDesc = ’ h . 6 ’ ] [ checkPath ( a n c e s t o r : :<br />

»node , $sourceDesc , $sourceValue , $pattern ) ]<br />

Listing 3.9: XPath Ausdrücke mit Pfadauswertung<br />

Zusammenfassend läßt sich sagen, daß durch XPath die Anfrage von Pfaden realisieren<br />

läßt. Das Problem der XML-Technologie ist, daß durch die Begrenzer (TAGS) ein<br />

zusätzlicher Datenzuwachs entsteht, der nicht erwünscht ist. Somit ist das Konzept der<br />

hierarischen Verarbeitung auf Basis von wohlgeformten XML-Dokumente als alleinige<br />

Lösung nicht optimal.<br />

3.5 Objektorientiertes Konzept<br />

Als letzte Technologie wurden Objektdatendaten betrachtet. Diese Datenbanken basieren<br />

auf der Idee das Objektparadigma auf Datenbanksysteme anzuwenden. Die Object Data<br />

Management Group (ODMG) hatte zum Ziel einen Standard wie SQL für OODBMS<br />

zu entwickeln. Zur Definition eines Datenschema entwickelte die ODMG eine datenbankunabhängige<br />

Datendefinitionssprache, die Objekt Definition Language (ODL). Dabei<br />

handelt es sich um eine Definitionssprache (DDL) für Objekte. Im Listing 3.10 ist ein<br />

Ausschnitt aus der ODL Grammatik dargestellt. Im ODMG-Standard gibt es keine extra<br />

Object Manipulation Language (OML). Diese Operationen müssen im Objekt selbst<br />

definiert werden und können dann in OQL genutzt werden.


48 3.5. Objektorientiertes Konzept<br />

( 1 ) ::= <br />

| <br />

(2∗) ::= ;<br />

| ;<br />

| ;<br />

| ;<br />

| ;<br />

| ;<br />

(2 a ) ::= { }<br />

(2 b ) ::= c l a s s <br />

[ extends ]<br />

[ ]<br />

[ ]<br />

(2 c ) ::= ( [ ] [ ] )<br />

Listing 3.10: Ausschnitt aus der ODL Grammatik [CBB + 97]<br />

ODL dient zur programmiersprachenunabhängigen Definition der Objekte. Jede<br />

Objektdefinition kann dann in mehreren Programmiersprachen implementiert werden.<br />

Zu diesem Zweck gibt es verschiedene Anbindung zu den Programmiersprachen<br />

C++,Smalltalk und Java. Dabei werden die Datentypen aufeinander abgebildet und<br />

es werden neue Interface für die Kollektionstypen wie set,bag,list definiert. Un es wird<br />

zustäzlich ein Properties File erstellt, in dem festgehalten wird welche Attribute eines<br />

Objekts persistent sind oder welche eine Referenz zu anderen Objekt darstellen.<br />

Wurde eine Menge von Objekten gebildet, ist nun die Frage, wie auf die persistent, abgelegten<br />

Informationen zugegriffen werden kann. Die Anfragesprache, die von der ODMG<br />

enwickelt wurde, nennt sich Object Query Language (OQL). Sie arbeitet auf dem Objektmodell<br />

welches von der ODMG enwickelt wurde. Ihre Syntax lehnt sich stark an den<br />

SQL-92 Standard. Dieser wird um objektorientierte Belange erweitert, wie komplexe<br />

Objekte, Objektidentität, Pfadausdrücke, Polymorphismus, Operationsaufrufe und dynamisches<br />

Binden. OQL kann von einer Programmiersprache aus aufgerufen werden und<br />

kann ebenfalls Operationen bzw. Funktionen, die in der Programmiersprache definiert<br />

wurden, ausführen. OQL selbst definiert keine Update Operationen. Dazu werden die<br />

Operationen genutzt, die auf Seiten der Programmiersprache definiert werden. Ausserdem<br />

bietet OQL einen deskriptiven Zugriff auf Objekte und ermöglicht auf dieser Basis<br />

eine Optimierung der Anfragen. [CBB + 97]<br />

Interessant ist der Begriff Pfadausdruck. Er beschreibt wörtlich das, was im vorliegenden<br />

Anwendugsfall gesucht wird. Jedoch wird hier mit Pfadausdruck die Möglichkeit<br />

beschrieben, mittels einer Punktnotation in die Sturktur von komplexen Objekten oder<br />

über einfache Beziehungen zu navigieren, beispielsweise p.spouse.address. city .name. Das<br />

liefert uns den Namen der Stadt, in der der Ehepartner der Person p lebt. [CBB + 97]<br />

Es soll an dieser Stelle nicht die komplette Sprache-Definition erläutert werden. Dazu<br />

wird auf die letzte Version v3.0 [CBB + 00] verwiesen. Es wird folgend das wichtigste<br />

Konstrukt der OQL auschnittweise präsentiert. Dieses Konstrukt ist der SFW-Block der


Kapitel 3. Anfragetechnologien über Graphenstrukturen 49<br />

auch schon in SQL verwendet wurde. Hier wird die Anlehnung an SQL-92 deutlich.<br />

query ::= s e l e c t E x p r<br />

| expr<br />

s e l e c t E x p r ::= s e l e c t [ d i s t i n c t ] p r o j e c t i o n A t t r i b u t e s<br />

fromclause<br />

[ whereClause ]<br />

[ groupClause ]<br />

[ orderClause ]<br />

p r o j e c t i o n A t t r i b u t e s ::= p r o j e c t i o n L i s t<br />

| ∗<br />

p r o j e c t i o n L i s t ::= p r o j e c t i o n { , p r o j e c t i o n }<br />

p r o j e c t i o n ::= f i e l d<br />

| expr [ as i d e n t i f i e r ]<br />

fromClause ::= from i t e r a t o r D e f { , i t e r a t o r D e f }<br />

i t e r a t o r D e f ::= expr [ [ as ] i d e n t i f i e r ]<br />

| i d e n t i f i e r in expr<br />

whereClause ::= where expr<br />

havingClause ::= having expr<br />

orderClause ::= order by s o r t C r i t e r i a<br />

s o r t C r i t e r i a ::= s o r t C r i t e r i o n { , s o r t C r i t e r i o n }<br />

s o r t C r i t e r i o n ::= expr [ ( asc | desc ) ]<br />

Listing 3.11: Ausschnitt der OQL Grammatik aus [CBB + 00]<br />

Generell ist es möglich durch das Java Binding den ODMG Standard zu verwenden.<br />

Ein Problem welches momentan ist, daß die frei verfügbaren embedded Lösungen von<br />

ODBMS den ODMG Standard eher spärlich unterstützen. Sie verwenden meist eigene<br />

Konzepte, die nicht die Möglichkeiten haben, wie es der ODMG Standard hat.<br />

3.5.1 Anwendung des Konzepts von ODBMS<br />

Die erste Frage die sich stellt ist, wie sollen die Graphinformationen gespeichert werden.<br />

Es gibt in der Informatik im wesentlichen drei Ansätze um Graphen zu speichern,<br />

die Inzidenzmatrix, die Adjazenzmatrix und die Adjazenzliste. Die Adjazensliste ist am<br />

ehesten geeignet, da bei der Adjazenzmatrix aufgrund dessen das es sich um ungerichtete<br />

Graphen handelt unnötig Platz verschwendet wird. Die Inzidenzmatrix verwendet<br />

neben Knoten auch Kanten. Jedoch Kanteninformationen abzulegen würde wieder eine<br />

erhöhung des Datenvolumens bedeuten.<br />

Somit muss ein Graphobjekt gebildet werden, welches die Struktur einer Adjazenzliste<br />

beschreibt. Die Bestandteile einer Adjazenzliste sind Listen oder Arrays über Knoten.<br />

Also muss es noch ein Objekt Knoten geben. Dabei besteht jeder Knoten aus einer Beschreibung<br />

und einem Wert. Aus der Kombination der Bestandteile ergibt sich die Ein-


50 3.5. Objektorientiertes Konzept<br />

deutigkeit eines Knotens. Die Knotenbeschreibung selbst kann auch als eigenes Objekt<br />

existieren. Sie setzt sich aus einem Tabellennamen und einem Attributnamen zusammen.<br />

class Graph<br />

( extent Graphs )<br />

{<br />

attribute dictionary a d j a z e n s l i s t e ;<br />

relationship set nodes<br />

inverse Node : : is_included_by ;<br />

boolean checkPathFor ( in Node sourc , in Node dest , in string<br />

»pattern )<br />

} ;<br />

class Node<br />

( extent Nodes )<br />

{<br />

attribute string value ;<br />

}<br />

relationship D e s c r i p t i o n d e s c r i p t i o n<br />

inverse D e s c r i p t i o n : : d e s c r i b e s ;<br />

relationship set included_by<br />

inverse Graph : : nodes ;<br />

class D e s c r i p t i o n<br />

( extent D e s c r i p t i o n s )<br />

{<br />

attribute string tablename ;<br />

attribute string columnname ;<br />

}<br />

relationship set d e s c r i b e s<br />

inverse Node : : has_description ;<br />

Listing 3.12: Darstellung der Graphen durch ODL<br />

OQL ist vom Wesen her ähnlich wie SQL. Jedoch kann es aufgrund der Objekttypen<br />

wesentlich komplexere typen behandeln. Ausserdem wird durch die Möglichkeit<br />

Operationen aufzurufen, die Möglichkeit komplexere Operationen quasi nachzuladen. So<br />

könnte das Problem des prüfens, ob ein Pfad vom Start zum Zielknoten existiert und<br />

dieser einem Bestimmten Pattern entspricht, in einer Operation vereint werden. Diese<br />

Funktion wurde im Listing 3.12 mit checkPathFor(. . . ) bezeichnet. Diese Funktion müsste<br />

dann, mittels der im Graphen aufgeführten Adjazenzliste, die Pfade bestimmen und


Kapitel 3. Anfragetechnologien über Graphenstrukturen 51<br />

gegen das Pattern prüfen.<br />

Das folgende Listing zeigt eine mögliche OQL-Anfrage, um eine Menge von Knoten<br />

zu bestimmen, die über Pfade, entsprechend dem Pattern pattern ausgehende vom Startknoten<br />

source und zum entsprechenden Ziel führen, erreicht werden. In diesem Fall wurde<br />

genau ein Knoten als Ziel festgelegt. Somit ist das Ergebnis eine leere oder einelementige<br />

Menge. Genausogut könnten Knoten das Ziel sein, die einer bestimmten Beschreibung<br />

entsprechen. Dann könnte die resultierende Menge eine beliebige Anzahl zutreffender<br />

Knoten enthalten. Ist das Resultat eine leere Menge, so gibt es keine solche Zielknoten.<br />

define provePath ( source , dest , pattern ) as<br />

select distinct n<br />

from Graphs g , g . nodes n<br />

where g . checkPathFor ( source , n , pattern ) and n = dest ;<br />

Listing 3.13: OQL Anfrage<br />

3.6 Gesamtbewertung und resultierendes Konzept<br />

Zum Abschluss dieses Kapitels, wird noch einmal ein zusammenfassender Überblick über<br />

die analysierten Konzepte und deren Bewertung gegeben. Die Tabelle 3.4 zeigt im Überblick<br />

die einzelnen Bewertungskriterien zusammen mit den untersuchten Konzepten.<br />

Bewertungskriterium relationale hierarische Dokumenten- objektorientierte<br />

DBMS struktur (XML) DBMS<br />

Technische Realisierbarkeit<br />

↑ ↑ ←<br />

Integrationsgrad ↑ ↑ ←<br />

Kompatibilität zur Java ↑ ↑ ↖<br />

Effiziens ↑ ↙ ↖<br />

Anwendbarkeit auf die<br />

Problematik<br />

← ↖ ↑<br />

Tabelle 3.4: Bewertung der Anfragetechnologien<br />

Zusammenfassend läßt sich sagen, daß momentan noch kein Konzept allein das Problem<br />

lösen kann. Potential hat sicherlich die objektorientierte Variante, ist jedoch momentan<br />

vor allem im embedded Bereich der frei verfügbaren Datenbanken bezüglich<br />

des ODMG-Standards eingeschränkt. Relationale DBMS unterliegen Beschränkungen<br />

aufgrund ihres einfachen Konzepts. Dies äußerst sich vor allem in der Extraktion der<br />

Pfadinformationen. Allein Oracle bietet eine Möglichkeit dieses Problem zu lösen. Vorteil<br />

der relationalen DBMS ist ihr theoretisch gut durchdrungenes Konzept, speziell die<br />

Relationenalgebra. Auf deren Basis eine effiziente Optimierung der Anfragen möglich ist,<br />

was natürlich auch auf das einfache Konzept der Relationen zurückzuführen ist.


52 3.6. Gesamtbewertung und resultierendes Konzept<br />

Die dokumentenbasierte Variante auf Basis der Sprache XML, ist in Bezug auf der<br />

Extraktion von Pfadinformationen sehr gut geeignet. Die Anfragesprache XPath bietet,<br />

mit dem Konzept der Lokalisierungsschritte, eine einfach und effiziente Möglichkeit Pfade<br />

zu bestimmen und zu untersuchen. Der schwerwiegende Nachteil entsteht durch die<br />

Forderung des Wohlgeformtheitskriteriums, welches besagt, daß die Informationen mit<br />

Start- und Endmarkierungen versehen werden müssen. Dies führt zu einem hohen Maß<br />

an Datenzuwachs. Deswegen schneidet dieses Konzept bei der Effiziens schlechter ab.<br />

Das resultierende Konzept wird die Vorteile des relationalen Konzepts und das Konzept<br />

der hierarischen Dokumentenstrukturen vereinen. Zum einen wird durch RDBMS<br />

eine Vorfilterung durchgeführt, bei der aus der großen Menge an Graphen nur die selektiert<br />

werden, die für die aktuelle Anfrage wichtig sind. Diese gefilterte Menge wird dann<br />

in eine XML-Struktur überführt, auf derer daraufhin die Pfadanalyse bewerktstelligt<br />

wird.<br />

Im nächsten Kapitel wird die Entwicklung des Tools entsprechend des Software-<br />

Lebenszykluses beschrieben. Bei der Entwicklung wird nun das hier als resultierend<br />

beschriebene Konzept umgesetzt.


Kapitel 4. Entwurf des Offlinewerkzeugs 53<br />

Kapitel 4<br />

Entwurf des Offlinewerkzeugs<br />

In diesem Kapitel stellt den praktischen Teil der Arbeit dar. Am Ende soll eine Software<br />

entstehen, die das Konzept, welches im Kapitel 3 ermittelt wurde, implementiert. Der<br />

Entstehungsprozess einer Software wird durch den Softwarelebenszyklus beschrieben. Dabei<br />

werden die einzelnen Lebenzyklusphasen in der Entwicklung durchlaufen. Begonnen<br />

wird bei der Problemdefinition und Anforderungsanalyse. Gefolgt von der Spezifikation,<br />

der Entwurfs- und Implementationsphase. Zum Ende folgt dann die Erprobung und<br />

Auslieferung.<br />

4.1 Problemdefinition und Anforderungsanalyse<br />

Die Problemdefintion ist die Phase in der die Anforderungen, die an das Softwareprodukt<br />

gestellt werden, herausgearbeitet werden müssen. [Dum00] Die Aufgabenstellung<br />

definiert einen Großteil der Anforderungen. Alle weiteren müssen durch Gespräche mit<br />

den jeweiligen Mitarbeitern herausgearbeitet werden. Die extrahierten Anforderungen<br />

werden beginnend bei den funktionalen Anforderungen im Folgenden aufgelistet:<br />

• funktionale Anforderungen<br />

– offline Werkzeug, welches eine Beziehung zwischen den Eingangsdaten und<br />

den Zieldaten auf der Basis von tabellarischen Exporten der DLGs herstellt<br />

– die Eingabedaten sollen entweder Sequenzdaten oder Ausgaben von darauf<br />

angewandten Analysenwerkzeugen sein<br />

– Zieldaten sind individuell vom Nutzer gewählte Sekundärdaten, wie Stoffwechselwege<br />

oder Enzyme<br />

– das Werkzeug greift auf lokal gespeicherte, tabellarischen Exporte dieser<br />

DLG’s sowie auf exportierte Abschnitte aus der integrierten Proteomicsdatenbank<br />

(Zieldaten)


54 4.1. Problemdefinition und Anforderungsanalyse<br />

– die Anbindung der Analysewerkzeuge bzw. der Ausgaben, die in Abhängigkeit<br />

der Art der Zieldaten unterschiedlich ausfallen können, soll in einem Plugin-<br />

Konzept realisiert werden<br />

• qualitätsbezogene Anforderungen<br />

– Datenbankunabhängigkeit bez. eines DBMS<br />

– Erweiterbarkeit (bez. verschiedener Ausgaben von Analysewerkzeugen)<br />

– möglichst schnelle Verarbeitung der Anfragen soll erreicht werden<br />

– geeignete Nutzerobfläche<br />

– Suchen des Verbindungsgraphen in den DLGs sollte mit logarithmischer Komplexität<br />

erfolgen<br />

– geeignete Daten- und Indexstrukturen sind beim Umgang mit den lokal gespeicherten<br />

Export-Dateien zu verwenden<br />

• systembezogene Anforderungen<br />

– als Programmiersprache ist Java zu verwenden<br />

– Verwendbarkeit auf verschiedenen Betriebssystemen<br />

– Anwendung auf Desktop-PC’s<br />

• prozesspezifische Anforderungen<br />

– Entwicklungzeitraum wurde auf 5 Monate angesetzt<br />

– für die Entwicklung ist ein Entwickler vorgesehen<br />

Diese Anforderungen sind korrekt und konsistent forumliert. Ausserdem existieren<br />

keine unverträglichen Anforderungen. Sie gingen aus Interviews mit Mitgliedern der<br />

Arbeitsgruppe Bioinformatik der Abteilung Molekulare Marker. Die erste funktionale<br />

Anforderung kann durch das im Kapitel 3 ermittelte Konzept realisiert werden. Die Datenbankunabhängigkeit<br />

wird durch das Verwenden von JDBC gewährleistet. Die Plugin-<br />

Struktur, die im weiteren noch näher erläutert wird, führt zur Erweiterbarkeit des Tools.<br />

Mittels Java wird die Verwendbarkeit des Tool auf verschiedenen Plattformen gesichert.<br />

Um eine geeignete Nutzeroberfläche zu erstellen, wird das Java Swing Packet verwendet.<br />

Dies stellt sicher, daß das Erscheinungsbild auch auf allen Plattformen identisch<br />

ist, was wiederum den Aspekt der Plattformunabhängigkeit berücksichtigt. Der Schwerpunkt<br />

der Entwicklung liegt in Leistungsfähigkeit der Anfragen und der Flexibilität des<br />

Tools bezüglich der Eingabe und Ausgabe.


Kapitel 4. Entwurf des Offlinewerkzeugs 55<br />

4.2 Spezifikation<br />

Nach der Analyse und Defintion der Anforderungen an die Software soll nun die eigentliche<br />

Entwicklung des Softwareprodukts begonnen werden. In dieser Phase des Projekts<br />

soll eine konzeptuelle Beschreibung des Software-Tools erreicht werden. [Dum00] Der<br />

prinzipielle Aufbau des Tools soll einem Plugin-Konzept entsprechen. Die Abbildung 4.4<br />

stellt die Struktur des Tools in Form eines Komponentendiagramms.<br />

Die Nutzung des Tools umfasst im wesentlichen drei Anwendungsfälle. Zunächst muss<br />

ein IT-Experte alle Daten, die für den Betrieb des Tools nötig sind, auf einem Server<br />

zum Download bereitstellen. Ergeben sich Änderungen so müssen die Daten aktualisiert<br />

werden. Der zweite nennenswerte Anwendungsfall ist, daß der Nutzer die auf den Server<br />

angebotenen Daten auf sein lokales System herunterlädt. Diese Daten werden dann in das<br />

Tool importiert. Diese beiden Anwendungsfälle sind nicht direkt Bestandteil des Funktionumfangs<br />

des Tools, aber dennoch grundlegend für seine korrekte Arbeitsweise. Der<br />

Letzte Anwendungsfall beschreibt nun die Aufgabe der Datenanalyse unter Verwendung<br />

der zuvor geladenen Informationen. Die Verwendung des Tools verläuft dabei prinzipiell,<br />

wie es in Abbildung 4.5 dargestellt wird. Das Anwendungsfalldiagramm in Abbildung<br />

4.1 stellt die gerade beschriebenen Anwendungsfälle graphisch dar.<br />

( *<br />

$%<br />

" (<br />

Abbildung 4.1: Drei grundlegenden Anwendungsfälle im Umfeld des Tools<br />

Die Datenbereitstellung teilt sich in verschiedene Teilaufgaben auf. In Abbildung<br />

4.2 werde diese Aufgaben in einem Aktivitätsdiagramm dargestellt. Das Bereitstellen<br />

von Zusatzinformationen bedeutet, daß zu den spezifischen Anfragen Informationen verwendet<br />

werden, die zusätzlich zu den Graphinformationen genutzt werden. Die Pfade


56 4.2. Spezifikation<br />

beinhalten ausschließlich Schlüsselattributwerte, die normalerweise nicht aussagekräfig<br />

sind. Aus diesem Grund werden die Zusatzinformationen entsprechend dem Einzelfall<br />

heruntergeladen, um somit eine geeignete Ausgabe am Ende einer Anfrage generieren zu<br />

können.<br />

Abbildung 4.2: Teilaufgabe der Datenbereitstellung<br />

Neben den Zusatzinformationen müssen die Plugins entwickelt und bereitgestellt werden.<br />

Diese Aufgabe kann von einer beliebigen Person bearbeitet werden, die sich in die<br />

Pluginstruktur eingearbeitet hat. Es muss nicht die Person, die die Daten bereitstellt,<br />

sein. Bei der Bereitstellung der Pfaddaten erfolgt zuvor ein Komprimierungsprozess, der<br />

die Daten die in der Datenbank abgelegt wurden, speicherrelevant optimiert. Weitere<br />

Informationen zu diesem Thema werden weiter unten gegeben.<br />

Bevor der Nutzer das Tool zum ersten mal nutzen kann, muss er alle notwendigen<br />

Daten vom Server herunterladen. Die Datenbeschaffung besteht zunächst aus dem<br />

Herunterladen aller Informationen. Dazu gehören die Dateien, die aus dem Komprimierungsprozess<br />

(siehe 4.9) hervorgehen, die Datei mit den RelationAttribut-Wertepaaren<br />

(inklusive deren Index), die Plugins und die für die spezifische Frage nötigen Zusatzinformationen.<br />

Wurden alle diese Daten heruntergeladen, muss die Einbettung der Pfaddaten,<br />

der RelationAttribut-Wertepaaren und der Plugins erfolgen. Die Nutzung der Zusatzinformationen<br />

erfolgt dann bei der Ausführung des Plugins. Das Aktivitätsdiagramm in<br />

Abbildung 4.3 präsentiert den Datenbeschaffungsanwendungsfall noch einmal in graphischer<br />

Form.


Kapitel 4. Entwurf des Offlinewerkzeugs 57<br />

Abbildung 4.3: Aktivitätsdiagramm zur Beschreibung der Datenbeschaffung<br />

4.2.1 Plugin-Struktur<br />

Die Plugin-Struktur ist eine Komposition aus den Eingabe-Plugins, den Ausgabe-PlugIns<br />

und den AnfrageAnalyse-Modul. Die Aufgabe der Eingabe-Plugins besteht darin sich<br />

an die einzelnen Anwendungsfälle der Eingabemöglichkeiten zu widmen. Beispielweise<br />

können externe Tools aus den eingegebenen Daten erst die Menge der Daten erzeugen,<br />

die für den Anfrage benötigt werden. Dann ist bei der Ausgabe dieser Tools oder auch<br />

generell davon auszugehen, daß die Eingangsdaten in flachen Dateien vorliegen. Diese<br />

müssen zunächste mittels eines entsprechend angepaßten Parsers extrahiert werden. Das<br />

wäre eine Aufgabe, welche von den Eingabeplugins realisert werden muss.<br />

Ein weiterer Aspekt ist, daß die Semantik der verarbeiteten Infomationen zugänglich<br />

gemacht werden muss. Diese Information ist für den Ausgabe Plugins wichtig, um die<br />

Daten in entsprechender Form darzustellen. Demzufolge muss ein Eingabe-Plugin eine<br />

Möglichkeit anbieten, diese Informationen abrufbar zu machen. In gleicher Weise muss<br />

auch ein Ausgabe-Plugin Informationen darüber geben, welche Daten es darstellen kann.<br />

Dann wäre es auch von Seiten der Eingabe-Plugins möglich, die Ausgabe-Plugins zu<br />

ermitteln, die zu ihnen kompatibel sind.<br />

Das Anfrage-Anlayse Modul ist der Teil des Tool, indem das ermittelte Konzept des<br />

vorherigen Kapitels Anwendung findet. Dabei erhält es Eingangsdaten von den Eingabe-<br />

Plugins und generiert daraus die Menge der Daten, die einerseits den gewünschten Zielinformationen<br />

entsprechen und andererseits vom jeweiligen Startpunkt aus erreichbar


58 4.2. Spezifikation<br />

Abbildung 4.4: Komponentendiagramm der Plugin-Struktur<br />

sind.<br />

Am Ende des Anfrageprozess, soll die Ausgabe der gefunden Zusammenhänge durch<br />

Ausgabe-Plugins dargestellt werden. Das setzt vorraus, daß die Informationen zwischenzeitlich<br />

gespeichert werden. Angefangen bei den Primärdaten, den Daten die am Anfang<br />

der Informationskette stehen, bis hin zu den Zielinformationen. Im Abschnitt 4.2.2 wird<br />

die Datenstruktur in Form eines ER-Modells beschrieben.<br />

Die Benutzung des Tool wird wie in Abbildung 4.5 verstanden. Zu Beginn muss nachgesehen<br />

werden ob ein Plugin registiert ist, welches dem Anwendungsfall entspricht. Ist<br />

dies nicht der Fall, so muss zunächst ein solches im Tool registriert werden. Zum Anderen<br />

müssen die Zusatzdaten zu den Ursprungsdaten und den Zieldaten heruntergeladen<br />

werden. Sind alle Informationen bereits heruntergeladen wurden, dann wird einfach das<br />

Plugin gestartet und alle seine Optionen eingestellt. Schließlich wird eine Eingabe getätigt,<br />

überlicherweise das Drücken eines Buttons, die den Anfrageprozess startet.<br />

4.2.2 Interne Datenstruktur<br />

Wie weiter oben erwähnt, fallen Informationen zur Laufzeit des Tools an. Diese müssen<br />

zur späteren Darstellung gespeichert werden. In der Abbildung 4.6 wird ein ER-Schema<br />

definiert, welches die Struktur der zu speichernden Daten abbildet. Die Entities des RelationAttributes<br />

Entity-Typs bilden eine Ausnahme. Sie werden unabhängig von den<br />

eigentlichen temporären Daten zu Beginn einmalig eingespielt. Solange sich keine Ände-


Kapitel 4. Entwurf des Offlinewerkzeugs 59<br />

! " # $<br />

! #<br />

Abbildung 4.5: Aktivitätsdiagramm zur Darstellung der Aktivitäten bei der Benutzung<br />

des Tools


60 4.2. Spezifikation<br />

rungen an der Struktur der Datenbank ergeben (z.B. Proteomics-DB 2.2), bleiben die<br />

Daten unverändert. Sollte ein Änderung eintreten, so müssen diese Werte neu importiert<br />

werden.<br />

! ! !<br />

!<br />

!<br />

!<br />

!<br />

"<br />

Abbildung 4.6: ER-Schema der internen, temporären Daten<br />

4.2.3 Generierung der Relation-Attribut Informationen<br />

Wie im voherigen Abschnitt angedeutet, werden die Informationen der Relationen und<br />

Attribute seperat aus der darunterliegenden Datenbank ausgelesen. Dabei wird sich eines<br />

anderen Tool bediehnt, welches das ein relationales Datenbankschema verarbeitet und<br />

als Ergebnis einen Datei erzeugt. Diese Datei ist eine XML konforme Datei vom Typ<br />

.graphml. Das Tool erkennt alle Relationenschema und deren Attribute und erzeugt für<br />

jedes Paar einen Knoten in der graphml Datei. Dabei werden der Relationenname und<br />

der jeweilige Attributname mit einem Punkt verknüpft. Genau das sind die Werte, die<br />

in der Relation RelationAttributes enthalten sind.<br />

Diese Kombinationen werden zusätzlich noch an einer anderen Stelle gebraucht. Dies<br />

betrifft das XML Schema, welches den XML Dokumenttyp für die Graphinformationen<br />

festlegt. Die Daten werden zur Einschränkung der zulässigen Werte für die Knotenbeschreibungen<br />

der einzelnen Knoten verwendet. Dazu jedoch in Entwurfabschnitt . . . mehr.<br />

!


Kapitel 4. Entwurf des Offlinewerkzeugs 61<br />

Diese zwei ”Formate” müssen aus der graphml Datei erzeugt werden. Da diese Datei<br />

eine wohlgeformtes XML Dokument ist, kann sich der XSL Transformations Technologie<br />

bedient werden. Diese Technologie erlaubt es, XML Dokumente in andere XML<br />

Dokumente zu transformieren. Alternativ ist es auch möglich Ausgaben anderer Art zu<br />

Erzeugen. In unserem Fall nutzen wir die Möglichkeit reine Textdateien generieren zu<br />

können. Diese werden dann für den Import der Informationen in das Relationenschema<br />

RelationAttribute genutzt. In Abbildung 4.7 wird das Zusammenspiel der einzelnen<br />

Informationseinheiten dargestellt.<br />

' ( #&<br />

' ( #&<br />

!<br />

" # "$ % "&<br />

Abbildung 4.7: Generierung der Einschränkungsteils für das XML Schema und die Textdatei<br />

zum Import der RelationAttribut Werte<br />

4.2.4 Komprimierung des Datenpools<br />

Die Daten auf denen das zu entwickelnde Tool arbeiten wird, durchlaufen eine Sequenz<br />

von Teilschritten bis sie letztenendes vom Tool verwendet werden. In Abbildung 4.8 wird<br />

diese Sequenz dargestellt.<br />

Wie bereits erwähnt, arbeitet das Offline-Tool auf einer bereits vorhandenen Menge<br />

von Daten. Insgesamt enthält die Proteomics-DB alle Daten, die vom Tool verwendet<br />

werden. Durch Anwendung eines anderen Tool , welches im IPK Gatersleben entwickelt<br />

wurde, entstehen die Graphen. Dabei wird eine Tiefensuche auf der Proteomics-<br />

Datenbank ausgeführt. Diese durchläuft alle Referenzen (Fremdschlüssel), die von jedem<br />

Eintrag erreicht werden können. In diesem Zusammenhang kommt es jedoch zu einem<br />

Problem. Die Fülle an Daten ist immens.<br />

Momentan liegen die Informationen zu den Graphen in Form einer Relation in einer<br />

Datenbank vor und können in einer CSV Exportdatei heruntergeladen werden. Diese Da-


62 4.2. Spezifikation<br />

" #<br />

Abbildung 4.8: Datenfluss der Pfaddaten vom DBS zum OfflineTool<br />

tei würde vom Nutzer des Tools heruntergeladen werden müssen. Im Augenblick hat diese<br />

Datei ein Volumen von ca. 8GB. Diese Größe ist im Normalfall sowohl nicht zeiteffizient<br />

als auch nicht speicherfreundlich handhabbar. Aus diesem Grund muss eine Form der<br />

Komprimierung angewendet werden, um diesen Datenbestand so zu reduzieren, sodaß<br />

dessen Benutzbarkeit ein annehmbares Level erreicht.<br />

Grundlegende Idee der Komprimierung<br />

Nach einer Analyse des Daten war deutlich zu erkennen, daß ein hoher Grad an Redundanz<br />

in der Relation, die die Daten der Graphen umfasst, vorliegt. Diese wird durch das<br />

Verwenden eines Index über den Relationennamen und Attributnamen behoben. Dabei<br />

werden die beiden Attribute zusammengefasst, was nochmals Speicher spart, da noch<br />

weniger Felder pro Tupel notwendig sind.<br />

Der Einfachheit soll über den diversen Attributwerten ein Index gelegt werden und<br />

dieser wiederum in einer zweiten Datei abgelegt werden.<br />

!


Kapitel 4. Entwurf des Offlinewerkzeugs 63<br />

!"#<br />

$ % # &<br />

Abbildung 4.9: Aktivitätsdiagramm zur Funktionsweise des Komprimierungstool<br />

4.3 Entwurf und Implementation<br />

In dieser Phase der Softwareentwicklung werden die funktional beschriebenen Aspekte<br />

des konzeptuellen Schemas in eine Form überführt, die die systemebezogenen und qualitativen<br />

Aspekte berücksichtigt. Wie in den Anforderungen angegeben, wird als Programmiersprache<br />

Java verwendet.<br />

4.3.1 Relationenmodell der internen Daten<br />

In diesem Abschnitt wird die Überführung des ER-Schemas 4.6 in ein Datenbankschema<br />

beschrieben. Die Abbildung des ER-Modells auf ein Relationenmodell orientiert sich an<br />

folgenden Grundprinzipien ([HS00]):<br />

• Entity-Typen und Beziehungstypen werden auf Relationenschemata abgebildet.<br />

Die Attribute werden zu Attributen des Relationenschemas, die Schlüssel werden<br />

übernommen.<br />

• Die verschiedenen Kardinalitäten der Beziehungen werden durch Wahl der Schlüssel<br />

bei dem zugehörigen Relationenschema ausgedrückt.<br />

• In einigen Fällen können Relationenschemata von Entity- und Beziehungstypen<br />

miteinander verschmolzen werden.<br />

• Zwischen den verbleibenden Relationenschemata werden diverse Fremdschlüsselbedingungen<br />

eingeführt.


64 4.3. Entwurf und Implementation<br />

Die Angaben in Tabelle 4.1 für die Entscheidung, welches der Primärschlüsselattribute<br />

der Entity-Typen Primärschlüssel der Beziehung bzw. Relation wird, werden in Form<br />

des Standard-ER-Modells angegeben.<br />

ER-Konzept wird abgebildet auf relationales Konzept<br />

Entity-Typ Ei Relationenschema Ri<br />

Attribute von Ei Attribute von Ri<br />

Primärschlüssel Pi Primärschlüssel Pi<br />

Beziehungstyp Relationenschema<br />

Attribute: P1, P2<br />

dessen Attribute weitere Attribute<br />

1:n P2 wird Primärschlüssel der Beziehung<br />

1:1 P1 und P2 werden Schlüssel der Beziehung<br />

m:n P1 ∪ P2 wird Primärschlüssel der Beziehung<br />

Tabelle 4.1: Abbildung eines ER-Schemas auf ein relationales Schema [HS00]<br />

Bezeichnungen:<br />

E1, E2: an Beziehung beteiligte Entity-Typen<br />

P1, P2: deren Primärschlüssel<br />

bei 1:n-Beziehung: E2 ist die n-Seite<br />

Das resultierende Datenbankschema DinterneDaten soll nun anschließend definiert werden.<br />

Die Basis der Transformation ist das Entity-Relationship-Schema, welches in Abbdildung<br />

4.6 dargestellt wird.<br />

DinterneDaten = {RP rimaryData, RQueryInputData, RQueryOutputData, RRelationAttributes}<br />

Die einzelnen Relationenschemata sind folgendermaßen aufgebaut.<br />

RP rimaryData = {id, value}<br />

KP rimaryData = {id}<br />

RQueryInputData = {id, value, raid, pid}<br />

KQueryInputData = {id}


Kapitel 4. Entwurf des Offlinewerkzeugs 65<br />

RQueryOutputData = {id, value, raid, qinid}<br />

KQueryOutputData = {id}<br />

RRelationAttributes = {id, tableAttributeNames}<br />

KRelationAttributes = {id}<br />

RQueryInputData raid(RQueryInputData) → id(RRelationAttributes)<br />

pid(RQueryInputData) → id(RP rimaryData)<br />

RQueryOutputData raid(RQueryOutputData) → id(RRelationAttributes)<br />

qinid(RQueryOutputData) → id(RQueryInputData)<br />

Dieses Datenbankschema wird durch entsprechende DDL Konstrukte der Sprache<br />

SQL über die Schnittstelle JDBC generiert.<br />

4.3.2 Plugin-Struktur<br />

Die Plugin Struktur, die in der Spezifikation konzeptuell beschrieben wurde, wird als Vorlage<br />

für die Implementation genutzt. Die einzelnen Komponenten lassen sich auf Pakete<br />

abbilden. Es existiert somit jeweils ein Paket inputPlugins, outputPlugins, queryModule.<br />

Zusätzlich gibt es ein Basispaket, welches allgemeine Klassen, die eben genannten Pakete<br />

und weitere Pakete beinhaltet. Es wird mit dataPathQuery bezeichnet.<br />

Das Paket dataPathQuery.inputPlugins<br />

Das Paket inputPlugins enthält alle Grundlagen zur Definition neuer Eingabeplugins.<br />

Ein Eingabeplugin muss alle grundlegenden Bestandteile, die die Schnittstelle Input-<br />

PluginInterface definiert, implementieren. Wie in Abbildung 4.10 dargestellt, erbt die<br />

Schnittstelle InputpluginInterface von den beiden Schnittstellen ExchangeableInterface<br />

und RegExpInterface. Dies bedeutet das jedes Eingabeplugin in der Lage sein muss mit<br />

ExchangeData-Objekten und regulären Ausdrücken umzugehen bzw. diese Eigenschaften<br />

vorweisen muss. Zusätzlich erweitert das InputpluginInterface diese Schnittstellen um die<br />

Funktionen der Pluginformationen, die notwendig sind, um die semantischen Informationen<br />

an die Ausgabeplugins zu übermitteln, wie bereits im Abschnitt 4.2.1 erwähnt<br />

wurde.<br />

Die Klasse StandardInputPlugin ist eine abstrakte Klasse, die als Basis für die Entwicklung<br />

neuer Eingabeplugins fungieren soll. Sie implementiert Standardfunktionen,<br />

die in jedem Eingabeplugin benötigt werden. Die neuen Eingabeplugins werden für spezielle<br />

Anwendungfälle definiert. Dabei sind vor allem die graphische Nutzeroberfläche


66 4.3. Entwurf und Implementation<br />

und natürlich die Art der Datenbeschaffung neu zu organisieren. Ein Beispiel für ein<br />

Eingabeplugin wird im Anhang in der Abbildung A.4 gegeben. In diesem Fall gibt es<br />

als Ausgangsbasis ein Ausgabedatei eines externen Tools. Aus dieser Datei werden die<br />

Informationen gewonnen, die als Eingabe für die Pfadanfragen genutzt werden. Es gilt<br />

also einen Parser zu finden oder selbst zu entwickeln. In diesem Beispiel gibt es bereits<br />

einen Parser, der Teil des BioJava Pakets [DHH + 05] ist. Insgesamt werden werden im<br />

Beispielplugin vier Teilaktivitäten gefordert. Zunächst die Eingabedatei in der die Informationen<br />

enthalten sind, die für die Anfrage als Eingabe benötigt werden. Dannach<br />

muss der Pfad, der zwischen Start und Zielknoten durchlaufen werden soll, beschrieben<br />

werden. Der dritte Punkt ist die Festlegung der Zieldaten. Abschließend muss ein Ausgabeplugin<br />

ausgewählt werden, welches die gefundenen Zusammenhänge präsentieren<br />

kann. Optional kann im Menü Options (Abb. A.5) die Datei für die Abbildung der externen<br />

Bezeichner auf die intern verwendeten Bezeichner der Knoten ausgewählt werden.<br />

Wird dies nicht getan, wird eine Standardabbildung verwendet. Wurden alle Einstellungen<br />

vorgenommen, wird der Anfrageprozess durch Betätigung des Schalters Start Query<br />

gestartet.<br />

Die Abbildung 4.11 zeigt die Klasse RegularExpressionComposerDialog. Es handelt<br />

sich um ein Dialogfenster, welches aus den Eingabeplugins aufgerufen werden<br />

kann, um reguläre Ausdrücke zu definieren. Dieser Dialog wird in der Abbildung<br />

A.6 dargestellt. Der reguläre Ausdruck in dieser Abbildung beschreibt alle<br />

Pfade vom Start zum Ziel, in denen kein Knoten mit der Beschreibung AAR-<br />

HUS_GHENT_2DPAGE_LINK.SECONDARY_ID und einem beliebigen Wert durchlaufen<br />

wird. Durch das Voran- und Nachstellen des Knotens [ANY] im Zusammenhang<br />

mit dem ⋆-Quantor, wird ein beliebig langer Pfad beschrieben und gleichzeit der Ausnahmefall<br />

an eine beliebige Position im Pfad gesetzt. Es ist somit eine beliebige, eventuell<br />

leere Menge von Knoten vor und nach dem konkreten Ausschlußkriterium möglich.<br />

Das Paket dataPathQuery.outputPlugin<br />

Dieser Abschnitt wird die Bestandteile des Pakets outputPlugin beschreiben. Im aktuellen<br />

Stadium des Tool wurde noch kein Plugin zur Ausgabe des Anfrageergebnisses entworfen.<br />

Aus diesem Grund beschränkt sich das Paket auf die Definition eines Interfaces,<br />

welches zwei Sachen sicherstellen soll. Einerseits muss jedes Ausgabeplugin die Funktion<br />

haben seine Semantik bezüglich der von ihm präsentierten Daten. Zusäztlich muss<br />

es mit den internen Daten den Exchange-Daten umgehen können. Aus diesem Grund<br />

besteht eine Spezialisierungsbeziehung zur Schnittstelle ExchangeableDateInterface. In<br />

Abbildung 4.12 wird der Zusammenhang in Form eines Klassendiagramms dargestellt.<br />

Das Paket dataPathQuery.queryModule<br />

Das Paket queryModule beinhaltet die Klassen, die die Anfrageverarbeitung realisieren.<br />

Es umfasst mehrere Klassen, die der Übersicht wegen auf vier Klassendiagramme verteilt<br />

werden. Das erste Diagramm zeigt zum einen die Schnittstelle queryModuleInterface, die


Kapitel 4. Entwurf des Offlinewerkzeugs 67<br />

dataPathQuery.queryModule.RegularExpression<br />

PluginInfo<br />

description: String<br />

inputData: Vector<br />

outputData: Vector<br />

PluginInfo()<br />

«interface»<br />

RegExpInterface<br />

regularExpression<br />

getRegularExpression()<br />

«import»<br />

«instantiate»<br />

«import»<br />

«import»<br />

«interface»<br />

InputPluginInterface<br />

getPluginInfo()<br />

StandardInputPlugin<br />

primaryData: String<br />

targetData: String<br />

StandardInputPlugin()<br />

StandardInputPlugin()<br />

StandardInputPlugin()<br />

StandardInputPlugin()<br />

StandardInputPlugin()<br />

StandardInputPlugin()<br />

defineLayout()<br />

getExchangeData()<br />

getNextPublicDBData()<br />

getNextPublicDBName()<br />

getPluginInfo()<br />

getnextDBpublicID()<br />

setExchangeData()<br />

setGenerellParameter()<br />

setPublicDBData()<br />

setQueryInputData()<br />

dataPathQuery.ExchangeData<br />

«interface»<br />

ExchangeableDataInterface<br />

exchangeData<br />

getExchangeData()<br />

«import»<br />

Abbildung 4.10: Klassendiagramm zum Packet datapathquery.inputPlugin


68 4.3. Entwurf und Implementation<br />

RegularExpressionComposerDialog<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

RegularExpressionComposerDialog()<br />

actionPerformed()<br />

TokenPanel()<br />

keyPressed()<br />

keyReleased()<br />

keyTyped()<br />

mouseClicked()<br />

mouseEntered()<br />

mouseExited()<br />

mousePressed()<br />

mouseReleased()<br />

valueChanged()<br />

TokenPanel<br />

TokenPanelButton<br />

parentPanel: TokenPanel<br />

TokenPanelButton()<br />

TokenPanelButton()<br />

TokenPanelButton()<br />

TokenPanelButton()<br />

TokenPanelButton()<br />

«import»<br />

«instantiate»<br />

dataPathQuery.queryModule.RegularExpression<br />

destinationNode: String<br />

expression: String<br />

sourceNode: String<br />

RegularExpression()<br />

RegularExpression()<br />

«import»<br />

«interface»<br />

RegExpInterface<br />

regularExpression<br />

getRegularExpression()<br />

Abbildung 4.11: Klassendiagramm zum Packet datapathquery.inputPlugin - Dialog zur<br />

Definition der regulären Ausdrücke


Kapitel 4. Entwurf des Offlinewerkzeugs 69<br />

«interface»<br />

dataPathQuery.inputPlugIns.ExchangeableDataInterface<br />

getExchangeData()<br />

setExchangeData()<br />

«interface»<br />

OutputPluginInterface<br />

getPluginInfo()<br />

«import»<br />

dataPathQuery.inputPlugIns.PluginInfo<br />

description: String<br />

inputData: Vector<br />

outputData: Vector<br />

PluginInfo()<br />

getDescription()<br />

getInputData()<br />

getOutputData()<br />

setDescription()<br />

setInputData()<br />

setOutputData()<br />

Abbildung 4.12: Klassendiagramm zum Packet datapathquery.outputPlugin<br />

zum einem von der Schnittstelle ExchangeableDataInterface abgeleitet wird und eine<br />

Methode executeQuery definiert. Diese Methode soll den konkreten Anfragealgorithmus<br />

umsetzen. In unserem Fall wäre dies das im vorherigen Kapitel ermittelte Konzept. Die<br />

Standard Implementation, die nun das ermittelte Konzept realisieren soll, soll in der<br />

Klasse StandardQueryModule protoypisch realisert werden.<br />

Die Abbildung 4.14 stellt die Zusammenhänge der Klasse Graphfilter dar. Diese Klasse<br />

ist die Implementation der ersten Phase des Konzepts. Hier wird aufgrund der Startund<br />

Zielinformation eine Filterung der Graphen durchgeführt. Um diese Aufgabe zu bewältigen,<br />

werden zwei Dinge benötigt. Es muss möglich sein mit den internen Daten zu<br />

kommunizieren. Dazu wird ein Exchange-Objekt beim Erzeugen des Graphfilter-Objekts<br />

an dieses übergeben. Da bei der Definition des Regulären Ausdrucks im jeweiligen Eingabeplugin<br />

die konkreten Bezeichner für die RelationAttribut-Wertepaare angegeben werden,<br />

müssen zuvor diese Werte in die Entsprechende Indizes übersetzt werden. Daher<br />

wird ein RegularExpressionVocabulary-Objekt initiiert.<br />

Nach dem die Graphfilter-Phase durchlaufen wurde, existiert nun eine Menge von<br />

potentiell möglichen Treffergraphen. Eben solche, die den erweiterten Anforderungen gerecht<br />

werden. Diese Anforderungen werden durch das Einschränken der Pfade mittels des<br />

Patterns bestimmt. Das Patter beschreibt einen regulären Ausdruck, der festlegt welche<br />

Pfade akzeptiert werden und welche aus dem Raster fallen. Die Analyse basierend auf<br />

dem Pattern wird in der Klasse RegExpAnalyser durchgeführt. Die Eingangsmenge der


70 4.3. Entwurf und Implementation<br />

«interface»<br />

QueryModuleInterface<br />

executeQuery()<br />

StandardQueryModule<br />

StandardQueryModule()<br />

executeQuery()<br />

getExchangeData()<br />

setExchangeData()<br />

«import»<br />

«interface»<br />

dataPathQuery.inputPlugIns.ExchangeableDataInterface<br />

getExchangeData()<br />

setExchangeData()<br />

«interface»<br />

dataPathQuery.inputPlugIns.InputPluginInterface<br />

getPluginInfo()<br />

Abbildung 4.13: Klassendiagramm zum Packet datapathquery.queryModule (Teil 1 - StandardQueryModule)<br />

Graphen für die Klasse sind genau die Graphen, welche als Resultat aus der Graphfilter-<br />

Phase hervorgehen. Wie das Konzept besagt, wird die Analyse unter Verwendung der<br />

hierarischen Technologie XML durchgeführt. Die Abbildung 4.15 stellt die an der Analyse<br />

beteiligten Klassen dar. Die Klasse RegExpAnalyser organisiert die Analyse und<br />

initiiert ein Objekt der Klasse GraphDataConverter in der nun konkret die einzelnen<br />

notwendigen Funktionen implementiert werden. Die Schnittstelle GraphList ist Teil der<br />

Menge von Schnittstellen und Klassen, die aus dem JAXB Binding Prozess hervorgegangen<br />

sind. Diese Menge wird zum Paket GraphExportParser gebündelt. Im Abschnitt<br />

4.3.3 wird mehr zu diesem Paket gesagt.<br />

Die letzte Abbildung 4.16 zum Paket queryModule zeigt die drei Klassen Regular-<br />

Expression, RegularExpressionVocabularyLinker und RegularExpressionVocabulary. Die<br />

Klasse RegularExpression speichert den im Eingabeplugin formulierten regulären Ausdruck.<br />

Wobei der Start und Zielknoten gesondert behandelt wird, da ihnen zunächst in<br />

der Graphfilter-Phase eine gesonderte Rolle zukommt. Erst in der Analyse-Phase wird<br />

dann die Einschränkung der Pfade mit einbezogen. Die Klasse RegularExpressionVocabulary<br />

dient zur effizienteren Verarbeitung der RelationAttribut-Kombinationen. Es<br />

ist eine Hashtabelle, die die Indezes aufschlüsseln kann. Der Schlüssel der Hashtabelle<br />

ist direkt der Wert des Index und mit get(Index) wird die entsprechende Kombination<br />

zurückgeliefert. Die letzte Klasse RegularExpressionVocabularyLinker widmet sich dem<br />

Problem, das es zwischen den internen Bezeichnern und den Bezeichnern , die auf der<br />

Seite der einzelnen Datenbanken vorliegen, Abweichungen gibt. Zum Beispiel ist bei einer<br />

Datenbank mit emb und dem nachfolgenden Identifikator die Accession Nummer eines<br />

Datenbankeintrags aus der EMBL Datenbank des EBI gemeint. Bei den internen Daten<br />

wird dies jedoch mit dem Bezeichner embl_link.accession in Verbindung gebracht. Somit<br />

muss eine Abbildung zwischen emb und embl_link.accession erfolgen. Diese Abbildung


Kapitel 4. Entwurf des Offlinewerkzeugs 71<br />

dataPathQuery.ExchangeData<br />

scheme: DataScheme<br />

ExchangeData()<br />

ExchangeData()<br />

closeData()<br />

getPrimaryData()<br />

getPrimaryDataID()<br />

getQueryInputDataID()<br />

getQueryOutputDataID()<br />

getRelationAttributesID()<br />

getScheme()<br />

setPrimaryData()<br />

setPrimaryData()<br />

setQueryInputData()<br />

setQueryOutputData()<br />

setRelationAttributes()<br />

setScheme()<br />

GraphFilter<br />

GraphFilter()<br />

getPotentialGraphs()<br />

«import» «instantiate»<br />

RegularExpressionVocabulary<br />

RegularExpressionVocabulary()<br />

RegularExpressionVocabulary()<br />

setVocabulary()<br />

setVocabulary()<br />

Abbildung 4.14: Klassendiagramm zum Packet datapathquery.queryModule (Teil 2 - Graphfilter)


72 4.3. Entwurf und Implementation<br />

«interface»<br />

dataPathQuery.graphExportParser.graphContentModel.GraphList<br />

RegExAnalyser<br />

checkGraphsForRegularExpression()<br />

setRegularExpression()<br />

dataPathQuery.graphExportParser.GraphDataConverter<br />

GraphDataConverter()<br />

getGraphList()<br />

getGraphListandWriteXMLFile()<br />

getPaths()<br />

«import»<br />

«instantiate»<br />

«import»<br />

Abbildung 4.15: Klassendiagramm zum Packet datapathquery.queryModule (Teil 3 - Reg-<br />

ExpAnalyser)


Kapitel 4. Entwurf des Offlinewerkzeugs 73<br />

muss vom Nutzer angegeben werden. Die Klasse RegularExpressionVocabularyLinker<br />

nutzt dafür eine Datei, die je Zeile eine Abbildung beschreibt (siehe Listing 4.1). Es ist<br />

möglich für verschiedene Quellen verscheidene Abbildungen zu definieren. Es ist dann<br />

nur nötig die Datei in der korrekten Syntax zu definieren und dann der Klasse Regular-<br />

ExpressionVocabularyLinker zu übergeben.<br />

emb=embl_link . secondary_id<br />

p i r=p i r _ l i n k . primary_id<br />

Listing 4.1: Beispiel einer Link-Datei für die Klasse RegularExpressionVocabularyLinker<br />

RegularExpressionVocabulary<br />

RegularExpressionVocabulary()<br />

RegularExpressionVocabulary()<br />

setVocabulary()<br />

setVocabulary()<br />

RegularExpressionVocabularyLinker<br />

RegularExpressionVocabularyLinker()<br />

RegularExpressionVocabularyLinker()<br />

RegularExpressionVocabularyLinker()<br />

RegularExpression<br />

destinationNode: String<br />

expression: String<br />

sourceNode: String<br />

RegularExpression()<br />

RegularExpression()<br />

getDestinationNode()<br />

getExpression()<br />

getSourceNode()<br />

setDestinationNode()<br />

setExpression()<br />

setSourceNode()<br />

Abbildung 4.16: Klassendiagramm zum Packet datapathquery.queryModule (Teil 4)<br />

4.3.3 Das Paket GraphExportParser<br />

Das Paket dataPathQuery.GraphExportParser ist das Resultat des JAXB Binding Prozesses.<br />

Die Anweisung, die für die Ausführung dieses Vorgangs verwendet wird, wird im<br />

Listing 4.2 dargestellt. Das Ergebnis dieses Befehls ist eine Paketstruktur, die alle Elemente<br />

der XML-Schema Datei (siehe Listing B.1 und B.2) als Java Bean enthält. Diese<br />

Pakete werden in Abbildung 4.17 dargestellt.<br />

x j c −d t a r g e t D i r e c t o r y −p dataPathQuery . graphExportParser graphList .<br />

»xsd


74 4.3. Entwurf und Implementation<br />

Listing 4.2: Anweisung zur Generierung des Javaklassen entsprechend der Schema-Datei<br />

durch JAXB<br />

Das Paket dataPathQuery.graphExportParser.graphContentModel enthält die<br />

Schnittstellen GraphList, GraphListType, GraphType, Node und NodeType. Weiterhin<br />

enthält es die Klasse ObjectFactory, die das Erstellen von Objekte entsprechend der<br />

Schnittstellen ermöglicht. Durch jeweilige Methoden der Form createSchnittstellenname()<br />

werden die Objekte erzeugt.<br />

Neben diesen Klassen und Schnittstellen wurde eine weitere Klasse definiert. Sie trägt<br />

den Namen GraphDataConverter. In Abbdildung 4.18 werden ihre wichtigsten Abhängigkeiten<br />

verdeutlicht. Die Klasse wird im Anfragemodul verwendet. Mit ihr wird die<br />

Transformation der Daten aus der Relation in XML-Dokumentenstruktur vollzogen. Die<br />

Methode getGraphList() liefert ein GraphList-Objekt zurück, welches das Wurzelelement<br />

der konkreten Dokumenteninstanz darstellt. Bei der Methode getGraphListAndWriteXmlFile()<br />

wird neben der Rückgabe des GraphList-Objekts zusätzlich dessen Inhalt in ein<br />

XML-Dokument geschrieben. Dazu wird der Marshalling-Prozess des Java XML Binding<br />

verwendet. Dies soll zur Erläuterung des GraphExportParser-Pakets genügen. Im nächsten<br />

Abschnitt wird auf die Komponenten eingegangen, die denen die Funktionen des<br />

Imports der Informationen in die Datenbasis des Tools verwirklicht werden.<br />

Abbildung 4.17: Paketübersicht der Subpakete des Pakets datapathquery.graphExportParser<br />

4.3.4 Import der RelationAttribut-Wertepaare und Graphinformationen<br />

Dieser Abschnitt beschäfftigt sich mit den Bestandteilen des Pakets dataPathQuery.importGenerator.<br />

Im wesentlichen umfassen die Klassen die Funktion, die Graphinformationen<br />

zu komprimieren und dannach wieder in das Tool zu integrieren. Die<br />

Kompression ist unabhängig vom Nutzer des Tools. Die Klasse GraphCompression liest<br />

die Daten aus der Relation aus. Die Relation entspricht der Relation RGraph, wie sie im<br />

Abschnitt 3.3.1 definiert wurde. Die prinzipielle Funktionweise der Klasse GraphCompression<br />

wurde im Abschnitt 4.2.4 erläutert. Es ist eine Komponente, die als Kommandozeilentool<br />

ausgelegt ist und serverseitig aufgerufen werden muss. Es generiert eine Datei,<br />

die als Bytestream geschrieben wird. Sie enthält die Indizes und den Wert des Attributs<br />

pathid ∈ RGraph von jedem Tupel. Dadurch werden einerseits Whitespace-Chararcter


Kapitel 4. Entwurf des Offlinewerkzeugs 75<br />

org.apache.commons.jxpath.JXPathContext<br />

GraphDataConverter<br />

GraphDataConverter()<br />

getGraphList()<br />

getGraphListandWriteXMLFile()<br />

getPaths()<br />

graphContentModel.ObjectFactory<br />

ObjectFactory()<br />

createGraphList()<br />

createGraphListType()<br />

createGraphType()<br />

createNode()<br />

createNodeType()<br />

getProperty()<br />

newInstance()<br />

setProperty()<br />

«access»<br />

«instantiate»<br />

«import»<br />

«interface»<br />

javax.xml.bind.Marshaller<br />

Abbildung 4.18: Klassendiagramm zum Packet datapathquery.graphExportParser


76 4.3. Entwurf und Implementation<br />

RelationAttributeValueException<br />

RelationAttributeValueException()<br />

RelationAttributeValueException()<br />

CompressedGraphDataImporter<br />

CompressedGraphDataImporter()<br />

CompressedGraphDataImporter()<br />

readCompressedData()<br />

RelationAttributeDataImporter<br />

RelationAttributeDataImporter()<br />

«access»<br />

CompressionProperties<br />

«access» «access»<br />

GraphCompression<br />

GraphCompression()<br />

GraphCompression()<br />

GraphCompression()<br />

Abbildung 4.19: Klassendiagramm zum Packet importGenerator<br />

eingespart und ebenfalls der Zeilenvorschub. Es ist möglich direkt byteweise einzulesen,<br />

weil genau festgelegt wurde, welches Byte welche Informationen enthält. Die ersten 4<br />

Bytes entsprechen dem Integer-Wert des Attributs pathid und die nächsten vier Bytes<br />

sind zwei Short-Werte, die dem Index der RelationAttribut-Wertepaaren entsprechen.<br />

Die zweite Datei wird als Characterstream im ISO-8859-1 Encoding geschrieben.<br />

Sie enthält die Tiefeninformation sowie die Werte des Vater- und Kindknotens. Dabei<br />

werden die String-Werte mit Hochkommas begrenzt. Zusätzlich dient das Komma<br />

als Whitespace-Character für die einzelnen Felder. Mittels eines StreamTokenizers, eine<br />

Standardklasse aus dem Standardpaket java.io, können diese Felder ausgelesen werden.<br />

Die dritte Datei ist die Indexdatei, die die Indizes der RelationAttribut-Wertepaare enthält.<br />

Diese muss bereits vor der Ausführung der Komponente GraphCompression vorliegen,<br />

da sie für die Aufschlüsselung der Indizes im Komprimierungsprozess benötigt wird.<br />

Sie aber auch gleichzeitig eine Ausgabedatei, da sie zur rückwärtigen Aufschlüsselung<br />

der Indizes zu den RelationAttribut-Wertepaare benötigt wird.<br />

Die Klasse CompressionProperties legt verschiedene Werte fest die von mehreren<br />

Komponenten genutzt werden. Sie dient zur Vereinfachung und Zentralisierung der Einstellungen.<br />

Somit wird sichergestellt das wichtige Einstellungen von allen beteiligten<br />

Komponenten identisch sind.<br />

Die beiden Importer für die RelationAttribut-Wertepaare und für die komprimierten<br />

Graphdaten, werden auf der Seite des Nutzers ausgeführt. Sie sind als als Bestandteil des<br />

OfflineTool zu verstehen. Deswegen werden diese Komponenten in die Nutzeroberfläche<br />

des Tools eingebunden. Wie diese Komponenten eingebunden werden, wird im Screenshot


Kapitel 4. Entwurf des Offlinewerkzeugs 77<br />

A.1 ersichtlich. Die entsprechenden Einträge im Menü Options starten jeweils eine Folge<br />

von Dateidialogfenster, bei denen die notwendigen Dateien abgefragt werden.<br />

An dieser Stelle ist das Ende diese Kapitels erreicht. Im nächsten Kapitel wird nun<br />

eine Zusammenfassung der und ein Ausblick für die Arbeit gegeben.


78 4.3. Entwurf und Implementation


Kapitel 5. Zusammenfassung und Ausblick 79<br />

Kapitel 5<br />

Zusammenfassung und Ausblick<br />

Die vorliegende Arbeit beschäfftigt sich mit der Idee flexible Anfrage auf einer Graphstruktur<br />

zu formulieren. Zu Beginn der Arbeit wurde eine Motivation geliefert, die<br />

vermitteln sollte, inwiefern dieses Ziel auf praktischer Ebene erwünscht ist. Außerdem<br />

sollte sie zeigen, welche Absicht bezüglich des informationstechnischen Gedankens als<br />

Grundlage für weitere Analyse im Umfeld des Datamining auf dieser Grundlage arbeiten<br />

werden. Weiterhin zeigte sie, welche Gründe zur Verwendung von Graphstrukturen bei<br />

der Analyse Daten von Vorteil sind. Zudem wurde die Zielstellung der Arbeit in knappen<br />

Worten zusammengefasst. Am Ende der Einleitung wurden einige Technische Mittel<br />

erläutert die in späteren Kapiteln ihre Anwendung finden.<br />

Im Anschluß an die Einleitung wurden die Grundlagen formuliert, die als Basis für<br />

die analytische Arbeit zur Ermittlung des Anfragekonzepts dienen. Zunächste wurden<br />

die biologischen Grundlagen aufgeführt. Dies umfasste einerseits die Erläuterung einiger<br />

Begriffe, die für das Verständnis der biologischen Daten von Bedeutung sind. Desweiteren<br />

wurden die Datenbasis, auf der die Entwicklung des resultierunden Werkzeugs aufbaut,<br />

ausführlicher betrachtet, um eine Vorstellung von den enthaltenen Daten zu entwickeln.<br />

Dem biologischen Abschnitt folgt die Darstellung von Datenbankmodellen. In diesem Abschnitt<br />

werden die grundlegenden Ideen zum relationalen Datenbankkonzept und zum<br />

objektorientierten Datenbankkonzept dargestellt. Bei den relationalen Datenbankmangementsystemen<br />

werden die Daten gemäß des Relationenmodells abgelegt. Relationen<br />

sind Tabellen mit einem Tabellenkopf und atomaren Werten in den einzelnen Spalten.<br />

Jede Zeile dieser Tabelle ist ein Datensatz, was im Relationenmodell als Tupel bezeichnet<br />

wird. Im Objektdatenbankmanagementsystemen dient der objektorientierte Ansatz<br />

bzw. das Objektparadigma als Gundlage. Im gegensatz zu den RDBMS werden hier Objekte<br />

gespeichert. Objekte definieren sich über ihrer Struktur und ihrem Verhalten und<br />

werden durch Typkonstruktoren gebildet. Aus strukureller Sicht sind Objekte mächtiger<br />

als Relationen. Alternativ formuliert sind Relationen Objekt eines speziellen Typs, der<br />

durch den Set und Tupelkonstruktor erzeugt wird.<br />

Nachdem die Datenbankmodelle beschrieben wurden, wurde der dokumentenbasierende<br />

Ansatz in seinen Grundlagen betrachtet. Die Technologie auf dem dieser Ansatz


80<br />

basiert ist die Sprache XML. Es wurden ihre Eigenschaften der Selbstbeschreibung, der<br />

Trennung von Präsentation und Inhalt und Wohlgeformtheit und Gültigkeit beschrieben.<br />

Weiterhin wurde der XML Schema Dokumenttypdefinitionsansatz erläutert, der<br />

die Struktur eines XML Dokuments festlegt. Am Ende des Grundlagenkapitels wurden<br />

grundlegende Begriffe der Graphentheorie definiert, um noch einmal die Begriffe des<br />

Graphentheorie ins Gedächtnis zurückzurufen.<br />

Das nächste Kapitel beschäfftigt sich mit der Analyse der aktuellen Anfragetechnologien<br />

in den Bereichen Relationale Datenbanksysteme, Objektdatenbanken und XML-<br />

Anfragesprachen. Im Bereich relationale Datenbanken ist die Sprache SQL als Standard<br />

anzusehen. Sie basiert auf theoretisch sehr ausgereiften und gut durchdrungenen Konzepten,<br />

wie der Relationenalgebra und dem Tupelkalkül. Aus diesem Grund existiert auch<br />

eine genaue formale Beschreibung der möglichen Operationen. Bei den Anfragesprachen<br />

in Objektdatenbanken gibt es durch die ODMG einen Versuch einen ähnlichen Standard<br />

für Objektdatenbanken zu finden und zu definieren. Das Ergebnis dieser Bemühungen ist<br />

die Sprache OQL. Sie ist konzipiert als eine Obermenge des SQL-92 Standards. Jedoch<br />

umfaßt sie keine Manipulationskonstrukte, wie es in Bezug auf SQL durch die sogenannte<br />

DML Konstrukte der Fall ist. Stattdessen wird die Manipulation der Objekte auf die<br />

Anbindung von Programmiersprachen und der dortigen Definition von Methoden für einzelne<br />

Objekte verlagert. Im Gegensatz zu SQL gibt es für OQL keine formale Algebra als<br />

Grundlage. Ihre Bedeutung wird durch Beschreibungen und Beispiele erläutert. Demzufolge<br />

wurde in den entsprechenden Abschnitte keine formalen Beschreibung der Operationen<br />

der Sprache OQL gegeben. Als Resultat der Analyse wurde SQL in Bezug auf die<br />

Problematik als geringfügig günstig befunden, da sie von Natur aus nicht auf hierischen<br />

oder pfadähnlichen Strukturen arbeitet, sondern auf einer Mengensemantik basiert. Das<br />

Erzeugen von längeren und komplexeren hierischen Zusammenhängen in SQL ist nur<br />

mit erheblichem Aufwand bzw. nur theoretisch möglich. Lediglich das RDBMS Oracle<br />

bietet durch die CONNECT BY-Klausel eine Möglichkeit hierarische Informationen auszulesen.<br />

Jedoch ist der relationale Ansatz für eine einfache Start-Ziel-Suche sehr gut<br />

geeignet, durch Ausführen eines einfache Verbunds. Somit können in diesem einfachen<br />

Fall die positiven Eigenschaften des relationalen Konzepts genutzt werden. Denn durch<br />

den deskriptiven Charakter der Sprache und durch das einfache Modell der Relationen<br />

können die Anfragen in SQL sehr gut optimiert werden.<br />

OQL unterliegt im wesentlichen einer ähnlichen Einschränkung wie SQL, denn sie<br />

arbeitet auf einer Menge von Objekten. Jedoch ist möglich durch die Definition von<br />

komplexen Strukturen und Methoden in den Objekten selbst, die Graphinformationen in<br />

einer günstigen Form abzulegen. Zusätzlich werden dann Methoden formuliert, die dann<br />

das eigentliche Prüfen der Pfade im Graphen realisieren. Durch die Möglichkeit in OQL<br />

diese Methoden aufzurufen, können dann Anfrage gestellt werden, die dann auch entsprechende,<br />

komplexere Pfade zurückgeliefern. Ein entscheidenes Problem, mit dem der<br />

Standardisierungversuch der ODMG zu kämpfen hat, ist das im Bereich der integrierten,<br />

frei verfügbaren DBMS im Moment nahezu keine Anwendung findet. Stattdessen werden<br />

eigene Ansäzte in diesen Datenbanksystemen verwendet.


Kapitel 5. Zusammenfassung und Ausblick 81<br />

Im Anschluss an die Anfragetechnologien für Datenbankmodelle wurden die Anfragesprachen<br />

bezüglich der Sprache XML analysiert. In diesem Gebiet wurde die Anfragesprache<br />

XPath geeignete Anfragesprache herausgearbeitet. Ihre Eigentschaft, ausgehend<br />

von einem Kontextknoten, Knotenmengen zu selektieren, ermöglicht das auslesen komplexer,<br />

und beliebig langer Pfade. Was die Anfragesprache in Bezug auf die Problematik<br />

als geeignet angesehen werden kann. Jedoch hat die Technologie ein Problem. Bevor<br />

XPath verwendet werden kann, müssen die Graphinformationen in ein XML-Dokument<br />

überführt werden. Diese Transformation hat eine entscheidene negativate Auswirkung.<br />

Das ohnehin schon beachtliche Datenvolumen wird durch das Hinzufügen von Markierungen<br />

erheblich erhöht. Da die Graphdaten lokal auf dem jeweiligen Rechner zu speichern<br />

sind, muss es das Bestreben sein, das Datenvolumen so gering wie möglich zu halten.<br />

Deswegen bietet sich die Speicherung der Daten in wohlgeformten XML-Dokumenten<br />

nicht an.<br />

Die resultierende Entscheidung war eine Lösung zu verwenden, die sowohl aktuell<br />

umsetzbar ist und die Vorteile der einzelnen Konzepte nutzt. Deswegen wird zunächst<br />

eine Filterung der Graphdaten in einer relationalen, integrierten Datenbanklösung<br />

durchgeführt. Die daraus resultierende Menge von Graphen wird dann in eine<br />

XML-Dokumentenstruktur überführt, auf deren Basis durch XPath die Pfade ermittelt<br />

werden. Diese können entweder direkt in XPath geprüft werden oder zunächst in<br />

Stringform zurückgegeben und daraufhin ausgewertet werden. In beiden Fällen wird die<br />

Auswertung durch reguläre Ausdrücke realisiert. Diese definieren ein Muster, welches<br />

die zu akzeptierenden Pfade beschreibt. Insgesamt gesehen steckt im objektorientierten<br />

Ansatz ein gewisses Potential, welches jedoch in Abhängigkeit von der Unterstützung<br />

durch entsprechnde Datenbanksysteme ist.<br />

Das letzte Kapitel beschäfftigt sich mit dem Entwurf des Softwaretools. Dazu wird<br />

der Softwareentwicklungsprozess durch den Softwarelebenzyklus beschrieben. Zunächst<br />

wurden die Problemdefinition und die Anforderungen analysiert. Nachdem die Anforderungen<br />

definiert wurden, wurde das Softwaretool in der Spezifikation konzeptuell beschrieben.<br />

Als grundlegendes Konzept für die Struktur des Softwaretool wird ein Pluginkonzept<br />

verwendet. Prinzipiell wird die Software aus Eingabe, Ausgabeplugins und<br />

Anfragemodulen bestehen. Weiterhin wurde die interne Datenstruktur konzeptuell in<br />

einem ER-Schema definiert. Außerdem wurden Anwendungsfälle für das Tool ausgearbeitet,<br />

die es später umzusetzen galt. Neben der eigentlich Funktion des zu entwickelnden<br />

Softwaretool kristalisierten sich noch zwei Aspekte. Zum einen war es für das Herunterladen<br />

der Daten unbedingt erforderlich die Datenmengen zu reduzieren. Dazu wurden das<br />

Datenvolumen der Graphinformation durch Eliminierung von Redundanzen und durch<br />

byteweise speichern reduziert. Der zweite Aspekt ist Generierung der Werte für die Knotenbeschreibungen,<br />

die sich aus Relation- und Attributnamen zusammensetzen. Diese<br />

werden an zwei Positionen verwendet. Einmal bei der internen Datenstruktur und einmal<br />

bei der XML-Schema Datei für den XML Binding Prozess.<br />

Nachdem dieses konzeptuelle Modell erstellt wurden, mussten nun diese Ansätze in<br />

konkrete Formen gebracht werden. Es wurden entsprechen der Pluginstruktur Pakete


82<br />

gebildet. Diese enthalten Klassen, die durch Klassendiagramme visualisiert wurden und<br />

die zuvor ermittelten Funktionen und Konzepte implementieren. Gegenwärtig existiert<br />

noch keine vollständig abgeschlossene Version des Softwaretools. Einzelne Bestandteile<br />

wurden erfolgreich implementiert. Es ist bereits gelungen auf einer Testmenge von<br />

Daten Anfragen zu formulieren, die zutreffende Pfade zurücklieferten. Weiterhin wurde<br />

die Möglichkeit, reguläre Ausdrücke in einem Dialog zu definieren, erfolgreich implementiert.<br />

Ausserdem wurden ein Testplugin entworfen, welches diesen Dialog aufrufen<br />

kann und bis auf die Festlegung des Ausgabeplugins alle notwendigen Informationen ermittelt.<br />

Auch das Registrieren von Plugins wurde grundlegend im Prototypen erfolgreich<br />

realisiert. Es gilt jedoch noch Unterscheidungen bezüglich der Eingabe und Ausgabeplugins<br />

bei der Registrierung zu treffen. Die interne Datenstruktur ist erfolgreich in einem<br />

Datenbankschema über die JDBC-Schnittstelle integriert. Vorbereitet wurde auch die<br />

Implementation der Ausgabeplugins und die Übergabe der semantischen Informationen<br />

zwischen diesen und den Eingabeplugins. Was fehlt, ist die Zusammensetzung der einzelnen<br />

Bestandteile und das Einbinden der Zusatzinformationen bei der Darstellung der<br />

Anfrageergebnisse. Mit dem Abschnitt Entwurf und Implementation ist das Ende dieser<br />

Arbeit erreicht.


Anhang A. Screenshots vom OfflineTool BioDataPathQuery 83<br />

Anhang A<br />

Screenshots vom OfflineTool<br />

BioDataPathQuery<br />

A.1 Allgemeine Bestandteile<br />

Abbildung A.1: Einträge des Menüs Options


84 A.1. Allgemeine Bestandteile<br />

Abbildung A.2: Preference Dialogfenster


Anhang A. Screenshots vom OfflineTool BioDataPathQuery 85<br />

Abbildung A.3: Menü Plugin, dessen Einträge die regristrierten Plugins sind


86 A.2. Beispiel eines Eingabeplugins<br />

A.2 Beispiel eines Eingabeplugins<br />

Abbildung A.4: Das Eingabeplugin BlastXInputPlugin


Anhang A. Screenshots vom OfflineTool BioDataPathQuery 87<br />

Abbildung A.5: Das Eingabeplugin BlastXInputPlugin - Auswahl der Zuordnugnsdatei<br />

der Token der regulären Ausdrücke


88 A.2. Beispiel eines Eingabeplugins<br />

Abbildung A.6: Der Dialog zum Erstellen eines regulären Ausdrucks


Anhang B. XML-Schema 89<br />

Anhang B<br />

XML-Schema<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


90<br />

maxOccurs="unbounded" /><br />

<br />

<br />

<br />

<br />

<br />

Listing B.1: XML-Schema Datei der Graphstruktur<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


Anhang B. XML-Schema 91<br />

<br />

<br />

<br />

<br />

<br />

<br />

. . .<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

. . .<br />

<br />

<br />

<br />

<br />


92<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

. . .<br />

<br />

<br />

<br />

Listing B.2: Auszug des XML-Schema Teils für die Knotenbeschreibungen


LITERATURVERZEICHNIS 93<br />

Literaturverzeichnis<br />

[ABK + 00] Anderson, R.; Birbeck, M.; Kay, M.; Livingstone, S.; Loesgen, B.; Martin,<br />

D.; Mohr, S.; Ozu, N.; aPeat, B.; Pinnock, J.; STark, P.; Williams, K.:<br />

Professional XML. Wrox Press Ltd, 2000.<br />

[BPSM + 04] Bray, T.; Paoli, J.; Sperberg-McQueen, C. M.; Maler, E.; Yergeau, F.: Extensible<br />

Markup Language (XML) 1.0 (Third Edition) - W3C Recommendation.<br />

online: http://www.w3.org/TR/2004/REC-xml-20040204/, February<br />

2004.<br />

[CBB + 97] Cattell, R. G. G.; Barry, D. K.; Bartels, D.; Berler, M.; Eastman, J.; Gamerman,<br />

S.; Jordan, D.; Springer, A.; Strickland, H.; Wade, D.: The Object<br />

Database Standard: ODMG 2.0. Morgan Kaufmann Publishers, Inc., 1997.<br />

[CBB + 00] Cattell, R. G. G.; Barry, D. K.; Berler, M.; Eastman, J.; Jordan, D.; Russel,<br />

C.; Schadow, O.; Stanienda, T.; Velez, F.: The Object Database Standard:<br />

ODMG 3.0. Morgan Kaufmann Publishers, Inc., 2000.<br />

[CD99] Clark, J.; DeRose, S.: XML Path Language (XPath) Version 1.0 - W3C Recommendation.<br />

online Spezifikation: http://www.w3.org/TR/xpath, November<br />

1999.<br />

[CFM + ] Chamberlin, D.; Frankhauser, P.; Marchiori, M.; Robie, J.; Florescu, D.:<br />

XML Query Use Cases. Online Spezifikation: http://www.w3.org/TR/<br />

xquery-use-cases/.<br />

[CFMR] Chamberlin, D.; Frankhauser, P.; Marchiori, M.; Robie, J.: XML Query<br />

(XQuery) Requirements. Online Spezifikation: http://www.w3.org/TR/<br />

xquery-requirements/.<br />

[DHH + 05] Down, T.; Heuer, M.; Huen, D.; Pocock, M.; Schreiber, M.: Biojava, September<br />

2005. Online: http://www.biojava.org/.<br />

[Dum00] Dumke, R.: Software Engineering. Friedrich Vieweg & Sohn Verlagsgesellschaft<br />

mbH, Braunschweig, Wiesbaden, 2. Auflage, 2000.


94 LITERATURVERZEICHNIS<br />

[EWHK + 96] Emden-Weinert, T.; Hougardy, S.; Kreuter, B.; Prömel, H. J.; Steger,<br />

A.: Einführung in graphen und algorithmen. Institut für Informatik,<br />

Humboldt-Universität zu Berlin, 1996. http://www.informatik.<br />

hu-berlin.de/Institut/struktur/algorithmen/ga/.<br />

[HS00] Heuer, A.; Saake, G.: Datenbanken — Konzepte und Sprachen . MITP-<br />

Verlag, Bonn, 2. Auflage, 2000.<br />

[KC86] Khoshafian, S.; Copeland, G. P.: Object identity. In Meyrowitz, N. (Hrsg.):<br />

Proc. of the 1st Int. Conf. on Object Oriented Programming Systems, Languages<br />

and Applications (OOPSLA’86), Portland, Oregon, SIGPLAN NO-<br />

TICES 21(11), S. 406–416. ACM Press, November 1986.<br />

[OM03] Ort, E.; Mehta, B.: Java Architecture for XML Binding (JAXB). online:<br />

http://java.sun.com/developer/technicalArticles/WebServices/<br />

jaxb/index.html, March 2003.<br />

[PM] Plotnikov, D.; McClanahan, C.: JXPath - Package. Homepage: http:<br />

//jakarta.apache.org/commons/jxpath/.<br />

[RFC00] Robie, J.; Florescu, D.; Chamberlin, D.: Quilt: an XML Query Language for<br />

Heterogeneous Data Sources. Lecture Notes in Computer Science, December<br />

2000. siehe http://www.almaden.ibm.com/cs/people/chamberlin/<br />

quilt.html.<br />

[STS97] Saake, G.; Türker, C.; Schmitt, I.: Objektdatenbanken. International Thomson<br />

Publishing, 1. Auflage, 1997.<br />

[Wik] Wikipedia, die freie enzeklopädie. http://de.wikipedia.org/wiki/<br />

Hauptseite.<br />

[WK03] Wittenbrink, H.; Köhler, W.: XML. TEIA Lehrbuch Verlag, 2003.


Selbständigkeitserklärung<br />

Hiermit erkläre ich, daß ich die vorliegende Arbeit selbständig und nur mit erlaubten<br />

Hilfsmitteln angefertigt habe.<br />

Magdeburg, den 7. September 2005<br />

95<br />

Michael Soffner

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!