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