Strings und Texte


Table of Contents

1. Strings und Texte - strings.xsl
2. Index

1. Strings und Texte - strings.xsl

Filename: strings.xsl

$Revision: 49 $, $Date: 2012-05-18 01:42:08 +0200 (Fri, 18 May 2012) $

Dieses Stylesheet enthält Funktionen für Strings und Texte.

Da für Testroutinen Funktionen und Templates aus internals.xsl benötigt werden, wird dieses Stylesheet in strings_tests.xsl getestet.

Autor: Stefan Krause

Homepage: http://www.expedimentum.org/

Lizenz (duale Lizenzierung):

Dieses Stylesheet und die dazugehörige Dokumentation sind unter einer Creative Commons-Lizenz (CC-BY 3.0) lizenziert. Die Weiternutzung ist bei Namensnennung erlaubt.

Dieses Stylesheet und die dazugehörige Dokumentation sind unter der sogenannten Expat License (einer GPL-kompatiblen MIT License) lizensiert. Es darf – als Ganzes oder auszugweise – unter Beibehaltung der Copyright-Notiz kopiert, verändert, veröffentlicht und verbreitet werden. Die Copyright-Notiz steht im Quelltext des Stylesheets und auf der Startseite der Dokumentation.

Revision History
Revision 0.2.502012-05-27Stf
neue Funktionen: xsb:fill-left(), xsb:fill-right()
Revision 0.2.492012-05-18Stf
neue Funktionen: xsb:escape-for-replacement(); überarbeitet: xsb:trim-left(), xsb:trim-right(); erweiter: xsb:listed()
Revision 0.2.472012-05-15Stf
neue Funktionen: xsb:sort(), xsb:escape-for-regex(), xsb:count-matches()
Revision 0.2.02011-05-14Stf
erste veröffentlichte Version
Revision 0.1292011-02-27Stf
Erweiterung der Lizenz auf Expath/MIT license
Revision 0.532009-10-25Stf
Umstellung auf Namespaces xsb: und intern:
Revision 0.362009-08-02Stf
initiale Version

xsb:lax-string-compare(2) as="xs:boolean" (xsl:function)

Verarbeitet Eingabe und Vergleichswert mit normalize-space() und lower-case() und vergleicht dann Eingabe und Vergleichswert. Dadurch werden kleine Differenzen ignoriert.

Revision History
Revision 0.532009-10-25Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

Parameter compare-to as="xs:string?"

Vergleichswert (String)

xsb:return-default-if-empty(2) as="xs:string" (xsl:function)

gibt einen übergebenen Standardwert aus, wenn der übergeben String leer ist oder nur Whitespace enthält, sonst den String selbst

Wenn der übergebene Standardwert eine Leersequenz ist, wird ein Leerstring zurückgegeben.

Revision History
Revision 0.532009-10-25Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

Parameter default as="xs:string?"

Standardwert (String)

xsb:trim-left(1) as="xs:string" (xsl:function)

entfernt führenden Whitespace

Revision History
Revision 0.2.482012-05-18Stf

Status: beta

auf fn:replace() umgeschrieben

Revision 0.532009-10-25Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

xsb:trim-right(1) as="xs:string" (xsl:function)

entfernt Whitespace am Ende eines Strigs

Revision History
Revision 0.2.482012-05-18Stf

Status: beta

auf fn:replace() umgeschrieben

Revision 0.532009-10-25Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

xsb:trim(1) as="xs:string" (xsl:function)

entfernt Whitespace am Anfang und am Ende. Im Unterschied zu normalize-space() wird Whitespace in der Mitte nicht berücksichtigt.

Revision History
Revision 0.532009-10-25Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

xsb:normalize-paragraphs(1) as="xs:string?" intern:solved="EmptySequenceAllowed" (xsl:function)

ersetzt mehrfache Zeilenwechsel durch einen einzelnen Zeilenwechsel. Im Unterschied zu normalize-space() wird ein Zeilenwechsel aber erhalten.

rekursiver Algorithmus: die Funktion ruft sich solange selbst auf, bis keine mehrfachen Zeilenwechsel in der Eingabe vorhanden sind.

Da die Eingabe sinnvoll eine Leersequenz sein kann, ist die Rückgabe einer Leersequenze erlaubt.

