Die Kalender-Grunddaten sind die Kalendertage eines Jahres zusammen mit den Tagen des Dezembers des Vorjahres und des Januars des Folgejahres, die Wochentage und Nummern der Woche im Laufe des Jahres sowie die Feiertage.
Wie ist eine Grunddaten-Datei aufgebaut? Die Feiertage sind in der Ländern und Regionen der Welt unterschiedlich. Wie wählt der Server zur Anfrage des Browsers die passenden Grunddaten? Wie kommen die Daten der Feiertage zum Server? Die folgenden Abschnitte versuchen, diese Fragen zu beantworten.
Die Grunddaten-XML-Dateien nutzen den Namensraum http://www.w3.org/1999/xhtml
. Sie haben in der Wurzel ein body
-Element mit 14 div
-Elementen: das erste div
-Element mit der ID d00
für den Dezember des Vorjahres, die folgenden zwölf div
-Elemente mit den ID d01
bis d12
für die Monate des „Hauptjahres”, das letzte div
-Element mit der ID d13
für den Januar des Folgejahres. Jedes div
-Element enthält die Bezeichnung des Monats (für 2016 als h1
-Element) und eine Tabelle mit den Kalendertagen.
Jede Tabellenzeile enthält die Tage von einer oder zwei Kalenderwochen und weitere Zellen für den Monat und die Nummer der Kalenderwoche.
Die Zelle für den Monat steht ganz links. Nur in der ersten Tabellenzeile ist die Bezeichnung des Monats eingetragen, die Zellen darunter bleiben leer. Die Nummer der Kalenderwoche steht in der zweiten Spalte.
Der Anfang der ersten Tabellenzeile ist mit Tagen des Vormonats aufgefüllt, das Ende der letzten Tabellenzeile mit Tagen des Folgemonats. Wörter im Attribut class
haben die folgende Bedeutung:
mc
Die Zelle enthält die Bezeichnung des Monats oder ist für die Bezeichnung des Monats vorgesehen.
kw
Die Zelle enthält die Nummer der Kalenderwoche.
p
Tag des Vormonats (am Anfang der ersten Tabellenzeile)
n
Tag des Folgemonats (am Ende der letzten Tabellenzeile)
f
Feiertag
w7
Sonntag
Die Wörter w1
, w2
, w3
, w4
, w5
und w6
sind zur Bezeichnunger der übrigen Wochentage vorgesehen, werden aber nicht genutzt.
Wörter im Wert des Attributs table/@class
bezeichnen den Tabellenaufbau:
h7
Eine Tabellenzeile enthält die Tage einer Kalenderwoche.
h14
Eine Tabellenzeile enthält die Tage zweier aufeinander folgender Kalenderwochen.
v7
Die Tage einer Kalenderwochen stehen in einer Tabellenspalte.
v7
Die Tage zweier aufeinander folgender Kalenderwochen stehen in einer Tabellenspalte.
Ich nutze zur Zeit nur den Wert h7
, Ich kann mir vorstellen, in den Grunddaten für jeden Monat mehrere Tabellen in den verschiedenen Formaten auszugeben und der Websurferin die Wahl zu lassen.
Das Attribut kb:y
des body
-Elements enthält das Kalenderjahr. Das Präfix kb
steht für den Namensraum http://herbaer.de/xmlns/20151211/kalenderbilder/
Die Grunddaten enthalten Platzhalter für die Namen der Monate. Die Platzhalter sind die Elemente <l:ph id = "
. Das Präfix ID
"/>l
steht für den Namensraum http://herbaer.de/xmlns/20141210/localization
, der Platzhalter ID
für eine der Monatskennungen januar
, februar
, maerz
, april
, mai
, juni
, juli
, august
, september
, oktober
, november
, dezember
.
Der Browser fordert die Grunddaten unter dem relativen URI kal/b/
an. JJJJ
/a.xmlJJJJ
steht für die Jahreszahl. Zur Kalenderansicht der Bildergeschichten ist keine Jahreszahl festgelegt. Der Browser fordert die Grunddaten in diesem Fall unter dem relativen URI kal/b/a.xml
an. Dieser wird intern umgeleitet zu kal/b/
. Dabei steht JJJJ
/a.xmlJJJJ
für das aktuelle Kalenderjahr.
Der Browser teilt in der Regel mit, welche Sprache er bevorzugt (Header Accept-Language
). Er sendet eine Präferenzliste von Sprachen oder Sprache-/Land-Kombinationen. Ein Eintrag in dieser Liste hat die Form
oder nur LANG
-COUNTRY
. LANG
LANG
ist die Kennung einer Sprache, COUNTRY
die Kennung eines Landes.
Hier geht es nicht um die Auswahl der Sprache, sondern um die richtigen Feiertage. Eine Grunddaten-Datei ist nicht mit einer bestimmten Sprache verbunden. Zunächst wird der erste Eintrag in der Sprachen-Präferenzliste betrachtet. In manchen Fällen kann man von diesem Eintrag auf eine bestimmte Region innerhalb eines Landes schließen, in der besondere Feiertage gelten, die von den landesweiten Feiertagen abweichen. Einige dieser Fälle sind mir bekannt, und für einige der mir bekannten Fälle habe ich spezielle Grunddaten-Dateien erstellt. Wenn die Datei
existiert, sendet der Server diese oder die komprimierte Version.DOCROOT
/kal/b/JJJJ
/LANG
-COUNTRY
.xml.
Wenn im ersten Eintrag der Präferenzliste ein Land angegeben ist und die Datei
existiert, sendet der Server diese.DOCROOT
/kal/b/JJJJ
/COUNTRY
.xml.
Sonst wird mittels üblicher „Content Negotiation” die zur Sprachenpräferenzliste passende Datei
geliefert.DOCROOT
/kal/b/JJJJ
/a.xml.LANG
.
Die Grundlage für die Konfigurationsdatei
ist die Datei DOCROOT
/kal/b/.htaccesshtaccess
.
Die Datei kalender/feiertage/
ist eine einfache Textdatei mit den Feiertagen in der Region, die JJJJ
/COUNTRY
.txtCOUNTRY
bezeichnet. Das Perl-Skript base.pl
(Quelltext) erzeugt daraus nach einfachen Transformationen die Grunddaten-Datei
. DOCROOT
/kal/b/JJJJ
/COUNTRY
.xml.COUNTRY
kann auch eine Kombination von Sprachcode und Ländercode wie „de-de
” sein. Die Ländercodes sind in der Datei laender.dbk
aufgeführt.
Die Datei langcodes.dbd
nennt viele Sprachen-Codes und zu jeder Sprache ein Land, in dem diese Sprache „zu Hause” ist. Die Transformation langcodes_cmd.xslt
liefert aus dieser Datei die Kombinationen von von Sprachcode LANG
und dem Ländercode COUNTRY
des Heimatlandes der Sprache. Wenn die Sprache angeboten wird und die Datei
existiert, dann wird diese Datei nach DOCROOT
/kal/b/JJJJ
/COUNTRY
.xml.
kopiert.DOCROOT
/kal/b/JJJJ
/a.LANG
.xml.
In jedem Verzeichnis
wird auch die Datei DOCROOT
/kal/b/JJJJ
mit den Kalenderdaten ohne Feiertage angelegt. Diese wird geliefert, wenn keine bessere Wahl gefunden wird.DOCROOT
/kal/b/JJJJ
/a.xml.
Zusammen mit jeder Grunddatendatei wird auch die gzip
-komprimierte Version der Datei erzeugt.
Das Skript kalender
(Quelltext) unterstützt die Aufgaben, die mit den Kalendern zusammenhängen.