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>