Revision History
Revision 0.532009-10-25Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

xsb:listed(2) as="xs:boolean" (xsl:function)

Diese Funktion überprüft, ob in einer Leerzeichen-getrennten Liste ein bestimmter Eintrag vorhanden ist.

Die Eingabe eines Leerstrings oder einer Leersequenz als Parameter list ergibt false().

Die Eingabe eines Leerstrings oder einer Leersequenz als Parameter item ergibt false().

Revision History
Revision 0.2.482012-05-18Stf

Status: beta

neben Leerzeichen ist jetzt auch anderer Whitespace zum Trennen der String-Token erlaubt

Revision 0.692009-12-05Stf

Status: beta

initiale Version

Parameter list as="xs:string?"

Whitespace-getrennte Liste von String-Token

Parameter item as="xs:string?"

String-Token, auf dessen Existenz getestet werden soll

xsb:return-composed-string-if-not-empty(3) as="xs:string" (xsl:function)

Diese Funktion fügt vor und nach dem zu testenden String die übergebenen Strings ein, wenn der zu testende String nicht leer ist.

Mit dieser Funktion wird die Erzeugung von bedingten Texten vereinfacht, bspw. das Einfügen von Kommata oder Doppelpunkten nach einem Text.

Revision History
Revision 0.962010-06-27Stf

Status: beta

initiale Version

Parameter tested-string as="xs:string?"

getesteter String

Parameter string-before as="xs:string?"

String, der vor dem getesteten String eingefügt werden soll

Parameter string-after as="xs:string?"

String, der nach dem getesteten String eingefügt werden soll

xsb:encode-for-id(1) as="xs:string" (xsl:function)

wandelt einen eingegebenen String in eine xs:ID um, indem verbotene Zeichen ersetzt werden

Revision History
Revision 0.1242010-10-10Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

Eingabe (String)

xsb:sort(1) as="xs:anyAtomicType*" intern:solved="EmptySequenceAllowed" (xsl:function)

Shortcut für xsb:sort($input-sequence, 'ascending')

Revision History
Revision 0.2.472012-05-14Stf

Status: beta

initiale Version

Parameter input-sequence as="xs:anyAtomicType*"

Sequenz von atomic values

xsb:sort(2) as="xs:anyAtomicType*" intern:solved="EmptySequenceAllowed" (xsl:function)

sortiert atomic values

Die Implementierung folgt dem XSLT Beispiel aus dem 2.0-Standard.

Die Werte in der Sequenz müssen mit lt vergleichbar sein. Insbesondere scheitert das Sortieren von gemischten Sequenzen aus Strings und Zahlen.

Revision History
Revision 0.2.472012-05-14Stf

Status: beta

initiale Version

Parameter input-sequence as="xs:anyAtomicType*"

Sequenz von atomic values

Parameter order as="xs:string"

»ascending«/»descending«

xsb:escape-for-regex(1) as="xs:string" (xsl:function)

escapet Steuerzeichen in regulären Ausdrücken mit »\«

Ist input die Leersequenz, wird der Leerstring zurückgegeben.

Beispiele

  • xsb:escape-for-regex('Jan.') ergibt »Jan\.«

  • xsb:escape-for-regex('^1.200$') ergibt »\^1\.200\$«

Revision History
Revision 0.2.472012-05-15Stf

Status: alpha

initiale Version

Parameter input as="xs:string?"

String, der escapet werden soll

xsb:escape-for-replacement(1) as="xs:string" (xsl:function)

escapet Steuerzeichen in Ersetzungstexten für fn:replace()\« und »$«) mit »\«

Ist input die Leersequenz, wird der Leerstring zurückgegeben.

Beispiele

  • xsb:escape-for-replacement('$0') ergibt »\$0«

  • xsb:escape-for-replacement('\1.200$') ergibt »\\1.200\$«

Revision History
Revision 0.2.482012-05-17Stf

Status: alpha

initiale Version

Parameter input as="xs:string?"

String, der escapet werden soll

xsb:count-matches(3) as="xs:integer" (xsl:function)

zählt das Vorkommen eines Suchstrings in einem String

Sind string oder regex Leerstring oder die Leersequenz, wird 0 zurückgegeben.

