Dateiformat für Kurznachrichten

Die Einträge in den Kurznachrichten, im Gästebuch und auch Kommentare unter einigen Artikeln müssen irgendwie gespeichert werden. Welches Format ich dafür verwende, beschreibe ich auf dieser Seite.

Anforderungen

Der Inhalt einer Kurznachrichtendatei soll auch ohne weitere Verarbeitung in ein HTML-Dokument eingefügt werden können. Ein standardkonformes HTML-Dokument soll dabei standardkonform bleiben. Die Einträge sollen dann im Browser sinnvoll dargestellt werden.

Neue Einträge sollen einfach an das Dateiende angehängt werden können, nicht mittig eingefügt. Das schließt beispielsweise XML-Varianten aus, weil dort als Letztes immer die Endmarkierung des Wurzelelements stehen müsste, nicht das Ende eines Eintrags.

Aufbau

Eine Kurznachrichtendatei ist leer oder besteht aus einem Eintrag oder besteht aus mehreren Einträgen, die direkt aufeinander folgen. Die Datei ist UTF-8-kodiert und ohne Byte-Order-Mark.

Eintrag

Ein Eintrag besteht aus zwei Zeilen. Die erste Zeile beginnt mit <li>, gefolgt vom Kopf, beendet durch einen Zeilenvorschub. Die zweite Zeile beginnt mit <p>, gefolgt vom Inhalt, beendet durch einen Zeilenvorschub.

Kopf

Der Kopf ist leer oder besteht aus der Zeit oder besteht aus der Zeit, einem Leerzeichen und der Signatur.

Zeilenvorschub

Das Unicode-Zeichen mit dem Codepunkt U+000A.

Zeit

Die Zeit ist ein UNIX-Zeitstempel in Form einer dezimalen Ganzzahl. Als solche datiert sie den Eintrag, indem sie die Anzahl der Sekunden seit dem 1. Januar 1970, 0:00 Uhr koordinierter Weltzeit angibt, Schaltsekunden nicht mitgezählt.

Leerzeichen

Das Unicode-Zeichen mit dem Codepunkt U+0020.

Signatur

Die Signatur ist eine Zeichenkette aus mindestens 28 Zeichen, welche aus dem Zeichenvorrat 0123456789abcdef entnommen sind. Die Signatur identifiziert den Autor des Eintrags pseudonym. Typischerweise wird die Signatur mittels einer Hashfunktion aus einem Geheimwort gewonnen.

Inhalt

Der Inhalt besteht entweder aus einem Absatz oder aus mehreren Absätzen, die durch <p> voneinander getrennt sind.

Absatz

Ein Absatz besteht aus Text und/oder HTML-Elementen auf Textebene. Ein Absatz soll nicht mit einem Leerzeichen beginnen. Ein Absatz soll nicht mit einem Leerzeichen enden.

Text

Text besteht aus Textzeichen und/oder kodierten Sonderzeichen. In Text soll kein Leerzeichen direkt nach einem Leerzeichen stehen.

Textzeichen

Textzeichen sind Zeichen des Unicode-Standards, die dort als Graphic character oder Private-use character oder als Format character der General Category Cf klassifiziert sind und keine unkodierten Sonderzeichen sind.

Sonderzeichen

Die Zeichen aus dem Vorrat "&'<> sind Sonderzeichen. Sie dürfen nicht unkodiert im Text stehen. Jedem der Zeichen entsprechen aber kodierte Sonderzeichen, die an ihrer statt eingesetzt werden können:

benannt dezimal hexadezimal
" &quot; &#34; &#x22;
& &amp; &#38; &#x26;
' &pos; &#39; &#x27;
< &lt; &#60; &#x3C;
> &gt; &#62; &#x3E;

HTML-Elemente auf Textebene

HTML-Elemente, die im HTML-Standard unter Text-level semantics eingeordnet sind.

Beispiel

<li>1617552500 9537c69506e1def8e9b36795c97e
<p>Siehst du den schwarzen Hund durch Saat und Stoppel streifen?
<li>1617552510 b653a8285939f4f5b6e5b9c1d4fb
<p>Ich sah ihn lange schon, nicht wichtig schien er mir.
<li>1617552519 9537c69506e1def8e9b36795c97e
<p>Betracht’ ihn recht! für was hältst du das Thier?
<li>1617552578 b653a8285939f4f5b6e5b9c1d4fb
<p>Für einen Pudel, der auf seine Weise<br>Sich auf der Spur des Herren plagt.
<li>1617552589 9537c69506e1def8e9b36795c97e
<p>Bemerkst du, wie in weitem Schneckenkreise<br>Er um uns her und immer näher jagt?<br>Und irr’ ich nicht, so zieht ein Feuerstrudel<br>Auf seinen Pfaden hinterdrein.
<li>1617552611 b653a8285939f4f5b6e5b9c1d4fb
<p>Ich sehe nichts als einen schwarzen Pudel,<br>Es mag bey euch wohl Augentäuschung seyn.
<li>1617552623 9537c69506e1def8e9b36795c97e
<p>Mir scheint es, daß er magisch leise Schlingen,<br>Zu künft’gem Band, um unsre Füße zieht.
<li>1617552634 b653a8285939f4f5b6e5b9c1d4fb
<p>Ich seh’ ihn ungewiß und furchtsam uns umspringen,<br>Weil er, statt seines Herrn, zwey Unbekannte sieht.

