TimeDomain

Auswertung von opening_hours, service_times, collection_times.

Manche Objekte der realen Welt haben auch eine Zeitkomponente:

  • Geschäfte und Einrichtungen sind nur zu bestimmten Zeiten geöffnet,
  • Fähren fahren nur zu bestimmten Zeiten,
  • Straßen sind des Nachts geschwindigkeitsbegrenzt,
  • Briefkästen werden zu bestimmten Zeiten geleert,
  • Busse fahren zu bestimmten Zeiten ab.

In der Datenbank von OpenStreetMap werden solche Öffnungszeichen unter den Schlüsseln opening_hours, service_times und collection_times eingetragen. Das Wiki enthält unter opening_hours eine informelle Beschreibung der erlaubten Werte und ihrer Bedeutung. Sie können eine Textdatei mit 15.000 Beispielwerten herunterladen.

Ich habe aus dieser Beschreibung eine formale Spezifikation erstellt (alte Versionen Dez. 2010 und Jan. 2011) und diese in JavaScript implementiert.
Sie können das Auswerten ohne Aufwand ausprobieren und sich so mit den Möglichkeiten vertraut machen:

Auf drei Karten werden die bereits vergebenen Werte angezeigt und insbesonders auf Fehler überprüft:

Achtung: der Server liefert eine limitierte Zahl von Ergebnissen, gefiltert wird aber nach der Limitierung im Browser. Deshalb ist es leider auch bei Fehler-Filterung erforderlich, in die Karte hinein zu zoomen.

Ich habe OSM-Objekte in DE, die Öffungszeiten haben (oder haben sollten), zum Herunterladen bereitgestellt:

Diese Listen wurden täglich aktualisiert.

Änderungen und Erweiterungen

Auf der Karte werden Objekte mit fehlerhaften Werten rot markiert. Ich habe eine große Zahl davon korrigiert und mir dabei einen Überblick darüber verschafft, welche Informationen die Nutzer in diesem Feld hinterlegen und wie. Daraus habe ich einige Erweiterungen abgeleitet:

Kooperative Angaben

Sehr oft wurden zusätzliche Öffnungszeiten so codiert, dass sie als ausschließliche Öffnungszeiten interpretiert wurden: beim Wert Mo-Fr 08:00-12:00; We 14:00-18:00 ist Mittwochs nur nachmittags geöffnet.

Ich lasse die Wiederholung auch mit , zu und interpretiere das Komma als und außerdem: Mo-Fr 08:00-12:00, We 14:00-18:00 drückt das aus, was der Eingebende gemeint hat.

Zeitangabe obligatorisch
In der Originalspezifikation stand Mo-Fr für Montags bis Freitags ganztägig. Das ist aber nur in den seltensten Fällen gemeint. Deshalb haben wir die Zeitangaben obligatorisch gemacht: Mo-Fr ist nicht mehr erlaubt und muss Mo-Fr 0:00-24:00 geschrieben werden.
Tageswraps
In der Realität tauchen häufig Zeitangaben wie 22:00-03:00 auf, die sich über zwei Tage erstrecken. Ich habe diese Tageswraps implementiert.
Kalenderzeiträume
Kalenderzeiträume müssen mit einem : abgeschlossen werden. Dies verhindert nur schwer aufzulösende Mehrdeutigkeiten.
Informelle Angaben
Öffnungszeiten können von Bedingungen abhängen, die nicht automatisch auswertbar sind. Nehmen wir Montags bis Freitags 12 bis 18 Uhr, bei schlechtem Wetter nur bis 14 Uhr bei einem Schwimmbad. Zur Darstellung solcher Angaben habe ich neben offen und geschlossen einen dritten Status unbekannt eingeführt, der mit einem Kommentar versehen werden muss.
Außerdem können informelle Tagesangaben wie während der Spargelsaison dargestellt werden.
Fehlertoleranz
Einige Fehler sind sehr häufig: nicht englisch abgekürzt geschriebene Wochentage und Monatsname, fehlende Kommata, Uhrzeiten mit . statt :. Diese Fehler korrigiere ich und werte den Ausdruck aus, liefere aber das Ergebnis zusammen mit einer Fehlermeldung. Die Auswerteroutine kann also gleichzeitig offen und Ausdruck fehlerhaft melden. In meinen Karten wird das durch zweifarbige Ringe abgebildet.

Offene Punkte

Holidays (PH und SH)
Ferien und Urlaubszeiten sind regional unterschiedlich geregelt. Ich brauche Zusatzinformationen, um die passenden Regeln zu bestimmen, zum Beispiel in der Form SH(de.nrw) für die Schulferien in Nordrhein-Westfalen. Zur Zeit setze ich für PH die deutschen gesetzlichen Feiertage ein, und Schulferien SH gibt es keine.
Helligkeitsbezogene Zeitangaben (sunrise und sunset)
Diese Zeiten lassen sich aus Datum und Positionsangabe berechnen. Ich war aber zu faul, die Regeln nach JavaScript zu portieren. Das wird nachgeholt, sobald ich einmal hinreichend große Langeweile habe – oder wenn jemand danach fragt. Zur Zeit setze ich 06:00 bzw. 18:00 ein.
Dokumentation
Ich habe eine Erklärung in halbwegs verständlicher Sprache begonnen, bitte aber darum, dass jemand diese Aufgabe übernimmt. Ich stecke zu tief in den Interna der Auswertung und kann nicht mehr unvoreingenommen die Sicht des Nutzers einnehmen.