1. Einführung in Topic Maps
Topic Maps Query Language
Session 4
Sven Krosse M. Sc.
Topic Maps Lab an der Universität Leipzig
krosse@informatik.uni-leipzig.de
topicmapslab.de
5. Einführung in Topic Maps
Funktionen
● erlaubt als sogenannte Value-Expression oder Content
● Bestandteil einer Boolean-Expression
● Bestandteil von Select-Expressions
● jeder Operator existiert als Funktion
● alle im Namespace fn
(http://psi.topicmaps.org/tmql/1.0/functions/)
topicmapslab.de
5
6. Einführung in Topic Maps
Funktion - has-datatype
● Identifier: has-datatype
● Argumente: eine Menge von Konstrukten
● Beschreibung:
● liefert für jede Occurrence den Datentyp als Locator
● liefert für andere Konstrukte das Systemtopic undef
topicmapslab.de
6
7. Einführung in Topic Maps
Funktion - has-datatype
● Beispiel
%prefix o http://psi.ontopia.net/music/
// o:composer >> characteristics tm:occurrence
[ fn:has-datatype(.) == xsd:string ]
→ alle Occurrence vom Typ XSD String
topicmapslab.de
7
8. Einführung in Topic Maps
Funktion - has-variant
● Identifier: has-variant
● Argumente: eine Menge von Konstrukten
● Beschreibung:
● liefert die Varianten von Namen
● sonst Systemtopic undef
topicmapslab.de
8
9. Einführung in Topic Maps
Funktion - has-variant
● Beispiel
%prefix o http://psi.ontopia.net/music/
http://en.wikipedia.org/wiki/Puccini >> characteristics tm:name
( fn:has-variant(.) )
→ die Namensvarianten aller Namen von Puccini
topicmapslab.de
9
10. Einführung in Topic Maps
Funktion - length
● Identifier: length
● Argumente: eine Menge von Literalen
● Beschreibung:
● liefert die Länge der String-Literale
● andere Konstrukte werden zu Literal konvertiert
Hinweis Draft 2010: umbenannt in 'string-length'
topicmapslab.de
10
11. Einführung in Topic Maps
Funktion - length
● Beispiel
%prefix o http://psi.ontopia.net/music/
http://en.wikipedia.org/wiki/Puccini >> characteristics tm:name
[ fn:length( . >> atomify ) == 10 ]
→ alle Namen von Puccini mit Länge 10
topicmapslab.de
11
12. Einführung in Topic Maps
Konstrukt-Literal-Transformation
● Topic → Name, Subject-Identifier, Subject-Locator, Item-Identifier
● Name → Stringliteral
● Occurrence → Stringliteral
● Variant → Stringliteral
● Role → Item-Identifier
● Association → Item-Identifier
topicmapslab.de
12
13. Einführung in Topic Maps
Funktion - slice
● Identifier: slice
● Argumente: eine Menge von Literalen und zwei numerische
Werte
● Beschreibung:
● liefert die Submenge definiert durch die numerischen
Grenzen
topicmapslab.de
13
14. Einführung in Topic Maps
Funktion - count
● Identifier: count
● Argumente: eine Menge von Literalen
● Beschreibung:
● liefert die Anzahl der Elemente der Menge
topicmapslab.de
14
15. Einführung in Topic Maps
Funktion - count
● Beispiel
%prefix o http://psi.ontopia.net/music/
// o:composer [ fn:count( . / tm:name ) == 2 ]
→ alle Komponisten, welche genau zwei Namen haben
topicmapslab.de
15
16. Einführung in Topic Maps
Funktion - uniq
● Identifier: uniq
● Argumente: eine Menge von Literalen
● Beschreibung:
● entfernt aller Duplikate
topicmapslab.de
16
17. Einführung in Topic Maps
Funktion - zigzag
● Identifier: zigzag
● Argumente: eine Menge von Literalen
● Beschreibung:
● erzeugt neues Tupel bestehend aus allen Tupeln der
gegebenen Menge
● Beispiel: zigzag( { [A, B] , [C, D] } )
= { [A, B, C, D] }
topicmapslab.de
17
18. Einführung in Topic Maps
Funktion - zagzig
● Identifier: zagzig
● Argumente: eine Menge von Literalen
● Beschreibung:
● erzeugt neue Menge mit Singleton Tupeln
● Beispiel: zagzig( { [A, B] , [C, D] } )
= { [A], [B], [C], [D] }
topicmapslab.de
18
19. Einführung in Topic Maps
Funktionen -TMQL4J
● Identifier: substring
● Argumente: eine Menge und zwei numerische Werte
● Beschreibung:
● Menge von Sub-Strings definiert durch numerische Werte
● numerische Werte definieren maximalen Bereich
● Beispiel: substring( „abc“ , 0 , 9 )
= { „abc“ }
Hinweis Draft 2010: 3. Argument definiert die Menge an Zeichen
topicmapslab.de
19
20. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: starts-with
● Argumente: eine Menge von Literalen und Vergleichsliteral
● Beschreibung:
● Prüfung ob Literal mit Vergleichsliteral beginnt
● Beispiel: starts-with( { „ab“,“bc“ } , „a“ )
= { true, false }
topicmapslab.de
20
21. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: ends-with
● Argumente: eine Menge von Literalen und Vergleichsliteral
● Beschreibung:
● Prüfung ob Literal mit Vergleichsliteral endet
● Beispiel: ends-with( { „ab“,“bc“ } , „b“ )
= { true, false }
topicmapslab.de
21
22. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: contains
● Argumente: eine Menge von Literalen und Vergleichsliteral
● Beschreibung:
● Prüfung ob Literal das Vergleichsliteral enthält
● Beispiel: contains( { „ab“,“bc“ } , „a“ )
= { true, false }
topicmapslab.de
22
23. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: substring-before
● Argumente: eine Menge von Literalen und Vergleichsliteral
● Beschreibung:
● liefert Zeichenkette vor dem gegebenen Literal, falls
vorhanden, ansonsten leere Zeichenkette
● Beispiel: substring-before( { „ab“,“bc“ } , „b“ )
= { „a“, „“ }
topicmapslab.de
23
24. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: substring-after
● Argumente: eine Menge von Literalen und Vergleichsliteral
● Beschreibung:
● liefert Zeichenkette nach dem gegebenen Literal, falls
vorhanden, ansonsten leere Zeichenkette
● Beispiel: substring-after( { „ab“,“bc“ } , „b“ )
= { „“, „c“ }
topicmapslab.de
24
25. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: normalize-space
● Argumente: eine Menge von Literalen
● Beschreibung:
● entfernt multiple Vorkommen von Leerzeichen
● Beispiel: normalize-space( { „a b“,“b c“ } )
= { „a b“, „b c“ }
topicmapslab.de
25
26. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: translate
● Argumente: eine Menge von Literalen und zwei weitere Literale
● Beschreibung:
● ersetzt jedes Zeichen des 2. Literals durch Zeichen des 3.
Literals (index-basiert)
● Beispiel: translate( „Puccini“,“Pci“,“xyz“ )
= { „xuyyznz“ }
topicmapslab.de
26
27. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: find
● Argumente: eine Menge von Literalen und weiteres Literal
● Beschreibung:
● lierfert Index des ersten Vorkommens des 2. Literals
● Beispiel: find( „Puccini“,“cc“ )
= {2}
topicmapslab.de
27
28. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: extract-regexp
● Argumente: eine Menge von Literalen und weiteres Literal
● Beschreibung:
● liefert den 1. Substring welcher den regulären Ausdruck
erfüllt
● Beispiel: extract-regexp( „Puccini“,“.*cc.*“ )
= { „Pucc“ }
topicmapslab.de
28
29. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: ceiling
● Argumente: eine Menge von numerischen Literalen
● Beschreibung:
● liefert kleinste natürliche Zahl die nicht kleiner als die
gegeben ist
● Beispiel: ceiling( { 1.5, - 1.5, 5 } )
= { 2, -1, 5 }
topicmapslab.de
29
30. Einführung in Topic Maps
Funktionen – Draft 2010
● Identifier: floor
● Argumente: eine Menge von numerischen Literalen
● Beschreibung:
● liefert größte natürliche Zahl die nicht größer als die gegeben
ist
● Beispiel: floor( { 1.5, - 1.5, 5 } )
= { 1, -2, 5 }
topicmapslab.de
30