Beruflich Dokumente
Kultur Dokumente
Masterarbeit
zur Erlangung des Grades Master of Science (M.Sc.)
an der Fakultät Informatik
der Universität Leipzig
Inhaltsverzeichnis ................................................................................................ I
Glossar ............................................................................................................. IV
Tabellenverzeichnis .......................................................................................... VI
Abbildungsverzeichnis ..................................................................................... VII
Codeverzeichnis ............................................................................................. VIII
Abkürzungsverzeichnis ...................................................................................... X
Literatur- und Quellenverzeichnis ..................................................................... XI
I
3.5.1.1. XML-Content........................................................................... 32
3.5.1.2. TM-Content ............................................................................. 33
3.5.2. Tupel und Tupelsequenzen – Tupel-Expression ........................... 34
3.5.2.1. Vergleich und Sortierungen von Tupeln und Sequenzen........ 35
3.5.2.2. Stringifying - Serialisierung von Tupeln .................................. 37
3.5.3. Value-Expression und Function-Invocations ................................. 37
3.5.4. Wahrheitsausdrücke – Boolean-Primitive und Expression ............ 38
3.6. Query-Ausdrücke ................................................................................. 39
3.6.1. Verarbeitungsmodell ..................................................................... 40
3.6.2. Variablen und Variablenbindung ................................................... 42
3.6.3. Path-Expression ............................................................................ 44
3.6.3.1. Projektion und Filterung .......................................................... 44
3.6.3.2. Predicate-Invocations ............................................................. 46
3.6.4. Select-Expression – der SQL-Style ............................................... 47
3.6.5. FLWR-Expression ......................................................................... 50
4. Vergleich zu anderen Anfragesprachen - Toma und Tolog ....................... 52
4.1. Tolog und die Parallelen zu TMQL ...................................................... 52
4.2. Toma und TMQL .................................................................................. 54
5. Analyse der Kritikpunkte des aktuellen Drafts............................................ 57
5.1. Kritikpunkt - Navigationsachsen........................................................... 57
5.1.1. Die atomify-Achse ......................................................................... 57
5.1.2. Die characteristics-Achse .............................................................. 61
5.1.3. Die types- und supertypes-Achsen................................................ 63
5.1.4. Die traverse-Achse ........................................................................ 64
5.2. Kritikpunkt – Komplexität des Draft und der Grammatik ...................... 66
5.2.1. Inkonsistenz durch Auflösung eines Item-Identifier ....................... 66
5.2.2. Diskussion um das Non-Canonical Level ...................................... 67
5.2.3. Kritikpunkt – Variablennamen ....................................................... 68
6. Entwurf und Implementierung der TMQL-Engine - TMQL4J ...................... 70
6.1. Verwendung von TMQL4J ................................................................... 70
6.2. Hohe Flexibilität durch Modularisierung ............................................... 71
6.3. TMQL-Laufzeitumgebung .................................................................... 71
6.4. Abgrenzung der TMQL4J-Module ........................................................ 73
6.4.1. Navigationsmodul – Achsenimplementierung mit der TMAPI........ 73
II
6.4.2. Vorverarbeitungsroutine ................................................................ 77
6.4.3. TMQL-Lexer .................................................................................. 78
6.4.4. TMQL-Parser und Baumgenerierung ............................................ 79
6.4.5. TMQL-Interpreter........................................................................... 82
6.4.6. TMQL-Ergebnisverarbeitungsroutine ............................................ 85
6.5. Visualisierungstool TMQL4JViz ........................................................... 87
7. Testkonzeption .......................................................................................... 89
7.1. Testframework JUnit ............................................................................ 89
7.2. CXTM-Exports ..................................................................................... 91
8. Ausblick ..................................................................................................... 93
8.1. Weiterentwicklungen ............................................................................ 93
8.2. Optimierungsansätze ........................................................................... 94
9. Schlusswort ............................................................................................... 97
III
Glossar
IV
Pragma Als Pragma wird die Definition von TMQL-Systemvariablen
bezeichnet, welche den Verarbeitungsprozess der TMQL-
Engine beeinflussen.
V
Tabellenverzeichnis
Tabelle 1 - kleiner Vergleich des Funktionsumfanges von SQL und TMQL ...... 17
Tabelle 2 - verwendete Namensräume anderer Standards innerhalb der TMQL-
Ontologie ................................................................................................... 25
Tabelle 3 - Übersicht über die gültigen Atome des aktuellen Drafts, sowie deren
möglichen Wertausprägungen[13] ............................................................. 27
Tabelle 4 - Navigationsachsen von TMQL, basierend auf der Struktur einer
Topic Maps nach TMDM ............................................................................ 30
Tabelle 5 - Achsennamen von Toma ................................................................ 55
Tabelle 6 - TMQL4J-Laufzeitmessung mit JUnit ............................................... 90
VI
Abbildungsverzeichnis
VII
Codeverzeichnis
VIII
Codefragment 27 - spezielle Produktionsregeln für Filterdefinition auf dem Non-
Canonical Level ................................................................................................ 45
Codefragment 28 - Beispiel für eine Kombination von Projektion und Filtern ... 45
Codefragment 29 - Produktionsregel und Beispiel einer Predicate-Invocation . 46
Codefragment 30 - spezielle Predicate Invocation für Typ-Instanz- und
Supertyp-Subtyp-Beziehung ...................................................................... 47
Codefragment 31 - Grammatikregel der Select-Expression .............................. 47
Codefragment 32 - Grammatikregel des FLWR-Style....................................... 50
Codefragment 33 - einfacher Tolog-Query ....................................................... 52
Codefragment 34 - Verknüpfung von Prädikaten in Tolog ................................ 53
Codefragment 35 - Select-Style von Tolog ....................................................... 53
Codefragment 36 - Select-Style von Toma mit einem simplen Beispiel ............ 54
Codefragment 37 - Konzept der Verkettung von Spielern................................. 55
Codefragment 38 - XSD-Definition der Abbildung von Java-Datentypen auf
XSD-Datentypen ........................................................................................ 59
Codefragment 39 - manuelle Typdefinition innerhalb eines TMQL-Ausdruck[13]
................................................................................................................... 60
Codefragment 40 - Definition zweier Assoziationen.......................................... 65
Codefragment 41 - TMQL-Navigation und mögliche Ergebnismengen ............. 66
Codefragment 42 - Mehrdeutigkeit innerhalb des NCL am Beispiel zweier
Grammatikregeln ....................................................................................... 67
Codefragment 43 - Kritik an der semantische Bedeutung der nachstehenden
Anführungszeichen in Variablennamen ..................................................... 69
Codefragment 44 - Kritik an der semantischen Bedeutung von Präfixen in
Variablennamen......................................................................................... 69
Codefragment 45 - Realisierung der locators Achse auf Basis der TMAPI 2.0 . 75
Codefragment 46 - TMQL-Query und Ergebnissequenzen für Multi-Set-
Problematik ................................................................................................ 95
IX
Abkürzungsverzeichnis
Abkürzung Bedeutung
API Application Programming Interface
BNF Backus-Naur-Form
CTM Compact Topic Maps Syntax
CXTM Canonical XTM
DC Dublin Core
DCL Data Control Language
DDL Data Definition Language
DML Data Manipulation Language
DOM Document Object Model
IEC Internationale Elektrotechnische Kommission
IRI Internationalized Resource Identifier
ISO International Standards Organisation
JDBC Java Database Conectivity
RDF Resource Description Framework
RegExp Regular Expression
RTM Ruby Topic Maps
SAX Simple API for XML
SQL Structured Query Language
SVG Scalable Vector Graphics
TMAPI Common Topic Map Application Programming Interface
TMCL Topic Maps Constraint Language
TMDM Topic Maps Data Model
TMML Topic Maps Modification Language
TMQL Topic Maps Query Language
URL Uniform Resource Locator
XML Extensible Markup Language
XML Infoset XML Information Set
XPath XML Path Language
XSD XML Schema Definition
XTM XML Syntax for Topic Maps
X
1. Vorwort, Einleitung und Motivation
Die Verwendung von Topic Maps als Modellierungsmethodik für Daten und
Wissen begründet sich in verschiedenster Weise. „Topic Maps stellt das einzige
Modell dar, welches für Menschen optimiert ist und nicht nur für Maschinen“1
und ermöglicht somit eine leichte und komfortable Modellierung der
Datenstrukturen. Zusätzlich erhöht das starke Rollenkonzept des Datenmodells
die Intuition bei der Benutzung der darüber liegenden Webanwendungen und
Softwareprodukte. Ein Nebenprodukt des starken Beziehungsmodells ist die
grobe Beschreibung der Navigationsstruktur des zu entwickelnden Portals und
die Vereinheitlichung des Verständnisses zwischen Informationssicht und
Anwendersicht. Das Topic-Maps-Datenmodell eignet sich somit in effizienter
und optimaler Weise für die Implementierung von Webanwendungen.
1
Zitat: Benjamin Bock aus [24]
1
1. Vorwort, Einleitung und Motivation
Ziel von TMQL ist die Realisierung einer mächtigen Sprache, wie SQL, im
Topic-Maps-Umfeld. TMQL ermöglicht die Verwendung und Handhabung sehr
großer Datenquellen in einfacher Weise, bietet effiziente Werkzeuge zur
Abfrage komplexer Beziehungen zwischen Informationselementen und
reduziert somit die Anzahl der benötigten Abfragen an die Datenbasis auf ein
Minimum. Die Sprache TMQL besitzt das Potential eine Bedeutung wie SQL zu
gewinnen und die Verwendung von Topic-Maps-Engines zu erleichtern und zu
optimieren, sowie den Zugriff auf ein konkretes Datenbackend transparent zu
gestalten. Dem Nutzer wird somit die Möglichkeit gegeben, die gewünschten
Informationen ohne Verständnis der internen Topic-Maps-Datenstrukturen zu
extrahieren und zu verwenden, sowie wichtige Abfragen vorhalten zu können,
um die Effizienz seiner Anwendung weiter optimieren zu können.
Zielstellung dieser Arbeit ist die Analyse des aktuellen Draft des TMQL-
Standards mit dem Ziel der Konzeption und Entwicklung einer TMQL-Engine.
Hintergrund der Analyse ist detaillierte Auseinandersetzung mit der Grammatik
von TMQL, sowie der syntaktischen Sprachelemente und deren semantischer
2
1. Vorwort, Einleitung und Motivation
Ergebnisse dieser Analyse bilden die Grundlage des Entwurfes und der
späteren Implementierung der TMQL-Engine, sowie deren einzelnen
Komponenten.
1.2. Vorgehensweise
3
1. Vorwort, Einleitung und Motivation
Kapitel 5 setzt sich kritisch mit den bereits angerissenen Diskussions- und
Kritikpunkten des aktuellen Draft, sowie daraus resultierenden Entwurfs- und
Implementierungsproblemen auseinander. Ferner werden aktuelle
Lösungsvorschläge aufgezeigt und diskutiert, sowie die verwendende Lösung
der TMQL-Engine benannt.
Zielstellung der Kapitel 2 bis 5 ist das fundierte Verständnis der Sprache TMQL,
deren Abgrenzung zu anderen Sprachen, sowie die Analyse von
Problemstellungen, welche im Rahmen des aktuellen Drafts entstehen. Dieses
fundierte Verständnis der Terminologie bildet die Grundlage des Entwurf, sowie
der Umsetzung der TMQL-Engine. Inhalt des Entwurfs ist die Betrachtung der
eingesetzten Softwaretechnologie, der Komponentenentwicklung bzw.
Modularisierung, sowie die Abgrenzung und Umsetzung der einzelnen
Komponenten der Engine.
Das vorletzte Kapitel befasst sich mit der Analyse der eingesetzten
Testverfahren, sowie der detaillierten Betrachtung der, im Rahmen der
Implementierung, eingesetzten Testansätze JUnit und CXTM.
Ziel dieser Arbeit ist die detaillierte Auseinandersetzung mit dem aktuellen Draft
hinsichtlich der Modellierung gemäß dem TMDM, der fundamentalen
Sprachkonzepte, sowie der größten Schwächen des kommenden Standards.
Inhalt der Arbeit ist neben der Analyse und Diskussion von Problemen und
Kritikpunkten, die Implementierung eines rudimentären Parsers und Interpreters
für TMQL-Abfragen auf Basis der TMAPI.
4
2. Grundlagen
2. Grundlagen
Die aktuelle Spezifikation von TMQL nimmt Bezug auf eine Zahl existierender
Standards aus dem Bereich Topic Maps und anderer Industriezweige und
Technologien. Ein grober Blick auf diese Standards ist grundlegend für das
Verständnis der Problemstellung und von TMQL.
Der Zugriff der Daten, sowie die Modellierung einzelner Ausdrücke in TMQL,
orientieren sich stark am Topic-Maps-Datenmodell. Um die Konzepte innerhalb
von TMQL verstehen zu können, ist eine Analyse der Konzepte des TMDM
grundlegend.
Das TMDM spezifiziert das Datenmodell einer Topic Maps und definiert die
abstrakte Struktur und Beziehung als Elemente von Topic Maps auf Basis einer
Menge von Regeln und Formalismen. Das Metamodell des ISO-Standards
13250 entspricht dem Metamodell vom XML Information Set, kurz XML Infoset.
Per Definition des Metamodells enthält jede Instanz des TMDM eine Menge von
Informationselementen, welche im Kontext von Topic Maps, jedes für sich ein
konkretes Element innerhalb einer Topic Maps beschreiben. Jedes
Informationselement besitzt, neben einer eindeutigen Identität, eine definierte
Menge benannter Attribute, welche über ihren abstrakten Informationstyp
(Information Type) spezifiziert werden. Abbildung 1 abstrahiert die
Klassenhierarchie von Information Typs des TMDM.
5
2. Grundlagen
6
2. Grundlagen
Topics enthalten eine Menge von Occurrences und Namen, welche je nach
Interpretation der Rolle eines Topics verschiedene Bedeutungen umfassen, so
definiert ein Typ A die Menge von Occurrences und Namen, welche alle
Instanzen des Typs besitzen müssen. Instanzen hingegen besitzen stets
konkrete Wertausprägungen für die enthaltenen Namen und Occurrences. So
definiert der Typ Stadt beispielsweise eine Occurrence für seine Einwohnerzahl,
besitzt selber aber keinen Wert dafür. Das Topic Leipzig als Instanz beinhaltet
hingegen die konkrete Wertausprägung dieser Eigenschaft von ca. 515 000
Einwohnern.
7
2. Grundlagen
Als Reifikation wird der Prozess der Erstellung eines neuen Topics bezeichnet,
welches kein Subjekt der realen Welt repräsentiert, sondern als Repräsentation
eines anderen Topic-Maps-Elementes derselben Topic Maps agiert. Folglich
kann jedes Topic-Maps-Element reifiziert werden, mit Ausnahme von Topics
selber, da die Reifikation eines Topic semantisch gleichbedeutend mit der
Erzeugung zweier Topics für denselben Gegenstand wäre, welche automatisch
verschmolzen werden müssten. Das Konzept der Reifikation ermöglicht somit
die Definition zusätzlicher Informationen über eine Struktur oder ein Element
innerhalb der Topic Maps mit Ausnahme von Topics.
Das Common Topic Map Application Programming Interface, kurz TMAPI, stellt
den aktuellen De-facto-Standard zur Implementierung und von Topic-Maps-
Engines dar. Die TMAPI spezifiziert eine Menge von Schnittstellen für den
Zugriff und die Manipulation von Daten beliebiger Topic-Maps-Backends, wie
SQL-Datenbanken oder In-Speicher-Lösungen und abstrahiert stark von der
darunterliegenden Datenhaltung.
„TMAPI hopes to do for topic maps what SAX and DOM did for XML”2, dieses
Zitat der TMAPI-Community beschreibt kurz und prägnant die Idee hinter der
Programmierschnittstelle. Aktuell existieren eine Menge proprietäre, aber auch
freie Engines, welche alle ihre eigenen Schnittstellen besitzen, was eine
Portierung von Softwarecodes erschwert oder gar unmöglich macht. Durch
Verwendung einer einheitlichen Schnittstelle soll dieses Problem gelöst werden.
„Die TMAPI ist dabei allerdings bewusst kein ISO-Standard“, so die Meinung
von Robert Barta (Entwickler von TMAPI und Topic-Maps-Experte). Seiner
Auffassung nach würde der Prozess der ISO-Standardisierung den schnellen
2
Zitat aus [23]
8
2. Grundlagen
Aktuell erfüllt eine Vielzahl der Topic-Maps-Engines die Testfälle der TMAPI
1.0, welche die volle und korrekte Funktionalität auf Basis der Schnittstelle und
die Kompatibilität sicher stellen. Die sich aktuell im Alpha-Status befindliche
TMAPI 2.0 wird noch von wenigen Engines unterstützt, da einige Bestandteile
noch nicht zu einhundert Prozent spezifiziert und integriert sind.
Eine der bekanntesten Umsetzung der TMAPI 2.0 ist die Ruby-Topic-Maps-
Engine (RTM). Dabei bietet RTM neben dem angesprochen Minimalumfang der
TMAPI weitere hilfreiche Funktionen und Methoden, welche die Verwendung
von Topic-Maps-Engines weiter vereinfacht und effizienter gestaltet. Anders als
durch die TMAPI spezifiziert, ermöglicht RTM die Verwendung von
Zeichenketten als IRI-Repräsentation der Identifier von Topics, als Parameter
jeder Funktionen der TMAPI. Die TMAPI sieht an diesen Stellen einzig die
Verwendung der Klasse Locator vor, wodurch der Aufruf einer weiteren
Funktion zur Erzeugung eines Locator bedingt wird. Ferner ermöglicht RTM den
direkten Zugriff auf Namen und Occurrences per Hash-Access oder Array-
Syntax und abstrahiert weiter von der TMAPI.
leipzig = topicmap.get!(„leipzig“)
population = leipzig[„population“]
9
2. Grundlagen
Die aktuellste Version von RTM unterstützt zusätzlich einen TMQL-Modus zur
Simulation der TMQL-Achsen. Dieser Modus ermöglicht die Verwendung der
TMQL-Achsen als Methoden der einzelnen Objekte der TMAPI, bildet allerdings
nicht die komplette syntaktischen Möglichkeiten des TMQL-Drafts ab, sondern
bezieht sich lediglich auf die TMQL-Achsen.
10
2. Grundlagen
das TMDM bzw. die verwendete Syntax (CTM oder XTM) führen während des
Prozesses zu einem Fehler.
Das Konstrukt zur Definition von Topics kann neben einer Menge von
eindeutigen Identifier, optional eine Menge von Occurrences, Namen, Typ-
Instanz-Beziehungen und Supertyp-Subtyp-Beziehungen enthalten. Die
Verwendung spezifischer vorangestellter Zeichen innerhalb der IRI spezifiziert
die Art des Identifier. Ein Subject-Locator wird durch das Gleichheitszeichen
und ein Item-Identifier durch das Zeichen (^) modelliert. Die Schlüsselwörter isa
bzw. ako repräsentieren eine Typ-Instanz- bzw. eine Supertyp-Subtyp-
Beziehung. Einige der spezifizierten Zeichen finden auch im Rahmen des
Navigationskonzeptes von TMQL (3.4.2) Anwendung.
11
2. Grundlagen
Als Beispiel sei folgendes CTM-Fragment zur Definition eines Topics für die
Stadt Leipzig genannt, sowie die Definition der Occurrence für die
Einwohnerzahl.
Die Beschreibung von Assoziation erfolgt durch Angabe des Typs, sowie eine
Menge von Rollentyp-Spieler-Beziehungen. Rollentypen und Spieler werden
über einen Topic-Identifier repräsentiert, die konkrete Beziehung zwischen
Rollentyp und Spieler durch Doppelpunkt beschrieben. Die Position der
Leerzeichen ist dabei nahezu frei, mit Ausnahme der Regel, dass mindestens
ein Leerzeichen vor oder nach dem Doppelpunkt eingefügt werden muss. Diese
Syntax wird auch von TMQL verwendet, die genaue Beschreibung erfolgt in
dem entsprechenden Kapitel (3.6.3.2).
12
2. Grundlagen
13
2. Grundlagen
<xs:element name="topic">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="itemIdentity"/>
<xs:element ref="subjectLocator"/>
<xs:element ref="subjectIdentifier"/>
</xs:choice>
<xs:element ref="instanceOf" minOccurs="0" maxOccurs="1"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="name"/>
<xs:element ref="occurrence"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
</xs:element>
Codefragment 4 - XSD des XML-Elements für Topics[9]
Der XSD-Typ für ein Topic besitzt, wie die Informationsressource des TMDM,
eine Menge von Occurrences und Namen, sowie eine Menge eindeutiger
Identifier zur Repräsentierung des beschrieben Gegenstandes. Typ-Instanz
Informationen des Topics werden über den instance-of Block definiert, welcher
eine Menge von Referenzen auf definierte Topic-XML-Elemente beinhaltet.
<xs:element name="association">
<xs:complexType>
<xs:sequence>
<xs:element ref="itemIdentity" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element ref="type"/>
<xs:element ref="scope" minOccurs="0"/>
<xs:element ref="role" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="reifier" type="xs:anyURI"/>
</xs:complexType>
</xs:element>
Codefragment 5 - XSD des XML-Elements für Assoziation[9]
Neben der eindeutigen Identität der Instanz der Assoziation, sowie dem Bezug
auf einen Assoziationstyp, definiert der komplexe Typ eine Menge von Rollen
sowie Topics zur Repräsentierung des Scope der Assoziation. Der Rollentyp
14
2. Grundlagen
beinhaltet eine Sequenz von Identifiern, Typen und einer Referenz auf den
konkreten Spieler dieser Rolle.
Zur exakten Einordnung von TMQL empfiehlt sich die Betrachtung existierender
und inhaltlich ähnlicher Standards. Als wichtigste Standards in diesem Bereich
sind SQL als Abfrage- und Manipulationssprache für relationale Datenbanken,
sowie SPARQL für RDF und XPath für XML anzusehen. Die Sprachen
SPARQL und XPath werden dabei nur kurz angerissen.
Die Betrachtung von SQL als Abfrage- und Manipulationssprache für relationale
Datenbanken im Vergleich zu TMQL erscheint als sinnvoll unter der Annahme,
dass TMQL sich als wichtigstes Ebenbild von SQL im Bereich Topic Maps
etablieren wird. Ziel der Betrachtung ist die Abgrenzung des
Funktionsumfanges von TMQL im Vergleich zu SQL. Dabei werden einzelne
funktionale Bestandteile von SQL unter dem Gesichtspunkt einer Übernahme in
den aktuellen TMQL-Draft analysiert. Eine solche Untersuchung erscheint als
sinnvoll, da sich SQL bereits seit 23 Jahren als Standard behauptet und in
einem jahrelangen Anpassungsprozess durch Zusammenarbeit einer großen
Community einen hohen Grad an Vollständigkeit, Konsistenz und
Verwendbarkeit aufweist.
15
2. Grundlagen
SELECT <value-expression>
[FROM value-expression]
[WHERE boolean-expression]
[ORDER BY <value-expression>]
[UNIQUE]
[OFFSET value-expression]
[LIMIT value-expression]
Codefragment 7 - Syntax einer TMQL-Select-Anweisung[13]
16
2. Grundlagen
Sowohl SQL auch als TMQL bietet eine Menge von Funktionen, welche im
Kontext von Anfragen verwendet werden können, um Informationen zu
extrahieren oder den Wert temporär zu manipulieren. Zum Funktionsumfang
von SQL gehören die bereits angesprochen Aggregationsfunktionen,
Zeichenkettenfunktionen, sowie Funktionen für Zahlen und
Datumsinformationen. Im Vergleich zum Funktionsumfang zu TQML zeigt sich
eine geringe Schnittmenge, was in folgender Tabelle verdeutlicht werden soll.
Die Aufzählung der Funktionen stellt sowohl für TMQL als auch für SQL keinen
Anspruch auf Vollständigkeit. Eine vollständige Liste der TMQL-Funktionen
kann unter [13] eingesehen werden. TMQL besitzt aktuell kaum Zeichenketten-
bzw. Aggregationsfunktionen, eine Erweiterung um einige der benannten
Funktionen erscheint allerdings sinnvoll, da diese sich im SQL-Umfeld als
nützlich herausgestellt haben. Die Aggregationsfunktionen könnten im Bereich
17
2. Grundlagen
Die Sprache RDF stellt genau wie Topic Maps eine Realisierung des
aussagegegenstandszentrierten Modellierungsparadigmata dar und besitzt
äquivalent zu TMQL eine eigene Abfragesprache, SPARQL.
Kernkonzept von RDF sind Aussagen über Fakten und Subjekte der realen
Welt. Die Formulierung von Aussagen erfolgt als Trippel von Subjekt, Prädikat
und Objekt. Zur eindeutigen Repräsentierung von Subjekt, Objekt und Prädikat
werden URIs verwendet, eine Ausnahme dieser Regelung stellt die
Verwendung atomarer Werte als Objekt dar. Folgendes Beispiel soll dieses
fundamentale Konzept verdeutlichen.
Codefragment 8 - RDF-Beispiel
18
2. Grundlagen
Die Syntax von SPARQL weißt ebenfalls eine gewisse syntaktische Ähnlichkeit
zu SQL auf, variiert auf Basis des Datenmodells allerdings ein wenig. SPARQL-
Anfragen werden äquivalent zu RDF als Trippel formuliert, wobei die
Verwendung von Variablen, die gewünschte Information innerhalb des Query
kennzeichnet. Um die Information über das Subjekt Leipzig des
vorrangegangen Beispiels zu extrahieren ist folgende Abfrage nötig.
Codefragment 9 - SPARQL-Query
XPath stellt eine Abfragesprache zur Extraktion von Informationen aus XML-
Dokumenten dar und ermöglicht die Adressierung von Teilfragmenten innerhalb
des XML-Dokumentes. Die Betrachtung eines XML-Dokumentes erfolgt dabei
als Baumstruktur, wobei alle XML-Elemente, sowie Attribute, Kommentare und
textueller Inhalt, als Knoten betrachtet werden.
Als Prädikate unterstützt XPath einige Funktionen, welche bereits aus SQL
bekannt sind und im Rahmen von Zeichenketten- und Aggregationsfunktionen
unterstützt werden.
19
3. Topic Maps Query Language - TMQL
Die Topic Maps Query Language, kurz TMQL, stellt eine aktuelle
Standardisierungsbemühung der ISO und IEC für eine einheitliche und
mächtige Abfragesprache im Umfeld von Topic Maps dar.
Dieses Kapitel soll einen kurzen Einblick in die aktuelle Materie des TMQL-
Drafts geben. Ob alle der beschriebenen Elemente als Bestandteil des finalen
Standards übernommen werden, bleibt offen.
Die Grundlage und Basis der Entwicklung des aktuellen TMQL-Drafts bildeten
eine Menge von Anforderungen, welche der zu entwickelnde Standard
abdecken sollte. Weiter werden einige fundamentale Anwendungsfälle definiert,
welche unter Verwendung von TMQL effizient und einfach zu realisieren sein
sollten.
20
3. Topic Maps Query Language - TMQL
Basis der Sprache TMQL ist eine kontextfreie Grammatik zur Definition von
Produktionsregeln. Diese Produktionsregeln bilden die Basis der späteren
Validierung der an den Parser übergebenen Ausdrücke.
Die Grammatik von TMQL wird auf drei Ebenen definiert, welche jede für sich
auf einem bestehenden Industriestandard aufbaut und von unten nach oben
betrachtet eine höhere Aussagekraft besitzt.
Die unterste syntaktische Ebene der Grammatik von TMQL wird als Token
Level bezeichnet und basiert auf regulären Ausdrücken (RegExp). Reguläre
Ausdrücke werden verwendet um gültige Terminalsymbole als Zeichenfolgen zu
definieren und sind dabei immer case-sensitive. Die Interpretation von
Schlüsselwörtern erfolgt allerdings ohne Berücksichtigung der Groß- und
Kleinschreibung.
21
3. Topic Maps Query Language - TMQL
Alle nicht aufgeführten Zeichen sind innerhalb von TMQL als Terminalsymbole
nicht erlaubt und werden während der Validierung als Fehler erkannt.
Eine gesonderte Rolle nehmen Leerzeichen (’ ’), Absätze (’\n’) und Einschübe
(’\t’) ein. Diese sogenannten Leerraumzeichen werden zur Separation von
Terminalsymbolen eingesetzt und sind in beliebiger Anzahl zwischen zwei
beliebigen Token verwendbar. Die Art und Anzahl dieser Zeichen wird nicht
weiter spezifiziert und besitzt keine semantische Bedeutung. Die einzige
Ausnahme stellen Zeichenketten innerhalb von XML- oder CTM-Fragmenten
dar. Darin enthaltene Leerräume werden beibehalten.
Die Raute (’#’) nimmt ebenfalls eine besondere Rolle innerhalb der Grammatik
ein. Alle auf dieses Zeichen folgenden Symbole werden als Kommentare
angesehen und nicht weiter interpretiert. Eine Ausnahme dieser Regelung stellt
die Verwendung innerhalb eines Variablennamen dar, welche im späteren
Kapitel noch mal genauer betrachtet wird.
Die zweite Sprachebene wird als Canonical Level bezeichnet und definiert sich
auf Basis der kontextfreien Grammatik von XML 1.0. Um Inkonsistenz innerhalb
22
3. Topic Maps Query Language - TMQL
Eine potentiell leere und durch Kommata getrennte Liste von Terminalsymbolen
wird nicht in üblicher Syntax ( A ( ’, ’A ) * ) ? beschrieben, sondern wie folgt
definiert <A>.
23
3. Topic Maps Query Language - TMQL
Folge dieser Vereinfachungen ist allerdings die Erhöhung des Rauschens und
die Erzeugung von Inkonsistenz innerhalb der Sprache. Der aktuelle Draft sieht
zwar diese Sprachebene noch vor, allerdings werfen die genannten Probleme
die Frage der Notwendigkeit und der Unterstützung dieser Spracheebene auf.
Aktuell bleibt abzuwarten, ob diese Grammatikebene Gegenstand des finalen
Standards wird oder entfernt wird.
Der aktuelle Draft von TMQL sieht abgesehen von zwei Ausnahmen die
absolute Ontologie-Unabhängigkeit von TMQL-Umgebungen vor. Dieses
Konzept ermöglicht die gleiche Verarbeitung von Anfragen innerhalb
verschiedener Terminologien.
Die beiden Ausnahmen dieser Regelung stellen die Typ-Transitivität und die
Typ-Instanz-Beziehung dar. Beide Konzepte verwenden und erweitern die
Interpretation gemäß des Topic-Maps-Datenmodells (TMDM).
24
3. Topic Maps Query Language - TMQL
25
3. Topic Maps Query Language - TMQL
3.4.1. Literale
Als Atome gelten in TMQL konstante Literale zur Definition von Datentypen,
sowie deren Operatoren. Die Menge der gültigen Atome des aktuellen Drafts
bildet ein kleiner Auszug aus den Datentypen des CTM-Standards, sowie von
XSD-Datumsformaten. Neben Zeichenketten, IRI und Wahrheitswerten, werden
numerische Werte unterstützt. Dabei unterscheidet TMQL zwischen
Ganzzahlen und Gleitkommawerten. Zur Definition von Null-Werten wird ein
spezieller Datentyp mit der Bezeichnung undefined und der einzigen
Ausprägung undef verwendet.
Als Zeitformate verwendet TMQL die beiden Datentypen date und dateTime
von XSD. Dadurch kann eine starre und eindeutige Darstellung von
Zeitformaten unabhängig von der Implementierung realisiert werden. Das
Format entspricht dabei immer dem folgenden Muster.
'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
Die nachfolgende Tabelle listet die gültigen Atome, sowie die möglichen
Wertausprägung gemäß des XSD- und CTM-Standards.
26
3. Topic Maps Query Language - TMQL
27
3. Topic Maps Query Language - TMQL
3.4.2. Navigationsachsen
Durch die grundlegende Struktur einer Topic Maps, modelliert durch das
TMDM, können 12 Navigationsachsen definiert werden. Jeder
Navigationsschritt erfolgt innerhalb der Topic-Maps-Instanz entlang einer
definierten Achse in einer definierten Richtung. Zusätzliche Attribute
ermöglichen die optionale Einschränkung bzw. Steuerung des
Navigationsschrittes, allerdings wird dieses Konzept nicht von jeder Achse
unterstützt.
28
3. Topic Maps Query Language - TMQL
Die Verwendung der Navigation entlang einer Achse wird innerhalb der Anfrage
durch die speziellen Zeichenmuster << bzw. >> definiert, gefolgt von der
abstrakten Bezeichnung der jeweiligen Achsen, sowie dem optionalen Attribut
zur Steuerung. Für einige der Navigationsachsen definiert TMQL auf der
3.Sprachebene eine Menge von speziellen Zeichenmustern, welche die
Navigationsrichtung und die abstrakte Bezeichnung der Navigationsachse
impliziert. Diese Abkürzungen werden durch spezielle Term-Transformationen,
auf ihre Entsprechung abgebildet und dem Prozessor zur Verarbeitung
übergeben. Ein wesentliches Problem dieser Abkürzungen besteht in der
Mehrdeutigkeit gegenüber anderer Standards, wie SQL, sowie der
Interpretation durch den Prozessor. Die genannten Probleme werden während
der Analyse genauer betrachtet und ihr Einfluss auf die Implementierung
abgeschätzt.
Die nachstehende Tabelle benennt die 12 Achsen namentlich und definiert die
semantische Bedeutung ihrer Ergebnismenge.
29
3. Topic Maps Query Language - TMQL
Zur Realisierung des Parser und der späteren Interpretation ist die Analyse der
Produktionsregel bzw. Teilausdrücke zwingend notwendig. Im Folgenden
werden die wichtigsten Arten von Teilausdrücken näher untersucht, um deren
Struktur und Auftreten innerhalb eines Query genauer verstehen zu können.
Der Oberbegriff des Content beschreibt die Menge von Inhalten, welche durch
die erfolgreiche Verarbeitung eines TMQL-Query erzeugt werden können.
Innerhalb der Terminologie von TMQL umfasst der Begriff Content, somit
jeglichen atomaren Wert, aber auch die Menge von Informationselementen
30
3. Topic Maps Query Language - TMQL
einer Topic Maps. Dabei unterscheidet TMQL ähnlich wie XSD zwischen
einfachen Inhalten (Simple-Content) und zusammengesetzten komplexeren
Inhalten (Composite-Content).
Atomare oder einfache Inhalte werden gemäß des aktuellen Drafts durch
Verwendung von Konstanten bzw. des Werts einer Variable, sowie einer Menge
von Navigationsschritten gebildet. Die Anzahl der Navigationsschritte unterliegt
keiner Einschränkung und bewegt sich theoretisch von 0 bis unendlich.
Folgende Abbildung zeigt die definierte Regel für Simple-Content des aktuellen
Drafts.
31
3. Topic Maps Query Language - TMQL
Zur Vereinfachung spezifiziert der aktuelle Draft die folgende Menge von
Regeln auf dem Non-Canonical Level. Unter der Annahme der
Inhaltsgenerierung durch Verwendung einer einfachen Path-Expression,
werden die geschweiften Klammern als optional angesehen. Äquivalent dazu
können bedingte Anweisung drastisch reduziert werden, unter der Annahme,
dass es sich bei dem Content nur um Path-Expression handelt.
3.5.1.1. XML-Content
32
3. Topic Maps Query Language - TMQL
Das Ergebnis dieses Prozesses wird als gültiges XML gemäß XML 1.0
interpretiert und als solches von einem XML-Parser validiert. Leerzeichen und
Zeilenumbrüche besitzen dabei, innerhalb von XML-Content, eine hohe
semantische Bedeutung und werden vollständig in das XML-Fragment
übernommen.
3.5.1.2. TM-Content
33
3. Topic Maps Query Language - TMQL
Im Rahmen von Definition (Assignment) für Topics, Namen und Occurrences ist
die Verwendung von eingebetteten Ausdrücken ebenfalls erlaubt. Im Kontext
der Definition von Namen oder Occurrences werden alle Tupel der
Ergebnismenge gemäß der Serialisierungsregeln in ihre
Zeichenkettenrepräsentierung überführt und in den CTM-Strom eingebettet.
34
3. Topic Maps Query Language - TMQL
Menge von atomaren Werten, wie Ganzzahlen oder Zeichenketten, aber auch
XML- bzw. Topic-Maps-Fragmenten. Der Begriff Tupel bezeichnet also eine
zusammenhängende Menge von Informationselementen der konkreten
Abfrage. Zum exakten Verständnis der Terminologie sei folgende TMQL-
Anfrage benannt, welche eine Sequenz aus zwei Tupel liefert.
Ein Tupel enthält dabei, wie bereits erwähnt, eine Menge von Literalen
verschiedener Typen. Die Länge des Tupel definiert sich über die Mächtigkeit
der Literalmenge. Tupel mit einer Mächtigkeit von eins werden als Singelton
bezeichnet. Die Werte eines jeden Tupel können per Projektion ausgelesen
werden, zu diesem Zweck erzeugt der TMQL-Parser im Kontext einer jeden
Anfrage eine Menge von Variablen, welche auf die einzelnen Stellen des
aktuellen Sets verweisen.
35
3. Topic Maps Query Language - TMQL
Eine Tupelsequenz ist per Definition immer ungeordnet, solange keine explizite
Sortierung angegeben wurde. Die Sortierung erfolgt auf Basis spezieller
Sequenzen, welche als Werte nur asc, für aufsteigende Sortierung, und desc,
für absteigende Sortierung, enthalten dürfen. Die Interpretation und Angabe der
Sortierreihenfolge ist abhängig vom Typ des Ausdrucks, welcher die Sequenz
erzeugt
select $p / name
order by $p / birthdate desc
where $p isa person
Codefragment 21 - Select-Expression als Beispiel für Sortierung bei Tupelkombination
36
3. Topic Maps Query Language - TMQL
Als Stringifying wird der Prozess der Serialisierung von Tupeln zu ihrer
Repräsentation als Zeichenketten bezeichnet.
Die Serialisierung von Tupeln erfolgt elementweise, d.h. zu Beginn werden alle
Elemente in ihrer Zeichenkettenrepräsentierung konvertiert, durch Komma
getrennt und zu einer Zeichenkette zusammengefasst. Die Reihenfolge definiert
sich über den abstrakten Index innerhalb des ursprünglichen Tupel. Leere
Tupel erzeugen immer auch eine leere Zeichenkette.
Codefragment 22 - Value-Expression
37
3. Topic Maps Query Language - TMQL
Maps. TMQL beschreibt zusätzlich das Konzept einer Funktion und dessen
Unterkonzepte der binären und unären Operatoren. Neben den vordefinierten
Funktionen, wird dem Anwender die Möglichkeit der Konzeption eigener
Funktionen und Operatoren ermöglicht. Die Definition eigener Konzepte ist
Bestandteil der Environment-Klausel.
Codefragment 23 - Function-Invocations
Im Kontext der Filterung oder einer bedingten Auswahl von Elementen werden
Wahrheitsausdrücke verwendet. TMQL unterscheidet zwischen Ausdrücken
(Boolean-Expression) und Primitiven (Boolean-Primitive), ein Ausdruck kann
dabei genau eine Primitive enthalten oder eine Menge von Ausdrücken.
Wie in anderen Sprache üblich sind diese Art von Ausdrücken über den binären
Operator &(AND) oder |(OR) kombinierbar, die Auswertung der Ausdrücke
basiert auf den üblichen Regeln der Operatoren. Die Kombination mit dem
unären Operator not ist nur mit Primitiven gestattet. Die Verarbeitung solcher
Kombinationen erfolgt immer von links nach rechts, diese Routine kann nur
durch Verwendung von Klammern gesteuert werden.
38
3. Topic Maps Query Language - TMQL
3.6. Query-Ausdrücke
Ein TMQL-Ausdruck wird als Query-Expression bezeichnet und kann eine der
drei Ausprägungsformen, Path-Expression (3.6.3), Select-Expression (3.6.4)
und FLWR-Expression (3.6.5), annehmen. Alle drei Ausprägungsformen
besitzen faktisch die gleiche Ausdrucksstärke, dies begründet sich dadurch,
dass sowohl der FLWR-, als auch der Select-Style, eine beliebige Menge von
Path-Expression im Kontext ihrer Klauseln verwenden. Die einzige Ausnahme
39
3. Topic Maps Query Language - TMQL
stellt die Generierung von XML- und Topic-Maps-Fragmenten dar, welches nur
dem FLWR-Style vorbehalten ist.
Die effektiv verwendete Topic Maps bildet sich aus der Kombination der
Environment-Map (%%), sowie der gesetzten Topic Maps (%_). Die
Kombination ist dabei aber nur virtuell. Während der Verarbeitung werden
Anfragen an beide Topic Maps gestellt und deren Ergebnisse kombiniert.
3.6.1. Verarbeitungsmodell
Die Environment-Klausel enthält dabei eine Menge von Direktiven und Pragma.
Als Direktive wird zusätzliches Wissen über die Ontologie der Topic Maps
bezeichnet. Die Direktiven werden als Topics in der Environment-Map
repräsentiert und müssen eine Instanz des abstrakten Topic-Typs tmql:ontology
sein. Im Gegensatz zu einer Direktive stellt ein Pragma eine erweiterte Kontrolle
über den Evaluierungsprozess selber dar. Aktuell wird nur der Einfluss auf die
Transitivitätseigenschaft innerhalb der Topic Maps spezifiziert. Die
Repräsentierung eines Pragma innerhalb der Laufzeitumgebung bleibt offen.
40
3. Topic Maps Query Language - TMQL
Nach der Definition der Environment-Map erfolgt die Verarbeitung der Query-
Expression getrennt im Kontext verschiedener Variablen-Bindings (3.6.2).
Während dieses Prozesses erzeugt jedes neue Binding eine Menge von
Variablen-Wert-Beziehung und legt diese auf einen Variablen-Stack ab. Diese
Variablendefinitionen bilden den Kontext der aktuellen Verarbeitung und werden
am Ende der Verarbeitung wieder entfernt.
Tritt während der Verarbeitung einer Fehler auf, verursacht durch einen
ungültigen Ausdruck, wechselt die Engine in einen Fehlerzustand und
benachrichtigt die darüber liegende Anwendung. Form und Art dieser Nachricht
wird aktuell nicht spezifiziert, die Umsetzung erfolgt in Abhängigkeit des
Frameworks bzw. der üblichen Konzepte der verwendeten
Programmiersprache.
Ein gültiger Ausdruck liefert per Definition eine Menge von Ergebnissen an die
Umgebung bzw. die darauf aufbauende Anwendung zurück. Aktuell ist die Art
und Weise des Zugriffs auf diese Ergebnismenge und der Zeitpunkt der
Rückmeldung kein Bestandteil des Drafts und ist wiederum von der
Implementierung der Engine abhängig.
41
3. Topic Maps Query Language - TMQL
Variablennamen müssen folglich immer mit einem der definierten Präfix ($, %
oder @) beginnen und können mit einer beliebigen Anzahl von einfachen
Anführungszeichen (Primes) enden. Weiter sind alle alphanumerischen
Zeichen, sowie der Unterstrich und die Raute, erlaubt. Variablen deren Namen
sich nur in der Anzahl der nachstehenden Primes ` unterscheiden, müssen an
verschiedene Werte gebunden werden. Der Präfix $ signalisiert der Engine, das
die entsprechende Variable nur an atomare Werte und Topic-Maps-Elemente
42
3. Topic Maps Query Language - TMQL
gebunden werden darf. Die Bindung von Tupeln ist nur an Variablen mit dem
Präfix @ gestattet, Sequenzen von Tupel hingegen nur an Variablen mit dem
Präfix %.
Der Zugriff auf die vordefinierten Konzepte, wie die Funktionen und Operatoren,
wird über die Umgebungsvariable %% realisiert. Die aktuell gebunden Topic
Maps der Anfrage wird an die Systemvariable %_ angehangen und als
Standardwert im Rahmen einer fehlenden From-Klausel des Select-Style
verwendet. Optional angegebene Topic Maps in der Klausel erzeugen ein Kopie
dieser Variable. Das im Kontext eines Ausdrucks aktuell referenzierte Tupel
wird automatisch an die Variable @_ gebunden, als automatische Projektionen
der Werte innerhalb dieses Tupel stehen die Variablen $0 bis $n zur Verfügung,
wobei n die höchste gültige Stelle innerhalb des Tupel widerspiegelt.
Eine besondere Rolle nehmen die anonymen Variablen $_ ein, sie können als
Platzhalter innerhalb eines Ausdruckes Verwendung finden, wo der konkrete
Wert der Variable als irrelevant angesehen wird. Anonyme Variablen können
nur geschrieben werden, das Auslesen der gebunden Werte führt zu einem
Fehler in der Verarbeitung.
Jede Variable kann lokal und zu jedem Zeitpunkt nur an einen Wert gebunden
werden, die Bindung an neue Werte ist nur innerhalb einer neuen
Variablendefinition (Binding) möglich. Die TMQL-Engine realisiert für jede
43
3. Topic Maps Query Language - TMQL
Verarbeitung einen Stack von Bindings. Erfolgt die Definition und Wertbindung
der Variable, wird ein neu generiertes Variablenset auf den Stack gelegt.
Verliert die Variable ihre Gültigkeit wird das Set vom Stack entfernt, jede
Variable besitzt daher pro Zeiteinheit genau eine gültige Wertausprägung. Die
Evaluierung jedes Binding erfolgt getrennt von allen anderen. Generiert ein
TMQL-Ausdruck in diesem Kontext ein leeres Tupel, so wird der Standardwert
undef verwendet.
3.6.3. Path-Expression
Die Navigation erfolgt schrittweise auf einer Menge definierter Achsen (3.4.2)
durch den Topic-Maps-Graphen. Die Bezeichnung als Achsen ist etwas
irreführend, da sie semantisch nicht im Sinne eines Koordinatensystems zu
verstehen sind, sondern vielmehr als Kantenbezeichnungen, bzw. abstrakte
Beziehungen zwischen Elementen innerhalb einer Topic Maps. Ausgangspunkt
einer Navigation kann ein einziges Topic-Maps-Element oder ein atomarer Wert
sein, sowie eine Tupelsequenz. Die Verwendung von Variablen innerhalb einer
reinen Path-Expression ist nicht gestattet.
44
3. Topic Maps Query Language - TMQL
Codefragment 26 - Filterdefinition
Auf Basis des Non-Canonical Level stellt die Grammatik einige spezielle
Bedingungen zur Verfügung, wie die Angabe der abstrakten Indizes der
Tupelsequenz, sowie die explizite Typprüfung einzelner Elemente. Zur
Interpretation der abstrakten Indizes, wird die Systemvariable $# verwendet,
welche während einer Iteration die aktuelle Stelle der Tupelsequenz speichert.
Der Wert dieser Variable wird bei jedem Schritt innerhalb einer Bedingung
gegen die definierten Bereichsgrenzen bzw. Indizes geprüft. Diese
Herangehensweise kostet im Vergleich zu einem direkten Zugriff auf die
Elemente, eventuell mehr Rechenzeit, schützt allerdings vor einem Zugriff
außerhalb der Bereichsgrenzen möglicher Indizes.
45
3. Topic Maps Query Language - TMQL
Per Definition stellen Filterung und Projektion stabile Operationen dar, d.h.
eventuell vorhandene Sortierungen innerhalb der Eingangssequenz bleiben
erhalten, mit Ausnahme der Definition einer neuen Sortierung innerhalb der
Projektion selber.
3.6.3.2. Predicate-Invocations
Eine aus dem TMCL bekannte Beschreibung von Assoziation, die Predicate-
Invocation, stellen eine besondere Form von Path-Expression in TMQL dar. Sie
ermöglichen die Suche nach Assoziationen eines speziellen Typs bzw. eine
Menge von Rollen-Spieler-Kombinationen. Die Definition des Typen der
Assoziation erfolgt als Item-Referenz innerhalb des Ausdrucks, gefolgt von
einer Liste von Rollen-Spieler-Kombinationen. Die Spieler werden in diesem
Kontext als Value-Expression formuliert. Das folgende Codefragment zeigt die
syntaktische Struktur einer Predicate-Invocation in TMQL.
Per Definition wird die Operation als strikt angesehen, da sie keine
Assoziationselemente liefert, welche mehr oder andere Rollentypen beinhalten
als innerhalb des Ausdruckes beschrieben wurde. Durch Angabe der optionalen
Ellipse (…) besteht die Möglichkeit diese Operation für den Prozessor als nicht
strikt zu spezifizieren.
46
3. Topic Maps Query Language - TMQL
Im Gegensatz zu SQL stellt bei TMQL die Select-Klausel, dass einzige nicht
optionale Element eines Query dar. Alle anderen Klauseln werden vom Draft
mit Standardwerten hinterlegt, welche unter der Voraussetzung der fehlenden
Definition, automatisch von der Engine eingefügt bzw. verwendet werden.
Der Kontext der Verarbeitung definiert sich über die From-Klausel, fehlt eine
solche Klausel wird automatisch die im Environment definierte Topic Maps
verwendet. Als Kontexttyp werden nur Topic Maps gemäß des TMDM(2.1)
47
3. Topic Maps Query Language - TMQL
unterstützt, wobei eine Menge von Tupel automatisch als temporäre Topic
Maps interpretiert wird. Der zu verarbeitende Kontext wird an die
Systemvariable %_ gebunden.
Als zweiter Schritt erfolgt die Evaluierung der Offset- und Limit-Klauseln. Die
Evaluierung beider Klauseln muss in einer nicht-negativen Ganzzahl (Integer)
resultieren, als einzige Abweichung dieser Regelung ist der Null-Wert erlaubt.
Sofern die entsprechenden Klauseln existieren, werden die Ergebnisse zur
späteren Interpretation an die Systemvariablen $_lower und $_limit gebunden,
andernfalls werden die sprachspezifischen Standardwerte angenommen. Ein
Standardwert für Limit existiert nicht und die Variable bleibt entsprechend
ungebunden.
48
3. Topic Maps Query Language - TMQL
Bindung der Variablen im Kontext der Where-Klausel und erfolgt anders als bei
SQL nicht nach der Selektion der Daten. Die Unique-Klausel wird abschließend
verwendet und durch eine spezielle TMQL-Funktion zur Entfernung von
Duplikaten realisiert.
Der letzte Schritt der Verarbeitung stellt die Auswahl des Selektionsfensters
durch die gespeicherten Variablen $_lower und $_limit dar.
49
3. Topic Maps Query Language - TMQL
3.6.5. FLWR-Expression
Der dritte unterstützte Typ besitzt eine hohe syntaktische Ähnlichkeit zu dem
Kontrollkonstrukt der For-Schleifen moderner Skript- bzw.
Programmiersprachen, wie Java oder Ruby. Der FLWR-Style besitzt dadurch
ein erhöhtes Maß an Kontrolle über die Bindung der Variablen, sowie die Art
des generierten Content. Als einziger Typ ermöglicht dieser Style die
Generierung von Topic-Maps-Fragmenten, gemäß des CTM-Standards(2.3.1),
bzw. von XML-Fragmenten. Im Falle eines XML-Fragmentes werden nicht
atomare Werte, gemäß des XTM-Standards(2.3.2) serialisiert und in die XML-
Fragmente eingebettet. Atomare Werte hingegen werden als reiner Text in das
XML-Dokument eingebettet.
Als zweiter Schritt erfolgt die Prüfung jeder Wertkombination der Sequenz
gegen die Wahrheitsausdrücke innerhalb der Where-Klausel, fehlt eine solche
Klausel erfolgt lediglich die Existenzprüfung gegen null. Bei erfolgreicher
Prüfung wird die Wertkombination im Kontext der Return-Klausel verarbeitet.
50
3. Topic Maps Query Language - TMQL
Ergebnis einer jeden Iteration ist eine Sequenz von Tupeln, welche unter
Verwendung des Verknüpfungsoperators ++ zu einer komplexen Sequenz
zusammengefasst werden. Generierte XML-Fragmente werden in einem XML-
Dokument gekapselt. TM-Fragmente werden als eigenständige Topic Maps
interpretiert und unter Verwendung der Merge-Regeln des TMDM zu einer
Topic Maps zusammengefasst.
FLWR-Expression
existiert For-
Ja
Klausel?
Erzeugung aller
Bindingsets Ja
@_
existiert weitere
For-Klausel?
Bindingstack
Nein Nein
@_
Nein
@_
Nein existiert Where-
Klausel?
Ja
Test gegen
Test gegen null Wahrheits- Ja
ausdruck
Verknüpfen der
Nein
Sequenzen
Ergebnis
51
4. Vergleich zu anderen Anfragesprachen – Toma und Tolog
Die Idee der Spezifikation und Entwicklung einer einheitlichen Sprache zur
Manipulation und Selektion von Daten aus Topic Maps existiert bereits seit
einigen Jahren. Erste Konzeptionen entstanden bereits vor dem aktuellen
TMQL-Draft, wie das einleitend erwähnte Tolog.
Tolog spezifiziert eine der ersten Anfragesprache für Topic Maps und besitzt im
Kontrast zu TMQL aber nur eine eingeschränkte Funktionalität. Konzeptuell
basiert die Formulierung eines Tolog-Query auf einer Menge formaler
Aussagen über Assoziationen zwischen einzelnen Informationselementen. Die
formale Beschreibung solcher Beziehungen besitzt eine starke syntaktische
Ähnlichkeit zur Struktur der beschriebenen Predicate-Invocation(3.6.3.2) von
TMQL.
52
4. Vergleich zu anderen Anfragesprachen – Toma und Tolog
Eine zweite Parallele zum aktuellen TMQL-Draft bildet die Verwendung des
Schlüsselwortes SELECT. Konzeptuell orientiert sich die Formulierung solcher
Anfragen an SQL und realisiert ein ähnliches Vorgehen wie der Select-
Style(3.6.4) von TMQL.
Einige Beziehungen zwischen Topics einer Topic Maps werden nicht direkt über
eine existierende Assoziation beschrieben, sondern definieren sich über die
Verkettung mehrerer Assoziationen. Die Verwendung solcher impliziter
Beziehungen zwischen Elementen können innerhalb eines Tolog-Query durch
Regeln definiert werden. Die Prüfung der Werte erfolgt anhand des daraus
generierten temporären Funktionsprädikates. Die Definition solcher implizierter
Beziehung in TMQL wird durch die Möglichkeit der Definition eigener
Funktionen innerhalb Environment-Klausel realisiert. Die Interpretation der
neuen Funktion erfolgt durch einen registrierten Interpreter innerhalb der
Laufzeitumgebung und ist nicht Bestandteil des Drafts. Syntaktisch orientieren
sich beide Ansätze am TMCL-Standard und sind somit ähnlich.
53
4. Vergleich zu anderen Anfragesprachen – Toma und Tolog
Im Rahmen der Diskussionen um den aktuellen Draft von TMQL differiert die
Meinung über Syntax und Semantik. Daraus resultierend entwickelte sich
parallel zum beschriebenen Draft ein syntaktisch differierender Ansatz.
Konzeptuell stellt der Toma-Draft eine starke Vereinfachung des
Möglichkeitsraums von TMQL dar und reduziert den Draft um eine Vielzahl von
Funktionen und syntaktischen Ausdrücken, wie dem FLWR-Style. Das
Designkonzept von Toma orientiert sich an existierenden Konzepten, wie der
Objektorientierung und TMQL bzw. SQL.
Toma reduziert die Möglichkeiten der Abfrage auf einen Typ, welche dem
Select-Style(3.6.4) von TMQL entspricht, wobei die verwendete Syntax sich
noch enger am SQL-Standard orientiert.
54
4. Vergleich zu anderen Anfragesprachen – Toma und Tolog
Varianten erweitert werden. Die folgende Tabelle bietet eine kleine Übersicht
über mögliche Namen.
Namen Bedeutung
.si Subject-Identifier
.sl Subject-Locator
.id Item-Identifier
.oc Occurrences
.name Names
.var Variants
.type Typen
.instance Instanzen des Typs
.super Supertypen des Typs
.sub Subtypen des Typs
.sc Scope
.player Spieler der Assoziation
.role Rollentypen der Assoziation
.reifier reifizierendes Topic
.data Wert der Eigenschaft
Tabelle 5 - Achsennamen von Toma
Äquivalent zum Filterkonzept von TMQL unterstützt Toma eine Menge von
Filterfunktionen. Im Gegensatz zu TMQL ist die Verwendung der Filter nach
jedem Navigationsschritt möglich. Informationselemente können dabei anhand
des Typs, der abstrakten Indizes der Sequenz, den konkreten Werten, sowie
ihres Scope gefiltert werden. Die Interpretation der Filter orientiert sich genau
wie TMQL am TMDM.
Die Navigation im Kontext von Assoziation wird durch den Zeigeroperator (->)
eingeleitet und realisiert den Zugriff auf die Spieler und Rollentypen der
konkreten Ausprägung. Ähnlich zum Konzept der indirekten Verkettung von
Tolog, unterstützt auch Toma eine Verkettung von Spieler über Assoziationen
um eine direkte Beziehung zwischen Elementen der Topic Maps kürzer
formulieren zu können. Die anonyme Variable $$ dient in diesem Ausdruck als
Platzhalter.
id(“leipzig”).$$<-(place_of_birth)->$$
.$$<-(date_of_birth)->$$ = $topic;
55
4. Vergleich zu anderen Anfragesprachen – Toma und Tolog
Zusammenfassend lässt sich auch hier ein hoher Grad der Überschneidung
zwischen Toma und TMQL erkennen, was durch den gemeinsamen Ursprung
begründet scheint. Dem Modellierungsziel der Einfachheit von Toma
verschuldet, sieht der aktuelle Draft nur die Unterstützung des Select-Style vor,
eine Erweiterung um den normalen Path-Style ist denkbar. Funktional
unterstütz der TMQL-Draft eine Vielzahl weiterer Konzepte, welche von Toma
nicht realisiert werden, wie die Quantifizierungsoperatoren (3.5.4).
56
5. Analyse der Kritikpunkte des aktuellen Drafts
Da es sich bei TMQL nicht um einen festen Standard handelt, sondern lediglich
um eine in Standardisierung befindliche Abfragesprache, ist der aktuelle Draft
keinesfalls als perfekt oder vollständig anzusehen. Einige Autoren definieren
den aktuellen Draft als nicht perfekt in Hinsicht auf einige Aspekte der dritten
Grammatikebene.
Aktuell umfasst der Draft eine Vielzahl von Funktionen und syntaktischen
Varianten, welche die Implementierung erschweren könnte und die
Verwendung eines Canonizer bedingt.
Auf Basis des TMDM lassen sich die bereits in früherem Kapitel
angesprochenen Achsen für TMQL definieren und umsetzen. Einige der
Achsen erscheinen im Kontext einer Implementierung des Standards allerdings
als nicht eindeutig bzw. führen zu hohen Kosten. Einige der Achsen sind
eventuell semantisch unverständlich und könnten entsprechend ersetzt bzw.
entfernt werden.
57
5. Analyse der Kritikpunkte des aktuellen Drafts
Der erste Ansatz würde den aktuellen Wert als datentypfrei bzw. vom Datentyp
irrelevant verwenden, d.h. die TMQL-Engine überprüft schrittweise alle
Occurrences bzw. Namen aller Topics innerhalb der Topic Maps und vergleicht
deren Wertausprägungen mit dem zu deserialisierenden Wert. Bei sehr großen
Topic Maps dürfte sich diese Variante als sehr langsam und teuer
herausstellen.
Die zweite Variante besteht in der Typerkennung durch die TMQL-Engine. Die
Typerkennung erfolgt dabei entweder automatisch oder manuell über einige
Bestandteile des aktuellen Drafts. Eine automatische Erkennung auf Basis des
Wertes ist allerdings keinesfalls trivial. Im Rahmen dieser Arbeit wurde eine
Bibliothek für die Programmiersprache Java entwickelt, welche eine
automatische Erkennung des Datentyps, in diesem Kontext Java-Datentypen,
sowie die Erzeugung einer Instanz dieses Typs mit dem Wert ermöglicht.
Bereits hier zeigten sich zwei wesentliche Probleme. Das erste Problem besteht
in der Referenz zwischen den Java-Datentypen und den TMDM-Datentypen,
innerhalb einer Topic Maps. Das zweite Problem besteht in der eigentlichen
Erkennung des Datentyps durch den Serialisierer. Bereits bei numerischen
Werten ist eine eindeutige Erkennung nicht möglich und somit nicht produktiv
einsetzbar. Wie in jeder Sprache existieren verschiedene numerische Typen,
welche an der reinen Wertausprägung nicht immer erkennbar sind und sich nur
im abgedeckten Wertebereich unterscheiden, wie Ganzzahlen oder
Fließkommazahlen. Dieses Problem scheint noch lösbar, allerdings verstärkt
sich das Problem zusätzlich durch die Mächtigkeit des Wertebereichs, wie 32-
Bit-Integer- oder 64-Bit-Long-Werte. Die Trennung einer Long-Zahl mit einem
Wert innerhalb des Wertebereichs einer Integer-Zahl (im Allgemeinen unter
65535) von der gleichen Integer-Zahl ist faktisch unmöglich. Das Problem
erscheint im Rahmen einer Anfragesprache durchaus als nichtig, bezogen auf
eine spätere Erweiterung um die Aspekte einer Manipulationssprache (Topic
Maps Manipulation Language) kann sich dieser Fakt zu einem Problem
entwickeln. TMML sollte äquivalent zu SQL auf der Anfragesprache aufbauen,
das bedeutet allerdings, dass genau das genannte Problem betrachtet werden
muss. Das Problem beschränkt sich aber nicht nur auf numerische Werte,
58
5. Analyse der Kritikpunkte des aktuellen Drafts
<complexType name="entryNode">
<attribute name="type" type="anySimpleType" default="*" />
<attribute name="class" type="string" />
<attribute name="serializer" type="string" use="optional" />
<attribute name="deserializer" type="string" use="optional" />
</complexType>
<complexType name="mappingsNode">
<sequence>
<element type="entryType" />
</sequence>
</complexType>
<complexType name="defaultNode">
<sequence minOccurs="1" maxOccurs="1">
<element type="entryType" />
</sequence>
</complexType>
<complexType name="datatypesNode">
<all>
<element name="mapping" type="mappingsNode" />
<element name="default" type="defaultNode" />
</all>
</complexType>
<element name="datatypes" type="datatypesNode" />
59
5. Analyse der Kritikpunkte des aktuellen Drafts
Durch die optionale Definition des zu verwendeten Datentyps über das Pattern
^^ liefert der aktuelle Draft einen eigenen möglichen Lösungsansatz. Die
Lösung ist aber nur bedingt verwendbar, da die optionale Angabe keine
Sicherheit über die tatsächliche Verwendung liefern kann, sie bietet aber die
Möglichkeit, denselben Wert auf verschiedene Datentypen abzubilden, wie das
folgende Beispiel zeigt.
"42"^^xsd:integer # integer
"http://example.org/something"^^xsd:string # string
"http://example.org/something"^^xsd:anyURI # iri
"w3 0wn u"^^what:ever # what:ever
Codefragment 39 - manuelle Typdefinition innerhalb eines TMQL-Ausdruck[13]
60
5. Analyse der Kritikpunkte des aktuellen Drafts
Eine Occurrence stellt laut TMDM eine spezielle Assoziation zwischen einem
Topic und einer Informationsressource dar. Die verknüpfte
Informationsressource kann sich innerhalb oder außerhalb der Topic Maps
befinden. Eine Occurrence besitzt dabei immer einen Wert als
Zeichenkettenrepräsentierung oder als externe Ressource, sowie einen
eindeutigen Datentyp und einen Scope innerhalb dessen diese Occurrence eine
Gültigkeit besitzt.
Ein Topic-Name stellt hingegen eine Benennung für das jeweilige Topic dar,
welcher beispielsweise als Label innerhalb der Nutzerschnittstelle verwendet
61
5. Analyse der Kritikpunkte des aktuellen Drafts
werden kann. Ein Name kann dabei mehrere Varianten umfassen, welche
andere Schreibweisen oder andere Sprachen abdecken. Namen stellen laut
Spezifikation des TMDM ein Subjekt dar, welches die Natur des beschriebenen
Topics verkörpern sollte. Der Wert eines Namens ist dabei immer eine
Zeichenkettenrepräsentierung und der Datentyp immer der abstrakte Typ
String.
Zur Vollständigkeit sei an dieser Stelle noch das Konzept der Varianten eines
Namens erwähnt, welche alternative Formen des zugehörigen Namen
beschreiben und im Gegensatz zu Namen jede Art von Informationsressource
darstellen kann. Ein Variant besitzt daher ähnlich wie eine Occurrence einen
Datentyp.
Es ist erkennbar, dass die Konzepte des Name und der Occurrence semantisch
von Grunde auf verschieden sind, allerdings durch die oben angesprochene
Achse vereinheitlicht werden. Diese Vereinheitlich stellt, im Bezug des TMDM,
einen semantische Bruch dar und muss aus Konsistenzgründen aufgehoben
werden, um eine Inkonsistenz innerhalb der zukünftigen Topic-Maps-Standards
(TMDM, TMQL, TMCL …) zu vermeiden. Weiter ist festzustellen, dass das
62
5. Analyse der Kritikpunkte des aktuellen Drafts
Konzept der Variants keine Berücksichtigung innerhalb von TMQL findet, was
eine Verwendung dieser innerhalb eines TMQL-Statements unmöglich macht.
Der entwickelte Prototyp unterstützt aktuell diese Achse, gemäß des TMQL-
Drafts und ermöglicht den getrennten Zugriff auf Namen und Occurrences
durch Verwendung des optionalen Typen gemäß dem TMDM. Die Abfrage von
Variantes wird aktuell nicht unterstützt.
Dabei kapselt ein Topic-Typ eine Menge von Gemeinsamkeiten innerhalb eines
internen Sets. Jedes Element dieses Sets wird als Instanz dieses Typs
bezeichnet. Jede Instanz kann für sich wieder die Rolle eines Typs einnehmen.
Es besteht dabei keine Transitivitätseigenschaft, d.h. sei A eine Instanz von B
und B eine Instanz von C, so ist A keine Instanz von C. Eine Typ-Instanz-
Beziehung wird innerhalb einer Topic Maps als Assoziation modelliert. Die
Assoziation besitzt dabei genau zwei Rollenspieler mit definierten Typen, sowie
den eindeutigen Subject-Identifier http://psi.topicmaps.org/iso13250/
model/type-instance.
63
5. Analyse der Kritikpunkte des aktuellen Drafts
Diese strikte Trennung beider Konzepte spiegelt sich auch innerhalb des
Achsenkonzeptes von TMQL in den Achsen types und supertypes wider. Ein
Rückwärtsnavigation der types-Achse resultiert somit gemäß der
Transitivitätseigenschaft in der Menge von Typen und Supertypen der
angegeben Instanz.
Einen weiteren Anstoß zur Diskussion liefert die traverse-Achse. Wie bereits im
entsprechenden Kapitel(3.4.2) beschrieben, liefert diese Achse ausgehenden
von einer Topic-Instanz eine Menge von Topics, welche über eine Assoziation
direkt mit dem Ursprungselement verbunden sind. In Rückwärtsrichtung liefert
diese Achse ausgehenden von einem Topic immer eine leere Menge.
Ein ähnliches Verhalten weißt diese Achse ausgehenden von einer Assoziation
auf. In diesem Kontext liefert die Rückwärtsrichtung eine Menge von
Assoziationen, welche über ein Topic in der Art verbunden sind, das dieses
Topic an beiden Assoziationen teilnimmt. Das Verhalten während einer
Vorwärtsnavigation wird vom aktuellen Draft nicht weiter spezifiziert, liefert also
im Extremfall eine leere Menge oder einen Null-Wert.
64
5. Analyse der Kritikpunkte des aktuellen Drafts
Eine Lösung der Problematik wäre die Definition eines äquivalenten Verhaltens
der Achse unabhängig von der Navigationsrichtung. Resultat dieser
Modifikation wäre die vollständige Abgeschlossenheit des durch die Achsen
definierten Raumes, sowie ein vollständig konsistentes und einheitliches
Verhalten aller Achsen. Dabei wird eine Achse genau dann als konsistent
angesehen, wenn eine Kombination der Navigation in beiden Richtungen
entlang einer Achse, stets in einer Menge resultiert, welche das
Ursprungselement enthält. Einzige Ausnahme dieser Definition stellt die leere
Ergebnismenge in Vorwärtsrichtung dar, da eine Navigation zurück hier nicht
möglich ist.
65
5. Analyse der Kritikpunkte des aktuellen Drafts
Der aktuelle Draft wird von vielen Autoren als zu komplex und nicht
implementierbar angesehen. Aktuell stellt sich die Frage der Umsetzbarkeit des
aktuellen Draft in seiner jetzigen Form bzw. die Auswahl der Kernkomponenten
des finalen Standards. Der finale Standard sollte alle Elemente umfassen,
welche für eine Implementierung des TMQL-Parsers unabdingbar sind und zur
Erfüllung der grundlegenden Funktionalität der Datenselektion enthalten sein
müssen. Um die Frage zu klären ist ein detaillierter Blick auf die einzelnen
Bestandteile, sowie eine Abschätzung der Notwendigkeit und Performance
erforderlich. Die Frage der Performance sollte dabei allerdings nur eine
nachgestellte Rolle besitzen, da die Frage eines Standards nicht an der
Performance auszumachen ist, allerdings werfen sich an einigen Stellen Zweifel
auf, ob eine langsame Implementierung, den Mehrwert dieses Features nicht
aufwiegt.
Der erste Diskussionspunkt nimmt dabei nur indirekt Bezug auf TMQL und
befasst sich mit der aktuelle Schwachstelle des TMDM. Hauptgegenstand der
Diskussion ist die Verwendung und Handhabung eines Item-Identifier als
eindeutige Referenz eines Topics. Problem dieser Verwendung ist die fehlende
Spezifizierung der Verarbeitung bzw. Auflösung solcher Item-Identifier durch die
Topic-Maps-Engine ([8], Abs. 5.1 General).
Die genannte Schwachstelle des TMDM bietet ein erhöhtes Potential der
Inkonsistenz, da eine Verarbeitung im Extremfall in verschiedenen Ergebnissen
66
5. Analyse der Kritikpunkte des aktuellen Drafts
Einige der Regeln erhöhen dabei deutlich die Komplexität der Grammatik und
reduzieren die Sprache von einer kontextfreien zu einer kontextabhängigen
Sprache. Um den Sachverhalt zu verdeutlichen sei folgendes Beispiel genannt.
dann Bestandteil des Non-Canonical Level der Sprache, stellt aber durch die
Eindeutigkeit des Schlüsselwortes exists noch keine Mehrdeutigkeit dar. Durch
Definition einer weiteren Term-Reduktion auf die dritte Prädikatenformel erhöht
sich die Komplexität des Parser-Prozesses. Als Beispiel sei die vierte Regel
genannt. Einem Parser ist es nur auf Basis der vollständigen Kenntnis über
vorangegangene Token möglich an besagter Stelle die richtige Klausel zu
erkennen und an den Interpreter zu melden. Mit Kenntnis sei hier das Wissen
über das Auftreten innerhalb der Anfrage gemeint.
Im Rahmen der Erkenntnis ist eine Interpretation auf Ebene des Non-Canonical
Level schwer und eventuell zu fehlerbehaftet. Eine Vollständige Reduktion des
Non-Canonical Level auf das Canonical Level ist ohne Kontextinformation nicht
möglich, da bereits an gezeigtem Beispiel zwei mögliche Pfade entstehen,
welche beide ohne Wissen des Kontextes eine Gültigkeit besitzen.
68
5. Analyse der Kritikpunkte des aktuellen Drafts
...
where is-neighbour-of (tm:subject : $a, tm:subject : $a')
& is-neighbour-of (tm:subject : $a', tm:subject : $a'')
...
where is-neighbour-of (tm:subject : $a, tm:subject : $b)
& is-neighbour-of (tm:subject : $b, tm:subject : $c)
Meiner persönlichen Meinung nach ist die semantische Bindung von Variablen
an ihren Namen, wie hier gezeigt, nicht sinnvoll. Das Verständnis des Lesers für
eine solche semantische Regel ist nur beschränkt zu erwarten. Angenommen
dem oberen Fall, liefern zwei völlig identische Anfragen, angesehen vom
verwendeten Variablennamen, verschiedene Ergebnisse, was wiederum zu
völlig Unverständnis beim Anwender führen kann. Die Bezeichnung von
Variablen sollte, ähnlich wie in modernen Programmiersprachen, wie Java oder
Ruby, keine semantische Bedeutung besitzen bzw. im Rahmen gültiger Muster
frei von jedem semantischen Bezug über Ausprägung und Gültigkeit
gebundener Werte sein.
69
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Durch das Entwurfsziel der Verwendung von TMAPI und der Abstraktion von
der konkreten Topic-Maps-Engine kann TMQL4J in Verbindung mit allen
Engines eingesetzt werden, welche die aktuelle TMAPI-Spezifikation umsetzen.
Durch Kombination mit Technologien zur Sprachüberbrückung, wie JRTM, ist
ein Einsatz auch in Kombination mit RTM oder anderen Programmiersprachen
denkbar. Folglich ist es möglich TMQL4J auch in eine bereits bestehende
Anwendung zu integrieren.
Die folgende Abbildung ordnet TMQL4J in die Architektur einer fiktiven Topic-
Maps-Anwendung ein und verdeutlicht deren Einsatzgebiet im Kontext solcher
Anwendungen.
70
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Die Vorteile des modularen Ansatzes sind vielseitig. Ein modularer Ansatz
ermöglicht einzelne Komponenten einfach auszulagern und für andere
Anwendung zu nutzen. Ein Modul kapselt gerade so viel Funktionalität um seine
definierte Aufgabe zu erfüllen, wobei diese Aufgabe so feingranular wie möglich
definiert werden muss. Der zweite Vorteil liegt in der Fehlererkennung und
Behebung. Hauptmerkmal einer Softwarekomponente ist die vollständige
Kapselung einschließlich der Fehlerbehandlung. Ein Fehler welcher innerhalb
einer Komponente auftritt, sollte in dieser behandelt werden. Folglich lassen
sich einzelne Funktionalitäten unabhängig voneinander testen und validieren.
Ein weiterer Vorteil und Hauptargument für die aktuelle Implementierung ist die
flexible Austauschbarkeit und Anpassbarkeit von einzelnen Komponenten der
Engine. Ein sich änderndes Verhalten innerhalb einer Komponente, kann und
sollte auch genau dort angepasst werden. Des Weiteren ermöglicht diese Art
der Softwarearchitektur eine iterative und funktionale Entwicklung einzelner
Sprachbestandteile von TMQL, so kann beispielsweise die Navigation von den
semantischen Sprachmuster getrennt werden.
6.3. TMQL-Laufzeitumgebung
Jeder Prozess kapselt dabei eines oder mehrere der in den folgenden Kapiteln
beschrieben Module.
Die Initialisierung stellt nur indirekt einen TMQL-Prozess dar und bildet die
Grundlage für eine Realisierung der späteren Verarbeitungen einer Query
gemäß dem im Draft spezifizierten Vorgehensmodell. Innerhalb der
Initialisierungsphase erfolgt die Definition der TMQL-Environment-Map als
Topic Maps. Die Environment-Map enthält dabei alle im Draft vordefinierten
Konzepte, wie Funktionen und Datentypen. Die Definition und initiale Bindung
der Systemvariablen stellt die zweite Kernfunktionalität dieser Phase dar.
Ergebnis dieser Phase ist der initiale Kontext einer jeden TMQL-Verarbeitung,
repräsentiert durch die abstrakte Klasse IInitialContext. An die
Initialisierungsphase schließt sich direkt die Vorverarbeitung an. Innerhalb der
Vorverarbeitung erfolgen die Bereinigung des TMQL-Query, sowie die
Kanonisierung. Die komplette Trennung der Kanonisierung vom Prozess des
Parsens ist allerdings nicht möglich.
72
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Der Prozess des Parsens setzt sich aus dem Vorgang der Zerlegung in
einzelne semantische Token (Lexikalisches Scannen) gefolgt vom eigentlichen
Parser-Prozess zusammen und resultiert in einer Instanz des generierten
Parser-Baum, welcher die Zerlegung eines Query in seine Expression
repräsentiert.
Der letzte und entscheidende Schritt der Verarbeitung ist die Interpretation des
generierten Parser-Baumes. Die Interpretation erfolgt dabei auf Ebene
einzelner Expressions und orientiert sich an den Restriktionen des aktuellen
Drafts. Ergebnis der Interpretation ist eine Sequenz von Tupeln, welche in der
Nachverarbeitung bzw. der Ergebnisverarbeitung in den gewünschten
Ergebnistyp transformiert werden können.
Die Funktionalität dieses Moduls setzt dabei auf Kernkomponenten der TMAPI
2.0 auf. Jeder einzelne Navigationsschritt wird in eine Menge von TMAPI-
73
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Als Realisierung der eindeutigen Identität eines Topics gemäß dem TMDM
besitzt jede Instanz von Topic innerhalb der TMAPI ein Set von Subject-
Identifier, Subject-Locator und Item-Identifier. In Folge dessen, ist es der
Anwendung zu jedem Zeitpunkt möglich, die entsprechende Instanz zu
74
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
identifizieren. Die drei Identitätsachsen item, indicators und locators lassen sich
daher ohne Zusatzfunktionen direkt auf die TMAPI abbilden. Das folgende
Codefragment zeigt am Beispiel der locators-Achse die Implementierung auf
Basis der TMAPI.
Kontextes der Anfrage eine eindeutige Auflösung zum gewollten Objekt möglich
erscheint.
Die beiden Achsen der Typhierarchie types und supertypes lassen sich nur
bedingt auf Basis definierter TMAPI-Methoden realisieren. In Vorwärtsrichtung
stellt die API, Methoden bereit um iterativ alle Typen eines Topics zu
extrahieren. Im Gegensatz zur types-Achse ist die Abfrage aller Subtypen oder
Supertypen keinesfalls über einen Aufruf möglich. Ferner werden in der
aktuellen Implementierung die Assoziationen extrahiert, welche die Supertype-
Subtype-Beziehung zweier Typen gemäß TMDM innerhalb der Topic Maps
beschreiben. Dies wird allerdings nur möglich, wenn die im TMDM definierten
Subject-Identifier verwendet werden. Zur Erkennung der Instanzen eines Typs
stellt die TMAPI 2.0 einen Index zur Verfügung, welcher innerhalb der Engine
die Instanzen eines Typs speichert.
Die atomify-Achse lässt sich ohne ein weiteres Modul aus genannten Gründen
nicht umsetzen. Die Integration der Funktionalität in diese Komponente stellt
ebenfalls keine richtige Lösung dar, da sie kontroverse zur gewählten
Softwarearchitektur ist. Die beiden völlig verschiedenen Aufgaben sind in zwei
eigene Module zu zerlegen. Zur Realisierung der atomify-Achse wird eine
Komponente zur Serialisierung und Deserialisierung von atomaren Werten
benötigt. Die TMAPI 2.0 besitzt zwar einen speziellen Index aller Namen bzw.
Occurrences, welcher zu jeder gegeben Zeichenkettenrepräsentation die
entsprechenden Objekte liefen kann, dass vorweg angesprochene Problem
besteht weiterhin.
76
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
6.4.2. Vorverarbeitungsroutine
Jede der drei Module wird als eine eigene Java-Klasse implementiert, folgendes
UML-Diagramm liefert einen Überblick über die Schnittstellen, sowie
implementierenden Klassen.
77
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
6.4.3. TMQL-Lexer
Eines der drei Kernmodule der TMQL-Engine bildet der lexikalische Scanner,
im Folgenden als TMQL-Lexer bezeichnet. Per Definition handelt es sich bei
einem lexikalischen Scanner um einen speziellen Parser bzw. ein spezielles
Computerprogramm zur Zerlegung von Eingaben in eine Folge logischer
Einheiten, auch als Token bezeichnet [27].
78
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Nach Abschluss der lexikalischen Analyse stellt der TMQL-Lexer die Eingabe
als eine Folge von Token, sowie eine Folge der korrespondierenden
Terminalsymbole zur Verfügung.
Zweites Kernmodul der TMQL-Engine ist der TMQL-Parser. Unter einem Parser
versteht man ein spezielles Computerprogramm, zur Realisierung der zur
79
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
80
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Wie im Fall von XML gibt es keine überlegene Variante, da beide ihre Vor- und
Nachteile aufweisen. Der Speicherbedarf des DOM-Ansatzes steigt mit
zunehmender Länge und Komplexität der Eingabe, erleichtert allerdings die
spätere semantische Analyse, durch die enge Bindung an die Grammatik,
sowie die fein granulare Aufteilung in atomare Einheiten innerhalb der
Baumstruktur. Die Vor- bzw. Nachteile des SAX-Ansatzes sind nahezu
umgekehrt, erweitert um den Vorteil der Geschwindigkeit der Verarbeitung. Die
Erkennung eines ungültigen Ausdruckes ist schneller möglich, da die
Verarbeitung parallel zum Parsen realisiert wird und nicht erst nach Abschluss
des kompletten Parsens.
81
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
6.4.5. TMQL-Interpreter
Auf Basis der generierten Baumstruktur lässt sich eine semantische Analyse
realisieren. Die semantische Analyse basiert auf der Menge der erkannten
Teilausdrücke und liefert nach erfolgreicher Verarbeitung eine Menge von
Objekten zurück. Bei der Menge von Objekten kann es sich um Elemente der
Topic Maps handeln, aber auch um eine Menge von XML-Objekten oder um
eine CTM-Instanz.
82
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
eines Bindings. Innerhalb eines Binding darf jeder Variable nur genau einmal
ein Wert zugeordnet werden, alle weiteren Versuche führen, wie im Standard
spezifiziert, zu einem Fehler. Ein Variablenset hält zudem eine Menge
geschützter Variablen, die im Rahmen einer Verarbeitung niemals an
denselben Wert gebunden werden dürfen. Per Definition gelten Variablen als
geschützt, wenn sich deren Namen nur durch die Anzahl der nachgestellten
Primes voneinander unterscheiden.
Die semantische Analyse eines TMQL-Query erfolgt iterativ auf Basis der
einzelnen Teilausdrücke. Jeder Teilausdruck erhält zu Beginn der Verarbeitung
den aktuellen Kontext und verändert diesen gemäß des TMQL-Drafts. Unter
dem Prozess der Veränderung wird eine Menge von Operationen spezifiziert,
welche neue Variablen setzen, eine Sequenz generieren oder eine Sequenz
modifizieren. Um eine ungewollte Interferenz zwischen Teilausdrücken zu
vermeiden, erzeugt jeder Ausdruck vor dem Aufruf eines Teilausdrucks eine
Kopie des obersten Variablensets und legt es auf den Variablen-Stack, bevor er
83
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Ein einfaches Beispiel des Prozesses liefert die Verarbeitung der Limit-Klausel
des Select-Style. Der Select-Ausdruck erzeugt zunächst wie beschrieben, eine
Kopie des Variablensets und gibt die Verarbeitung an die Limit-Klausel ab. Im
Rahmen der Verarbeitung der Limit-Klausel wird die Variable $_limit erzeugt
und an den entsprechenden Wert gebunden. Nach erfolgreicher Verarbeitung
kehrt die Routine zum Select-Ausdruck zurück, welcher den Wert der Variable
vom Stack extrahiert und mit der Verarbeitung anderer Teilausdrücke fortfährt.
Der komplette Prozess ist abgeschlossen, wenn kein Teilausdruck mehr
ausgewertet werden muss und die Verarbeitung des obersten Ausdrucks
abgeschlossen ist. Fehler während der Verarbeitung, wie die fehlgeschlagene
Referenzauflösung (Abbildung 3), führen zum sofortigen Unterbrechen.
Äquivalent zu den bereits genannten Modulen wird auch der Interpreter als
abstrakte Schnittstelle repräsentiert. Die TMQL-Engine kann somit um eine
domänenspezifische Implementierung erweitert werden. Eine
domänenspezifische Implementierung bietet die Möglichkeit der Verarbeitung
auf Basis von zusätzlichem ontologischem Wissen.
84
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
6.4.6. TMQL-Ergebnisverarbeitungsroutine
85
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
Neben den Standardmethoden der Schnittstelle kann jeder Typ eine Menge
spezifischer Funktionen enthalten, wie die Extraktion als XTM.
Der zweite Ergebnistyp dient der Evaluierung und Testphase der Entwicklung.
Die Tupelsequenz wird dafür in eine Canonical XML Topic Maps (CXTM)
überführt und als solche gespeichert. Ziel dieses Ergebnistyps ist der Vergleich
zu anderen TMQL-Engines (siehe 7.2).
86
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
87
6. Entwurf und Implementierung der TMQL-Engine TMQL4J
88
7. Testkonzeption
7. Testkonzeption
Innerhalb der Tests wurde bewusst auf die Formulierung und Definition von
Testqueries verzichtet, da die Ergebnisse solcher TMQL-Anfragen nur im
Bezug auf eine konkrete Topic Maps vorhersagbar und überprüfbar sind und
somit keine Möglichkeit der allgemein gültigen Überprüfbarkeit von TMQL-
Engines bieten. Folglich wurde die Testphase auf eine Überprüfung der
Funktionalitäten, sowie der Möglichkeit der Vergleichbarkeit durch CXTM,
begrenzt.
89
7. Testkonzeption
Ein weiterer Vorteil der Verwendung von JUnit als Testframework ist die
automatische Erfassung der Laufzeit eines Testfalles und der einzelnen Tests
innerhalb dieses Testfalls. Schwachstelle innerhalb der Implementierung oder
gar des TMQL-Drafts sind somit erkennbar, können analysiert und letztlich
behoben werden.
90
7. Testkonzeption
7.2. CXTM-Exports
Das Format der Canonical XML Topic Maps, CXTM, wurde entwickelt, um die
Vergleichbarkeit von einzelnen Topic-Maps-Engines zu ermöglichen. Grundlage
der Vergleichbarkeit, ist der Export der jeweiligen Topic Maps in ein CXTM-
Format, sowie der Vergleich beider Dateien auf Byteebene. Gemäß TMDM
besitzt eine Topic Maps allerdings keine interne Sortierung, was den Vergleich
auf Byteebene quasi unmöglich macht. Zur Lösung dieses Problems zwingt das
CXTM-Format allen Konstrukten der Topic Maps eine Sortierung auf. Die
Sortierung einzelner Informationselemente basiert auf einer Menge von
typspezifischen Regeln. Die Sortierung einer Sequenz orientiert sich
beispielsweise an der Mächtigkeit der Sequenzen und der enthalten Tupeln. Je
mehr Tupel ein Set enthält, desto höher wird es einsortiert. Die Sortierung
innerhalb des Sets, erfolgt paarweise nach kanonischer Sortierung.
91
7. Testkonzeption
Der aktuelle Prototyp realisiert das erste Konzept, da eine Anpassung des
CXTM-Standards zeitaufwendig und die Anpassung bestehender
Implementierung eines CXTM-Exports ebenfalls den zeitlichen Rahmen der
TMQL-Engine-Entwicklung sprengen würden. Eine spätere Anpassung sollte
allerdings auch hier keinen großen Mehraufwand nach sich ziehen.
92
8. Ausblick
8. Ausblick
8.1. Weiterentwicklungen
Aktuell handelt es sich bei der TMQL4J-Engine um einen Prototyp, der noch
nicht den gewünschten Funktionsumfang des gesamten TMQL-Drafts abdecken
kann und soll. Eine Erweiterung zur vollständigen Abdeckung des Draft ist
geplant und befindet sich in Entwicklung. Zu den aktuell nicht unterstützten
Komponenten des Drafts zählen die Rückgabe der Ergebnisse als CTM- oder
XTM-Instanz. Begründet durch die Modularisierung der einzelnen
Komponenten, sowie der feingranularen Integration der Ergebnisverarbeitung,
stellt die Implementierung dieser Ergebnistypen keine große Problematik dar,
ist aber nicht Bestandteil dieser Arbeit.
Aktuell bietet die TMQL4J-Engine nicht die Möglichkeit der Definition und
Integration eigener Operatoren bzw. Funktionen über die Environment-Klausel
93
8. Ausblick
eines TMQL-Query. Dieses Defizit soll ebenfalls durch die nächste Version der
TMQL4J-Engine beseitigt werden.
Ferner ist der Einsatz von TMQL4J in diversen Projekten des Topic Maps Lab,
wie Musica Migrans oder Maiana, geplant.
8.2. Optimierungsansätze
94
8. Ausblick
iko
Typ A Typ B
isa
95
8. Ausblick
Problematik, dass die Engine eine gewisse Anzahl von Operationen unnötig
wiederholen muss, obwohl ihr das Ergebnis aufgrund von Duplikaten bereits
bekannt sein könnte. Diese Problematik verstärkt sich mit Komplexität der Topic
Maps rapide und führt zu einem signifikant höheren Verbrauch von Rechenzeit.
Um kompatibel zum aktuellen Draft zu bleiben und trotzdem dieses Problem
lösen zu können, ist die Verwendung eines intelligenten Multi-Sets denkbar.
Eine solche Implementierung ermöglicht eine Iteration nur über die Menge
verschiedener Tupel und repliziert die Ergebnisse beim wiedereinfügen in das
Ergebnisset. Zur Realisierung dieses Multi-Sets sind noch einige Fragestellung
offen bzw. zu klären. Die Programmiersprache Java ermöglicht keine
Manipulation der Iteration über solche Datenkollektion im Kontext des
Kontrollkonstrukts einer For-Schleife. Das zweite Problem bildet, die
Entkopplung der Eingabesequenz und der Ausgabesequenz, da die Information
über Duplikate nur der Eingabesequenz bekannt sind, ist es der
Ausgabesequenz nicht möglich die Anzahl an Duplikaten nach der Operation
einzufügen. Diese Probleme sind theoretisch lösbar, der wirkliche Mehrwert
müsste allerdings weiter untersucht werden. Die aktuelle Implementierung von
TMQL4J bietet durch Setzen der entsprechenden Systemvariablen die
Verwendung von Sets anstelle von Multi-Sets.
96
9. Schlusswort
9. Schlusswort
97
9. Schlusswort
Als Gesamtfazit lässt sich die Erkenntnis gewinnen, dass die Entwicklung einer
Engine zur Verarbeitung eines sich verändernden Drafts bzw. Standards,
Analyse, Entwurf und Implementierung vor einige Probleme stellt und
Fragestellungen aufwirft, welche gelöst werden mussten. Im Kontext von TMQL
war dies gleichbedeutend mit der Verwendung einer Softwarearchitektur, die
eine spätere Anpassung ohne großen Aufwand ermöglicht.
Da die Einsatzszenarien einer Sprache wie TMQL vielseitig sind, wird oft eine
domänenspezifische Implementierung benötigt, welche die Terminologie des
konkreten Szenarios abbilden kann. Der hohe Abstraktionsgrad, sowie das
feingranulare Modularisierungskonzept von TMQL4J bildet die Grundlage
genau dieses Ziel durch Verwendung der Engine umzusetzen.
98
Literatur- und Quellenverzeichnis
[5] Garshol, L.M. (2004) tolog - a topic maps query language, 16. Februar,
[Online], Available: http://www.ontopia.net/topicmaps/materials/tolog.html
[1. September 2009].
[6] Garshol, L.M. (2007) tolog - language tutorial, 24. August, [Online],
Available: http://www.ontopia.net/omnigator/docs/query/tutorial.html
[1. September 2009].
[8] ISO/IEC 13250-2 (2006) Topic Maps - Data Model, 19. Juni, [Online],
Available: http://www.isotopicmaps.org/sam/sam-model/
[1. August 2009].
[9] ISO/IEC 13250-3 (2006) Topic Maps - XML Syntax, 19. Juni, [Online],
Available: http://www.isotopicmaps.org/sam/sam-xtm/#xtm1.0-
differences [1. August 2009].
XI
[10] ISO/IEC 13250-4 (2009) Topic Maps - Canonicalization - CXTM,
27. Januar, [Online], Available:
http://www.isotopicmaps.org/cxtm/cxtm.html [September 2009].
[11] ISO/IEC 13250-6 (2008) Topic Maps - Compact Syntax, 15. Mai,
[Online], Available: http://isotopicmaps.org/ctm/ctm.html
[5. August 2009].
[12] ISO/IEC 18048 (2002) Topic Maps Query Language, Use Cases,
12. April, [Online], Available: http://www.isotopicmaps.org/tmql/use-
cases.html [7. September 2009].
[13] ISO/IEC 18048 (2008) Topic Maps Query Language, 15. Mai, [Online],
Available: http://www.isotopicmaps.org/tmql/tmql.html [2009].
[14] ISO/IEC 19756 (2009) Topic Maps Constraint Language, 7. Juli, [Online],
Available: http://www.isotopicmaps.org/tmcl/tmcl.html
[11. September 2009].
[16] Maicher, L. and Bock, B. (2008) ActiveTM - The Factory for Domain-
customised Portal Engines, Leipzig.
[18] Pinchuk, R. (2009) Toma - Draft Suggestion for TMQL, 1. Juli, [Online],
Available: http://topiwriter.com/toma/TW_UM_TOMA_100.pdf [Juli 2009].
XII
[20] RDF Core Working Group (2004) RDF/XML Syntax Specification,
10. Februar, [Online], Available: http://www.w3.org/TR/rdf-syntax-
grammar/ [7. September 2009].
[21] RDF Data Access Working Group (2008) SPARQL Query Language for
RDF, 15. Januar, [Online], Available: http://www.w3.org/TR/rdf-sparql-
query/ [7. September 2009].
[24] Topic Maps Lab (2009) Topic Maps Lab, Leipzig: Matthes & Hofer.
[25] Ullenboom, C. (2009) Java ist auch eine Insel, 8th edition, Bonn: Galileo
Press.
[26] W3C XML Schema Working Group (2004) XML Shema Part 2:
Datatypes Second Edition, 28. Oktober, [Online], Available:
http://www.w3.org/TR/xmlschema-2/ [Juli 2009].
XIII
[30] Wikipedia (2009) SQL, 4. Juli, [Online], Available:
http://de.wikipedia.org/wiki/SQL [25. Juli 2009].
[31] XSL Working Group (1999) XML Path Language (XPath) Version 1.0,
16. November, [Online], Available: http://www.w3.org/TR/xpath
[7. September 2009].
XIV
Selbstständigkeitserklärung