Einführung in Topic Maps
topicmapslab.de
Topic Maps Query Language
Sven Krosse M. Sc.
Topic Maps Lab an der Universität Leipzig
Session 7
Einführung in Topic Maps
topicmapslab.de
Review – Session 6
1. FLW(O)R Style
● RETURN-Clause
● WHERE-Clause
● ORDER-BY Clause
● FOR-Clause
2. Verschachtelung
3. Content Types
● XML
● CTM
Einführung in Topic Maps
topicmapslab.de
Agenda
Useful TMQL Expression
1. If-Then-Else
TMQL Part II
1. Delete Expression
2. Insert Expression
3. Merge Expression
Einführung in Topic Maps
topicmapslab.de
SprachbestandteileUseful Expression
Einführung in Topic Maps
topicmapslab.de5
Bedingte Anweisung
● bedingte Auswertung von Ergebnissen
● erlaubt bedingte Verzweigung zur Verarbeitungszeit
● Grammatik
content ::= if path-expression then content
[ else content ]
Einführung in Topic Maps
topicmapslab.de6
Bedingte Anweisung
● Pfadausdruck nach Schlüsselwort IF bestimmt Verzweigung
● leere Menge → ELSE-Zweig
● ELSE-Zweig ist optional → leere Menge bei fehlender Definition
Einführung in Topic Maps
topicmapslab.de7
Bedingte Anweisung
%prefix o http://psi.ontopia.net/music/
FOR $topic IN // tm:subject
RETURN
IF $topic ISA o:composer
THEN $topic >> indicators
ELSE $topic / tm:name [0]
Einführung in Topic Maps
topicmapslab.de8
Bedingte Anweisung NCL
● Kurzform für bedingte Anweisung
● Bedingung repräsentiert „Then“-Zweig
● Grammatik
content ::= path-expression || path-expression
Einführung in Topic Maps
topicmapslab.de9
Bedingte Anweisung NCL
%prefix o http://psi.ontopia.net/music/
FOR $topic IN // tm:subject
RETURN
$topic >> indicators >> atomify [0] || $topic >> locators >> atomify [0]
Einführung in Topic Maps
topicmapslab.de
TMQL – Part II
Einführung in Topic Maps
topicmapslab.de11
TMQL Part II
● kein ISO-Standard oder Draft
● basiert auf TMQL Part I ( TMQL – Query Language )
● basiert syntaktisch auf dem Draft 2007
Einführung in Topic Maps
topicmapslab.de12
TMQL Part II
● definiert Veränderungsoperationen für Topic Maps
● Einfügeoperation
● Löschoperation
● Änderungsoperation
● Merge-Regeln
Einführung in Topic Maps
topicmapslab.de
SprachbestandteileInsert Expression
Einführung in Topic Maps
topicmapslab.de14
Insert Expression
● Erzeugen neuer Topic Maps Konstrukte
● Verwendung von CTM als Definitionssprache
● CTM-Content äquivalent zu FLW(O)R Style
● Verwendung von Variablen (gebunden durch Where-Klausel)
● erlaubt auch Änderung bestehender Elemente
Einführung in Topic Maps
topicmapslab.de15
Insert Expression
● Grammatik
insert-expression ::= INSERT “““ctm-stream “““
{ WHERE query-expression }
Einführung in Topic Maps
topicmapslab.de16
Insert Expression
INSERT “““ <http://psi.example.org/topic>. “““
→ Fügt ein neues Topic mit dem Subject-Identifier hinzu
INSERT “““ { $topic >> indicators >> atomify [0] ISA
<http://psi.example.org/topic> . } “““
WHERE $topic ISA tm:subject
→ Fügt jedem Topic den Typ http://psi.example.org/topic hinzu
Einführung in Topic Maps
topicmapslab.de
SprachbestandteileDelete Expression
Einführung in Topic Maps
topicmapslab.de18
Delete Expression
● Entfernen bestehender Topic Maps Konstrukte
● Adressierung von Konstrukten über Pfadausdruck
● Abhängigkeit werden nicht automatisch entfernt (z.B. Topic als Reifier,
Topic als Typ)
Einführung in Topic Maps
topicmapslab.de19
Delete Expression
● direkte Adressierung über Pfadausdruck und Filter
● Grammatik
delete-expression ::= DELETE { CASCADE } simple-content {filter-postfix}
WHERE boolean-expression
● Schlüsselwort CASCADE definiert Löschen aller Abhängigkeiten
● nicht kaskadiert ( Löschen wird abgebrochen )
● Where-Klausel definiert Wertebereich der Variablen
Einführung in Topic Maps
topicmapslab.de20
Delete Expression
DELETE CASCADE http://en.wikipedia.org/wiki/Puccini
→ entfernt das Topic Puccini und alle seine Abhängigkeiten
– gespielte Rollen und Assoziation
– alle Namen und Occurrences
– Verwendung als Theme (Konstrukte werden gelöscht)
– Verwendung als Reifier (Reifikation wird aufgehoben)
Einführung in Topic Maps
topicmapslab.de21
Delete Expression
DELETE CASCADE http://psi.ontopia.net/music/composer >> instances
→ entfernt alle Komponisten aus der Topic Map
DELETE CASCADE ALL
→ entfernt jegliche Konstrukte aus der Topic Map
Einführung in Topic Maps
topicmapslab.de
SprachbestandteileMerge Expression
Einführung in Topic Maps
topicmapslab.de23
Merge Expression
● Mergen von Topics gemäß TMDM
● Definition einer Menge von Topics, welche gemergt werden sollen
● Verwendung von Variablen
● Where-Klausel schränkt Wertebereich der Variablen ein
● Grammatik
merge-expression ::= MERGE <value-expression>
WHERE boolean-expression
Einführung in Topic Maps
topicmapslab.de24
Merge Expression
MERGE // http://psi.example.org/type [ . / email == „[email protected]“ ]
→ alle Topics, welche die folgenden Bedingung erfüllen, werden gemergt
● Instanz vom Typ http://psi.example.org/type
● besitzen mindestens eine Occurrence vom Typ email
● Wert mindestens einer dieser Occurrence ist [email protected]
Einführung in Topic Maps
topicmapslab.de25
Merge Expression
MERGE $person, $other
WHERE $person ISA person AND $other ISA person
AND $person / email == $other / email
→ Personen mit der selben E-Mail Adresse werden gemergt
Einführung in Topic Maps
topicmapslab.de26
Merge Expression
● Mergen von Assoziation
● Definition einer Menge von Assoziation, welche verschmelzen sollen
● Grammatik
merge-expression ::= MERGE association-definition
WHERE boolean-expression
Einführung in Topic Maps
topicmapslab.de27
Association-Definition
● äquivalent zu Predicate-Invocation (eingeschränkte Syntax)
● liefern Menge von Assoziation passend zum definierten Muster
● Ellipse hebt strikte Verarbeitung auf
association-definition ::= < part [ , … ] >
part ::= (ident | variable) ':' (ident | variable)
Einführung in Topic Maps
topicmapslab.de28
Association-Definition
%prefix m http://psi.ontopia.net/music/
m:composed-by (
m:composer : http://en.wikipedia.net/wiki/Puccini )
→ liefert alle Assoziationen, welche
● vom Typ „komponiert“ ist
● exakt eine Rolle vom Typ „Komponist“ gespielt von
Puccini besitzt
Einführung in Topic Maps
topicmapslab.de29
Association-Definition
%prefix m http://psi.ontopia.net/music/
m:composed-by (
tm:subject : http://en.wikipedia.net/wiki/Puccini , … )
→ liefert alle Assoziationen, welche
● vom Typ „komponiert“ ist
● mindestens eine Rolle gespielt von Puccini besitzt
→ der Rollentyp ist nicht eingeschränkt
Einführung in Topic Maps
topicmapslab.de30
Merge Expression
%prefix m http://psi.ontopia.net/music/
MERGE m:composed-by (
tm:subject : http://en.wikipedia.net/wiki/Puccini , … )
→ verschmelzen aller Assoziationen vom Typ „komponiert“,
welche von Puccini gespielt werden
Einführung in Topic Maps
topicmapslab.de31
Merge Expression
● Bedingungen
● selber Typ
● selber Scope
● Funktionsweise:
● Alle nicht vorhandenen Rollen werden kopiert
● Quell-Assoziation wird gelöscht
● Reifier werden verschmolzen
Einführung in Topic Maps
topicmapslab.de
ENDE
Top Related