Kalender-Grunddaten


Grunddaten

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.

Aufbau einer Grunddaten-Datei

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 = "ID"/>. Das Präfix 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.

Die Wahl der passenden Grunddaten

Der Browser fordert die Grunddaten unter dem relativen URI kal/b/JJJJ/a.xml an. JJJJ 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/JJJJ/a.xml. Dabei steht JJJJ 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 LANG-COUNTRY oder nur 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 DOCROOT/kal/b/JJJJ/LANG-COUNTRY.xml. existiert, sendet der Server diese oder die komprimierte Version.

Wenn im ersten Eintrag der Präferenzliste ein Land angegeben ist und die Datei DOCROOT/kal/b/JJJJ/COUNTRY.xml. existiert, sendet der Server diese.

Sonst wird mittels üblicher „Content Negotiation” die zur Sprachenpräferenzliste passende Datei DOCROOT/kal/b/JJJJ/a.xml.LANG. geliefert.

Die Grundlage für die Konfigurationsdatei DOCROOT/kal/b/.htaccess ist die Datei htaccess.

Die Erstellung der Grunddaten

Die Datei kalender/feiertage/JJJJ/COUNTRY.txt ist eine einfache Textdatei mit den Feiertagen in der Region, die COUNTRY 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 DOCROOT/kal/b/JJJJ/COUNTRY.xml. existiert, dann wird diese Datei nach DOCROOT/kal/b/JJJJ/a.LANG.xml. kopiert.

In jedem Verzeichnis DOCROOT/kal/b/JJJJ wird auch die Datei DOCROOT/kal/b/JJJJ/a.xml. mit den Kalenderdaten ohne Feiertage angelegt. Diese wird geliefert, wenn keine bessere Wahl gefunden wird.

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.