Beispieldarstellung

  1. Siehst du den schwarzen Hund durch Saat und Stoppel streifen?

    𝌢𝌐𝌊𝌓

  2. Ich sah ihn lange schon, nicht wichtig schien er mir.

    𝌥𝌒𝌐𝌊

  3. Betracht’ ihn recht! für was hältst du das Thier?

    𝌢𝌐𝌊𝌓

  4. Für einen Pudel, der auf seine Weise
    Sich auf der Spur des Herren plagt.

    𝌥𝌒𝌐𝌊

  5. Bemerkst du, wie in weitem Schneckenkreise
    Er um uns her und immer näher jagt?
    Und irr’ ich nicht, so zieht ein Feuerstrudel
    Auf seinen Pfaden hinterdrein.

    𝌢𝌐𝌊𝌓

  6. Ich sehe nichts als einen schwarzen Pudel,
    Es mag bey euch wohl Augentäuschung seyn.

    𝌥𝌒𝌐𝌊

  7. Mir scheint es, daß er magisch leise Schlingen,
    Zu künft’gem Band, um unsre Füße zieht.

    𝌢𝌐𝌊𝌓

  8. Ich seh’ ihn ungewiß und furchtsam uns umspringen,
    Weil er, statt seines Herrn, zwey Unbekannte sieht.

    𝌥𝌒𝌐𝌊

Anmerkungen

HTML ist kein Muss

Auch wenn das Format HTML-Elemente zulässt, muss ein Programm, welches das Kurznachrichtenformat zum Speichern nutzt, keine Eingabe von HTML-Elementen akzeptieren. So interpretiert das Gästebuch auf diesem Webauftritt die Eingabe als Text mit wenigen Ausnahmen: mehrfache Zeilenumbrüche in Folge werden als Absatzumbruch interpretiert, einzelne Zeilenumbrüche werden in <br> umgewandelt, Sonderzeichen werden als unkodiert angenommen und kodiert abgespeichert.

Die Kodierung trägt dazu bei, dass nicht vertrauenswürdige Eingaben keinen Schaden anrichten, das heißt zum Beispiel keinen Programmtext einschleusen können, der dann auf den Rechnern anderer Leser ausgeführt würde.

Automatische Links bei der Ausgabe

Auch wenn es möglich ist, eine Kurznachrichtendatei unverändert zwischen den HTML-Listenmarkierungen <ol> und </ol> oder <ul> und </ul> einzufügen, kann man die Datei zuvor noch weiterverarbeiten. So werden hier Adressen von Seiten auf dieser Netzpräsenz automatisch in Links umgewandelt, denen man per Klick folgen kann. Ebenso wird eine Kombination aus @-Zeichen und Ziffern, beispielsweise @27, automatisch in einen Link zum soundsovielten Eintrag in derselben Kurznachrichtenseite umgewandelt.

Datumsdarstellung

Die Datierung der Einträge über einen UNIX-Zeitstempel ist in der Rohform, zum Beispiel 1612255263, für Menschen schlecht interpretierbar. Vorteil: Das ist kalenderneutral und sehr leicht von einem Programm zu lesen und umzuwandeln.

Auf dieser Netzpräsenz wird das Datum seit 2017 dem Migokalender zufolge ausgegeben. Verweilt man darüber mit der Maus, wird das Datum aber auch gemäß dem verbreiteten gregorianischen Kalender eingeblendet. Außerdem wird das Datum mit dem HTML-<time>-Element maschinenlesbar ausgegeben. Browser, die das unterstützen, könnten das Datum daher in einer vom Leser gewünschten Form präsentieren.

Signaturdarstellung

Eine Signatur wie 1248009eefe61484ffe700292d29 kann in der Darstellung aufgehübscht werden. So wird sie im hiesigen Gästebuch beispielsweise als 𝌇𝌉𝌏𝌡 angezeigt. Dabei werden die ersten vier Zeichen 1248 der Signatur nach folgender Tabelle in Strichstapel übersetzt:

0 1 2 3 4 5 6 7 8 9 a b c d e f
𝌆 𝌇 𝌉 𝌊 𝌏 𝌐 𝌒 𝌓 𝌡 𝌢 𝌤 𝌥 𝌪 𝌫 𝌭 𝌮

Die verbleibenden Signaturzeichen werden in vier Gruppen à sechs Zeichen aufgeteilt, 009eef e61484 ffe700 292d29. Jede Gruppe definiert die Farbe eines Strichstapels. Dabei stehen jeweils zwei der sechs Zeichen einer Gruppe für einen roten, grünen und blauen Farbkanal mit hexadezimalem Wert aus dem Bereich 00 bis ff, was dezimal 0 bis 255 entspricht.

Den n-ten Eintrag finden

Eingebunden zwischen den Markierungen <ol> und </ol> in einer HTML-Seite werden die Einträge vom Browser automatisch durchnummeriert. Aber wie findet man schnell den n-ten Eintrag in der Kurznachrichtendatei selbst? In einem Editor mit Zeilennummerierung ist das ganz einfach. Da jeder Eintrag zwei Zeilen lang ist, beginnt der n-te Eintrag in der Zeile 2n − 1.