Beispiele

  • xsb:count-matches('abc def abc', 'def') ergibt »1«

  • xsb:count-matches('abc def abc', 'abc') ergibt »2«

  • xsb:count-matches('abc', '[ab]') ergibt »2«

  • xsb:count-matches('abc', '[ab]+') ergibt »1«

  • xsb:count-matches('Aa', 'a', '') ergibt »1«

  • xsb:count-matches('Aa', 'a', 'i') ergibt »2«

Revision History
Revision 0.2.472012-05-15Stf

Status: beta

initiale Version

Parameter string as="xs:string?"

String, in dem gezählt wird

Parameter regex as="xs:string?"

regulärer Ausdruck, nach dem in string gesucht wird

Parameter flags as="xs:string?"

flags analog zum flags-Parameter von fn:matches() (siehe XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition), 7.6.6.1 Flags)

xsb:count-matches(2) as="xs:integer" (xsl:function)

Shortcut für xsb:count-matches($string, $regex, '')

Revision History
Revision 0.2.472012-05-16Stf

Status: beta

initiale Version

Parameter string as="xs:string?"

String, in dem gezählt wird

Parameter regex as="xs:string?"

regulärer Ausdruck, nach dem in string gesucht wird

xsb:replace(4) as="xs:string" (xsl:function)

führt wiederholtes paarweises Suchen und Ersetzen über einen String aus

Diese Funktion vereinfachte wiederholtes Suchen und Ersetzen über den selben String. Für jeden Wert aus der pattern-Sequenz wird ein fn:replace() mit dem korrespondierenden Wert (selbe Position) aus der replacement-Sequenz über den Eingabe-String ausgeführt. Sind in der replacement-Sequenz weniger Werte als in der pattern-Sequenz, werden (analog zu fn:translate()) die Fundstellen der »überzähligen« Pattern gelöscht.

Ist input der Leerstring oder die Leersequenz, wird ein Leerstring zurückgegeben.

Ist pattern der Leerstring oder die Leersequenz, wird input unverändert zurückgegeben (Ausnahme: Wenn input die Leersequenz ist, wird ein Leerstring zurückgegeben).

Ist replacement der Leerstring, wird jeder Treffer von pattern in input gelöscht.

Achtung: eine Leersequenz innerhalb der pattern- oder replacement-Sequenz »verschwindet« aus der Sequenz, d.h. die nachfolgenden Werte rücken eine Position nach vorn. Das wird in der Regel nicht der gewünschte Effekt sein!

Beispiele

  • xsb:replace('Affe Bär Elefant', ('Affe', 'Elefant') , ('monkey', 'elephant') ) ergibt »monkey Bär elephant«

  • xsb:replace('Affe Bär Elefant', ('Affe', 'Elefant') , ('monkey', '') ) ergibt »monkey Bär «

  • xsb:replace('Affe Bär Elefant', ('Affe', 'Elefant') , ('monkey') ) ergibt »monkey Bär «

  • xsb:replace('Affe Bär Elefant Löwe', ('Affe', 'Bär', 'Elefant', 'Löwe') , ('monkey', '', 'elephant', 'lion') ) ergibt »monkey elephant lion«

  • xsb:replace('Affe Bär Elefant', ('Affe', '', 'Elefant') , ('monkey', '', 'elephant') ) ergibt »monkey Bär elephant« (Leerstring in der pattern-Sequenz lässt Eingabe unverändert)

  • xsb:replace('Affe Bär Elefant', ('Affe', (), 'Elefant') , ('monkey', '', 'elephant') ) ergibt »monkey Bär « (Leersequenz in der pattern-Sequenz »verschwindet«, dadurch wird Elefant durch den Leerstring ersetzt)

  • xsb:replace('Affe Bär Elefant', ('Affe', 'Bär', 'Elefant') , ('monkey', (), 'elephant') ) ergibt »monkey elephant « (Leersequenz in der replacement-Sequenz »verschwindet«, dadurch wird Bär durch elephant ersetzt, und Elefant wird gelöscht.)

Revision History
Revision 0.2.472012-05-15Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

String, in dem ersetzt wird

Parameter pattern as="xs:string*"

