format-date
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Kategorie: Typkonvertierung und Ausgabeformatierung
Rückgabewert: Ein String xs:string; der anhand eines Musterstrings und weiterer optional zu übergebender Parameter formatierte Eingabewert
Aufruf/Argumente:
format-date($datum?, $formatierungsmuster, $sprache?, $kalender?, $verortung?)
$datum:
Optional. Ein Datumswert vom Typ xs:date, der eine Zeitzonenangabe beinhalten kann. Wird die leere Sequenz übergeben, so gibt die Funktion ebenfalls eine leere Sequenz zurück.
formatierungsmuster:
Obligatorisch. Eine Zeichenkette xs:string, die in Form eines vorgegebenen Musters (picture string) die Formatierung der resultierenden Zeichenkette bestimmt.
$sprache:
Optional. Eine Zeichenkette xs:string in Form eines aus zwei Zeichen bestehenden Kürzels einer Landesbezeichnung nach ISO 3166-1. Durch den dritten Parameter kann eine Sprache für die Formatierung des Datumsstrings bestimmt werden. Dies hat unmittelbar Auswirkung auf die als Namen von Wochentagen oder Monaten gewählten Bezeichner, gegebenenfalls auch auf die Reihenfolge der Ausgabe der Komponenten des Datumswertes. Die entsprechenden Bezeichner und üblichen Abkürzungen müssen dem System zur Verfügung stehen.
$kalender:
Optional. Eine Zeichenkette xs:string in Form einer aus Großbuchstaben bestehenden Kurzbezeichnung desjenigen Kalenders, der der Formatierung zugrunde gelegt werden soll. Defaultwert ist der Kalender nach ISO (entsprechend dem Gregorianischen Kalender), dessen Unterstützung vorgeschrieben ist. Die Unterstützung weiterer Kalender ist implementationsabhängig.
$verortung:
Optional. Eine Zeichenkette xs:string in Form eines aus zwei Zeichen bestehenden Kürzels einer Landesbezeichnung nach ISO 3166-1. Dieser zur Sprachangabe redundant erscheinende Parameter dient dazu, den zu formatierenden Wert geographisch zu verorten und die Formatierung der Zeitangabe gemäß dieser Verortung zu modifizieren.
Verwendungszweck:
Die Funktion format-date() bestimmt die äußere Form, in der ein ihr als erstes Argument übergebener Datumswert xs:date als String xs:string formatiert ausgegeben wird.
Zur Bestimmung des Aussehens der Formatierung wird ein als zweites obligatorisches Argument übergebener String als Formatierungsmuster (auch als picture string bezeichnet) zu Hilfe genommen.
Ein Funktionsaufruf ohne weitere Argumente bezieht sich auf die Default-Formatierung. Diese wird entsprechend der Systemumgebung vorgenommen. Betroffen ist die Wahl des Kalenders (z.B. Gregorianisch) und der Spracheinstellung. Letztere hat unter anderem Einfluss auf die Reihenfolge der Komponentenausgabe oder bei Tageszeitausgabe auf die Wiedergabe der Stundenwerte (0-23 vs 1-24, 0-11 vs 1-12).
Soll die Formatierung nicht anhand der Default-Einstellungen vorgenommen werden, so können mittels zweier weiterer optionaler Argumente eine explizite Spracheinstellung sowie der zugrunde gelegte Kalender spezifiziert werden. Ein fünftes Argument ist dafür vorgesehen, die Formatierung eines Wertes an einen geographischen Ort zu binden.
Achtung – Folgende Erläuterung gilt auch für weitere Funktionen
Die folgende, längere Erläuterung gilt ebenso für die Anwendung der XSLT-Funktionen format-dateTime() und format-time(), die zusammen mit format-date() die Gruppe der Zeitformatfunktionen (date formatting functions) von XSLT 2.0 bilden. Weitere Anwendungsbeispiele und spezifische Erklärungen befinden sich auch bei den jeweiligen Funktionserläuterungen.
Das Formatierungsmuster (picture string):
Ein Formatierungsmuster – ein einfaches Beispiel wäre '[Y]-[M]-[D]' – setzt sich aus einer Reihe von Stringliteralen und Platzhaltersymbolen für die eigentlich zu formatierenden Werte zusammen.
Die Platzhaltersymbole sind gekennzeichnet durch sie umgebende eckige Klammern. Ihr wichtigster Bestandteil, das Komponentensymbol (component specifier), wird durch den entsprechenden Wert der zu formatierenden Datumskomponente (component) ersetzt. Zusätzliche Leerzeichen oder andere Weißraumzeichen (Zeilenumbrüche etc.) spielen innerhalb der Markierungen keine Rolle.
Im folgenden Beispiel sind Y, M und D als Platzhalter für Jahr (year), Monat (month) und Tag (day) enthalten:
[Y]-[M]-[D]
Die Stringliterale werden unverändert an der ihnen durch ihre Position im Formatierungsstring zugewiesenen Stelle in den Ergebnisstring kopiert. Als Stringliterale gelten alle Bestandteile des Formatierungsstrings, die nicht von eckigen Klammern umgeben sind (im Beispiel [Y]-[M]-[D], also die Bindestriche). Es können beliebig viele oder gar keine Stringliterale im Formatierungsstring enthalten sein.
Maskierung der eckigen Klammer bei Ausgabe als Literal
Ist die eckige Klammer selbst Teil eines Stringliterals, so muss sie durch eine weitere, gleichartige eckige Klammer maskiert werden: eine öffnende Klammer [ zu [[, eine schließende ] zu ]] (siehe Beispiel 9).
Das Ergebnis einer Formatierung eines Datumswertes anhand des obigen Formatierungsstrings könnte also wie folgt aussehen:
[Y]-[M]-[D] => '2003-07-20'
Die Komponentensymbole:
Für die Komponentenextraktion sind eine Reihe von Kürzeln vereinbart. Es dürfen – je nach Typ des übergebenen Wertes – jedoch nur solche Komponenten im Formatierungsstring angegeben werden, die im Wert auch tatsächlich enthalten sind.
Bei Datumswerten xs:date, wie sie die Funktion format-date() erwartet, können daher Tageszeitangaben wie Stunden, Minuten, Sekunden etc. nicht extrahiert werden – der Versuch verursacht einen Fehler.
In der folgenden Tabelle sind aus Gründen der Vollständigkeit alle definierten Komponentensymbole aufgeführt – die bei dieser Funktion nicht anwendbaren sind extra gekennzeichnet.
Symbol | Komponente | Präsentation | Beispiel |
---|---|---|---|
Y | Jahreszahl | numerisch | 2003 |
M | Monat (bezogen auf Jahr) | numerisch | 12 |
D | Tag (bezogen auf Monat) | numerisch | 30 |
d | Tag (bezogen auf Jahr) | numerisch | 365 |
F | Tag (Wochentag) | Bezeichner | Friday |
W | Woche (Kalenderwoche) | numerisch | 52 |
w | Woche (des Monats) | numerisch | 3 |
H | Stunde (24 Stunden-Tag)* | numerisch | 23 |
h | Stunde(2x12 Stunden-Tag)* | numerisch | 10 |
P | AM/PM-Angabe* | Bezeichner | AM |
m | Minute (bez. auf Stunde)* | numerisch | 59 |
s | Sekunde (bez. auf Minute)* | numerisch | 30 |
f | Sekunden mit Bruchteil* | numerisch | 59.99 |
Z | Zeitzone UTC | Dauer | +2:00 |
z | Zeitzone GMT | Bez. + Dauer | GMT +2:00 |
C | verwendeter Kalender | Bezeichner | Gregorian |
E | Bezugsära | Bezeichner | [Herschername] |
Tabelle: Vollständige Liste der Komponentensymbole (*=: Im Kontext nicht anwendbar).
Anmerkung: Die Tageszeitkomponenten H, h, P, m, s, f können in Zusammenhang mit format-date() nicht verwendet werden.
Die beiden Zeitzonensymbole werden wie folgt interpretiert:
Z steht für eine Zeitzonenangabe bezogen auf UTC-Zeit, die entweder numerisch als Zeitdifferenz ausgegeben werden kann oder mit Modifikator N durch ZN als Zeitzonenbezeichner (z.B. EST für Eastern Standard Time). Besteht keine Differenz (die Zeitangabe liegt bereits in UTC vor), so wird dies durch den Buchstaben Z symbolisiert.
z steht für eine Zeitzonenangabe bezogen auf GMT-Zeit, die als Zeitdifferenz in der Form GMT ± [hh:00] präsentiert wird, beispielsweise GMT + 2:00.
Die Modifikatoren:
Über die einfache Wertextraktion hinaus können innerhalb der Platzhaltermarkierungsklammern für jeden Komponentenplatzhalter weitere Formatierungsoptionen beschrieben werden, die die Präsentation der Komponente betreffen.
Hierzu dienen maximal zwei optionale Modifikatoren – ein primärer und ein sekundärer Modifikator, die an den Komponentenplatzhalter in Form eines Suffixes angehängt werden können. Der sekundäre Modifikator darf nur zusammen mit einem primären Modifikator angewendet werden. Wird ein angegebener Präsentationsmodifikator durch die eine Implementation nicht unterstützt, so wird für die entsprechende Komponente statt dessen die Defaultpräsentation verwendet.
Beispielsweise kann der Platzhalter für den Monatswert M durch Anhängen eines N von der Ausgabe eines numerischen Wertes auf die des Monatsnamens umgeschaltet werden (in diesem Fall in Großbuchstaben):
[M] => 11
[MN] => NOVEMBER
Ein angehängtes kleines n bezeichnet die Ausgabe mit Kleinbuchstaben (der Anfangsbuchstabe kann je nach Sprache groß sein):
[Mn] => November
Sprachabhängigkeit des auszugebenden Namens
Die Wahl des auszugebenden Namens ist sprachabhängig: »Tuesday« (en), »Dienstag« (de), »Mardi« (fr) etc. Darüber hinaus können eventuell auch regionale Unterschiede berücksichtigt werden (Deutsch: »Samstag« oder »Sonnabend«). Die zu verwendende Sprache wird über das dritte Funktionsargument festgelegt – die Angabe erfolgt in Form eines aus zwei Zeichen bestehenden Kürzels einer Landesbezeichnung nach ISO 3166-1.
Als primäre Modifikatoren stehen generell zur Verfügung:
Symbol | Bedeutung | Beispiel | Wirkung |
---|---|---|---|
A | Großbuchstaben | MA | DECEMBER |
a | Kleinbuchstaben | Ma | December |
N | Bezeichner, Großbuchstaben | MN | DECEMBER |
n | Bezeichner, Kleinbuchstaben | Mn | December |
I | Römisch Ziffern, groß | MI | XII (Dezember) |
i | Römische Ziffern, klein | Mi | xii (Dezember) |
1 (digit) | Ziffern, Unicode-Set* | M1 | 12 (Dezember) |
Tabelle: Die primären Modifikatoren.
* Erklärung zu 1 (digit): Stellvertretend für eine Präsentation durch Ziffern beliebiger Art kann hier jedes Unicode-Zeichen stehen, das den dezimalen Wert 1 besitzt (gemäß der Unicode Property-Datenbank). Der Wert wird mit Hilfe der so bezeichneten Zifferngruppe präsentiert. (In der Theorie kann beispielsweise arabische Bezifferung durch die arabische Ziffer 1 (U+0661) und tibetische durch die tibetische Ziffer 1 (U+0F21) angeordnet werden.) Es dürfen im Prinzip auch beliebige andere Zeichen stehen, um eine Bezifferungsreihe beginnend mit dem entsprechenden Zeichen anzugeben – natürlich nur, sofern eine solche Bezifferung durch die Implementation unterstützt wird. Mittels führender Nullen (z.B. 001) kann im Format-Token die Auffüllung durch Nullen (oder ein entsprechendes Zeichen) auf eine festgelegte Stellenzahl vorgenommen werden.
Als sekundäre Modifikatoren stehen darüberhinaus zur Verfügung:
Symbol | Bedeutung | Beispiel | Wirkung |
---|---|---|---|
t | traditionelle Nummerierung* | D1t | 31 |
o | ordinale Nummerierung | D1o | 31st |
Tabelle: Sekundäre Modifikatoren.
Die Längenangabe:
Normalerweise wird der Teilstring jeder Komponente in voller Länge (full representation) ausgegeben. Die formatierte Ausgabe kann jedoch pro Komponente durch eine hinzugefügte Längenangabe auch auf eine bestimmte Zahl jeweils zu verwendender Zeichen beschränkt werden. Diese Längenangabe ist eigentlich eine Bereichsangabe, zusammengesetzt aus Angaben für Mindest- und Höchstlänge. Die Angabe einer Höchstlänge ist innerhalb der Längenangabe optional – entfällt sie, wird die Komponente in voller Länge (jedoch mit der angegebenen Mindestlänge) ausgegeben.
Überschreitet die Formatierung mittels des Formattokens die angegebene Höchstlänge (beispielsweise durch Forderung nach führenden Nullen bei numerischer Ausgabe), so hat die Längenangabe im Zweifelsfall Vorrang.
Der Längenindikator wird, durch ein Komma getrennt, hinter die Komponentenangabe (mit eventuellen Modifikatoren) geschrieben. Beispiel:
'2007' wird gekürzt zu '07': [Y, 2-2] => 07
Der Stern * ist ein Stellvertreter für eine beliebige ganze Zahl, lässt hier also die Mindestlänge offen. Die 3 beschränkt die Höchstlänge des Komponentenstrings auf drei Zeichen. Da es in den meisten Sprachen keine Monatsnamen mit weniger als drei Zeichen gibt, werden die Namen effektiv auf drei Zeichen gekürzt. Würde dagegen die Höchstlänge mit Stern * angegeben, so könnte die entsprechende Angabe entfallen. Beispiel:
'December' wird gekürzt zu 'Dec': [Mn,*-3] => Dec
Die Art und Weise der Kürzung ist abhängig von den Konventionen der gewählten Sprache – es handelt sich im Fall von Namen zum Teil um eine echte Abkürzung statt einer einfachen Längenbeschneidung (dies kann jedoch verschieden gehandhabt werden). Beispielsweise kann bei namentlicher Ausgabe der Wochentag bei Beschränkung auf (maximal!) vier Zeichen durchaus auch als Abkürzung aus nur drei Zeichen ausgegeben werden, sofern diese »üblich« sind:
'Tuesday' wird zu 'Tues': [Dn,*-3] => Tues
'Friday' jedoch zu 'Fri': [Dn,*-3] => Fri
In diesem Fall ist die minimale Ausgabelänge nicht festgelegt, die Höchstzahl darf also unterschritten werden. Eine Festlegung auf genau vier Zeichen ließe sich mit [Dn, 4-4] erreichen.
Unterschreitet die eigentliche Länge des Werts der auszugebenden Komponente die Mindestlänge, so wird der String entsprechend verlängert (padding). Dies geschieht durch Leerzeichen, die am Anfang des Teilstrings eingefügt werden, im Fall von Zahlenwerten durch vorangestellte führende Nullen:
[D], [M] [Y] => 1. 4. 2003
[D,2], [M,2] [Y] => 01. 04. 2007
Hinweis: Ist die Kürzung der Ausgabe nicht sinnvoll möglich (z.B. bei längeren Römischen Zahlen), so wird die Komponente trotz Längenangabe in voller Länge ausgegeben.
Die Kalenderangabe:
Die Darstellung von Datumswerten, entsprechend unterschiedlicher Kalender, ist keine triviale Angelegenheit. Um den Rückgabewert der Zeitformatfunktion entsprechend anzupassen, kann den Funktionen mittels des calendar-Parameters die Verwendung eines bestimmten Kalenders zugrunde gelegt werden. Hierbei ist derzeit nur die Fähigkeit zur Formatierung gemäß des Gregorianischen bzw. des ISO-Kalenders (der in den meisten Fällen ohnehin Defaultkalender sein wird) oder mindestens eines der anderen angegebenen Kalender vorgeschrieben. Die Unterstützung weiterer Kalender, auch über die unten beigefügte empfohlene Liste hinausgehend, ist der Applikation freigestellt.
Speicherung und Verarbeitung von Datumswerten in Rechnersystemen ist von vornherein stark an den Gregorianischen Kalender (ISO-Kalender) angelehnt, doch ist dieser nicht in allen Kulturen gültig, wobei sich teilweise extreme Umrechnungsprobleme ergeben können. Nur zur Verdeutlichung:
Der jüdische Kalender (in der Tabelle mit AM »Anno Mundi« bezeichnet) basiert auf Sonnen- und Mondzyklen und besitzt Schaltjahre mit jeweils dreizehn Monaten innerhalb von 19-jährigen Phasen (die Jahre 3, 6, 8, 11, 14 und 19), die Jahre haben daher 354 oder 385 Tage. Er beginnt seine Zeitrechnung (Jahr 1) am 6. Oktober -3760 des Julianischen Kalenders. Das christliche Jahr 2000 (AD) entspricht also dem Jahr 5760 (AM). Es werden Monate von 29 Tagen und 30 Tagen Länge verwendet. Tage beginnen mit dem Sonnenuntergang.
Der islamische Kalender (in der Tabelle mit AH »Anno Hegiare« bezeichnet) ist ein lunarer Kalender, bei dem Monate den Mondzyklen entsprechen, was gemessen am Sonnenjahr über einen Zeitraum von etwa 33 Jahren zu einer Verschiebung durch die Jahreszeiten führt (ein Jahr besitzt nur 354 Tage). Die Sichtung der Mondsichel nach Neumond bestimmt den Beginn eines neuen Monats (für nicht religiöse Zwecke wird eine Tabelle verwendet). Tage beginnen mit dem Sonnenuntergang. Das Jahr 2000 (AD) entspricht dem Jahr 1421 (AH).
Der historischetypo3/#_ftn1 Julianische Kalender (in der Tabelle mit OS »Old Style« bezeichnet) ist ein solarer Kalender, der im Jahre 46 v. Chr. durch Julius Cäsar eingeführt wurde. Das Kalenderjahr besteht aus 365 Tagen, wobei jedes vierte Jahr ein Schaltjahr mit 366 Tagen ist. Ein Julianisches Jahr erwies sich jedoch gegenüber dem eigentlichen Sonnenjahr als ca. elf Minuten zu lang, was bis zum 16. Jahrhundert einen Fehler von zehn vollen Tagen auflaufen ließ (ca. ein Tag alle 128 Jahre).
Der Gregorianische Kalender (in der Tabelle mit AD »Anno Domini« bezeichnet) entstand durch eine von Papst Gregor XIII. im Jahre 1582 vorgenommene Korrektur. Abweichend zum Julianischen Kalender werden von den Jahren mit vollen Hunderterzahlen nur diejenigen als Schaltjahre gerechnet, deren Zahl durch 400 teilbar ist (aus diesem Grund war im Gegensatz zum Jahr 2000 das Jahr 1900 kein Schaltjahr). Der Gregorianische Kalender ist heute in den meisten Teilen der Welt allgemein in Gebrauch. Das Datum der faktischen Einführung variiert stark.
Der Kalender nach ISO 8601 (in der Tabelle mit ISO bezeichnet) entspricht dem Gregorianischen Kalender, erlaubt aber im Gegensatz zu diesem keine landes- oder sprachspezifischen Nummerierungen zur Bezeichnung von Wochentagen oder Kalenderwochen (speziell ist Montag stets Tag 1 und Sonntag Tag 7; als erste Kalenderwoche gilt diejenige, die den ersten Donnerstag des Jahres enthält). Der ISO-Kalender entspricht somit den Gepflogenheiten der Datumsnotation von XML Schema und richtet sich im Wesentlichen an Software-Applikationen, die Datumswerte verarbeiten müssen.
Insgesamt vorgesehen ist eine Unterstützung weitgehend aller derzeit gebräuchlichen Kalender, wie sie in der folgenden Tabelle aufgelistet sind:
Kürzel | Kalender |
---|---|
AD | Anno Domini, christliche Zeitrechnung; |
AH | Anno Hegirae, mohammedanische Zeitrechnung; beginnt mit der Auswanderung Mohammeds von Mekka nach Medina (Hidschra), also 622 nach christlicher Zeitrechnung. |
AM | Anno Mundi, Jüdischer Kalender; |
AME | Mauludische Zeitrechnung; |
AP | Anno Persici, Persischer Kalender |
AS | Aji Saka Zeitrechnung, Java; lunarer Kalender 354 Tage-Jahr, |
BE | Buddhistische Zeitrechnung |
CB | Cooch Behar Zeitrechnung, West Bengalen, |
CE | Allgemeine säkularisierte Zeitrechnung (Common Era); |
CL | Chinesische Lunare Zeitrechnung (folgt 60 Jahres-Zyklus), |
CS | Chula Sakarat Zeitrechnung, Burma |
EE | Äthiopische Zeitrechnung |
FE | Fasli Zeitrechnung, Iran |
ISO | ISO 8601-Kalender |
JE | Japanischer Kalender, ungebräuchlich |
KE | Khalsa Zeitrechnung, Sikh Kalender, Indien |
KY | Kali Yuga, Indien; |
ME | Malabar Zeitrechnung, Indien |
MS | Monarchisch Solare Zeitrechnung |
NS | Nepal Samwat Zeitrechnung (Bikram Sambat), Nepal |
OS | Old Style; Julianischer Kalender bis 1582 |
RS | Rattanakosin Zeitrechnung (Rata Nakosinook), Bangkok |
SE | Saka Zeitrechnung, Indien |
SH | Mohammedanische Solare Zeitrechnung, Iran |
SS | Saka Samvat Zeitrechnung, Indien |
TE | Tripurabda Zeitrechnung, Indien |
VE | Vikrama Zeitrechnung, Indien |
VS | Vikrama Samvat Zeitrechnung, Indien |
Tabelle: Die in XSLT 2.0 (theoretisch) unterstützten Kalender.
Anmerkung – diese Kalenderliste ist unvollständig
In Indien (und nicht nur dort) gibt es noch weitere Zeitrechnungen und Kalender, wie z.B. Saptarsi Saka, Brihaspati Samvatsara, Gupta Saka, Vallabhi Saka und mehr. Die obige Tabelle könnte also beliebig ergänzt werden.
Die Verortungsangabe:
Das auch als country-Parameter bekannte optionale fünfte Argument des Funktionsaufrufs soll implementationsbedingt regionalen und historischen Unterschieden in der Kalenderinterpretation Rechnung tragen, wo dies über den reinen Spracheinstellungsparameter nicht möglich ist.
Damit abgedeckt sind Fälle, in denen sich die kalendarische Rechnung innerhalb einer geographisch umrissenen Region zu einem bestimmten Zeitpunkt ändert, sodass Zeitangaben verschieden zu formatieren sind, je nachdem, ob sie vor oder nach der Umstellung angesiedelt sind. Hierbei ist die Begrenzung der betrachteten Region anhand der beispielsweise politischen Grenzen zum betrachteten Zeitpunkt zu berücksichtigen. Liegt die Zeitangabe in der Zukunft, werden die aktuell bestehenden Grenzen zugrunde gelegt.
Speziell im Indischen bzw. Ostasiatischen Raum liegen entsprechende Kalenderumstellungen teilweise nur etwas mehr als fünf Jahrzehnte zurück – Implementationen, die mit entsprechenden Daten umgehen (beispielsweise für den Thailändischen Markt, Buddhistische Zeitrechnung BE), wären allein durch die Sprachangabe jedoch nicht in Stand gesetzt, dies entsprechend zu berücksichtigen. Im europäischen Raum muss man entsprechend weiter zurückgehen – so erfolgte die Umstellung vom Julianischen zum Gregorianischen Kalender landes- und regionalabhängig zu verschiedenen Zeitpunkten: Deutschland 1700, England 1752, Türkei 1916. In China wurde der Gregorianische Kalender erst im Jahre 1949 eingeführt.
Beispiele:
Der in allen folgenden Beispielen verwendete Datumswert $d vom Typ xs:date entspricht dem 31. Dezember 2007.
Beispiel 1 – Einfache Datumsformatierung:
format-date($d,"[Y]-[M]-[D]")
ergibt: 2007-12-31
In diesem Fall werden einfach die Zahlenwerte der jeweiligen Komponenten entnommen und in entsprechender Reihenfolge mit den vorgesehenen Stringliteralen versehen ausgegeben.
Beispiel 2 – Einfache Datumsformatierung, Version 2:
format-date($d,"[M]-[D]-[Y]")
ergibt: 12-31-2007
Prinzipiell eine Variante von Beispiel 1. Die Reihenfolge der Ausgabe entspricht der Reihenfolge der Platzhalter im Musterstring.
Beispiel 3 – Einfache Datumsformatierung, Version 3:
format-date($d,"[D]. [M]. [Y]")
ergibt: 31. 12. 2007
Hier werden andere Stringliterale verwendet. Die Ausgabe entspricht der Konvention im deutschen Sprachraum, wird aber nicht über eine Datumsformatdeklaration mit language-Attribut erreicht, sondern unmittelbar durch die Form des Musterstrings, der die erforderliche Interpunktion als Stringliterale enthält.
Beispiel 4 – Einfache Datumsformatierung, Monat römisch:
format-date($d,"[D1] [MI] [Y]")
ergibt 31 XII 2007
Der Wert der Tageskomponente wird dezimal ausgegeben (D1; D mit Modifikator 1, der hier aber auch weggelassen werden kann), der Monat mit großen römischen Ziffern (MI; M mit Modifikator I). Die Stringliterale bestehen hier nur aus eingeschobenen Leerzeichen.
Beispiel 5 – Datumsformatierung mit Datumsformatdeklaration (1):
format-date($d,"[D1o] [Mn], [Y]", "en", (), ())
ergibt: 31st December, 2007
Die Monatsnamen werden gemäß den Regeln der mit dem dritten Argument "en" bezeichneten Sprache als Bezeichner mit Groß- und Kleinbuchstaben ausgegeben (Mn; M mit Modifikator n).
Der Tag wird mit Ordinal ausgegeben. Da dies nur über den sekundären Modifikator möglich ist, muss die 1, obwohl nicht in diesem Sinne »modifizierend«, als primärer Modifikator vorhanden sein (D1o; D mit 1 als primärem und o als sekundärem Modifikator).
Es wird der Defaultkalender verwendet, da für das calendar-Argument der leere String übergeben wurde.
Aus formalen Gründen wurde ebenfalls für das nicht eingesetzte Verortungs-Argument die leere Sequenz übergeben.
Beispiel 6 – Datumsformatierung mit Datumsformatdeklaration (2):
format-date($d,"[Mn] [D], [Y]", "en", (), ())
ergibt: 31 December, 2007
Hier wird dieselbe Spracheinstellung wie in Beispiel 5 verwendet. Der Monatswert wird als Bezeichner ausgegeben, wobei Kleinbuchstaben gestattet sind. Der Anfangsbuchstabe wird – sprachspezifisch! – als Großbuchstabe wiedergegeben (Mn; M mit Modifikator n).
Beispiel 7 – Datumsformatierung mit Datumsformatdeklaration (3):
format-date($d,"[D] [MN,*-3] [Y]", "en", (), ())
ergibt: 31 DEC 2007
Hier wird wiederum dieselbe Spracheinstellung wie in Beispiel 5 verwendet. Der Monatswert wird als Bezeichner in Großbuchstaben ausgegeben (MN; M mit Modifikator N). Zusätzlich ist eine Längenbeschränkung der Ausgabe des Bezeichners auf 3 Zeichen gefordert, ohne Angabe einer unteren Schwelle (*-3).
Zusätzliche Leerzeichen erzwingen Mindestzeichenzahl der Ausgabe
Existieren in der gewählten Sprache Monatsbezeichner mit nur zwei Buchstaben, so werden diese unverändert ausgegeben. Gäbe man allerdings eine untere Schwelle von drei Zeichen an (3-3), so würde in jenen Fällen die Mindestzeichenzahl durch vorangestellte Leerzeichen erzwungen.
Beispiel 8 – Datumsformatierung mit Datumsformatdeklaration (4):
format-date($d,"[Fn] [D] [Mn] [Y]", "sv", (), ())
ergibt: Onsdag 31 December 2007
Der Funktionsaufruf bestimmt Schwedisch als Formatierung. Der Prozessor muss entsprechend die Ausgabe in schwedischer Sprache unterstützen, sonst schlägt der Funktionsaufruf fehl.
Da das (vierte) calendar-Argument nicht übergeben wurde, gilt der Defaultkalender »Gregorian«.
Beispiel 9 – Eckige Klammern im Stringliteral:
format-date($d,"[[[Y]-[M]-[D]]]")
ergibt: [2003-04-07]
Um den Datumstring, wie hier, mit eckigen Klammern zu umgeben, müssen diese als Stringliterale ausgegeben werden. Dies ist durch die Verdoppelung jeder literal auszugebenden eckigen Klammer zu erreichen. Hierdurch ergibt sich am Anfang des Musterstrings eine Folge von drei eckigen Klammern, von denen die ersten zwei das Stringliteral (inkl. Maskierung) darstellen, und die dritte den Beginn des ersten Platzhaltersymbol signalisiert. Analog ist die Situation am Ende des Strings.
Beispiel 10 – Jüdischer Kalender mit westlicher Bezifferung:
format-date($d, "[D] [Mn] [Y]", "he", "AM", ())
ergibt: 5768 תבט | 26 |
Die Verwendung des Jüdischen Kalenders durch Übergabe des Kalender-Parameters mit Wert "AM" bewirkt eine Umrechnung des Jahres 2007 in das Jahr 5768 nach Jüdischem Kalender. Die Spracheinstellung "he" für Hebräisch gibt einerseits den hebräischen Monatsnamen aus und bewirkt andererseits die Ausgabe der Form Jahr, Monat, Tag.
Beispiel 11 – Julianischer Kalender (Old Style):
format-date($d, "[D] [MNn] [Y]", "en", "OS", ())
ergibt: 18 December 2007
Die Verwendung des Julianischen Kalenders bewirkt bei der Formatierung eine Verschiebung der Tageszählung vom 31. zum 18. Dezember. Die Verschiebung gegenüber dem Eingangsdatum 31.12.2007 um 13 Tage ergibt sich aus der differierenden Länge des zugrunde gelegten Sonnenjahres (da das Julianische Jahr zu lang ist, verschiebt sich das ausgegebene Datum nach rückwärts).
Funktionsdefinition:
XSLT 1.0:
Funktion nicht verfügbar
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Galileo Press, Rheinwerkallee 4, 53227 Bonn