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:
mcDie Zelle enthält die Bezeichnung des Monats oder ist für die Bezeichnung des Monats vorgesehen.
kwDie Zelle enthält die Nummer der Kalenderwoche.
pTag des Vormonats (am Anfang der ersten Tabellenzeile)
nTag des Folgemonats (am Ende der letzten Tabellenzeile)
fFeiertag
w7Sonntag
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:
h7Eine Tabellenzeile enthält die Tage einer Kalenderwoche.
h14Eine Tabellenzeile enthält die Tage zweier aufeinander folgender Kalenderwochen.
v7Die Tage einer Kalenderwochen stehen in einer Tabellenspalte.
v7Die 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. LANGLANG 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.