2.2 Mikroformat für Kalendereinträge (hCalendar)

So wie das hCard-Mikroformat auf dem vCard-Format basiert, lehnt sich das hCalendar-Mikroformat an das iCalendar-Format an, das ebenso wie das vCard-Format ein Industriestandard ist. Allerdings unterstützen die meisten Anwendungen nur vCalendar, den Vorläufer des iCalendar-Formats. Auch dieses Format kennen Sie vielleicht aus Microsoft Outlook oder vergleichbaren Anwendungen als Export- und Import-Format für Terminkalendereinträge. Entsprechende Dateien haben die Standardendung .vcs. oder .ics.

Um das hCalendar-Format besser zu verstehen, betrachten wir zunächst zwei Kalendereinträge im iCalendar-Format – zunächst ein Tagesereignis und dann einen Termin.

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20070406
DTEND:20070406
SUMMARY:Karfreitag
END:VEVENT
END:VCALENDAR
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTART:20070510T200000
DTEND:20070510T235900
TZOFFSETFROM:+0100
LOCATION:Stragula Realwirtschaft
SUMMARY:Jahresversammlung 2007 der gescheiterten Existenzen
ATTENDEE;ROLE=OWNER;CN=Rainer Wahnsinn;MAILTO=rwahnsinn@example.com
ATTENDEE;ROLE=ATTENDEE;CN=Anna Lyse;MAILTO=alyse@example.com
END:VEVENT
END:VCALENDAR

Die gewählten Beispiele sind recht einfach und beschreiben nur wenige typische Daten. Die Spezifikation des iCalendar Formats kennt wesentlich mehr Eintragsmöglichkeiten, um auch Aspekte wie Teilnehmeranforderungen, wiederkehrende Termine, Alarmeinstellungen usw. zu speichern.

Die offizielle Spezifikation und Dokumentation des iCalendar-Formats finden Sie unter:
http://tools.ietf.org/html/rfc2445
RFC (Request for Comment) 2445

Die Datenstruktur weist die gleichen Merkmale auf wie diejenige des vCard-Formats. Der gesamte Kalendereintrag wird durch BEGIN:VCALENDAR eingeleitet und durch END:VCALENDAR abgeschlossen. Durch BEGIN:VEVENT bzw. END:VEVENT wird der Kalendereintrag typisiert. Termine und Tagesereignisse fallen unter die Kategorie VEVENT. Andere Kategorien sind VTODO (für Aufgaben) und VJOURNAL für Journaleinträge.

Terminanfang und -ende werden durch DTSTART bzw. DTEND definiert. Bei Tagesereignissen wie im ersten unserer Beispiele wird das Datum ausschließlich in Ziffernform notiert, wobei die ersten vier Ziffern für das Jahr stehen, die nächsten zwei Ziffern für den Monat und die letzten beiden für den Monatstag. Bei Uhrzeit-Terminen wie in unserem zweiten Beispiel folgt hinter der Datumsangabe ein T und dahinter die Uhrzeit als Folge von sechs Ziffern, wobei die ersten beiden Ziffern die Stunde bedeuten, die zweiten beiden die Minuten und die letzten beiden die Sekunden.

Bei Uhrzeitangaben ist auch die Angabe der Zeitzone sinnvoll. Dies geschieht durch TZOFFSETFROM. Deutschland beispielsweise hat die Zeitzone + 1 Stunde gegenüber der UTC-Zeit (Greenwich-Zeit). Notiert wird das in der Form +0100. Wenn es für einen Termin einen Veranstaltungsort gibt, kann dieser durch LOCATION angegeben werden. Falls mit dem Ereignis auch eine Webadresse verknüpfbar ist, kann zusätzlich ein Feld URL notiert werden. SUMMARY ist das Feld für den Titel des Kalenderereignisses. Längere Beschreibungen können in einem zusätzlichen Feld DESCRIPTION stehen. Komplexer wird es wieder bei an ATTENDEE-Feldern. In diesen Feldern können Teilnehmer eingetragen werden, beispielsweise bei Meeting-Ereignissen. Für jeden namentlichen Teilnehmer wird ein ATTENDEE-Feld notiert. Im Unterfeld ROLE kann die Funktion des jeweiligen Teilnehmers angegeben werden. Die Wertzuweisung OWNER steht für den Organisator, Einladenden oder Hauptverantwortlichen des Ereignisses, und die Zuweisung ATTENDEE für normale Teilnehmer ohne spezielle Funktion. In den Feldern CN kann der Name des Teilnehmers angegeben werden, und bei MAILTO dessen Mailadresse.

