Transformationen
Dieses Kapitel gibt eine Übersicht über Literalfunktionen, welche
Literalwerte ändern oder ersetzen. Wie die im nächsten Kapitel besprochenen
Filterfunktionen werden sie innerhalb des <data>-Elementes eingefügt und
können, wo sinnvoll, beliebig miteinander kombiniert werden. Dabei wird der
Wert von oben nach unten von der einen zur nächsten Funktion
durchgereicht. Ein Beispiel:
<data source="litA" name="gruss">
<trim/>
<whitelist>
<entry name="hallo"/>
<entry name="grüezi"/>
</whitelist>
<case to="upper"/>
</data>compose
compose
fügt dem Wert ein Prä- (prefix=) und/oder ein Suffix (postfix=) hinzu
constant
constant
ersetzt Wert durch ein Literal (value=)
timestamp
timestamp ersetzt Wert durch aktuellen Zeitstempel
format: Format des Zeitstempels gemässjava.text.SimpleDateFormattimezone: Zeitzone gemässjava.util.TimeZone(Standard:UTC)language: Gebietsschema gemässjava.util.Locale
substring
substring extrahiert Substring basierend auf Indizes (start=, end=)
regexp
regexp extrahiert einen Substring basierend auf einem regulären Ausdruck (match=).
Rückwärtsreferenzen (capture groups) werden unterstützt, welche durch
format="${1..n}" wiederverwendet werden können. Syntax entspricht derjenigen
von regulären Ausdrücken in Java.
replace / setreplace
replace /
setreplace ersetzt einen passenden Substring (pattern=) durch einen anderen Wert
(with=). Java-konforme reguläre Ausdrücke werden unterstützt. Durch
setreplace lässt sich eine ganze lokale Ersetzungstabelle definieren
(<entry name="ausdruck" value="ersetzung"/>) oder mithilfe von map= eine
solche referenzieren.
Für weitere Informationen siehe Abschnitt “Nachschlagetabellen”
lookup
lookup ist analog zu setreplace, unterstützt aber nur statische Strings als
Suchmuster. Mithilfe von in= kann alternativ auch eine Konkordanztabelle
referenziert werden. default= definiert einen Standardwert, wenn Schlüssel
nicht in Tabelle definiert ist.
Für weitere Informationen siehe Abschnitt “Nachschlagetabellen”
case
case wandelt Wert in Gross- (upper) bzw. Kleinbuchstaben (lower) (to=) um. Nimmt optional ein
Sprach-Tag entgegen (language=)
trim
trim schneidet Leerzeichen am Ende des Feldwertes ab
normalize-utf8
normalize-utf8 normalisiert Zeichen in kanonische Form, bspw. ein ä, das aus dem Diakrit ¨ + a gebildet wurde, zu ä. Für Details siehe hier.
dateformat
dateformat formatiert Datum
inputformat: Format des Inputdatums gemässjava.text.SimpleDateFormatoutputformat: Format des Ausgabedatums:FULL,LONG(Standard),MEDIUModerSHORT(s. Beschreibung injava.text.DateFormat)era: Epoche:AUTO(Standard),ADoderBCremoveLeadingZeros: Entferne führende Nulle (Standard:false)language: Gebietsschema gemässjava.util.Locale
removeLeadingZeros="true" entfernte in unseren Tests fälschlicherweise auch Nulle in
vierstelligen Jahreszahlen, das Resultat war also bspw. 218 anstelle von 2018!
split
split teilt Feldwert basierend auf regulärem Ausdruck (delimiter=) in Substrings
isbn
isbn transformiert ISBN-Nummern. Das Attribut to akzeptiert drei Werte:
isbn10 für eine Umwandlung von ISBN13 zu ISBN10, isbn13 für das Umgekehrte
und clean für eine Bereinigung der Nummer. Optional können zudem die
Attribute verifyCheckDigit, standardmässig false, und errorString
gesetzt werden.
urlencode
urlencode enkodiert Wert als URL
htmlanchor
htmlanchor baut aus Wert einen HTML-Link. Umfasst drei Attribute: prefix (zwingend),
postfix und title (optional)
switch-name-value
switch-name-value vertauscht Feldname und -wert
script
script übergibt Wert zur Transformation an eine Javascript-Funktion (invoke=) in einer
externen Datei (file=)
Hinweise zur Implementierung einer solchen Funktion finden sich im Anhang
java
java übergibt Wert zur Tranformation einer Java-Klasse (class=,
voller Name). Werte
aller weiteren Attribute werden einer gleichnamigen setter-Methode der
Klasse übergeben.
Hinweise zur Implementierung einer solchen Klasse finden sich im Anhang
count
count gibt Anzahl der aktuell gezählten Werte aus.
Um nur den letzten Wert zu berücksichtigen, siehe das Rezept “Nur letzten Wert eines Literals berücksichtigen”.