Sequenz von regulären Ausdrücken, nach denen in input gesucht wird

Parameter replacement as="xs:string*"

Sequenz von Ersetzungstexten

Parameter flags as="xs:string?"

flags analog zum flags-Parameter von fn:replace() (siehe XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition), 7.6.6.1 Flags)

xsb:replace(3) as="xs:string" (xsl:function)

Shortcut für xsb:replace($input, $pattern, $replacement, '')

Revision History
Revision 0.2.472012-05-15Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

String, in dem ersetzt wird

Parameter pattern as="xs:string*"

Sequenz von regulären Ausdrücken, nach denen in input gesucht wird

Parameter replacement as="xs:string*"

Sequenz von Ersetzungstexten

xsb:index-of-first-match(3) as="xs:integer" (xsl:function)

ermittelt die Position des ersten Auftretens von pattern in string

Ist string oder pattern der Leerstring oder die Leersequenz, wird 0 zurückgegeben.

Beispiele

  • xsb:index-of-first-match('ab', 'a') ergibt »1«

  • xsb:index-of-first-match('ab', 'b') ergibt »2«

  • xsb:index-of-first-match('ab', 'c') ergibt »0«

  • xsb:index-of-first-match('ABC', 'b', '') ergibt »0«

  • xsb:index-of-first-match('ABC', 'b', 'i') ergibt »2«

Revision History
Revision 0.2.472012-05-16Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

String, in dem gesucht wird

Parameter pattern as="xs:string?"

regulärer Ausdruck, nach dem in input gesucht wird

Parameter flags as="xs:string?"

flags analog zum flags-Parameter von fn:tokenize() (siehe XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition), 7.6.6.1 Flags)

xsb:index-of-first-match(2) as="xs:integer" (xsl:function)

Shortcut für xsb:index-of-first-match($input, $pattern, '')

Revision History
Revision 0.2.472012-05-16Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

String, in dem gesucht wird

Parameter pattern as="xs:string?"

regulärer Ausdruck, nach dem in input gesucht wird

xsb:fill-left(3) as="xs:string" (xsl:function)

füllt $input links bis zur Länge $length mit dem Zeichen $fill-with auf

Bei einem Leerstring oder einer Leersequenz als $input wird vollständig mit $fill-with aufgefüllt.

Bei einem Leerstring oder einer Leersequenz als $fill-with wird $input unverändert zurückgegeben.

Ist $input länger als $fill-with, wird $input unverändert zurückgegeben.

Beispiele

  • xsb:fill-left('X', '-', 4) ergibt »---X«

  • xsb:fill-left('', '-', 4) ergibt »----«

  • xsb:fill-left('X', '', 4) ergibt »X«

  • xsb:fill-left('sieben', '-', 4) ergibt »sieben«

Revision History
Revision 0.2.502012-05-27Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

String, der aufgefüllt werden soll

Parameter fill-with as="xs:string?"

Zeichen, mit dem aufgefüllt werden soll

Parameter length as="xs:integer"

Anzahl Zeichen, auf die aufgefüllt werden soll

xsb:fill-right(3) as="xs:string" (xsl:function)

füllt $input rechts bis zur Länge $length mit dem Zeichen $fill-with auf

Bei einem Leerstring oder einer Leersequenz als $input wird vollständig mit $fill-with aufgefüllt.

Bei einem Leerstring oder einer Leersequenz als $fill-with wird $input unverändert zurückgegeben.

Ist $input länger als $fill-with, wird $input unverändert zurückgegeben.

Beispiele

  • xsb:fill-right('X', '-', 4) ergibt »X---«

  • xsb:fill-right('', '-', 4) ergibt »----«

  • xsb:fill-right('X', '', 4) ergibt »X«

  • xsb:fill-right('sieben', '-', 4) ergibt »sieben«

Revision History
Revision 0.2.502012-05-27Stf

Status: beta

initiale Version

Parameter input as="xs:string?"

String, der aufgefüllt werden soll

Parameter fill-with as="xs:string?"

Zeichen, mit dem aufgefüllt werden soll

Parameter length as="xs:integer"

Anzahl Zeichen, auf die aufgefüllt werden soll

2. Index

C E F I L N R S T

C

E

F

I

L

N

R

S

T