XQuery – String Funktionen Datenbanktechnologie / SS 2012 / Leonard Claus Funktionen in XQuery Die wesentlichen Konstrukte der XQuery-Sprache zur Anfrage an XML-Datenbanken können durch eine Vielzahl an Funktionen erweitert werden: • Funktionen auf numerische Werte • Funktionen auf boolsche Werte • Funktionen auf Zeichenketten • Zeit-und Kalenderfunktionen Funktionen auf Zeichenketten XQuery bietet eine große Auswahl an Funktionen zur Verarbeitung von Zeichenketten; im Gegensatz zu anderen Datenbankabfragsprachen (bspw. SQL) Diese lassen sich in 3 Klassen aufteilen: • Vergleich von Zeichenketten • Manipulation von Zeichenketten • Pattern Matching Manipulation von Zeichenketten „fn:concat“ Fügt alle Zeichenketten ohne Trennsymbole zu einer Kette zusammen let $line1 := "Welcome, Horatio: welcome, good Marcellus." let $line2 := "What, has this thing appear'dagain to-night?" let $lines := fn:concat($line1, $line2) return $lines Welcome, Horatio: welcome, good Marcellus.What, has this thing appear'dagain to-night? Manipulation von Zeichenketten „fn:string-join“ Fügt alle Zeichenketten des 1. Parameters mit dem Wert des 2. Parameters als Trennzeichen zu einer Kette zusammen let $act:= doc('/db/dbt/data/shakespeare/plays/hamlet.xml')//ACT/TITLE/text() let $trennzeichen := '--->' return fn:string-join($act, $trennzeichen) ACT I--->ACT II--->ACT III--->ACT IV--->ACT V Manipulation von Zeichenketten „fn:string-length“ Liefert die Länger der Zeichenkette let $hamlet:= doc('/db/dbt/data/shakespeare/plays/hamlet.xml')//text() let $hamlet-string := fn:string-join($hamlet, '') return fn:string-length($hamlet-string) 170648 Manipulation von Zeichenketten „fn:upper-case“ „fn:lower-case“ Ersetzt alle Klein- durch Großbuchstaben Ersetzt alle Groß- durch Kleinbuchstaben let $string := 'mYsTrInG' let $upper := fn:upper-case($string) let $lower := fn:lower-case($string) return <result> <original>{$string}</original> <upper>{$upper}</upper> <lower>{ <result> <original>mYsTrInG</original> <upper>MYSTRING</upper> <lower>mystring</lower> </result> Substitution & Konvertierung von Zeichenketten „fn:substring“ Liefert den Teil des 1. Parameters der im 2. Parameter angegebenen Position let $string := '1. ShakespearesWerke' let $substring1 := fn:substring($string, 4) let $substring2 := fn:substring($string, 4, 11) return <result> <result> <original>{$string}</original> <original>1. ShakespearesWerke</original> <sub1>{$substring1 }</sub1> <sub1>ShakespearesWerke</sub1> <sub2>{$substring2 }</sub2> <sub2>Shakespeare</sub2> </result> </result> Substitution & Konvertierung von Zeichenketten „fn:translate“ Ersetzung in der Zeichenkette, wobei jeder Buchstabe durch einen in den Parametern definierten Buchstaben substituiert wird let $string := 'Drei Chinesen mit dem Kontrabass' let $translate := fn:translate($string, 'i', 'a') return <result> <original>{$string}</original> <translate>{$translate}</translate> </result> <result> <original>Drei Chinesen mit dem Kontrabass</original> <translate>Drea Chanesen mat dem Kontrabass</translate> </result> Substitution & Konvertierung von Zeichenketten „fn:normalize-space“ let $string := ' Hier sind Eliminiert alle doppelten Leerzeichen als auch Leerzeichen am Anfang und am Ende der Zeichenkette zu viele Leerzeichen ' let $normalize := fn:normalize-space($string) return <result> <original>{$string}</original> <normalize>{$normalize }</normalize> </result> <result> <original> Hier sind zu viele Leerzeichen </original> <normalize>Hier sind zu viele Leerzeichen</normalize> </result> Substitution & Konvertierung von Zeichenketten fn:contains Überprüft, ob eine Zeichenkette des zweiten Parameters in dem Wert des ersten Parameters auftritt let $string1 := 'EinetolleZeichenkette' let $string2 := 'EineZeichenkette' let $search := 'tolle' let $contains1 := fn:contains($string1, $search) let $contains2 := fn:contains($string2, $search) return <result> <result> <result1>true</result1> <result1> {$contains1 } </result1> <result2>false</result2> <result2> {$contains2 } </result2> </result> </result>