Bachelor-Arbeit Lichtenstern

Werbung
Technische Universität München
Fakultät für Informatik
Lehrstuhl für Datenbanksysteme
Bachelor-Arbeit
Konzeption und Implementierung
von Diensten zur
Ontologiebereitstellung
in
Ad-Hoc-Netzen
Aufgabenstellerin:
Prof. Dr. Birgitta König-Ries
Betreuerin:
Prof. Dr. Birgitta König-Ries
Bearbeiter:
Manfred Lichtenstern
E-Mail: [email protected]
Eingereicht am:
Bachelor-Arbeit Lichtenstern
15.10.2004
Seite 1 von 44
Ich versichere, dass ich diese Bachelor-Arbeit
selbständig verfasst und nur die angegebenen
Quellen und Hilfsmittel verwendet habe.
München, 15.10.2004
……………………………………………….
Manfred Lichtenstern
Bachelor-Arbeit Lichtenstern
Seite 2 von 44
Inhaltsverzeichnis…………………………………………………..
3
1 Einleitung…………………...………………………………………………....
4
1.1 Projektumfeld...……………………………………………………………
1.2 Aufgabenstellung……………….…………………………….…………...
4
5
2 Grundlagen…………………..……………………………………………….
6
2.1 Ontologien…………………………………………………………………
2.2 Parser- und Lexer-Werkzeug ANTLR………………………………….....
2.3 Der Zeichensatz Unicode…………..…….………………………………..
6
7
11
3 Konzeption…………………..……………………………………………….
3.1 Ontologieschichtung………………………………………………………
3.2 Arten der Repräsentation….………………………………………………
3.2.1 G-DSD…………………………………..…………………………….
3.2.2 F-DSD…..…………………………………………………………….
3.3 Ablauf der Verarbeitung……………………………………………………
12
12
14
17
19
28
4 Implementierung…………………………………………………………….
30
4.1 Datenbankschema…………………………………………………………
4.2 Aufteilung von Dateien mit mehreren Klassen und Instanzen……………
4.2.1 Rahmenbedingung durch die Grammatik…………………………….
4.2.2 Einfacher Algorithmus… …………………………………………….
4.2.3 Gewählter Algorithmus………………………….……………………
30
32
32
33
34
5 Zusammenfassung……………………………………………………………
35
A Anhang……………………………………………………………………….
A.1 Grammatik (F-DSD)...……………………………………………………
A.2 FileIterator………………………………………………………………..
36
36
42
Quellenverzeichnis……………………………………………………………..
43
Bachelor-Arbeit Lichtenstern
Seite 3 von 44
1 Einleitung
Zuerst soll das Projektumfeld kurz beleuchtet werden, bevor dann näher auf
Aufgabenstellung eingegangen wird.
die
1.1 Projektumfeld
Diese Bachelor-Arbeit wurde im Rahmen des Projekts Dienste in Ad-Hoc-Netzen
[DIANE] angefertigt. Ein guter Startpunkt um das Projekt kennen zulernen ist die
Hompage des Projekts unter http://www.ipd.uka.de/DIANE/de
Unter anderem wird auf den Seiten des Projekts folgendes über Aufgaben und Ziele
geschrieben:
„Ziel von DIANE die Entwicklung und Evaluierung von Konzepten zur integrierten,
effizienten und effektiven Nutzung der in einem Ad-hoc-Netz in Form von Diensten
bereitgestellten Ressourcen. Von besonderem Interesse sind Informationsdienste, Dienste
also, die den möglichst integrierten Zugriff auf digital verfügbare Information
ermöglichen. Hierzu schlagen wir Mechanismen zur Dienstbeschreibung, zum Auffinden
und zur Auswahl von Diensten sowie zur effizienten Abarbeitung von Anfragen vor. Die
entwickelten Konzepte sollen in einem Ad-hoc-Netz für Karlsruher Informatikstudenten
zur Prüfungsvorbereitung im Fach Informationssysteme evaluiert werden.“
Zur Notwendigkeit von Ontologie steht dazu folgendes:
„Die Beschreibung von Diensten muss ausdrucksstark und gleichzeitig automatisch
vergleichbar sein. Vor dem Hintergrund dieses Zielkonfliktes erscheinen
ontologiebasierte Beschreibungssprachen wie DAML-S am geeignetsten. Für die
Beschreibung von Diensten setzen wir eine geschichtete Dienstontologie ein.“
Im Rahmen des Projekts Diane wurde in der Dreier-Studienarbeit [3sa] „Schaffung einer
formalen Grundlage für Dienstbeschreibung in DIANE und Entwicklung von geeigneten
Werkzeugen und Beispielen“ die Grundlagen für die Grammatik [A.1] zur Beschreibung
der „Formalen Diane Service Description“ (F-DSD) geschaffen.
Nach Abschluss der Dreier-Studienarbeit im Juni 2004 wurde die Arbeit an der F-DSD
Grammatik von Michael Klein (unter den Namen „xdiane3sa“ ) fortgeführt und dazu der
Interne Bericht „Handbuch zur DIANE Service Description“ [DSD] entwickelt, der
voraussichtlich bis Ende 2004 erscheint.
Während dieser Bachelorarbeit wurde die Studienarbeit „Aktive VISIO-Schablonen zur
grafischen Erstellung von DIANE-Dienstbeschreibungen“ von Thomas Herzog angefertigt. Die so genannte G-DSD (für Grafische Diane Service Description) kann damit
automatisch in die F-DSD umgewandelt werden.
Bachelor-Arbeit Lichtenstern
Seite 4 von 44
1.2 Aufgabenstellung
Die Dienste zur Ontologiebereitstellung sind zuständig
•
•
•
•
für das Ablegen von Ontologieschemas
für das Ablegen von Ontologieinstanzen
für den Zugriff auf Ontologien
für Änderungen von Ontologien (Ontologien ergänzen und ändern)
Am Anfang der Erstellung der geschichteten Ontologien wurden zur Realisierung der
Ontologien nur Java-Dateien manuell erstellt. Diese werden in der Spitze der
Ontologiepyramide teilweise immer noch nur manuell erstellt. Da die Ontologiepyramide
aber sehr rasch nach unten in der Anzahl der benötigten Definition anwächst, musste
dieser Erstellungsprozess unterstützt werden. Dazu wurde die „Formale Diane Service
Description“-Sprache (F-DSD) geschaffen. Die F-DSD wird dann mit einem
Transformator in J-DSD, also Java-Dateien, die die Ontologie beschreiben, übersetzt.
Da im DIANE Projekt CVS zur Versionsverwaltung eingesetzt wird, wurden die ersten
Java-Dateien zur Ontologiebeschreibung im Verzeichnis „simulator/src/dsd“ abgelegt.
Später, als dann die F-DSD-Dateien hinzugekommen sind, wurde dann ein Verzeichnis
„simulator/src/f-dsd“ hinzugefügt. Die Ablage von Ontologieschemas und –instanzen
erfolgt also einfach in einem Dateisystem. Die Änderungen werden mit Hilfe des CVSSystems [CVS] auf die einzelnen Rechner des Projekts verteilt. Alle Ontologien liegen
also auf allen Rechnern, auf denen die DIANE-Software läuft.
Diese Verfahren kann im Verlauf der Softwareentwicklung sehr Vorteilhaft eingesetzt
werden, da der Umfang der Erstellten Ontologien sehr klein ist. Aber später bei großen
Ontologien wird es nötig sein, ein fortgeschrittenes Ablage- und Zugriffssystem zu
verwenden.
Im Rahmen dieser Bachelor-Arbeit wurde ein Konzept erarbeitet, und die Basis für dieses
Konzept implemntiert, um bei großen und sehr großen Ontologien ein Ablage- und
Zugriffssystem zu realisieren, das auch bei der typischer Weise eingesetzten Hardware,
einen problemlosen Betrieb ermöglicht.
Als Ablage- und Zugriffssystem bietet sich hier sofort ein Datenbanksystem an. In
diesem speziellen Anwendung muss aber besonders darauf geachtet werden, das die
Lösung auf einen dezentralen und unter umständen verteilten System, auf nicht besonders
leistungsfähiger Hardware lauffähig ist.
Bachelor-Arbeit Lichtenstern
Seite 5 von 44
2 Grundlagen
In diesem Kapitel wird auf einige Grundlagen eingegangen, auf die in anderen Kapiteln
aufgebaut wird.
2.1 Ontologien
Die Dreier-Studienarbeit [3sa] hat auch hier schon einige wichtige Grundlagen wie folgt
beschrieben:
„Ein wichtiges Konzept der Arbeit sind Ontologien. Ursprünglich stammt der Begriff
Ontologie aus dem Bereich der künstlichen Intelligenz. Er wird dafür verwendet, um ein
Modell unserer realen Welt zu beschreiben und zu veranschaulichen. Ontologien
beinhalten also semantische Informationen über Elemente dieses Weltausschnittes.“
In der Dreier-Studienarbeit [3sa] kann man auch folgendes nachlesen:
„Im DIANE Projekt haben sich ontologiebasierte Dienstbeschreibungen als ein
geeignetes Mittel zur Beschreibung von Diensten erwiesen. Sie ermöglichen ein hohes
Maß an Flexibilität, ohne dabei die Ausdrucksstärke oder die Vergleichbarkeit
einzuschränken.“
Im Abschnitt „Eigenschaften einer eigenen Sprache“ wird die Sprache des Projekts
DIANE von der Dreier-Studienarbeit [3sa] wie folgt beschrieben:
-
Rechnerverständliche funktionale Semantik
Ein Rechner soll ohne jegliche Sekundärinformation, d.h. allein aus der mit dieser
Sprache erstellten Dienstbeschreibung verstehen, was dieser Dienst tut.
-
Universale Einsetzbarkeit
Die Sprache soll also in der Lage sein, alle möglichen Dienste aus allen
-
Menschenerstellbarkeit
Die Dienstbeschreibung muss in einer vertretbaren Zeit durch einen Menschen
erstellbar sein.
Diese Aussagen fassen den Kern der Motivation für Ontologien im DIANE Projekt
zusammen. Bei der Dreier-Studienarbeit [3sa] kann man mehr zu den theoretischen
Grundlagen von Ontologien nachlesen. Wie sich bei dieser Bachelor-Arbeit aber gezeigt
hat, ist der schnellste und einfachste Weg sich in Ontologien einzuarbeiten, der Weg an
hand von konkreten Beispielen. Dadurch werden auch schnell die Schwächen und
Stärken der eingesetzten Methoden klar.
Deshalb wird im Kapitel Konzeption näher das Kinobeispiel vorgestellt.
Bachelor-Arbeit Lichtenstern
Seite 6 von 44
2.2 Parser- und Lexer-Werkzeug ANTLR
ANTLR [ANTLR] steht für ANother Tool for Language Recognition und ist ein Parserund Lexer-Werkzeug. Dieses Werkzeug bildet seit der Dreier-Studienarbeit [3sa] die
Basis für die Verarbeitung der F-DSD.
In der Dreier-Studienarbeit [3sa] wird sehr zutreffend wie folgt beschrieben:
„ANTLR ist jedoch mehr als nur eine Sprache zur Grammatikdefinition:
Die einzelnen unterstützten Tools ermöglichen es, automatisch aus der ANTLRGrammatik einen Lexer, Parser und Tree Parser in entweder Java, C++ oder Sather zu
generieren. In dieser Arbeit war nur die Generierung in Java von Bedeutung.“
Folgende Erkärung von [3sa] zeigt warum man sich für dieses Werkzeug entschieden hat:
„Neben ANTLR existieren noch andere Werkzeuge die aus einer angegebenen
Grammatik den Quellcode für einen Lexer und Parser generieren. Das bekannteste
Gespann hierfür sind Lex (ein Lexergenerator) und Yacc. Lex ist dabei wie der Name
schon nahe legt für das Aufteilen der Quell – Datei in einzelne Tokens zuständig. YACC,
was für Yet Another Compiler – Compiler steht, ist der dazugehörige Parsergenerator.
Der größte Unterschied zwischen diesen und ANTLR besteht darin, das ANTLR ein
LL(k)-Compiler-Compiler, Lex / Yacc nur LL(1) Compiler-Compiler sind, was bei Lex /
Yacc zu relativ komplexen Grammatiken führt.“
In der [3sa]-Arbeit werden auch die folgenden Grundlagen aus dem Compilerbau
beschrieben:
„Im Compilerbau unterscheidet man zwischen mehreren Phasen, die bei der Umsetzung
der jeweiligen Programmiersprache in eine für die Maschine, also für den Computer
brauchbare Form, durchlaufen werden. Diese Phasen führen verschiedene Analysen und
Operationen mit dem eingegebenen Code durch.
Im Einzelnen sind dies:
1. Lexikalische Analyse (Scanning)
Bei der Lexikalischen Analyse wird der Quellcode, also der Eingabestrom,
in einzelne Symbole (Tokens) zerlegt. Dabei unterscheidet der Lexer (oder auch
Scanner und Tokenizer genannt) zwischen den durch den Sprachsyntax
vorgegebenen Symbolen, Variablen und Operatoren.
2. Syntaktische Analyse (Parsing)
Der in diesem Stadium verwendete Programmteil wird Parser genannt und
Bachelor-Arbeit Lichtenstern
Seite 7 von 44
liest den vom Lexer in einzelne Token zerteilten Strom ein, prüft diese auf
syntaktische Richtigkeit und erstellt daraus Symbol-Gruppen mit hierarchischer
Struktur. Die Struktur ist oft ein Baum und wird dann Parse-tree genannt.
3. Semantische Analyse
Die auf die Syntaktische Analyse folgende prüft nun die semantische Korrektheit
des Programms. Dazu gehören die Prüfung auf korrekte Typisierung, die
Einhaltung von Gültigkeitsbereichen und eventuelle Typanpassungen.
4. Erzeugung von Zwischencode
5. Codegenerierung (ggf. Optimierung)
Die Schritte 4 und 5 weden nur bei Programmiersprachen benötigt.
Als Grundlage für diese Arbeit sind hauptsächlich der Lexer, der Parser, der Tree Walker
und deren Umsetzung mit Hilfe von ANTLR in Java von Bedeutung. Es soll deshalb im
Anschluss noch etwas genauer auf die Grammatik von ANTLR als auch die Erstellung
des Lexers und des Parsers eingegangen werden.“
Zur „Grammatik von ANTLR“ wird von [3sa] folgendes geschrieben:
„Für die Erstellung von Lexern und Parsern muss eine Grammatik-Datei erstellt werden,
welche die zu implementierende Sprache spezifiziert. Dabei müssen die für ANTLR
geltenden Regeln beachtet werden.
Im konkreten Beispiel sieht das für ANTLR folgendermaßen aus:
Die Umsetzung des Zeichenstroms in Tokens wird im Lexer durchgeführt. Die Regeln
hierzu werden in folgender Form notiert. Dabei ist zu beachten, dass die Bezeichner der
einzelnen Tokens immer mit einem Großbuchstaben beginnen müssen.
TOKENBEZEICHNER : Zeichen; Es können sowohl ein als auch mehrere Zeichen zu
einem Token aufgelöst werden. Zur Notation einer Zeichenmenge bestehen mehrere
Möglichkeiten. Die wichtigsten sollen hier aufgeführt werden:
1. Einzelne Zeichen:
KLEINBUCHSTABEN_ABC : 'a' 'b' 'c' ;
2. Zeichenfolge:
KLEINBUCHSTABEN_ABC : "abc“;
3. Zeichenspanne:
EINE_ZIFFER_ZWISCHEN_1_UND_7 : '1'..'7';
Bachelor-Arbeit Lichtenstern
Seite 8 von 44
Außerdem lassen sich einzelne Zeichenmengen folgendermaßen zu neuen Mengen
verknüpfen:
(Menge1|Menge2|Menge3) Menge1 oder Menge2 oder Menge3
(Menge) ? Menge einmal oder keinmal
(Menge) + Menge einmal oder öfter
(Menge) * Menge beliebig oft
Bei der Aufstellung der Regeln ist darauf zu achten, dass der Zeichenstrom eindeutig in
Tokens zerlegt werden kann. Das heißt es darf keine zwei Tokenregeln geben mit
gleichen Teilmengen auf der der rechten Seite. Zum Beispiel:
TOKEN1 : "abc";
TOKEN2 : ( 'a' .. 'z' )*;
TOKEN2 gilt für alle Wörter aus Kleinbuchstaben. Damit würde die Zeichenfolge
„abc“ auf beide Regeln zutreffen und es wäre keine eindeutige Umwandlung des
Zeichenstroms in Tokens möglich.
Zur Auflösung eines solchen Problems gibt es drei Möglichkeiten, die hier aber nur
angesprochen und nicht ausführlich dargestellt werden sollen. Zum einen kann man den
so genannten „lookahead“ vergrößern. Dadurch werden mehrere Zeichen eingelesen,
bevor entschieden wird welches Token zutrifft. Ein weiteres Hilfsmittel sind die
„Semantic Predicates“. Und als letzte Möglichkeit lassen sich noch Literale festlegen,
welche als ein Zeichen betrachtet werden und somit Vorrang haben. Damit lassen sich
zum Beispiel Schlüsselwörter von Bezeichnern unterscheiden.
Nachdem der Zeichenstrom in einen Tokenstrom umgewandelt wurde, wird dieser vom
Parser weiterverarbeitet. Die Parserregeln haben eine ähnliche Form wie die Regeln des
Lexer, wobei die Bezeichner der Regeln mit einem Kleinbuchstaben beginnen müssen.
Auf der rechten Seite können sowohl Tokens als auch weitere Parserregeln vorkommen.
Ein Beispiel hierfür könnte folgendermaßen aussehen:
expr: (expr PLUS expr) | ziffern;
ziffern: (ZIFFER)*;
Besonders hervorzuheben ist noch die Angabe der bereits erwähnten Literale. Sie werden
durch Hochkommata gekennzeichnet und vor den Tokens aufgelöst.
vererbung: BEZEICHNER "extends" BEZEICHNER ;
Die Funktion des Parsers ergibt sich aus dem Einfügen von Javacode an der gewünschten
Stelle. Der Code muss in geschweifte Klammern gefasst sein und wird ausgeführt, sobald
(falls) der Parser an die entsprechende Stelle gelangt. Javacode, der vor dem Doppelpunkt
steht, wird sozusagen initial vor der Abarbeitung der rechten Seite ausgeführt und gilt
somit auch für alle Alternativen auf der rechten Seite. Zum Informationsaustausch
Bachelor-Arbeit Lichtenstern
Seite 9 von 44
zwischen einzelnen Regeln lassen sich Objekte übergeben und zurückgeben. Das sieht
folgendermaßen aus:
regel1 [Object in1, Object in2] returns [Object out]
{Javacode optional} : out = regel2[in1];
regel2 [Object in] returns [Object out]
{out=null} : LEERZEICHEN {out=in};
In diesem Beispiel wird ein Object von Regel 1 an Regel 2 weitergereicht, könnte hier
verändert werden und dann nach dem Einlesen eines Leerzeichens wieder an Regel 1
zurückgegeben werden.
Bei Verwendung eines Treewalkers wird vom Parser zusätzlich ein AST erzeugt.
In diesem Fall wird der auszuführende Javacode in den Treewalker geschrieben.
Zum Erzeugen von ASTs wird die Syntax des Parsers erweitert.
TOKEN^
Dieses TOKEN wird zur Wurzel des erzeugten AST.
TOKEN!
Dieses TOKEN wird nicht in den AST aufgenommen.
Die Notation des Treewalkerregeln entspricht denen im Parser. Zusätzlich muss jedoch
der AST syntaktisch beachtet werden. Ein AST wird durch eine Raute gekennzeichnet.
Nach der Raute kommen, in Klammern gefasst, zuerst die Wurzel und dann die Kinder.
Ohne Raute wird ein Token im Treewalker als einelementiger AST betrachtet.
regel : #(TOKEN1, regel2,regel3,TOKEN3) ;
regel2 : TOKEN3 ;
regel3 : TOKEN4 TOKEN5 TOKEN6 ;
Zuerst ist die Erzeugung eines Treewalkers ein Mehraufwand, der keine zusätzliche
Funktion erfüllt. Allerdings ergibt sich ein Vorteil, wie schon erwähnt, aus der
Wiederverwendbarkeit des Parsers. Wenn die zugrunde liegende Grammatik und somit
die Sprache gleich bleibt, aber daraus neuer Code zum Beispiel für eine weitere
Zielsprache erzeugt werden soll, muss nur der Treewalker neu erstellt werden. In
unserem Fall sollten zukünftig weitere Zielsprachen erzeugt werden, daher haben wir uns
für die Verwendung des Treewalkers entschieden.“
Der Treewalker wurde nur kurz bis nach Abschluss der Dreier-Studienarbeit im Juni
2004 verwendet. Seit dem die Arbeit an der F-DSD Grammatik von Michael Klein (unter
den Namen „xdiane3sa“) fortgeführt wird, wurde entschieden, dass der Treewalker doch
nur einen Mehraufwand darstellt und deshalb wird er seitdem nicht mehr verwendet.
Bachelor-Arbeit Lichtenstern
Seite 10 von 44
2.3 Der Zeichensatz Unicode
Auf der Home Page von Unicode [UNICODE] steht unter anderem:
“What is Unicode?
Unicode provides a unique number for every character,
no matter what the platform,
no matter what the program,
no matter what the language.”
Auch eine gute Quelle zu diesen Thema ist die „UTF-8 and Unicode FAQ for
Unix/Linux“ [UTF-8] von Markus Kuhn. Hier kann man unter anderem folgendes lesen:
“With the UTF-8 encoding, Unicode can be used in a convenient and backwards
compatible way in environments that, like Unix, were designed entirely around
ASCII. UTF-8 is the way in which Unicode is used under Unix, Linux, and similar
systems. It is now time to make sure that you are well familiar with it and that your
software supports UTF-8 smoothly.“
Wie also aus diesen Quellen hervorgeht ist der Unicode der neue Zeichensatz, der das
leisten soll, was er ASCII-Zeichensatz schon bei den Standardzeichen erreicht hat,
nämlich eine weltweite Standarisierung des Zeichensatzes, aber für wirklich alle Zeichen
der Welt.
Aber wenn man sich auf den Unicode festgelegt hat, ist erst klar welche Zahl jedem
Zeichen zugeordnet wird. Es gibt aber immer noch einige Möglichkeiten der Codierung.
Das hat seinen Grund darin, has man versucht beim Übergang von ASCII- oder einen
erweiterten ASCII-Zeichensatz möglichst wenige Probleme zu verursachen. Leider
werden aber doch einige Probleme verursacht. Das fängt häufig schon bei der Frage der
Codierung an. Soll man die UCS-2 oder die UCS-4 Codierung verwenden, die für jedes
Zeichen 2 oder 4 Bytes belegt werden?
Die meisten Vorteile und die wenigsten Problem werden sich wahrscheinlich mit der
üblichen UTF-8 Codierung ergeben. Sie hierzu auch RFC3639
(z.B.http://www.ietf.org/rfc/rfc3629.txt)
Aus diesem Grund wurde als Zeichensatz für F-DSD-Dateien Unicode in der UTF-8Codierung gewählt.
Wie sich während der Arbeit gezeigt hat, verwenden die meisten Windows- und UnixBenutzer noch nicht den Unicode in UTF-8-Codierung. Bei Text-Editoren wie z.B. JEdit
[JEDIT] kann aber auf allen Betriebssystemen problemlos Unicode in der UTF-8Codierung gewählt werden. Bei vielen Programmen und Betriebssystemen wird die
Unterstützung für Unicode immer besser, auch in der UTF-8-Codierung.
Bachelor-Arbeit Lichtenstern
Seite 11 von 44
3 Konzeption
Zuerst soll das Konzept der Ontologieschichtung dargestellt werden. Anschließend die
verschiedenen Arten der Ontologierepräsentation und Ontologieverarbeitung.
3.1 Ontologieschichtung
Im „DSD-Cookbook“ [DSD] wird die folgende „Ontologie-Pyramide“ vorgestellt:
S Æ class X, instance y, …
Service
State1
InfoState
State2
InfoState
Document
Printed
Location
Address
myService
Building
geb50.34
Room
room335
Bachelor-Arbeit Lichtenstern
Ontologiebeschreibungssprache
(=Metaschema)
ƒ Sprache zur Definition von Ontologien
Æ „DIANE Elements“
I. obere Dienstontologie (=Schema)
ƒ Aufgabe: allgemeine Struktur einer
zustandsbasierten Dienstbeschreibung
ƒ einheitlich, klein
II. Kategorienontologien (=Schemata)
ƒ wenige
ƒ Einschränkung der möglichen Vor- und
Nachzustände
ƒ Beispiel: InformationService
III. Domänenontologien (= Schemata)
ƒ zur Beschreibung einzelner Domänen
ƒ viele, verteilt
ƒ Beispiele: Room, Paper, Printer
Instanzpool (= Instanzen)
ƒ stehen für Individuen der realen Welt
ƒ sehr viele, verteilt
Seite 12 von 44
Nach dem „DSD-Cookbook“ [DSD] haben die einzelnen Schichten die folgenden
Eigenschaften:
-
Obere Dienstontologie. Diese definiert das Schema für das allgemeine
Grundgerüst von zustandsbasierten Dienstbeschreibungen. Hier ist verankert, dass
ein Dienst durch die Angabe eines Vor- und eines Nachzustands zu spezifizieren
ist und weitere, nichtfunktionale Informationen (wie der Dienstname, der
Anbieter, Dienstqualitäten, der technische Zugangsweg etc.) angegeben werden
können. Das Schema ist sehr klein und wird einheitlich von DSD für alle
Teilnehmer vorgegeben.
-
Kategorieontologien. Aufgabe dieser Ontologien ist es, den Raum aller
möglichen Dienste in Kategorien mit ähnlichen Zustandsübergängen zu
unterteilen. Hierzu gibt jede dieser Ontologien im Wesentlichen Einschränkungen
an die zu verwendeten Zustände vor. Mögliche Kategorien könnten
Informationsdienste sein, die den Zustand eines Dokuments ändern, oder
Wissensdienste, die den Zustand von Wissen ändern, oder Realweltdienste,
welche den Besitzzustand realweltlicher Gegenstände ändern. Insgesamt sind nur
wenige Kategorien zu erwarten, von denen die wichtigsten bereits durch DSD
vorgegeben sind. In Absprache mit der Community kann jedoch jeder Benutzer
selbst weitere Kategorieschemata erstellen.
-
Domänenontologien. Diese Ontologien dienen dazu, die unterschiedlichen
Anwendungsgebiete zu formalisieren, in welchen die zu beschreibenden Dienste
operieren. Hier sind tausende verschiedener Ontologien zu erwarten, die nicht
durch DSD vorgegeben werden, sondern von der Community selbst eingebracht
werden können. Wichtig ist, dass neben der Definition von Schemata auch
Instanzen als Stellvertreter für reale Individuen definiert werden sollten, um eine
Domäne vollständig zu beschreiben.
Im „DSD-Cookbook“ [DSD] wird auch folgendes Festgestellt:
„Insgesamt erreicht man durch diese Dreiteilung der Schemabeschreibung einerseits
strukturierte, zustandsorientierte Dienstbeschreibungen, andererseits verliert man durch
die Austauschbarkeit der Ontologien nicht die Flexibilität einer gänzlich freien
Dienstbeschreibungssprache.“
Bachelor-Arbeit Lichtenstern
Seite 13 von 44
3.2 Arten der Repräsentation
Aus dem DSD-Handbuch [DSD] ist folgende Einführung in die verschiedenen Formen
der Repräsentationsformen:
„Für die DSD gibt es nicht die Syntax sondern es existieren mehrere
Repräsentationsformen, die jeweils unterschiedliche Vor- und Nachteile bieten und daher
in verschiedenen Situationen zum Einsatz kommen.“
Die Abbildung zeigt den Zusammenhang:
Bachelor-Arbeit Lichtenstern
Seite 14 von 44
Im Handbuch [DSD] werden die verschiedenen Formen wie folgt beschrieben:
-
Im Mittelpunkt steht die formale Hauptrepräsentation (kurz f-dsd). In Ihr sind
die DSD Elements durch eine formale Grammatik definiert, deren Ziel es ist,
möglichst kompakte und gut lesbare Beschreibungen zu erhalten. Da die
Beschreibungen rein textbasiert sind, können sie leicht im System ausgetauscht
werden. Als Hauptrepräsentation strebt die f-dsd nach Vollständigkeit, d.h. in ihr
sind in der Regel alle Konzepte und Beschreibunsmöglichkeiten der DSD
enthalten und ausdrückbar. Die Syntax der f-dsd hat Anleihen an
objektorientierten Programmiersprachen und übernimmt die Darstellung
primitiver Werte aus XML Schema. Um eine übersichtliche Darstellung zu
erhalten wurde auf Verwendung von XML verzichtet.
-
Eine anschauliche Darstellung liefert die graphische Nebenrepräsentation (kurz
g-dsd). Sie wurde als visuelle Sprache konzipiert, so dass sich menschliche
Benutzer in ihr schnell zurecht finden, um so vorhandene Beschreibungen gut
verstehen und neue Beschreibungen effizient aufbauen zu können. Weiterhin
eignet sich diese Repräsentationsform dazu, Beschreibunden in Vorträgen und
Papieren anschaulich präsentieren zu können. Editiert werden g-dsdBeschreibungen mit dem Mircrosoft-Programm VISO, welches durch intelligente
Schablonen einem menschlichen Benutzer aktiv bei der Erstellung von
Beschreibungen behilflich ist. [G-DSD]. Ein in VISO integrierter Transformator
kann eine Beschreibung in g-dsd in f-dsd umwandeln. Die g-dsd ähnelt in ihrem
Grundaufbau UML Klassen- und Instanzdiagrammen, wurde jedoch um spezielle
Konzepte erweitert.
-
Um die formale Repräsentation verarbeiten zu können, wird sie zunächst von
einem speziellen Parser [ANTLR] eingelesen und als temporäre Repräsentation
(kurz t-dsd) nicht-persistent im Hauptspeicher abgelegt. Diese neutrale
Zwischenstufe ist im Wesentlichen darauf ausgelegt, in eine der weiteren
Nebenrepräsentation persistent ausgegeben zu werden. Auch eigene
Spezialrepräsentationen können hieraus leicht abgeleitet werden.
-
Eine wichtige Repräsentierung ist die Java-basierte Nebenrepräsentation (kurz
j-dsd). In ihr wird das Schema zu einem Satz von Java-Klassen, welche durch
ihren Quellcode dargestellt sind. Instanzen hingegen sind gewöhnliche JavaObjekte, die durch statische Erzeugungsklassen persistent gemacht werden.
Besondere Konstrukte der DSD (wie z.B. Mengen oder Variablen) werden durch
spezielle Klassen und Tricks umgesetzt. Diese Darstellungsform hat eine Reihe
von Vorteilen: Zunächst können durch Kompilierung des Quellcodes automatisch
semantische Fehler entdeckt werden, deren Überprüfung in f-dsd komplexe
Zusatzprogramme erfordert hätte. Weiterhin können die übersetzten Klassen
direkt in allen Java-Programmen verwendet werden. Dies ist wichtig, da im
DIANE-Projekt zur Zeit alle Komponenten, die auf Dienstbeschreibungen
angewiesen sind, in dieser Programmiersprache vorliegen. Drittens ist es möglich,
Bachelor-Arbeit Lichtenstern
Seite 15 von 44
dan bestimmte ontologische Klassen Programmlogik anzuhängen, um somit
immer wiederkehrende Verarbeitungsweisen festzuhalten. Beispielsweise hat die
Javaklasse zu Umsetzung einer Menge bereits eine Methode, die testet, ob eine
bestimmte Instanz zu dieser Menge gehört oder nicht. Aus diesem Grund
verarbeitet der Vergleicher Beschreibungen in dieser Darstellung.
-
Zum Austausch mit anderen Forschungsgruppen eignet sich die OWL-basierte
Nebenrepräsentation (kurz o-dsd). Diese stellt alle Konzepte der DSD mit den
Mitteln der standardisierten, XML-basierten Web Ontology Language dar.
-
Neben den vorhandenen Darstellungsformen können auch individuelle
Repräsentationen interessant sein. Diese sind häufig verkürzend, d.h. sie stellen
nur die Aspekte einer Beschreibung dar, die für den jeweiligen
Anwendungszweck von Bedeutung sind und blenden unwichtige Teile aus. Hier
sind sowohl persistente als auch nicht-persistente Repräsentierungen denkbar.
Zur Ablage in der Datenbank wird in diesem Sinne eine individuelle Repräsentation
verwendet (kurz DB-DSD). Das besondere an dieser Repräsentation ist, es sind alle
Möglichkeiten vorhanden, die auch die F-DSD bietet und zusätzlich sind noch weitere
Information vorhanden, z.B. aus welcher G-DSD die F-DSD erzeugt wurde. Diese
Information wird, wie im folgenden Beispiel gezeigt wird, von der G-DSD in die F-DSD
eingebracht.
//** @G-DSD: /schema/domain.cinema.VSD Klassen
{ontology: domain.cinema}
Wie man an diesem Beispiel sieht wird ein Kommentar, dem direkt zwei Sterne folgen
dazu verwendet, um spezielle Informationen in die F-DSD zu schreiben, die in die DBDSD aufgenommen werden sollen, aber nicht von der Grammatik der F-DSD vorgesehen
sind. In diesem Beispiel mit durch das nächsten Token „@G-DSD:“ mitgeteilt, dass in
diesem Fall die Information folgt, aus welcher VISO - Datei die F-DSD erzeugt wurde
und auf der Name des Arbeitsblattes auf dem die Ontologie steht.
Bachelor-Arbeit Lichtenstern
Seite 16 von 44
3.2.1 G-DSD
Hier wird nun mit der G-DSD das Kinobeispiel vorgestellt. Dieses Beispiel ist etwas
größer. Aber der Aufwand zur Einarbeitung in dieses Beispiel rentiert sich auf alle Fälle.
{ONTOLOGY: domain.cinema}
String
name
domain.location
AddressV
Integer
address
number
CinemaPE
within
HallPE
SoundSystemPE
domain.movie
MoviePE
sound
within
letter
String
RowE
CategoryPE
visible
category
within
startTime
Integer
number
SeatE
seat
Time
SeatInShowE
date
Date
free
validFor
Boolean
domain.money
CinemaTicketV
price
currency
CurrencyPE
amount
Double
domain.money
PriceV
definitional property
category.realobjectservice
TicketE
incidental property
orthogonal property
(is not published)
Bachelor-Arbeit Lichtenstern
defined in another
ontology
Seite 17 von 44
ONTOLOGY: domain.movie
title
MovieEP
String
genre
GenreEP
duration
Duration
country
domain.location
language
mainActor
CountryEP
domain.location
LanguageEP
director
domain.person
PersonEP
domain.person
PersonEP
Bachelor-Arbeit Lichtenstern
Seite 18 von 44
3.2.2 F-DSD
Das Kinobeispiel wird durch die folgenden F-DSD-Dateien beschrieben:
//** @G-DSD: /schema/category.realobjectservice.VSD Klassen
{ontology: category.realobjectservice}
valueclass RealObjectState extends State at upper.profile
[]
valueclass Owned extends RealObjectState
[
entity: Thing,
location : Location at domain.location,
begins : DateTime,
ends : DateTime
]
Bachelor-Arbeit Lichtenstern
Seite 19 von 44
//** @G-DSD: /schema/domain.cinema.VSD Klassen
{ontology: domain.cinema}
valueclass CinemaTicket
[
price : Price at domain.money,
validFor : SeatInShow,
number : Integer
]
entityclass SeatInShow
[
defprop date : Date,
defprop startTime : Time,
defprop seat : Seat,
visible : Movie at domain.movie,
free : Boolean
]
entityclass Seat
[
defprop number : Integer,
defprop within : Row
]
entityclass Row
[
defprop within : Hall,
defprop letter : String,
category : Category
]
public entityclass Hall
[
sound : SoundSystem,
defprop number : Integer,
defprop within : Cinema
]
public entityclass Category []
public entityclass SoundSystem []
public entityclass Cinema
[
Bachelor-Arbeit Lichtenstern
Seite 20 von 44
defprop name : String,
address : Address at domain.location
]
{ontology domain.cinema}
loge as Category
pit as Category
mono as SoundSystem
dolbyA as SoundSystem
dolbySR as SoundSystem
dolbyDigital as SoundSystem
dolbyEX as SoundSystem
thx as SoundSystem
zkm_hall1 as Hall
[
number = 1,
within = zkm,
sound = dolbyDigital
]
zkm_hall2 as Hall
[
number = 2,
within = zkm,
sound = dolbyDigital
]
zkm_hall3 as Hall
[
number = 3,
within = zkm,
sound = thx
]
zkm as Cinema
[
name = "Filmpalast am ZKM",
address = anonymous Address at domain.location
[
name = "Filmpalast am ZKM",
street = "Brauerstraße 40",
zipCode = 76137,
city = karlsruhe
Bachelor-Arbeit Lichtenstern
Seite 21 von 44
]
]
sb_bambi as Hall
[
number = 3,
within = schauburg,
sound = dolbySR
]
sb_haupt as Hall
[
number = 1,
within = schauburg,
sound = dolbyDigital
]
sb_oben as Hall
[
number = 2,
within = schauburg,
sound = dolbySR
]
schauburg as Cinema
[
name = "Schauburg",
address = anonymous Address at domain.location
[
name = "Schauburg",
street = "Marienstraße 16",
zipCode = 76137,
city = karlsruhe
]
]
jRow3 as Row
[
letter = "J",
category = loge,
within = zkm_hall3
]
Bachelor-Arbeit Lichtenstern
Seite 22 von 44
//** @G-DSD: /schema/domain.movie.VSD Klassen
{ontology: domain.movie}
public entityclass Movie
[
defprop title : String,
genre : Genre,
duration : Duration,
country : Country at domain.location,
language : Language at domain.location,
mainActor : Person at domain.person,
director : Person at domain.person
]
public entityclass Genre []
{ontology domain.movie}
harryPotter3 as Movie
[
title = "Harry Potter und der Gefangene von Askaban",
genre = family,
duration = <PT141M>,
language = de,
mainActor = danielRadcliffe,
director = alfonsoCuaron
]
family as Genre
action as Genre
thriller as Genre
Bachelor-Arbeit Lichtenstern
Seite 23 von 44
{ontology domain.location}
public entityclass Country extends Location
[
locatedIn: Continent
]
public entityclass Continent extends Location []
public entityclass Language []
valueclass Address extends Location
[
name: String,
street: String,
zipCode: Integer,
city: City
]
entityclass City extends Location
[
name: String
]
Bachelor-Arbeit Lichtenstern
Seite 24 von 44
{ontology domain.location}
de
en
fr
es
as
as
as
as
Language
Language
Language
Language
usa as Country
[
locatedIn = northAmerica
]
germany as Country
[
locatedIn = europe
]
france as Country
[
locatedIn = europe
]
northAmerica as Continent
southAmerica as Continent
europe as Continent
africa as Continent
asia as Continent
australia as Continent
antarctica as Continent
karlsruhe as City
[
name = "Karlsruhe"
]
Bachelor-Arbeit Lichtenstern
Seite 25 von 44
{ontology domain.money}
valueclass Price
[
amount: Double,
currency: Currency
]
public entityclass Currency []
{ontology domain.money}
eur as Currency
usd as Currency
sfr as Currency
Bachelor-Arbeit Lichtenstern
Seite 26 von 44
//** @G-DSD: /schema/domain.person.VSD Klassen
{ontology: domain.person}
entityclass Person
[
name : String,
birthdate : Date
]
{ontology domain.person}
danielRadcliffe as Person
[
name = "Daniel Radcliffe"
]
alfonsoCuaron as Person
[
name = "Alfonso Cuarón"
]
Bachelor-Arbeit Lichtenstern
Seite 27 von 44
3.3 Ablauf der Verarbeitung
An dieser Abbildung wird noch mal der grundsätzliche Ablauf der Verarbeitung
dargestellt.
Bachelor-Arbeit Lichtenstern
Seite 28 von 44
Da aber die „ //**“ – Zeilen nicht mit dem Parser – Lexer – Werkzeug [ANTLR] in die
Datenbank eingelesen werden können, sieht das angewendete Konzept wie folgt aus:
Graphische Nebenrepräsentation
g-dsd
Transformator
Formale Hauptrepräsentation
f-dsd
Parser
Temporäre Repräsentation
t-dsd
Import
Ontologie
Export
Ontologie
Generatoren
Java-basierte
Nebenrepräsentation
j-dsd
Bachelor-Arbeit Lichtenstern
Datenbank-basierte
Nebenrepräsentation
db-dsd
Seite 29 von 44
4 Implementierung
In diesem Kapitel wird aufgezeigt welche Wege bei der Implementierung beschritten
wurden.
4.1 Datenbankschema
Dieser wesentliche Ausschnitt aus der Grammatik zeigt die Grundlage für das
Datenbankschema:
start: GKLAMMERAUF
( "ontology" (DOPPELPUNKT)? paket
| …
| …
)
GKLAMMERZU
(klassendefinition | instanzdefinition)*
;
klassendefinition: ("public")? ("entityclass" | "valueclass")?
GROSSBEZEICHNER (vererbung)? klassendefblock
;
vererbung: "extends" klasse
;
klassendefblock: KLAMMERAUF
( attributdefinition (KOMMA attributdefinition)*)?
KLAMMERZU
;
attributdefinition: ("defprop" | "orthprop")?
KLEINBEZEICHNER DOPPELPUNKT ("list" "of")? klasse
;
paket: KLEINBEZEICHNER
;
(PUNKT KLEINBEZEICHNER)*
klasse: GROSSBEZEICHNER ("at" paket)?
;
instanz: KLEINBEZEICHNER
;
("as" klasse)?
instanzdefinition: KLEINBEZEICHNER "as"
((klasse (instanzattributblock)?) |
;
declsetdef)
instanzattributblock: KLAMMERAUF
zuweisung (KOMMA zuweisung)*
KLAMMERZU
;
Bachelor-Arbeit Lichtenstern
Seite 30 von 44
Diese Abbild zeigt das relationale Datenbankschema:
(ohne redundante Caching - Tabellen)
Line
Klasse
PK
PK
OntoName
Name
Typ
ExtendsOnto
ExtendsName
GDSDFile
GDSDPage
PK
PK
PK
PK
OntoName
Name
Nr
Offset
Length
String
Typ
Instanz
PK
PK
OntoName
Name
isdeclsetdef
AsName
AsPaket
GDSDFile
GDSDPage
Der Ontologie-Name (OntoName) und der Name der Klasse oder Instanz (Name) bilden
immer den Primärschlüssel für die Klassen oder Instanzen.
Die Tabelle „Line“ bildet den Inhalt einer F-DSD-Datei Zeile für Zeile ab. Da sehr lange
Zeilen entstehen können, und die Länge von String auf einen sinnvollen Wert begrenzt
werden muss, besteht mit „Offset“ die Möglichkeit der Aneinanderreihung von einzelnen
Zeilenabschnitten.
Bei Instanzen gibt „isdeclsetdef“ an, ob es sich ein „declsetdef“ handelt.
Durch diese einfache Struktur können alle zukünftigen Erweiterungen an der F-DSD
auch in der Datenbank abgelegt werden. Mit SQL kann man, unter Zuhilfenahme des
ANTLR – Tools, auch alle nötigen Hilfstabellen für Anfragen die häufiger vorkommen
und schnell bearbeitet werden müssen, angelegt werden.
Dieser Lösungsansatz ergibt auch eine Unabhängigkeit von der verwendeten Datenbank,
ohne Rücksicht ob die Datenbank Unicode unterstützt oder nicht. Es können also alle
hängigen Datenbanken wie [DB2], [MYSQL] und [POSTGRESQL] verwendet werden.
Die Beispiel-Implementierung wurde mit der SQL Datenbank McKoi [MCKOI] realisiert.
Bachelor-Arbeit Lichtenstern
Seite 31 von 44
4.2 Aufteilung von Dateien mit mehreren Klassen und Instanzen
Die Grammatik einer F-DSD-Datei (siehe Anhang A.1) beginnt bei dem Symbol
„start“ mit folgender Regel:
start: GKLAMMERAUF
( "ontology" …
| …
)
GKLAMMERZU
(klassendefinition | instanzdefinition)* ;
Die Grammatik lässt es zu, dass Klassendefinitionen und Instanzdefinitionen in einer
Datei stehen. Es ist aber Notwendig, dass man die Klassendefinitionen in eine Datei mit
der Endung „.dsd“ und Instanzdefinitionen in eine Datei mit der Endung „.did“ schreibt.
Diese Aufteilung ist nötig, damit der „FileIterator“ (siehe Anhang A.2) zuerst alle
Klassendefinition durchlaufen kann.
Da in der Datenbank aber jede Klassendefinition oder Instanzdefinition einzeln abgelegt
werden muss, besteht die Notwendigkeit der Aufteilung der Ontology-Datei auf einzelne
Klassen oder Instanzen.
4.2.1 Rahmenbedingung durch die Grammatik
Zur Veranschaulichung einiger typische Fälle, hier ein Beispiel aus der Datei
domain.cinema.dsd :
{ontology: domain.cinema}
public entityclass Hall
[
sound : SoundSystem,
defprop number : Integer,
defprop within : Cinema
]
public entityclass Category []
public entityclass SoundSystem []
Bei der Klasse SoundSystem sieht man das leere Klammernpaar. Bei Klassen erzwingt
die Grammatik [A.1] immer mindestens ein leeres Klammernpaar. Dafür sind folgende
Regeln in der Grammatik [A.1] verantwortlich:
Bachelor-Arbeit Lichtenstern
Seite 32 von 44
klassendefinition: ("public")? ("entityclass" | "valueclass")?
GROSSBEZEICHNER (vererbung)? klassendefblock
;
klassendefblock: KLAMMERAUF
(attributdefinition (KOMMA attributdefinition)*)?
KLAMMERZU
;
Bei Instanzen ist das nicht so. Hier kommen folgende Regeln zur Anwendung:
instanzdefinition: KLEINBEZEICHNER "as"
((klasse (instanzattributblock)?) |
declsetdef);
Der „instanzattributblock“ ist also optinal. Häufig wird diese Regeln bei Aufzählunen,
wie z.B. in der Datei domain.cinema.did, angewendet.
{ontology domain.cinema}
mono as SoundSystem
dolbyA as SoundSystem
dolbySR as SoundSystem
dolbyDigital as SoundSystem
dolbyEX as SoundSystem
thx as SoundSystem
Im nächsten Abschnitt „einfacher Algorithmus“ wird zunächst die Grundidee vorgestellt,
die vollständig funktionieren würde, wenn nicht dieser Sonderfall (der nicht erzwungenen
Klammern bei der Instanzdefinition) vorhanden wäre.
4.2.2 Einfacher Algorithmus
Die Grundidee bei Aufteilung der Dateien in einzelne Klassen oder Instanzen ist an den
Klammern zu erkennen, wo eine Klasse oder Instanz endet. Da aber Klassen oder
Instanzen verschachtelt sein können, wird aber zuerst ein Beispiel einer Verschachtelung
vorgestellt.
{ontology domain.cinema}
schauburg as Cinema
[
name = "Schauburg",
address = anonymous Address at domain.location
[
name = "Schauburg",
street = "Marienstraße 16",
zipCode = 76137,
city = karlsruhe
]
]
Bachelor-Arbeit Lichtenstern
Seite 33 von 44
Und hier der „einfache“ Algorithmus:
static int level = 0;
static void doChar(char c) // Datei wird Zeichen für Zeichen
{
// in c durchlaufen
if ( c == '[' )
level++;
if ( c == ']' )
{
level--;
if ( level == 0 )
new_data();
}
// Blockende wurde erkannt,
// dann rufe Methode new_data() auf
}
4.2.3 Gewählter Algorithmus
Da beim „einfachen“ Algorithmus der Problem mit den nicht erzwungenen
leeren Klammernpaaren bei Instanzen besteht, wurde dieses Problem mit
dem „PushbackReader“ bewähltigt.
static PushbackReader input_data;
input_data = new PushbackReader
(
new BufferedReader (
new FileReader (
new File ( absFileName ))),
1024 // Size of Pushback-Puffer
);
if (token.equals("at"))
at_flag = true;
else
{
for (int i=token.length()-1; i >= 0; i--)
{
input_data.unread( token.charAt(i) );
}
new_data();
}
Das Problem wir also dadurch gelöst, in dem das nächste Token geholt und geprüft wird.
Sollte sich aber herausstellen, das der Block schon zu ende ist, wird das zuviel gelesene
Token mit der Methode „unread“ zurückgegeben und mit der Methode „new_data()“ ein
neuer Block angefangen. Damit können nun auch die Instanzen aufgeteilt werden.
Bachelor-Arbeit Lichtenstern
Seite 34 von 44
5 Zusammenfassung
Im Rahmen dieser Bachelor - Arbeit wurde ein Konzept erarbeitet, und die Basis dafür
implementiert, wie man mit einem relationalen Datenbanksystem, auf nicht besonders
leistungsfähiger Hardware, auch bei großen und sehr großen Ontologien ein Ablage- und
Zugriffssystem realisieren kann. Dabei wurde die Standardtechnik der relationalen
Datenbanksysteme gewählt, da diese ausgereifte und sichere Technik den meisten Nutzen
auf nicht besonders leistungsfähiger Hardware in diesem Umfeld verspricht.
Einige Idee, besonders in Bezug auf Optimierung, konnten während der raschen
Weiterentwicklung des DIANE - Projekts noch nicht umgesetzt werden, da auf die nötige
Flexibilität für zukünftige Änderungen geachtet werden musste.
In der Zukunft wir deshalb zu prüfen sein, in wie weit es möglich und sinnvoll ist z.B.
mehrfache Übersetzung der gleichen Daten zu vermeiden. Dazu könnte man in Zukunft
die JC-DSD auch in der Datenbank mit abspeichern.
Bachelor-Arbeit Lichtenstern
Seite 35 von 44
A Anhang
A.1 Grammatik ( ontology/xdiane3sa/grammar/f-dsd-pure.g )
// GRAMMAR FOR DIANE SERVICE DESCRIPTIONS (F-DSD)
start: GKLAMMERAUF
( "ontology" (DOPPELPUNKT)? paket
| "offer"
| "request" ( KOMMA "invoke"
("all" (GROESSERGLEICH ZAHL)? "best" ZAHL) )?
)
GKLAMMERZU
(klassendefinition | instanzdefinition)*
;
klassendefinition: ("public")? ("entityclass" | "valueclass")?
GROSSBEZEICHNER (vererbung)? klassendefblock
;
vererbung: "extends" klasse
;
klassendefblock: KLAMMERAUF
( attributdefinition (KOMMA attributdefinition)*)?
KLAMMERZU
;
attributdefinition: ("defprop" | "orthprop")?
KLEINBEZEICHNER DOPPELPUNKT ("list" "of")? klasse
;
paket: KLEINBEZEICHNER
;
(PUNKT KLEINBEZEICHNER)*
klasse: GROSSBEZEICHNER ("at" paket)?
;
instanz: KLEINBEZEICHNER
;
("as" klasse)?
instanzdefinition: KLEINBEZEICHNER "as"
((klasse (instanzattributblock)?) |
;
declsetdef)
instanzattributblock: KLAMMERAUF
zuweisung (KOMMA zuweisung)*
KLAMMERZU
;
Bachelor-Arbeit Lichtenstern
Seite 36 von 44
zuweisung: KLEINBEZEICHNER (PLUS)? GLEICH
( primitiverwert
| instanz
| LABEL
| anonidef
| vardef
| "one" "from" setdef
)
;
anonidef: "anonymous" (l:LABEL)? klasse (instanzattributblock)?
;
primitiverwert: (
|
|
|
|
|
|
)
;
STRING
ZAHL
BOOLEAN
DATE
TIME
DATETIME
DURATION
vardef: "var"
(l:LABEL)?
(
RKLAMMERAUF
who KOMMA
when KOMMA
ZAHL
RKLAMMERZU
)+
"from" setdef
( "default" (primitiverwert | instanz | anonidef) )?
;
who: ("in" | "IN" | "out" | "OUT")
;
when: ("e" | "E" | "x" | "X")
;
setdef: ("lists" "buildable" "from")?
( klasse
| enumsetdef
| declsetdef
)
;
enumsetdef: GKLAMMERAUF
(
instanz (KLAMMERAUF ZAHL KLAMMERZU)?
(KOMMA instanz (KLAMMERAUF ZAHL KLAMMERZU)?)*
|
primitiverwert (KLAMMERAUF ZAHL KLAMMERZU)?
(KOMMA primitiverwert (KLAMMERAUF ZAHL KLAMMERZU)?)* )
GKLAMMERZU
;
Bachelor-Arbeit Lichtenstern
Seite 37 von 44
declsetdef: RKLAMMERAUF
(l:LABEL)?
"set" "of" klasse
(typecheckstrategy)?
(directcondition)*
(propertycondition)*
(connectingstrategy)?
RKLAMMERZU
;
typecheckstrategy: "or" ("fuzzy")?
("supertype" | "subtype")
(KLAMMERAUF ZAHL KLAMMERZU)?
;
directcondition: "with" "elements"
(primitivecondition | instancecondition)
;
primitivecondition: (WAVE)?
(TAGAUF | KLEINERGLEICH | GLEICHGLEICH |
GROESSERGLEICH | TAGZU | UNGLEICH)
primitiverwert
;
instancecondition: ( (GLEICHGLEICH | UNGLEICH) instanz
| "sim" RKLAMMERAUF instanz RKLAMMERZU
| "in" enumsetdef
)
;
propertycondition: ("where" | "and")
(ms=missingstrategy)?
KLEINBEZEICHNER
( GLEICHGLEICH primitiverwert
| GLEICHGLEICH instanz
| GLEICHGLEICH vardef
| "in" setdef
)
;
missingstrategy: GKLAMMERAUF
"when" "missing"
( "ask"
| "assume" "failed"
| "ignore"
| "assume" "fulfilled"
| "assume" "value" KLAMMERAUF ZAHL KLAMMERZU
)
GKLAMMERZU
;
Bachelor-Arbeit Lichtenstern
Seite 38 von 44
connectingstrategy: "combine" "by" cexpression
;
cexpression: ( KLEINBEZEICHNER
| ("exp" RKLAMMERAUF cexpression KOMMA ZAHL RKLAMMERZU)
| RKLAMMERAUF
cexpression ("and" | "or" | "mul" | "add") cexpression
RKLAMMERZU
| ("min" | "max")
RKLAMMERAUF
cexpression (KOMMA cexpression)+
RKLAMMERZU
| RKLAMMERAUF
ZAHL STERN cexpression (PLUS ZAHL STERN cexpression)+
RKLAMMERZU
)
;
// LEXER
KLEINBUCHSTABE
GROSSBUCHSTABE
ZIFFER
US
KLAMMERAUF
KLAMMERZU
RKLAMMERAUF
RKLAMMERZU
GKLAMMERAUF
GKLAMMERZU
GLEICH
GLEICHGLEICH
KOMMA
PUNKT
DOPPELPUNKT
STERN
SEMI
HOCH
TAGAUF
TAGZU
KLEINERGLEICH
GROESSERGLEICH
UNGLEICH
PLUS
WAVE
DOLLAR
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
'a'..'z';
'A'..'Z';
'0'..'9';
'_';
'{';
'}';
'(';
')';
'{';
'}';
'=';
"==";
',';
'.';
':';
'*';
';';
'^';
'<';
'>';
"<=";
">=";
"!=";
'+';
'~';
'$';
Bachelor-Arbeit Lichtenstern
Seite 39 von 44
// Whitespace -- ignored
WS:
(
' '
|
'\t'
|
'\f'
|
(
options
:
"\r\n"
|
'\r'
|
'\n'
)
)+
;
// Single-line comments
SL_COMMENT: "//"
(~('\n'|'\r')) ('\n'|'\r'('\n')?)
;
//Built-in types
ZAHL: ('-')? (ZIFFER)+ ('.' (ZIFFER)+)?
;
BOOLEAN: TAGAUF ("true" | "false") TAGZU
;
STRING: '"' (~('"'|'\\'|'\n'|'\r')) '"'
;
// <YYYY-MM-DD>
DATE: TAGAUF
ZIFFER ZIFFER ZIFFER ZIFFER
'-' ZIFFER ZIFFER
'-' ZIFFER ZIFFER
TAGZU
;
TIME: TAGAUF
ZIFFER ZIFFER DOPPELPUNKT ZIFFER ZIFFER
(DOPPELPUNKT ZIFFER ZIFFER
(PUNKT ZIFFER ZIFFER ZIFFER)?)?
TAGZU
;
DATETIME: TAGAUF
ZIFFER ZIFFER ZIFFER ZIFFER
'-' ZIFFER ZIFFER
'-' ZIFFER ZIFFER
'T'
ZIFFER ZIFFER DOPPELPUNKT ZIFFER ZIFFER
(DOPPELPUNKT ZIFFER ZIFFER
(PUNKT ZIFFER ZIFFER ZIFFER)?)?
TAGZU
;
Bachelor-Arbeit Lichtenstern
Seite 40 von 44
DURATION: TAGAUF
'P' (KZAHL ('Y'|'M'|'D'))*
('T' (KZAHL ('.' KZAHL)? ('M'|'S'))*)?
TAGZU
;
KZAHL: ZIFFER ((ZIFFER) (ZIFFER)?)?
;
//Bezeichner
GROSSBEZEICHNER:
GROSSBUCHSTABE(US|GROSSBUCHSTABE|KLEINBUCHSTABE|ZIFFER);
KLEINBEZEICHNER:
KLEINBUCHSTABE(US|GROSSBUCHSTABE|KLEINBUCHSTABE|ZIFFER);
LABEL:
DOLLAR KLEINBEZEICHNER;|
Bachelor-Arbeit Lichtenstern
Seite 41 von 44
A.2 FileIterator
package diane.xdiane3sa.transformer;
import java.io.*;
public class FileIterator
{
public static void main(String[] args)
{
File file=null;
try
{
file= new File(args[1]);
}
// args[1] übergibt den Namen
// des Verzeichnis der Dateien
catch(Exception e) { System.out.println(e+
"\nDer angegebene Pfad existiert nicht!");}
if (file.isDirectory())
{
getFiles(file,".dsd");
getFiles(file,".did");
getFiles(file,".dod");
getFiles(file,".drd");
}
//
//
//
//
Diane
Diane
Diane
Diane
Schema
Instance
Offer
Request
Description
Description
Description
Description
}
//----------------------------------------------------------------static void getFiles(File file, String dateityp)
{
File[] files = file.listFiles();
for(int i=0;i<Array.getLength(files);i++)
{
if (files[i].isDirectory())
{
getFiles(files[i], dateityp);
}
String filename = files[i].getName();
if (filename.endsWith(dateityp))
{
System.out.println(files[i].getName());
FDSD_Transformer.transform(files[i].getAbsolutePath());
}
}
}
}
Bachelor-Arbeit Lichtenstern
Seite 42 von 44
Quellenverzeichnis
Hinweis: Alle Verknüpfungen (Links) beziehen sich auf dem Stand vom 15.10.2004
[3SA]
Frank Schell, Christoph Schaa, Thorsten Höllrigl, Universität Karlsruhe,
Schaffung einer formalen Grundlage für Dienstbeschreibungen
in DIANE und Entwicklung von geeigneten Werkzeugen und
Beispielen, Dreier-Studienarbeit, Juni 2004
http://www.ipd.uka.de/DIANE/docs/3sa.pdf
[ANTLR]
ANTLR, ANother Tool for Language Recognition
http://www.antlr.org
[CVS]
CVS, CVS Home Page
https://www.cvshome.org
[DB2]
DB2, Universal Database
(Don Chamerlin, A COMPLETE GUIDE TO DB 2)
http://www.software.ibm.com/data/db2
[DIANE]
DIANE-Projekt: Dienste in Ad-Hoc-Netzen, Universität Karlsruhe,
http://www.ipd.uka.de/DIANE/de
[DSD]
Michael Klein, Universität Karlsruhe,
DSD-Cookbook: Handbuch DIANE Service Description, Version 0.4.1
http://www.ipd.uka.de/DIANE/docs/DSD-Cookbook.pdf
[G-DSD]
Thomas Herzog, Universität Karlsruhe,
Aktive VISO-Schablonen zur grafischen Erstellung
von DIANE-Dienstbeschreibungen
http://www.ipd.uka.de/DIANE/de (siehe u.a. bei Mitarbeiter)
[JAVA]
Java, Java Technology Home Page
http://java.sun.com
[JEDIT]
JEDIT, Home Page des Programmer’s Text Editor
Written in Java, so it runs on MacOS X, Unix and Windows.
Supports a large number of character encodings
including UTF8 and Unicode.
http://www.jedit.org
[MCKOI]
Mckoi, SQL Database
An Open Source Java SQL Database
http://mckoi.com/database/
Bachelor-Arbeit Lichtenstern
Seite 43 von 44
[MYSQL]
MySQL, SQL Database
“The world’s most popular open source database”
http://www.mysql.com
[POSTGRESQL]
PostgreSQL, SQL Database
“The world’s most advanced open source database has supported
Unicode since version 7.1”
http://www.postgresql.org
[UNICODE] Unicode, Unicode Home Page
http://www.unicode.org
[UTF-8]
Markus Günther Kuhn, University of Cambridge,
UTF-8 and Unicode FAQ for Unix/Linux
http://www.cl.cam.ac.uk/~mgk25/unicode.html
Bachelor-Arbeit Lichtenstern
Seite 44 von 44
Herunterladen