Umsetzung ins hCalendar-Mikroformat

Beim Umsetzen dieser Datenstruktur in ein spezifikations-konformes hCalendar-Mikroformat haben Sie wieder ähnliche Freiheiten wie beim hCard-Format. Die Umsetzung geschieht durch Klassennamen, die über das class-Attribut in HTML notiert werden. Allerdings werden auch einige weitere Konventionen erwartet. Betrachten wir zunächst eine Umsetzung unseres ersten Beispiels (Kalendereintrag für Karfreitag 2007):

<ul class="vcalendar">
   <!-- andere Feiertage -->
   <li class="vevent">
        <span class="summary">Karfreitag</span>: 
        <abbr class="dtstart" title="20070406" 
              style="border: none;">4. April 2007</abbr>
        <abbr class="dtend" title="20070406" 
              style="display: none">4. April 2007</abbr>
   </li>
</ul>

In dem Beispiel nehmen wir eine Aufzählungsliste mit Feiertagen an. Jeder Listeneintrag soll aus der Bezeichnung eines Feiertags und seinem Datum für das Jahr 2007 bestehen. Damit repräsentiert jedes li-Element ein Ereignis und bekommt aus diesem Grund im Start-Tag das Attribut class="vevent" zugewiesen. Dass die gesamte ul-Liste übrigens das Attribut class="vcalendar" erhält, ist keine zwingende Vorschrift. Der Klassenname vevent ist derjenige, der auslesender Software signalisiert, dass ein Kalendereintrag folgt.

In unserem Beispiel müssen die iCAL-Felder SUMMARY, DTSTART und DTEND für den Kalendereintrag umgesetzt werden. SUMMARY wird zu class="summary", wobei es egal ist, welches zugehörige HTML-Element gewählt wird (in unserem Fall ist es ein span-Element).

DTSTART und DTEND werden ebenfalls zu class-Attributzuweisungen. Hierbei ist jedoch zu beachten, dass die hCalender-Spezifikation für diese Felder das abbr-Element von HTML verlangt. Der Wert des Feldes wird, da die Notationsform zwar gut maschinenlesbar, für Menschen jedoch eine Zumutung ist, nicht als Elementinhalt, sondern im title-Attribut notiert. Im Elementinhalt des abbr-Elements kann dann ein beliebiger gewünschter Text stehen, um die Datums- und/oder Uhrzeitangabe zum Ereignis sprachabhängig und menschenlesbar wiederzugeben.

Da das abbr-Element in den meisten Browsern eine automatische Formatierung erhält (gepünktelte Unterstreichung), die aber im hiesigen Zusammenhang meist unerwünscht ist, sollte die CSS-Angabe border: none dafür sorgen, dass die entsprechende Formatierung unterdrückt wird.

In unserem Fall wollen wir ja nur ein Kalenderdatum ausgeben. Da stört natürlich der Eintrag mit class="dtend". Mit Hilfe der CSS-Angabe display: none unterdrücken wir die Anzeige.

Selbstverständlich können Sie solche CSS-Angaben auch in zentralen Stylesheets auf die Klasse anwenden, also in der Form:

abbr.dtstart { border: none; }
abbr.dtend { display: none; }

Die HTML-Umsetzung unseres zweiten iCalendar-Beispiels im hCalendar-Mikroformat könnte so aussehen:

<div class="vevent">
  <h1 class="summary">Jahresversammlung 2007 der 
    gescheiterten Existenzen</h1>
  <address class="location vcard"><span class="fn">
    Stragula Realwirtschaft</span></address>
  <table class="times">
    <tr>
      <td>Offizieller Beginn:</td>
      <td><abbr class="dtstart" title="20070510T200000" 
       style="border: none;">10.05.2007, 20.00 Uhr</abbr></td>
    </tr><tr>
      <td>Offizielles Ende:</td>        
      <td><abbr class="dtend" title="20070510T235900" 
       style="display: none">Mitternacht</abbr></td>
    </tr>
  </table>
  <h2>Teilnehmer</h2>
  <ul>
    <li class="attendee">
      <span class="owner"><strong>Leiter:</strong> 
      <span class="cn">Rainer Wahnsinn</span>, 
      <a class="value" href="mailto:rwahnsinn@example.com">  
        rwahnsinn@example.com</a>
      </span>
    </li>
    <li class="attendee">
      <span class="cn">Anna Lyse</span>, 
      <a class="value" href="mailto:alyse@example.com"> 
        alyse@example.com</a>
      </span>
    </li>
  </ul>
</div>

In diesem Beispiel nehmen wir an, dass eine ganze Webseite für die Anzeige des Ereignisses spendiert wird. Deshalb setzen wir das Feld mit class="summary" kurzerhand in eine h1-Seitenüberschrift. Ein div-Bereich, der alle Auszeichnungen des Ereignisses umspannt, erhält das Signal-Attribut class="vevent".

Interessant wird es bei der Umsetzung des LOCATION-Feldes. Für eine tatsächlich existierende Örtlichkeit bietet es sich nämlich an, diese als hCard-Mikroformat auszuzeichnen. Deshalb haben wir die Angabe zu LOCATION in ein address-Element gepackt, dem mit class="location vcard" gleich zwei Mikroformat-Klassen zugewiesen werden. Zum einen wird signalisiert, dass dieses Element eine location-Angabe innerhalb des Kalenderereignisses enthält. Zum anderen wird ein vCard-Mikroformat eingeleitet. In unserem Beispiel haben wir nur den Namen einer Kneipe als Örtlichkeit angegeben. Der Inhalt des address-Elements beschränkt sich daher auf ein Element, das mit class="fn" den Namen der Kneipe enthält, in der die Veranstaltung stattfindet.

Die Angaben zu Anfang und Ende der Veranstaltung haben wir in eine kleine Tabelle gepackt, um die Inhalte tabulatorisch sauber auszurichten. Die eigentlichen Zeitangaben werden wie gefordert durch abbr-Elemente ausgezeichnet, wobei class="dtstart" und class="dtend" Anfangs- und Endzeitpunkt deklarieren, während das title-Attribut die normierte Datums-/Uhrzeitangabe enthält und der Elementinhalt aus einer frei wählbaren, auf der Webseite sichtbaren Darstellungsform der Zeitangaben besteht.

Die Teilnehmer erscheinen in einer Aufzählungsliste. Deren li-Elemente signalisieren durch die Angabe class="attendee", dass es sich um Teilnehmerangaben zum Ereignis handelt. Teilnehmernamen und ihre Mailadressen sind im Beispiel durch vCalendar-Syntax ausgezeichnet. An diesen Stellen könnten jedoch auch wieder vollständige vCard-Mikroformate notiert werden, um zu kennzeichnen, dass es sich um Kontaktangaben handelt.

Im Browser sieht diese HTML-Konstruktion ohne weitere CSS-Formatierung in etwa so aus:

hcalendar-sample.gif

Mit Hilfe von CSS lässt sich daraus jedoch ein ansprechend gestalteter Inhalt zaubern. Die Feinstrukturierung der Inhalte ist jedenfalls in ausreichendem Maße vorhanden, und das Markup ist ein wichtiger Input für Suchmaschinen, die Mikroformate bereits erkennen.

Sofern nicht anders angegeben, steht der Inhalt dieser Seite unter Lizenz Creative Commons Attribution-ShareAlike 3.0 License