New article "fhir date parameters", config changes for multilanguage
support, tarnslations for existing pages and articles
@@ -0,0 +1,93 @@
|
||||
Title: Wissenschaftlicher Workflow mit dem BOOX Note Air 3 C
|
||||
Slug: boox-note-scientific-workflow
|
||||
Category: work
|
||||
Tags: wissenschaftlicher workflow, kollaboration, literaturverwaltung
|
||||
Date: 2024-01-26
|
||||
Lang: de
|
||||
Status: published
|
||||
|
||||
Vor Kurzem habe ich mir einen [ONYX BOOX Note Air 3 C](https://onyxboox.com/boox_noteair3c) zugelegt, um meinen wissenschaftlichen Workflow zu unterstützen. Ende letzten Jahres wurde mir klar, warum ich in meiner wissenschaftlichen Laufbahn nicht so recht vorankam. Ehrlich gesagt war mir ein Hauptgrund durchaus bewusst: mir fehlte die Selbstdisziplin, die für meine Forschung nötigen Quellen zu lesen. Den eigentlichen Grund dafür kannte ich aber erst seit letztem Jahr. Es stellte sich heraus, dass die meisten Quellen in digitaler Form vorlagen und ich mich einfach nicht dazu durchringen konnte, sie am Computerbildschirm zu lesen. Ein Tablet oder Smartphone waren ebenfalls keine echte Alternative, da mich die Displays einfach zu schnell ermüden.
|
||||
|
||||
Ein E-Book-Reader war eine mögliche Lösung. Ein Kollege arbeitet schon seit einiger Zeit mit einem Remarkable 2, was ich ebenfalls sehr interessant fand. Das Leseerlebnis mit diesem Gerät war allerdings nicht gut. Nach einiger Recherche habe ich mich für einen Boox Note Air 3 C entschieden, der mir sowohl bei der Lese- als auch bei der Notizfunktion am vielversprechendsten erschien. Dennoch war ich mir nicht sicher, ob ich mit dem Gerät einen sinnvollen Workflow für wissenschaftliches Arbeiten in meinem Arbeitsalltag etablieren könnte.
|
||||
|
||||
Nach ein paar Wochen Nutzung kann ich sagen: Der Note Air 3 C erfüllt meine Erwartungen voll und ganz. Meine Hauptanwendungsfälle bisher waren das Lesen von Lehrbüchern inklusive direkter Annotation im PDF sowie allgemeine Notizen. In den ersten Tagen habe ich natürlich versucht, mich mit den Bordmitteln des Geräts vertraut zu machen. Ich habe probiert, mit Hilfe der BOOX-Cloud und der BOOXDrop-Funktion einen brauchbaren Workflow aufzubauen. Das erwies sich jedoch als ziemlich unübersichtlich – vor allem, weil mein primäres Betriebssystem Linux ist und die Synchronisationstools nur für Windows und macOS verfügbar sind. Ich musste daher jeden Synchronisationsvorgang über den Webbrowser abwickeln.
|
||||
|
||||
Und obwohl es Tools wie Marcin Juszkiewiczs [onyx-send2boox](https://github.com/hrw/onyx-send2boox) gibt, wollte ich von vornherein nicht alle meine Daten durch die Cloud des Herstellers schicken. Cloud und Backup dorthin habe ich zwar noch aktiviert, mein täglicher Workflow nutzt sie aber nicht mehr.
|
||||
|
||||
Stattdessen habe ich mittlerweile einen Workflow etabliert, der größtenteils auf selbstgehosteten Diensten und Open-Source-Anwendungen beruht.
|
||||
|
||||
# Websurfen
|
||||
|
||||
Ich nutze seit jeher Firefox als Webbrowser auf all meinen Rechnern, und auch auf meinem Android-Smartphone war Firefox stets der Standardbrowser. Vor Kurzem bin ich auf ein iPhone umgestiegen, aber auch dafür gibt es ein mobiles Firefox für iOS (leider ohne Add-on-Unterstützung).
|
||||
|
||||
Es lag also nahe, Firefox auch auf dem Note Air 3 C zu installieren – vor allem, um Add-ons nutzen zu können, allen voran uBlock Origin, um unnötige und im schlimmsten Fall animierte Werbung (die bei einem E-Ink-Gerät besonders auf den Akku geht) zu blockieren. Da ich Firefox auf allen Geräten einsetze, kann ich [Tabs beliebig zwischen den Geräten verschieben](https://support.mozilla.org/de/kb/tabs-von-anderen-geraten-senden), solange die Installation mit meinem Mozilla-Konto verknüpft ist. Natürlich nutze ich auch hier einen Cloud-Dienst, aber die seit Jahren ausgereifte Mozilla-Cloud erscheint mir deutlich vertrauenswürdiger als die eines chinesischen Hardwareherstellers. Und der zusätzliche Komfort, nicht nur Tabs, sondern auch Lesezeichen und Verlauf zu synchronisieren, ist einfach zu praktisch, um darauf zu verzichten.
|
||||
|
||||
# Lesezeichen (Read-it-later)
|
||||
|
||||
Lesezeichen im klassischen Sinne, also die Bookmarks im Webbrowser, habe ich immer nur für häufig besuchte Websites genutzt. Kurzfristige Merkzettel habe ich nie über Browser-Lesezeichen verwaltet – dafür waren für mich schon immer Read-it-later-Apps und -Dienste zuständig.
|
||||
|
||||
Auch wenn mit Pocket seit einiger Zeit ein Read-it-later-Dienst in Firefox integriert ist, habe ich diesen nie genutzt. Stattdessen betreibe ich schon länger eine eigene [Wallabag](https://www.wallabag.it/)-Instanz. Dazu gibt es nicht viel zu sagen – es funktioniert einfach.
|
||||
|
||||
Die [Wallabag-App](https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche) läuft auf dem Note Air 3 C reibungslos und erlaubt mir, jederzeit auf meine Read-it-later-Lesezeichen auf diesem Gerät zuzugreifen. Einträge werden über die Android-Freigabefunktion hinzugefügt, sodass sich Lesezeichen auch direkt aus dem Webbrowser heraus anlegen lassen.
|
||||
|
||||

|
||||
*wallabag app auf dem BOOX Note Air 3 C*
|
||||
|
||||
# Literaturverwaltung
|
||||
|
||||
Da ich sowohl persönlich als auch in unserer Arbeitsgruppe eine gemeinsame Bibliothek über Zotero betreibe, lag es nahe, dieses auch auf dem Note Air 3 C einzusetzen. Im Play Store gibt es leider keine auf dem Gerät funktionierende Zotero-App – zumindest nicht die ganze Geschichte.
|
||||
|
||||
Zum einen gibt es inzwischen eine offizielle [Zotero-App](https://play.google.com/store/apps/details?id=org.zotero.android) im Beta-Stadium, die auf dem Gerät funktioniert, zum anderen läuft auch die aktuell deutlich bessere App [Zoo for Zotero](https://play.google.com/store/apps/details?id=com.mickstarify.zooforzotero). Mit der Einschränkung, dass Letztere nicht über den Play Store installiert werden kann. Eine direkte Installation per APK (die man aus einschlägigen Quellen beziehen kann) funktioniert bei mir aber bislang problemlos. Zu bedenken ist außerdem, dass das letzte Update der App aus August 2021 stammt – das Fehlen automatischer Updates über den Play Store ist also ein eher geringes Risiko. Trotzdem sollte man die Entwicklung bei direkten APK-Installationen im Auge behalten und bei Bedarf manuell aktualisieren.
|
||||
|
||||

|
||||
*Zoo for Zotero App auf dem BOOX Note Air 3 C*
|
||||
|
||||
Die Zotero-Bibliotheken (sowohl meine persönliche als auch die Gruppenbibliothek) enthalten nicht nur wissenschaftliche Publikationen zur jeweiligen Forschung, sondern auch sonstige Fachliteratur wie Lehrbücher sowie Links zu relevanten Websites und Blogbeiträgen.
|
||||
|
||||
Damit ist Zotero für mich mittlerweile die Standardmethode zur Synchronisation von E-Books geworden. Ich lege für ein neues E-Book einfach einen Eintrag in Zotero anhand der ISBN an und hänge die Datei an den Eintrag an. Auf dem Note Air 3 C kann ich das E-Book (oder auch jedes wissenschaftliche Paper) direkt über die Zoo for Zotero App synchronisieren. PDFs und auch EPUBs werden direkt in der BOOX-Neo-Reader-App geöffnet, sodass Annotationen von Haus aus möglich sind.
|
||||
|
||||
Der einzige Nachteil: Die annotierten Dateien werden natürlich nicht direkt zurück nach Zotero synchronisiert. Bei der Gruppenbibliothek ist das andererseits vielleicht auch gar nicht so schlecht – schließlich möchten nicht alle Kolleg:innen meine Annotationen in ihrer Bibliothek haben.
|
||||
|
||||
# Zwischenablage teilen
|
||||
|
||||
Gelegentlich brauche ich auch eine schnelle Möglichkeit, die Zwischenablage vom Rechner auf den Note Air 3 C zu übertragen oder umgekehrt. Da ich, wie oben erwähnt, auf allen Rechnern Linux-Desktopsysteme einsetze, ist [KDE Connect](https://apps.kde.org/de/kdeconnect/) meiner Meinung nach die beste Option. Es bietet nicht nur das Teilen der Zwischenablage, sondern auch Funktionen wie das Teilen von Benachrichtigungen oder Remote-Eingaben.
|
||||
|
||||
Auch wenn es KDE Connect heißt, ist es dank der [GSConnect-Erweiterung](https://extensions.gnome.org/extension/1319/gsconnect/) ebenso mit GNOME-Desktops kompatibel.
|
||||
|
||||
# KI-Unterstützung
|
||||
|
||||
Auch wenn es auf dem E-Ink-Display wegen der stark animierten Live-Ausgabe nicht besonders gut aussieht, lässt sich die [offizielle ChatGPT-App](https://play.google.com/store/apps/details?id=com.openai.chatgpt) nutzen. Ich greife allerdings nur darauf zurück, wenn ich wirklich kein anderes Gerät zur Hand habe – was praktisch nie vorkommt, da ich immer mindestens ein Smartphone in der Nähe habe. Und trotz des kleineren Displays ist die Usability dort deutlich besser.
|
||||
|
||||

|
||||
*ChatGPT App auf dem BOOX Note Air 3 C*
|
||||
|
||||
# Kollaboration
|
||||
|
||||
Da wir in unserer Arbeitsgruppe Jira und Confluence als Kollaborationstools einsetzen, nutze ich auch hier die offiziellen Apps für [Jira Data Center](https://play.google.com/store/apps/details?id=com.atlassian.jira.server) und [Confluence Data Center](https://play.google.com/store/apps/details?id=com.atlassian.confluence.server). Auch hier gilt: Ich nutze die Apps nur, wenn kein anderes Gerät zur Hand ist. Ich kann daher lediglich sagen, dass sie funktionieren und einfach zu bedienen sind, eine tiefergehende Nutzungsanalyse habe ich aber nicht durchgeführt.
|
||||
|
||||
# E-Mail
|
||||
|
||||
Wie in den vorangegangenen Absätzen vielleicht schon deutlich wurde, nutze ich den Note Air 3 C nicht wirklich als Tablet im klassischen Sinne. Trotzdem muss ich gelegentlich eine E-Mail auf dem Tablet öffnen. Ich denke, dass grundsätzlich jeder Standard-Mail-Client auf dem Gerät funktionieren sollte, der Vollständigkeit halber sei aber erwähnt, dass Marcel Bokhorsts großartiger Open-Source-Mail-Client [FairEmail](https://play.google.com/store/apps/details?id=eu.faircode.email) auf dem Gerät hervorragend läuft.
|
||||
|
||||
# Kalender (und Kontakte)
|
||||
|
||||
Kalenderzugriff (und -synchronisation) ist eine weitere Funktion, die ich nicht ständig brauche. Aber es ist hin und wieder nützlich, meinen Kalender auch auf dem Note Air 3 C einsehen zu können. Da ich meinen Kalender (auch auf anderen Geräten) über CalDAV synchronisiere (und meine Kontakte über CardDAV), nutze ich dafür einfach [DAVx⁵](https://play.google.com/store/apps/details?id=at.bitfire.davdroid) auf dem Gerät.
|
||||
|
||||
Da das Gerät standardmäßig keine Kalender- oder Kontakte-App mitbringt, müssen diese nachträglich installiert werden. Ich bin seit Jahren großer Fan der Apps [Simple Calendar](https://play.google.com/store/apps/details?id=com.simplemobiletools.calendar) und [Simple Contacts](https://play.google.com/store/apps/details?id=com.simplemobiletools.contacts). Der Vollständigkeit halber sei erwähnt, dass ich immer die Pro-Versionen nutze – es kann also sein, dass der kostenlosen Version Funktionen fehlen oder sie andere Nachteile hat.
|
||||
|
||||
# Onleihe
|
||||
|
||||
Auch die Onleihe-App habe ich auf dem BOOX Note Air 3 C ausprobiert. Auf dem E-Ink-Display wirkt sie durch die vielen Farbelemente recht unruhig; selbst mit dem dunklen Farbschema bleiben etwa die grünen Flächen (siehe Screenshot) uneinheitlich, da das dabei verwendete Schwarz keine gleichmäßige Fläche ergibt. Zum gemütlichen Stöbern lädt das nicht gerade ein, für die schnelle Ausleihe eines E-Books oder E-Magazins reicht es aber allemal.
|
||||
|
||||

|
||||
*Onleihe auf dem BOOX Note Air 3 C*
|
||||
|
||||
Auch das Lesen digitaler Tageszeitungen über die Onleihe-App funktioniert recht gut, wobei man wegen der Spaltenzahl entsprechend stark zoomen muss.
|
||||
|
||||

|
||||
*Zeitungslektüre über die Onleihe App auf dem BOOX Note Air 3 C*
|
||||
|
||||
# Alternativer App-Store
|
||||
|
||||
[F-Droid](https://f-droid.org) lässt sich auf dem Note Air 3 C installieren – nicht nur als Alternative zum Play Store, sondern auch um Open-Source-Apps installieren zu können, die möglicherweise nicht für das Gerät im Play Store freigegeben sind. Das ermöglicht zudem die Installation kostenloser Builds mancher Apps, die den vollen Funktionsumfang bieten, der sonst nur per Pro-Upgrade verfügbar wäre.
|
||||
|
||||
@@ -0,0 +1,302 @@
|
||||
Title: HowTo: Der FHIR `date`-Suchparameter – Präfixe, Intervalle und Kombinationen richtig verstehen
|
||||
Slug: howto-fhir-date-parameter
|
||||
Category: work
|
||||
Tags: FHIR, howto
|
||||
Date: 2026-08-12
|
||||
Lang: de
|
||||
Status: published
|
||||
|
||||
Wer FHIR-Server baut oder abfragt, stolpert früher oder später über den
|
||||
`date`-Suchparameter. Auf den ersten Blick sieht er simpel aus:
|
||||
`?date=2023-06-15`. Aber sobald Präfixe wie `ge`, `sa` oder `ap` ins Spiel
|
||||
kommen und mehrere `date`-Parameter kombiniert werden, wird es schnell
|
||||
unübersichtlich. Dieser Artikel bringt Ordnung rein: Schritt für Schritt, mit
|
||||
Zeitleisten-Grafiken zu jedem Fall, und als Kurzreferenz zum schnellen
|
||||
Nachschlagen.
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
[TOC]
|
||||
|
||||
---
|
||||
|
||||
## Kurzreferenz: Alle Präfixe auf einen Blick
|
||||
|
||||
Für den schnellen Blick zwischendurch. Details und Grafiken zu jeder Zeile
|
||||
folgen in den Abschnitten unten.
|
||||
|
||||
| Präfix | Name | Kurzregel | Beispiel |
|
||||
|---|---|---|---|
|
||||
| *(keins)* | implizit `eq` | Precision des Werts bestimmt das Intervall | `date=2023-06-15` |
|
||||
| `eq` | gleich | Resource-Intervall vollständig im Such-Intervall | `date=eq2023-06-15` |
|
||||
| `ne` | ungleich | Komplement von `eq` | `date=ne2023-06-15` |
|
||||
| `gt` | größer als | Ragt über das Ende hinaus (Overlap genügt) | `date=gt2023-06-15` |
|
||||
| `lt` | kleiner als | Beginnt vor dem Anfang (Overlap genügt) | `date=lt2023-06-15` |
|
||||
| `ge` | größer/gleich | `gt` oder vollständig enthalten (`eq`) | `date=ge2023-06-15` |
|
||||
| `le` | kleiner/gleich | `lt` oder vollständig enthalten (`eq`) | `date=le2023-06-15` |
|
||||
| `sa` | starts after | Vollständig danach, **keine** Überlappung | `date=sa2023-06-15` |
|
||||
| `eb` | ends before | Vollständig davor, **keine** Überlappung | `date=eb2023-06-15` |
|
||||
| `ap` | approximately | Überlappung + ähnliche Größenordnung | `date=ap2023-06-15` |
|
||||
|
||||
**Fehlender `start`/`end` bei `Period`:** fehlender `start` bedeutet `-∞`,
|
||||
fehlendes `end` bedeutet `+∞`. Deshalb kann `sa` bei fehlendem `start` nie
|
||||
matchen, und `eb` kann bei fehlendem `end` nie matchen (Details in
|
||||
[Abschnitt 4](#4-offene-unvollständige-periods)).
|
||||
|
||||
---
|
||||
|
||||
## Das Grundprinzip: FHIR vergleicht Intervalle, keine Zeitpunkte
|
||||
|
||||
Der wichtigste gedankliche Reset zuerst: FHIR behandelt Datumswerte nie als
|
||||
exakten Zeitpunkt, sondern immer als **Intervall**. Wie breit dieses Intervall
|
||||
ist, hängt von der Precision des angegebenen Werts ab:
|
||||
|
||||
- `2023` → das ganze Jahr 2023
|
||||
- `2023-06` → der ganze Juni 2023
|
||||
- `2023-06-15` → der ganze 15. Juni 2023 (00:00–24:00 Uhr)
|
||||
- `2023-06-15T10:00:00` → (fast) ein exakter Zeitpunkt
|
||||
|
||||
Jeder Vergleichsoperator vergleicht anschließend **zwei Intervalle**
|
||||
miteinander: das Such-Intervall aus deinem Query-Parameter und das
|
||||
Resource-Intervall aus dem Feld der Ressource (z. B. `Patient.birthDate` oder
|
||||
`Encounter.period`).
|
||||
|
||||
### Ohne Präfix = `eq`, aber die Precision entscheidet mit
|
||||
|
||||
Gibst du kein Präfix an, nimmt der Server `eq` an. Das Resource-Datum muss
|
||||
dann **vollständig** innerhalb deines Such-Intervalls liegen. Je gröber die
|
||||
Precision, desto breiter das Intervall, und desto mehr Resource-Werte passen
|
||||
hinein:
|
||||
|
||||

|
||||
*FHIR date-Suchparameter OHNE Präfix*
|
||||
|
||||
`date=2023-06-15` matched nur diesen einen Tag. `date=2023-06` matched dagegen
|
||||
jeden Tag im Juni, auch den 15. Das ist der häufigste Stolperstein für
|
||||
Einsteiger: eine „ungenaue" Suchanfrage ist nicht strenger, sondern lockerer.
|
||||
|
||||
---
|
||||
|
||||
## Die neun Präfixe im Überblick
|
||||
|
||||
FHIR definiert insgesamt neun Präfixe für `date`. Jeder davon beschreibt eine
|
||||
andere Beziehung zwischen Such-Intervall (rot gestrichelt in der Grafik) und
|
||||
Treffer-Bereich (grün/farbig schattiert):
|
||||
|
||||

|
||||
*Alle Präfixe im Überblick*
|
||||
|
||||
| Präfix | Name | Bedeutung |
|
||||
|---|---|---|
|
||||
| `eq` | gleich | Resource-Intervall liegt vollständig im Such-Intervall |
|
||||
| `ne` | ungleich | Komplement von `eq` |
|
||||
| `gt` | größer als | Resource-Intervall **ragt über** das Ende des Such-Intervalls hinaus |
|
||||
| `lt` | kleiner als | Resource-Intervall **beginnt vor** dem Anfang des Such-Intervalls |
|
||||
| `ge` | größer/gleich | `gt` **oder** vollständig im Such-Intervall enthalten (`eq`) |
|
||||
| `le` | kleiner/gleich | `lt` **oder** vollständig im Such-Intervall enthalten (`eq`) |
|
||||
| `sa` | starts after | Beginnt vollständig **nach** dem Ende des Such-Intervalls, keine Überlappung |
|
||||
| `eb` | ends before | Endet vollständig **vor** dem Beginn des Such-Intervalls, keine Überlappung |
|
||||
| `ap` | approximately | Überlappung, plus ähnliche Größenordnung der Intervalle |
|
||||
|
||||
**Wichtig, Containment vs. Overlap:** Nur `eq` (und implizit `sa`/`eb`)
|
||||
verlangen, dass das Resource-Intervall **vollständig** innerhalb bzw.
|
||||
**vollständig getrennt** vom Such-Intervall liegt. Bei `gt`, `lt`, `ge`
|
||||
und `le` reicht dagegen eine **Überlappung**: das Resource-Intervall muss
|
||||
nicht komplett außerhalb des Suchbereichs liegen, es genügt, dass es über
|
||||
die jeweilige Grenze hinausragt. Details dazu im nächsten Abschnitt.
|
||||
|
||||
---
|
||||
|
||||
## Matching gegen `Period` und `Range`
|
||||
|
||||
Die Grafiken oben zeigen das Resource-Datum als schmalen roten Marker. Das
|
||||
passt für einfache `date`/`dateTime`-Felder wie `Patient.birthDate`. Sobald
|
||||
das Zielfeld selbst ein **Intervall** ist (`Period`, z. B.
|
||||
`Encounter.period`, `Condition.onsetPeriod`, oder `Range`), wird die
|
||||
Unterscheidung zwischen **Containment** (vollständiges Enthaltensein) und
|
||||
**Overlap** (bloße Überlappung) entscheidend:
|
||||
|
||||
- **`eq`** verlangt Containment: das gesamte Resource-Intervall muss im
|
||||
Such-Intervall liegen.
|
||||
- **`gt` / `lt` / `ge` / `le`** verlangen nur Overlap: es reicht, wenn das
|
||||
Resource-Intervall über die jeweilige Grenze hinausragt, auch wenn ein
|
||||
Teil davon auf der "falschen" Seite liegt.
|
||||
- **`sa` / `eb`** verlangen das Gegenteil von Overlap: das Resource-Intervall
|
||||
muss vollständig und ohne jede Überlappung auf der jeweiligen Seite liegen.
|
||||
|
||||
Bei einem einfachen Zeitpunkt-Feld (kein `Period`) fällt dieser Unterschied
|
||||
praktisch nicht auf, da Resource-Start und -Ende (fast) identisch sind. Dort
|
||||
verhalten sich `gt` und `sa` de facto gleich. Der Unterschied wird erst bei
|
||||
echten Zeitspannen relevant. Das ist auch der Grund, warum `sa`/`eb`
|
||||
laut Spezifikation in erster Linie für `Period`/`Range`-Werte gedacht sind.
|
||||
|
||||
**Beispiel:** Ein Encounter läuft vom 10. bis 20. Juni. Die Suche
|
||||
`date=gt2023-06-15` soll ihn finden, obwohl der Encounter *vor* dem 15.
|
||||
begonnen hat. Entscheidend ist nur, dass er über den 15. hinausreicht
|
||||
(Overlap mit dem Bereich "nach dem 15."). Bei `date=sa2023-06-15` würde
|
||||
derselbe Encounter dagegen **nicht** matchen, weil er nicht vollständig nach
|
||||
dem 15. liegt. Genau das ist der praktische Unterschied zwischen `gt` und
|
||||
`sa`.
|
||||
|
||||
Die folgende Grafik macht das für alle vier "einseitigen" Präfixe (`gt`,
|
||||
`sa`, `lt`, `eb`) an denselben drei Beispiel-Periods sichtbar: einer
|
||||
Period komplett davor, einer, die die Suchgrenze überlappt, und einer
|
||||
komplett danach:
|
||||
|
||||

|
||||
*Matching gegen Period/Range (Containment vs. Overlap)*
|
||||
|
||||
Man sieht deutlich: `gt` und `lt` (blau schattierter Bereich, durchgezogene
|
||||
Grenzlinie) lassen die überlappende Period B als Treffer durch, während `sa`
|
||||
und `eb` (gestrichelte Grenzlinie) sie ablehnen. Nur eine Period, die
|
||||
komplett auf der richtigen Seite liegt, zählt dort.
|
||||
|
||||
| Encounter-Zeitraum | `date=gt2023-06-15` | `date=sa2023-06-15` |
|
||||
|---|---|---|
|
||||
| 10.–20. Juni (überlappt die Grenze) | ✅ Treffer (Overlap) | ❌ kein Treffer (nicht vollständig danach) |
|
||||
| 16.–20. Juni (komplett danach) | ✅ Treffer | ✅ Treffer |
|
||||
| 01.–10. Juni (komplett davor) | ❌ kein Treffer | ❌ kein Treffer |
|
||||
|
||||
---
|
||||
|
||||
## Offene (unvollständige) Periods
|
||||
|
||||
In der Praxis sind Periods oft **nicht abgeschlossen**, zum Beispiel ein
|
||||
laufender Encounter ohne `end`, oder ein importierter Datensatz mit
|
||||
unbekanntem `start`. Der FHIR-Standard regelt das eindeutig:
|
||||
|
||||
> Ein fehlender unterer Rand (`start`) gilt implizit als **kleiner als jedes
|
||||
> reale Datum** (also `-∞`). Ein fehlender oberer Rand (`end`) gilt implizit
|
||||
> als **größer als jedes reale Datum** (also `+∞`).
|
||||
|
||||
Das hat spürbare Konsequenzen, gerade für `sa` und `eb`:
|
||||
|
||||
- Ein laufender Encounter (`start` gesetzt, `end` fehlt, also `end = +∞`)
|
||||
kann **niemals** `eb` (ends before) matchen. Sein Ende liegt ja nie vor
|
||||
irgendeinem endlichen Datum. Er matcht aber sehr wohl `gt`, weil sein
|
||||
(unendliches) Ende immer über jede Suchgrenze hinausragt.
|
||||
- Ein Encounter mit unbekanntem Start (`start` fehlt, also `start = -∞`)
|
||||
kann **niemals** `sa` (starts after) matchen. Sein Beginn liegt ja nie
|
||||
nach irgendeinem endlichen Datum. Er matcht aber `lt`, weil sein
|
||||
(unendlicher) Anfang immer vor jede Suchgrenze hineinreicht.
|
||||
- Eine Period ganz ohne `start` und `end` überlappt praktisch **jeden**
|
||||
overlap-basierten Filter (`gt`, `lt`, `ge`, `le`). Sie „reicht" ja per
|
||||
Definition über jede Grenze hinaus.
|
||||
|
||||
Dieselben vier Präfixe wie in [Abschnitt 3](#3-matching-gegen-period-und-range),
|
||||
jetzt mit offenen statt geschlossenen Periods:
|
||||
|
||||

|
||||
*Matching gegen offene (unvollständige) Period/Range*
|
||||
|
||||
**Praktische Konsequenz:** Wenn du „laufende" Ressourcen (z. B. aktive
|
||||
Encounter, offene Verordnungen) gezielt aus einer Zeitraumsuche ausschließen
|
||||
willst, reicht `eb`/`sa` allein nicht. Du musst zusätzlich nach dem Status
|
||||
oder explizit nach `end:missing=true`/`start:missing=true` filtern, je
|
||||
nachdem, was dein Server unterstützt.
|
||||
|
||||
---
|
||||
|
||||
## Mehrere `date`-Parameter kombinieren
|
||||
|
||||
In der Praxis reicht ein einzelner Präfix selten, meist willst du einen
|
||||
**Bereich** definieren. FHIR-Server verknüpfen mehrere `date`-Parameter in
|
||||
derselben Query immer per **UND**. Vier typische Muster:
|
||||
|
||||

|
||||
*Kombination mehrerer Parameter (UND-Verknüpfung)*
|
||||
|
||||
| Kombination | Beispiel | Charakter |
|
||||
|---|---|---|
|
||||
| `ge` + `le` | `ge2023-01-01&le2023-12-31` | Geschlossenes Intervall (beide Grenzen inklusive) |
|
||||
| `gt` + `lt` | `gt2023-01-01<2023-12-31` | Offenes Intervall (beide Grenzen exklusive) |
|
||||
| `sa` + `eb` | `sa2023-01-01&eb2023-12-31` | Strikt getrennter Bereich, primär für Period-Werte |
|
||||
| `ge` + `lt` | `ge2023-06-01<2023-07-01` | Halboffenes Intervall `[start, ende)`, Standardmuster für „genau ein Monat" |
|
||||
|
||||
Wenn du in Timestamp-lastigen ETL-Pipelines mit `[start, ende)` arbeitest,
|
||||
kommt dir `ge` + `lt` bekannt vor: es ist exakt dasselbe Muster wie bei
|
||||
klassischen Zeitfenster-Queries in SQL.
|
||||
|
||||
---
|
||||
|
||||
## Die vollständige 3×3-Matrix aller Bereichs-Kombinationen
|
||||
|
||||
Die vier Muster oben sind nur die gebräuchlichsten. Tatsächlich lässt sich
|
||||
**jede** Untergrenze mit **jeder** Obergrenze kombinieren:
|
||||
|
||||
- Untergrenzen: `ge`, `gt`, `sa`
|
||||
- Obergrenzen: `le`, `lt`, `eb`
|
||||
|
||||
Das ergibt 3 × 3 = **9 mögliche Kombinationen**, alle spec-konform:
|
||||
|
||||

|
||||
*3x3-Matrix der Bereichs-Kombinationen (Untergrenze x Obergrenze)*
|
||||
|
||||
Sie unterscheiden sich nur darin, ob die jeweilige Grenze inklusiv
|
||||
(durchgezogene Linie) oder exklusiv (gestrichelte Linie) ist, und ob es sich
|
||||
um einen einfachen Werte-Vergleich (`ge`/`gt`/`le`/`lt`) oder einen strengen
|
||||
Period-Vergleich (`sa`/`eb`) handelt. Es gibt **keine explizite
|
||||
Ausschluss-Regel** im FHIR-Standard. Jede Zelle dieser Matrix ist eine
|
||||
gültige, funktionierende Query.
|
||||
|
||||
---
|
||||
|
||||
## Sonderfälle: Wenn Kombinationen redundant oder widersprüchlich werden
|
||||
|
||||
Nicht jede syntaktisch gültige Kombination ist auch praktisch sinnvoll. Drei
|
||||
Kategorien solltest du kennen, bevor du sie versehentlich in einer
|
||||
generierten Query landen lässt:
|
||||
|
||||

|
||||
*Sonderfälle bei Parameter-Kombinationen*
|
||||
|
||||
### Redundante Kombinationen
|
||||
Ändern nichts am Ergebnis, sind aber technisch kein Fehler:
|
||||
- `eq` + eine Grenze, die vom `eq`-Intervall ohnehin erfüllt wird
|
||||
(`eq2023-06-15&ge2020-01-01`): die Zusatzbedingung ist überflüssig.
|
||||
- Zwei Bedingungen desselben Richtungstyps
|
||||
(`ge2020-01-01&ge2023-01-01`): nur die strengere (spätere) Untergrenze
|
||||
wirkt effektiv.
|
||||
|
||||
### Kombinationen mit garantiert leerem Ergebnis
|
||||
Strukturell unmöglich zu erfüllen:
|
||||
- `eq` + `ne` auf denselben Wert (`eq2023-06-15&ne2023-06-15`): sich
|
||||
gegenseitig ausschließende Bedingungen.
|
||||
- Untergrenze liegt zeitlich nach der Obergrenze
|
||||
(`ge2023-06-01&le2023-01-01`): kein Datum erfüllt beides gleichzeitig.
|
||||
|
||||
Der Server wird solche Queries **syntaktisch akzeptieren** und einfach eine
|
||||
leere Ergebnismenge zurückgeben. Kein Fehler, aber auch keine hilfreiche
|
||||
Rückmeldung. Es lohnt sich, so etwas clientseitig vorab zu validieren.
|
||||
|
||||
### Ungewöhnliche, aber gültige Sonderfälle
|
||||
- **Drei oder mehr `date`-Parameter**, z. B. ein Jahresbereich mit
|
||||
ausgeschlossenem Einzeltag: `ge2023-01-01&le2023-12-31&ne2023-06-15`.
|
||||
- **`ap` kombiniert mit einer Grenze**, z. B.
|
||||
`ap2023-06-15&ge2023-01-01`: selten genutzt, da `ap` selbst schon
|
||||
unscharf ist und die Toleranzberechnung serverabhängig bleibt.
|
||||
|
||||
---
|
||||
|
||||
## Praxis-Empfehlungen zum Schluss
|
||||
|
||||
- Für einfache Bereichsfilter ist **`ge` + `lt`** (halboffenes Intervall) meist
|
||||
das robusteste Muster: es vermeidet Rundungsprobleme an der
|
||||
Precision-Grenze (kein Off-by-one bei „bis einschließlich 31.12.").
|
||||
- **`sa`/`eb`** bewusst einsetzen, wenn du bei `Period`/`Range`-Feldern eine
|
||||
*vollständige* Trennung brauchst (siehe [Abschnitt 3](#3-matching-gegen-period-und-range)),
|
||||
z. B. „Encounter vollständig nach Entlassung X". Für einen simplen
|
||||
„ab Datum X"-Filter ist meist `ge`/`gt` gemeint, nicht `sa`.
|
||||
- Bei `Period`-Feldern mit möglichen offenen Enden (siehe
|
||||
[Abschnitt 4](#4-offene-unvollständige-periods)) nicht vergessen: `sa`/`eb`
|
||||
greifen dort strukturell nie. Ggf. zusätzlich `:missing` oder Status
|
||||
filtern.
|
||||
- Vor dem Absetzen einer Multi-Parameter-Query lohnt sich ein kurzer Check auf
|
||||
logische Konsistenz zwischen Unter- und Obergrenze, um leere Ergebnisse
|
||||
durch Konfigurationsfehler in der eigenen Pipeline zu vermeiden.
|
||||
|
||||
Mit der Kurzreferenz oben und den sechs Grafiken im Hinterkopf, ohne Präfix,
|
||||
alle neun Präfixe einzeln, Containment vs. Overlap bei Period/Range (offen
|
||||
wie geschlossen), typische Kombinationen, die volle 3×3-Matrix und die
|
||||
Sonderfälle, sollte die nächste `date`-Query im FHIR-Suchparameter kein
|
||||
Rätsel mehr sein.
|
||||
@@ -1,7 +1,9 @@
|
||||
Title: Scientific workflow with BOOX Note Air 3 C
|
||||
Slug: boox-note-scientific-workflow
|
||||
Category: work
|
||||
Tags: scientific workflow, collaboration, literature management
|
||||
Date: 2024-01-26
|
||||
Lang: en
|
||||
Status: published
|
||||
|
||||
Recently I bought an [ONYX BOOX Note Air 3 C](https://onyxboox.com/boox_noteair3c) to support my scientific workflow. In the end of last year I realized why I wasn't moving forward in my scientifc career. To be honest I was very well aware of one main reason, which was that I hadn't enough self-discipline to read the sources needed for my research, but I didn't know the reason for it until last year. It turned out that the main reason was that most of the sources were in digital form and I couldn't bring myself to read them on the computer monitor. A tablet or smartphone weren't viable alternatives either, as the displays simply tire me out too quickly.
|
||||
@@ -30,7 +32,7 @@ Even though a read-it-later service has been integrated into Firefox for some ti
|
||||
|
||||
The [wallbag app](https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche) runs smoothly on the Note Air 3 C and allows me to call up my read-it-later bookmarks on this device at any time. Adding entries to the app is done via the Android sharing function and therefore also allows bookmarks to be added directly from the web browser.
|
||||
|
||||

|
||||

|
||||
*wallabag app on BOOX Note Air 3 C*
|
||||
|
||||
# Literature management
|
||||
@@ -39,7 +41,7 @@ Since I personally and we in our scientific working group operate a shared libra
|
||||
|
||||
On the one hand, there is now an official [Zotero app](https://play.google.com/store/apps/details?id=org.zotero.android) in the beta phase that works on the device and, on the other hand, the currently much better app [Zoo for Zotero](https://play.google.com/store/apps/details?id=com.mickstarify.zooforzotero) also works. With the caveat that the latter cannot be installed from the Play Store. But a direct installation via APK (which can be obtained from relevant sources) is possible and has run without any problems for me so far. In addition, the last update of the app is from August 2021, so the lack of an automatic update by the Play Store is also a minor risk. Nevertheless, you should of course keep an eye on the development of direct APK installations and carry out a manual update if necessary.
|
||||
|
||||

|
||||

|
||||
*Zoo for Zotero app on BOOX Note Air 3 C*
|
||||
|
||||
The Zotero libraries (both my personal and the group library) contain not only scientific publications relevant to the respective research, but also other specialized literature such as textbooks and links to relevant websites and blog posts.
|
||||
@@ -58,7 +60,7 @@ Even though it is called KDE Connect, it is also compatible with GNOME desktops
|
||||
|
||||
Even if it doesn't look particularly good on the e-ink display due to the heavily animated live output, the [official ChatGPT app](https://play.google.com/store/apps/details?id=com.openai.chatgpt) can be used. But I only use it when I really don't have any other device to hand, which is never the case as I always have at least one smartphone nearby. And despite the smaller display, the usability is far better here.
|
||||
|
||||

|
||||

|
||||
*ChatGPT app on BOOX Note Air 3 C*
|
||||
|
||||
# Collaboration
|
||||
@@ -79,14 +81,15 @@ As the device does not come with a calendar or contacts app as standard, these h
|
||||
|
||||
As I live in Germany, I was particularly interested in whether and how well the [Onleihe app](https://play.google.com/store/apps/details?id=de.etecture.ekz.onleihe) for german public libraries works on the BOOX Note Air 3 C. What can I say? What can I say, it works, but the app looks very restless on the E-Ink display due to the many color representations. Although you can also change the color scheme to a dark standard theme, the green areas (visible in the screenshot below) still look very uneven, as the black used then does not form a uniform color area. Therefore, it doesn't really invite you to browse, but it's enough to quickly borrow an e-book or an e-magazine.
|
||||
|
||||

|
||||

|
||||
*Onleihe on BOOX Note Air 3 C*
|
||||
|
||||
Also reading electronic newspaper via the Onleihe App works quite well. Of course, you need to zoom quite a lot to compensate for the number of columns in a daily newspaper.
|
||||
|
||||

|
||||

|
||||
*Reading newspaper via Onleihe app on BOOX Note Air 3 C*
|
||||
|
||||
# Alternative app store
|
||||
|
||||
[F-Droid](https://f-droid.org) can be installed on the Note Air 3 C not only to have an alternative to the Play Store, but also to be able to install open source apps that may not have been released for the device in the Play Store. This also allows the installation of free builds for some apps, which offer the full range of functions that would otherwise only be available via a Pro upgrade.
|
||||
|
||||
@@ -0,0 +1,300 @@
|
||||
Title: HowTo: The FHIR `date` Search Parameter – Understanding Prefixes, Intervals, and Combinations
|
||||
Slug: howto-fhir-date-parameter
|
||||
Category: work
|
||||
Tags: FHIR, howto
|
||||
Date: 2026-08-12
|
||||
Lang: en
|
||||
Status: published
|
||||
|
||||
Anyone building or querying a FHIR server sooner or later runs into the
|
||||
`date` search parameter. At first glance it looks simple:
|
||||
`?date=2023-06-15`. But as soon as prefixes like `ge`, `sa`, or `ap` come
|
||||
into play, and multiple `date` parameters get combined, things get
|
||||
confusing fast. This article brings order to the chaos: step by step, with
|
||||
timeline graphics for every case, and a quick-reference table for fast
|
||||
lookups.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
[TOC]
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference: All Prefixes at a Glance
|
||||
|
||||
For a fast glance in between. Details and graphics for every row follow in
|
||||
the sections below.
|
||||
|
||||
| Prefix | Name | Short rule | Example |
|
||||
|---|---|---|---|
|
||||
| *(none)* | implicit `eq` | Precision of the value determines the interval | `date=2023-06-15` |
|
||||
| `eq` | equal to | Resource interval fully within the search interval | `date=eq2023-06-15` |
|
||||
| `ne` | not equal to | Complement of `eq` | `date=ne2023-06-15` |
|
||||
| `gt` | greater than | Extends beyond the end (overlap is sufficient) | `date=gt2023-06-15` |
|
||||
| `lt` | less than | Begins before the start (overlap is sufficient) | `date=lt2023-06-15` |
|
||||
| `ge` | greater or equal | `gt` or fully contained (`eq`) | `date=ge2023-06-15` |
|
||||
| `le` | less or equal | `lt` or fully contained (`eq`) | `date=le2023-06-15` |
|
||||
| `sa` | starts after | Entirely after, **no** overlap | `date=sa2023-06-15` |
|
||||
| `eb` | ends before | Entirely before, **no** overlap | `date=eb2023-06-15` |
|
||||
| `ap` | approximately | Overlap + similar order of magnitude | `date=ap2023-06-15` |
|
||||
|
||||
**Missing `start`/`end` on a `Period`:** a missing `start` means `-∞`, a
|
||||
missing `end` means `+∞`. That's why `sa` can never match when `start` is
|
||||
missing, and `eb` can never match when `end` is missing (details in
|
||||
[Section 4](#4-open-incomplete-periods)).
|
||||
|
||||
---
|
||||
|
||||
## The Core Principle: FHIR Compares Intervals, Not Points in Time
|
||||
|
||||
The most important mental reset first: FHIR never treats date values as an
|
||||
exact point in time. It always treats them as an **interval**. How wide
|
||||
that interval is depends on the precision of the given value:
|
||||
|
||||
- `2023` → the entire year 2023
|
||||
- `2023-06` → all of June 2023
|
||||
- `2023-06-15` → all of June 15, 2023 (00:00–24:00)
|
||||
- `2023-06-15T10:00:00` → (almost) an exact point in time
|
||||
|
||||
Every comparison operator then compares **two intervals** with each other:
|
||||
the search interval from your query parameter, and the resource interval
|
||||
from the resource's field (e.g. `Patient.birthDate` or
|
||||
`Encounter.period`).
|
||||
|
||||
### No prefix means `eq`, but precision still matters
|
||||
|
||||
If you don't specify a prefix, the server assumes `eq`. The resource date
|
||||
must then lie **fully** within your search interval. The coarser the
|
||||
precision, the wider the interval, and the more resource values fit
|
||||
inside it:
|
||||
|
||||

|
||||
*FHIR date search parameter WITHOUT a prefix*
|
||||
|
||||
`date=2023-06-15` only matches this single day. `date=2023-06`, on the
|
||||
other hand, matches every day in June, including the 15th. That's the
|
||||
most common trap for beginners: a "less precise" search query isn't
|
||||
stricter, it's looser.
|
||||
|
||||
---
|
||||
|
||||
## The Nine Prefixes at a Glance
|
||||
|
||||
FHIR defines nine prefixes for `date` in total. Each describes a different
|
||||
relationship between the search interval (red dashed in the graphic) and
|
||||
the matching range (colored/shaded):
|
||||
|
||||

|
||||
*All prefixes at a glance*
|
||||
|
||||
| Prefix | Name | Meaning |
|
||||
|---|---|---|
|
||||
| `eq` | equal to | Resource interval lies fully within the search interval |
|
||||
| `ne` | not equal to | Complement of `eq` |
|
||||
| `gt` | greater than | Resource interval **extends beyond** the end of the search interval |
|
||||
| `lt` | less than | Resource interval **begins before** the start of the search interval |
|
||||
| `ge` | greater or equal | `gt` **or** fully contained within the search interval (`eq`) |
|
||||
| `le` | less or equal | `lt` **or** fully contained within the search interval (`eq`) |
|
||||
| `sa` | starts after | Begins entirely **after** the end of the search interval, no overlap |
|
||||
| `eb` | ends before | Ends entirely **before** the start of the search interval, no overlap |
|
||||
| `ap` | approximately | Overlap, plus a similar order of magnitude between the intervals |
|
||||
|
||||
**Important, containment vs. overlap:** Only `eq` (and, implicitly,
|
||||
`sa`/`eb`) require the resource interval to lie **fully** within, or
|
||||
**fully separated** from, the search interval. For `gt`, `lt`, `ge`, and
|
||||
`le`, an **overlap** is enough: the resource interval doesn't have to lie
|
||||
completely outside the search range, it just needs to extend past the
|
||||
respective boundary. More on that in the next section.
|
||||
|
||||
---
|
||||
|
||||
## Matching Against `Period` and `Range`
|
||||
|
||||
The graphics above show the resource date as a thin red marker. That
|
||||
works for simple `date`/`dateTime` fields like `Patient.birthDate`. As
|
||||
soon as the target field is itself an **interval** (a `Period`, e.g.
|
||||
`Encounter.period`, `Condition.onsetPeriod`, or a `Range`), the
|
||||
distinction between **containment** (fully contained) and **overlap**
|
||||
(mere overlap) becomes crucial:
|
||||
|
||||
- **`eq`** requires containment: the entire resource interval must lie
|
||||
within the search interval.
|
||||
- **`gt` / `lt` / `ge` / `le`** only require overlap: it's enough for the
|
||||
resource interval to extend past the respective boundary, even if part
|
||||
of it lies on the "wrong" side.
|
||||
- **`sa` / `eb`** require the opposite of overlap: the resource interval
|
||||
must lie fully, and without any overlap, on the respective side.
|
||||
|
||||
For a simple point-in-time field (no `Period`), this distinction barely
|
||||
shows, since the resource's start and end are (almost) identical. There,
|
||||
`gt` and `sa` behave de facto the same. The difference only becomes
|
||||
relevant for actual time spans. That's also why `sa`/`eb` are, per the
|
||||
specification, primarily intended for `Period`/`Range` values.
|
||||
|
||||
**Example:** An encounter runs from June 10 to June 20. The search
|
||||
`date=gt2023-06-15` should find it, even though the encounter *started*
|
||||
before the 15th. What matters is only that it extends past the 15th
|
||||
(overlap with the range "after the 15th"). With `date=sa2023-06-15`, the
|
||||
same encounter would **not** match, because it doesn't lie entirely after
|
||||
the 15th. That's exactly the practical difference between `gt` and `sa`.
|
||||
|
||||
The following graphic makes this visible for all four "one-sided" prefixes
|
||||
(`gt`, `sa`, `lt`, `eb`) using the same three example periods: one
|
||||
entirely before, one overlapping the boundary, and one entirely after:
|
||||
|
||||

|
||||
*Matching against Period/Range (containment vs. overlap)*
|
||||
|
||||
You can clearly see: `gt` and `lt` (blue shaded area, solid boundary line)
|
||||
let the overlapping Period B through as a match, while `sa` and `eb`
|
||||
(dashed boundary line) reject it. Only a period lying entirely on the
|
||||
correct side counts there.
|
||||
|
||||
| Encounter timeframe | `date=gt2023-06-15` | `date=sa2023-06-15` |
|
||||
|---|---|---|
|
||||
| June 10–20 (overlaps the boundary) | ✅ Match (overlap) | ❌ No match (not entirely after) |
|
||||
| June 16–20 (entirely after) | ✅ Match | ✅ Match |
|
||||
| June 1–10 (entirely before) | ❌ No match | ❌ No match |
|
||||
|
||||
---
|
||||
|
||||
## Open (Incomplete) Periods
|
||||
|
||||
In practice, periods are often **not closed**, for example an ongoing
|
||||
encounter without an `end`, or an imported record with an unknown
|
||||
`start`. The FHIR standard handles this clearly:
|
||||
|
||||
> A missing lower bound (`start`) is implicitly treated as **less than any
|
||||
> real date** (i.e. `-∞`). A missing upper bound (`end`) is implicitly
|
||||
> treated as **greater than any real date** (i.e. `+∞`).
|
||||
|
||||
This has noticeable consequences, especially for `sa` and `eb`:
|
||||
|
||||
- An ongoing encounter (`start` set, `end` missing, so `end = +∞`) can
|
||||
**never** match `eb` (ends before). Its end never lies before any
|
||||
finite date. It will, however, match `gt`, because its (infinite) end
|
||||
always extends beyond any search boundary.
|
||||
- An encounter with an unknown start (`start` missing, so `start = -∞`)
|
||||
can **never** match `sa` (starts after). Its beginning never lies after
|
||||
any finite date. It will, however, match `lt`, because its (infinite)
|
||||
beginning always reaches before any search boundary.
|
||||
- A period with neither `start` nor `end` overlaps practically **every**
|
||||
overlap-based filter (`gt`, `lt`, `ge`, `le`). By definition, it
|
||||
"extends" past every boundary.
|
||||
|
||||
The same four prefixes as in [Section 3](#3-matching-against-period-and-range),
|
||||
now with open instead of closed periods:
|
||||
|
||||

|
||||
*Matching against open (incomplete) Period/Range*
|
||||
|
||||
**Practical consequence:** If you want to specifically exclude "ongoing"
|
||||
resources (e.g. active encounters, open orders) from a date-range search,
|
||||
`eb`/`sa` alone won't do it. You'll additionally need to filter by status,
|
||||
or explicitly by `end:missing=true`/`start:missing=true`, depending on
|
||||
what your server supports.
|
||||
|
||||
---
|
||||
|
||||
## Combining Multiple `date` Parameters
|
||||
|
||||
In practice, a single prefix is rarely enough. Usually you want to define
|
||||
a **range**. FHIR servers always combine multiple `date` parameters in the
|
||||
same query with **AND**. Four typical patterns:
|
||||
|
||||

|
||||
*Combining multiple parameters (AND logic)*
|
||||
|
||||
| Combination | Example | Character |
|
||||
|---|---|---|
|
||||
| `ge` + `le` | `ge2023-01-01&le2023-12-31` | Closed interval (both bounds inclusive) |
|
||||
| `gt` + `lt` | `gt2023-01-01<2023-12-31` | Open interval (both bounds exclusive) |
|
||||
| `sa` + `eb` | `sa2023-01-01&eb2023-12-31` | Strictly separated range, primarily for Period values |
|
||||
| `ge` + `lt` | `ge2023-06-01<2023-07-01` | Half-open interval `[start, end)`, the standard pattern for "exactly one month" |
|
||||
|
||||
If you work with `[start, end)` in timestamp-heavy ETL pipelines, `ge` +
|
||||
`lt` will look familiar: it's exactly the same pattern used for classic
|
||||
time-window queries in SQL.
|
||||
|
||||
---
|
||||
|
||||
## The Full 3×3 Matrix of Range Combinations
|
||||
|
||||
The four patterns above are only the most common ones. In fact, **any**
|
||||
lower bound can be combined with **any** upper bound:
|
||||
|
||||
- Lower bounds: `ge`, `gt`, `sa`
|
||||
- Upper bounds: `le`, `lt`, `eb`
|
||||
|
||||
That gives 3 × 3 = **9 possible combinations**, all spec-compliant:
|
||||
|
||||

|
||||
*3x3 matrix of range combinations (lower bound × upper bound)*
|
||||
|
||||
They differ only in whether the respective boundary is inclusive (solid
|
||||
line) or exclusive (dashed line), and whether it's a simple value
|
||||
comparison (`ge`/`gt`/`le`/`lt`) or a strict Period comparison
|
||||
(`sa`/`eb`). There is **no explicit exclusion rule** in the FHIR
|
||||
standard. Every cell in this matrix is a valid, functioning query.
|
||||
|
||||
---
|
||||
|
||||
## Edge Cases: When Combinations Become Redundant or Contradictory
|
||||
|
||||
Not every syntactically valid combination is practically meaningful. There
|
||||
are three categories you should know about before one of them ends up in a
|
||||
generated query by accident:
|
||||
|
||||

|
||||
*Edge cases in parameter combinations*
|
||||
|
||||
### Redundant combinations
|
||||
Don't change the result, but aren't technically an error either:
|
||||
- `eq` plus a boundary that's already satisfied by the `eq` interval
|
||||
(`eq2023-06-15&ge2020-01-01`): the extra condition is superfluous.
|
||||
- Two conditions of the same directional type
|
||||
(`ge2020-01-01&ge2023-01-01`): only the stricter (later) lower bound
|
||||
actually takes effect.
|
||||
|
||||
### Combinations with a guaranteed empty result
|
||||
Structurally impossible to satisfy:
|
||||
- `eq` + `ne` on the same value (`eq2023-06-15&ne2023-06-15`): mutually
|
||||
exclusive conditions.
|
||||
- The lower bound lies after the upper bound in time
|
||||
(`ge2023-06-01&le2023-01-01`): no date can satisfy both at once.
|
||||
|
||||
The server will **syntactically accept** such queries and simply return an
|
||||
empty result set. Not an error, but not a helpful response either. It's
|
||||
worth validating this client-side before sending the request.
|
||||
|
||||
### Unusual but valid edge cases
|
||||
- **Three or more `date` parameters**, e.g. a year range with a single day
|
||||
excluded: `ge2023-01-01&le2023-12-31&ne2023-06-15`.
|
||||
- **`ap` combined with a boundary**, e.g.
|
||||
`ap2023-06-15&ge2023-01-01`: rarely used, since `ap` is already fuzzy
|
||||
by nature, and the tolerance calculation remains server-dependent.
|
||||
|
||||
---
|
||||
|
||||
## Practical Recommendations
|
||||
|
||||
- For simple range filters, **`ge` + `lt`** (half-open interval) is
|
||||
usually the most robust pattern. It avoids rounding issues at precision
|
||||
boundaries (no off-by-one when you mean "through December 31st
|
||||
inclusive").
|
||||
- Use **`sa`/`eb`** deliberately when you need *complete* separation on
|
||||
`Period`/`Range` fields (see [Section 3](#3-matching-against-period-and-range)),
|
||||
e.g. "encounter entirely after discharge X". For a simple "from date X
|
||||
onward" filter, you usually mean `ge`/`gt`, not `sa`.
|
||||
- For `Period` fields with possible open ends (see
|
||||
[Section 4](#4-open-incomplete-periods)), don't forget: `sa`/`eb`
|
||||
structurally never match there. Additionally filter by `:missing` or
|
||||
status if needed.
|
||||
- Before sending a multi-parameter query, it's worth a quick sanity check
|
||||
on the logical consistency between the lower and upper bound, to avoid
|
||||
empty results caused by configuration mistakes in your own pipeline.
|
||||
|
||||
With the quick reference above and the six graphics in mind, no prefix,
|
||||
all nine prefixes individually, containment vs. overlap for Period/Range
|
||||
(both open and closed), typical combinations, the full 3×3 matrix, and the
|
||||
edge cases, your next `date` query in FHIR should no longer be a mystery.
|
||||
@@ -102,7 +102,7 @@ At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergr
|
||||
|
||||
# Images
|
||||
|
||||

|
||||

|
||||
*Image of a Capybara*
|
||||
|
||||
# Links
|
||||
@@ -0,0 +1,124 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1056" viewBox="0 0 1000 1056" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[stroke="#2e7d32"] { stroke: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
[stroke="#1565c0"] { stroke: #64b5f6; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
[stroke="#6a1b9a"] { stroke: #ba68c8; }
|
||||
[fill="#ad1457"] { fill: #f06292; }
|
||||
[stroke="#ad1457"] { stroke: #f06292; }
|
||||
[fill="#bf360c"] { fill: #ff7043; }
|
||||
[stroke="#bf360c"] { stroke: #ff7043; }
|
||||
[fill="#e65100"] { fill: #ffa726; }
|
||||
[stroke="#e65100"] { stroke: #ffa726; }
|
||||
[fill="#00838f"] { fill: #4dd0e1; }
|
||||
[stroke="#00838f"] { stroke: #4dd0e1; }
|
||||
[fill="#004d40"] { fill: #26a69a; }
|
||||
[stroke="#004d40"] { stroke: #26a69a; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="15" fill="#555" text-anchor="middle">Roter gestrichelter Marker = Suchwert 2023-06-15 • Farbig schattierter Bereich = Bereich, der als Treffer gilt</text>
|
||||
<text x="60" y="56" font-size="15" font-weight="700" fill="#111">eq — gleich</text>
|
||||
<text x="940" y="56" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eq2023-06-15</text>
|
||||
<rect x="475.0" y="82" width="50.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="92" x2="940" y2="92" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,92 932,87 932,97" fill="#333"/>
|
||||
<line x1="475.0" y1="78" x2="475.0" y2="106" stroke="#2e7d32" stroke-width="3"/>
|
||||
<line x1="525.0" y1="78" x2="525.0" y2="106" stroke="#2e7d32" stroke-width="3"/>
|
||||
<line x1="500.0" y1="68" x2="500.0" y2="116" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="92" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="62" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="138" font-size="12" fill="#444" font-style="italic">Resource-Intervall liegt vollstaendig im Such-Intervall.</text>
|
||||
<text x="60" y="166" font-size="15" font-weight="700" fill="#111">ne — ungleich</text>
|
||||
<text x="940" y="166" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ne2023-06-15</text>
|
||||
<rect x="60" y="192" width="415.0" height="20" fill="#ad1457" opacity="0.22"/>
|
||||
<rect x="525.0" y="192" width="415.0" height="20" fill="#ad1457" opacity="0.22"/>
|
||||
<line x1="60" y1="202" x2="940" y2="202" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,202 932,197 932,207" fill="#333"/>
|
||||
<line x1="475.0" y1="188" x2="475.0" y2="216" stroke="#ad1457" stroke-width="3"/>
|
||||
<line x1="525.0" y1="188" x2="525.0" y2="216" stroke="#ad1457" stroke-width="3"/>
|
||||
<line x1="500.0" y1="178" x2="500.0" y2="226" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="202" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="172" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="248" font-size="12" fill="#444" font-style="italic">Resource-Intervall liegt NICHT vollstaendig im Such-Intervall (Komplement von eq).</text>
|
||||
<text x="60" y="276" font-size="15" font-weight="700" fill="#111">gt — groesser als</text>
|
||||
<text x="940" y="276" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt2023-06-15</text>
|
||||
<rect x="525.0" y="302" width="415.0" height="20" fill="#e65100" opacity="0.22"/>
|
||||
<line x1="60" y1="312" x2="940" y2="312" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,312 932,307 932,317" fill="#333"/>
|
||||
<line x1="525.0" y1="298" x2="525.0" y2="326" stroke="#e65100" stroke-width="3" />
|
||||
<line x1="500.0" y1="288" x2="500.0" y2="336" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="312" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="282" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="358" font-size="12" fill="#444" font-style="italic">Resource-Intervall ragt ueber das Ende des Such-Intervalls hinaus (Overlap genuegt).</text>
|
||||
<text x="60" y="386" font-size="15" font-weight="700" fill="#111">lt — kleiner als</text>
|
||||
<text x="940" y="386" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=lt2023-06-15</text>
|
||||
<rect x="60" y="412" width="415.0" height="20" fill="#00838f" opacity="0.22"/>
|
||||
<line x1="60" y1="422" x2="940" y2="422" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,422 932,417 932,427" fill="#333"/>
|
||||
<line x1="475.0" y1="408" x2="475.0" y2="436" stroke="#00838f" stroke-width="3" />
|
||||
<line x1="500.0" y1="398" x2="500.0" y2="446" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="422" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="392" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="468" font-size="12" fill="#444" font-style="italic">Resource-Intervall beginnt vor dem Anfang des Such-Intervalls (Overlap genuegt).</text>
|
||||
<text x="60" y="496" font-size="15" font-weight="700" fill="#111">ge — groesser/gleich</text>
|
||||
<text x="940" y="496" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-06-15</text>
|
||||
<rect x="475.0" y="522" width="465.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="532" x2="940" y2="532" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,532 932,527 932,537" fill="#333"/>
|
||||
<line x1="475.0" y1="518" x2="475.0" y2="546" stroke="#2e7d32" stroke-width="3" />
|
||||
<line x1="500.0" y1="508" x2="500.0" y2="556" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="532" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="502" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="578" font-size="12" fill="#444" font-style="italic">gt ODER vollstaendig im Such-Intervall enthalten (eq).</text>
|
||||
<text x="60" y="606" font-size="15" font-weight="700" fill="#111">le — kleiner/gleich</text>
|
||||
<text x="940" y="606" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=le2023-06-15</text>
|
||||
<rect x="60" y="632" width="465.0" height="20" fill="#1565c0" opacity="0.22"/>
|
||||
<line x1="60" y1="642" x2="940" y2="642" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,642 932,637 932,647" fill="#333"/>
|
||||
<line x1="525.0" y1="628" x2="525.0" y2="656" stroke="#1565c0" stroke-width="3" />
|
||||
<line x1="500.0" y1="618" x2="500.0" y2="666" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="642" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="612" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="688" font-size="12" fill="#444" font-style="italic">lt ODER vollstaendig im Such-Intervall enthalten (eq).</text>
|
||||
<text x="60" y="716" font-size="15" font-weight="700" fill="#111">sa — startet nach (starts after)</text>
|
||||
<text x="940" y="716" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa2023-06-15</text>
|
||||
<rect x="525.0" y="742" width="415.0" height="20" fill="#bf360c" opacity="0.22"/>
|
||||
<line x1="60" y1="752" x2="940" y2="752" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,752 932,747 932,757" fill="#333"/>
|
||||
<line x1="525.0" y1="738" x2="525.0" y2="766" stroke="#bf360c" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="500.0" y1="728" x2="500.0" y2="776" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="752" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="722" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="798" font-size="12" fill="#444" font-style="italic">Resource-Intervall beginnt vollstaendig nach dem Ende des Such-Intervalls, keine Ueberlappung (strikter als gt bei Ranges).</text>
|
||||
<text x="60" y="826" font-size="15" font-weight="700" fill="#111">eb — endet vor (ends before)</text>
|
||||
<text x="940" y="826" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eb2023-06-15</text>
|
||||
<rect x="60" y="852" width="415.0" height="20" fill="#004d40" opacity="0.22"/>
|
||||
<line x1="60" y1="862" x2="940" y2="862" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,862 932,857 932,867" fill="#333"/>
|
||||
<line x1="475.0" y1="848" x2="475.0" y2="876" stroke="#004d40" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="500.0" y1="838" x2="500.0" y2="886" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="862" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="832" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="908" font-size="12" fill="#444" font-style="italic">Resource-Intervall endet vollstaendig vor dem Beginn des Such-Intervalls, keine Ueberlappung (strikter als lt bei Ranges).</text>
|
||||
<text x="60" y="936" font-size="15" font-weight="700" fill="#111">ap — ungefaehr (approximately)</text>
|
||||
<text x="940" y="936" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ap2023-06-15</text>
|
||||
<rect x="440.0" y="962" width="120" height="20" fill="#6a1b9a" opacity="0.22"/>
|
||||
<line x1="60" y1="972" x2="940" y2="972" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,972 932,967 932,977" fill="#333"/>
|
||||
<line x1="440.0" y1="958" x2="440.0" y2="986" stroke="#6a1b9a" stroke-width="3"/>
|
||||
<line x1="560.0" y1="958" x2="560.0" y2="986" stroke="#6a1b9a" stroke-width="3"/>
|
||||
<line x1="500.0" y1="948" x2="500.0" y2="996" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="972" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="942" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="1018" font-size="12" fill="#444" font-style="italic">Resource-Datum liegt 'in der Naehe' des Suchwerts (implementierungsabhaengige Toleranz, z.B. +/-10%).</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,124 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1056" viewBox="0 0 1000 1056" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[stroke="#2e7d32"] { stroke: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
[stroke="#1565c0"] { stroke: #64b5f6; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
[stroke="#6a1b9a"] { stroke: #ba68c8; }
|
||||
[fill="#ad1457"] { fill: #f06292; }
|
||||
[stroke="#ad1457"] { stroke: #f06292; }
|
||||
[fill="#bf360c"] { fill: #ff7043; }
|
||||
[stroke="#bf360c"] { stroke: #ff7043; }
|
||||
[fill="#e65100"] { fill: #ffa726; }
|
||||
[stroke="#e65100"] { stroke: #ffa726; }
|
||||
[fill="#00838f"] { fill: #4dd0e1; }
|
||||
[stroke="#00838f"] { stroke: #4dd0e1; }
|
||||
[fill="#004d40"] { fill: #26a69a; }
|
||||
[stroke="#004d40"] { stroke: #26a69a; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="15" fill="#555" text-anchor="middle">Red dashed marker = search value 2023-06-15 • Colored shaded area = range considered a match</text>
|
||||
<text x="60" y="56" font-size="15" font-weight="700" fill="#111">eq — equal to</text>
|
||||
<text x="940" y="56" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eq2023-06-15</text>
|
||||
<rect x="475.0" y="82" width="50.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="92" x2="940" y2="92" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,92 932,87 932,97" fill="#333"/>
|
||||
<line x1="475.0" y1="78" x2="475.0" y2="106" stroke="#2e7d32" stroke-width="3"/>
|
||||
<line x1="525.0" y1="78" x2="525.0" y2="106" stroke="#2e7d32" stroke-width="3"/>
|
||||
<line x1="500.0" y1="68" x2="500.0" y2="116" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="92" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="62" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="138" font-size="12" fill="#444" font-style="italic">Resource interval lies fully within the search interval.</text>
|
||||
<text x="60" y="166" font-size="15" font-weight="700" fill="#111">ne — not equal to</text>
|
||||
<text x="940" y="166" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ne2023-06-15</text>
|
||||
<rect x="60" y="192" width="415.0" height="20" fill="#ad1457" opacity="0.22"/>
|
||||
<rect x="525.0" y="192" width="415.0" height="20" fill="#ad1457" opacity="0.22"/>
|
||||
<line x1="60" y1="202" x2="940" y2="202" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,202 932,197 932,207" fill="#333"/>
|
||||
<line x1="475.0" y1="188" x2="475.0" y2="216" stroke="#ad1457" stroke-width="3"/>
|
||||
<line x1="525.0" y1="188" x2="525.0" y2="216" stroke="#ad1457" stroke-width="3"/>
|
||||
<line x1="500.0" y1="178" x2="500.0" y2="226" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="202" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="172" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="248" font-size="12" fill="#444" font-style="italic">Resource interval does NOT lie fully within the search interval (complement of eq).</text>
|
||||
<text x="60" y="276" font-size="15" font-weight="700" fill="#111">gt — greater than</text>
|
||||
<text x="940" y="276" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt2023-06-15</text>
|
||||
<rect x="525.0" y="302" width="415.0" height="20" fill="#e65100" opacity="0.22"/>
|
||||
<line x1="60" y1="312" x2="940" y2="312" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,312 932,307 932,317" fill="#333"/>
|
||||
<line x1="525.0" y1="298" x2="525.0" y2="326" stroke="#e65100" stroke-width="3" />
|
||||
<line x1="500.0" y1="288" x2="500.0" y2="336" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="312" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="282" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="358" font-size="12" fill="#444" font-style="italic">Resource interval extends beyond the end of the search interval (overlap is sufficient).</text>
|
||||
<text x="60" y="386" font-size="15" font-weight="700" fill="#111">lt — less than</text>
|
||||
<text x="940" y="386" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=lt2023-06-15</text>
|
||||
<rect x="60" y="412" width="415.0" height="20" fill="#00838f" opacity="0.22"/>
|
||||
<line x1="60" y1="422" x2="940" y2="422" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,422 932,417 932,427" fill="#333"/>
|
||||
<line x1="475.0" y1="408" x2="475.0" y2="436" stroke="#00838f" stroke-width="3" />
|
||||
<line x1="500.0" y1="398" x2="500.0" y2="446" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="422" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="392" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="468" font-size="12" fill="#444" font-style="italic">Resource interval begins before the start of the search interval (overlap is sufficient).</text>
|
||||
<text x="60" y="496" font-size="15" font-weight="700" fill="#111">ge — greater or equal</text>
|
||||
<text x="940" y="496" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-06-15</text>
|
||||
<rect x="475.0" y="522" width="465.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="532" x2="940" y2="532" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,532 932,527 932,537" fill="#333"/>
|
||||
<line x1="475.0" y1="518" x2="475.0" y2="546" stroke="#2e7d32" stroke-width="3" />
|
||||
<line x1="500.0" y1="508" x2="500.0" y2="556" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="532" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="502" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="578" font-size="12" fill="#444" font-style="italic">gt OR fully contained within the search interval (eq).</text>
|
||||
<text x="60" y="606" font-size="15" font-weight="700" fill="#111">le — less or equal</text>
|
||||
<text x="940" y="606" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=le2023-06-15</text>
|
||||
<rect x="60" y="632" width="465.0" height="20" fill="#1565c0" opacity="0.22"/>
|
||||
<line x1="60" y1="642" x2="940" y2="642" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,642 932,637 932,647" fill="#333"/>
|
||||
<line x1="525.0" y1="628" x2="525.0" y2="656" stroke="#1565c0" stroke-width="3" />
|
||||
<line x1="500.0" y1="618" x2="500.0" y2="666" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="642" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="612" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="688" font-size="12" fill="#444" font-style="italic">lt OR fully contained within the search interval (eq).</text>
|
||||
<text x="60" y="716" font-size="15" font-weight="700" fill="#111">sa — starts after</text>
|
||||
<text x="940" y="716" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa2023-06-15</text>
|
||||
<rect x="525.0" y="742" width="415.0" height="20" fill="#bf360c" opacity="0.22"/>
|
||||
<line x1="60" y1="752" x2="940" y2="752" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,752 932,747 932,757" fill="#333"/>
|
||||
<line x1="525.0" y1="738" x2="525.0" y2="766" stroke="#bf360c" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="500.0" y1="728" x2="500.0" y2="776" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="752" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="722" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="798" font-size="12" fill="#444" font-style="italic">Resource interval begins entirely after the end of the search interval, no overlap (stricter than gt for ranges).</text>
|
||||
<text x="60" y="826" font-size="15" font-weight="700" fill="#111">eb — ends before</text>
|
||||
<text x="940" y="826" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eb2023-06-15</text>
|
||||
<rect x="60" y="852" width="415.0" height="20" fill="#004d40" opacity="0.22"/>
|
||||
<line x1="60" y1="862" x2="940" y2="862" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,862 932,857 932,867" fill="#333"/>
|
||||
<line x1="475.0" y1="848" x2="475.0" y2="876" stroke="#004d40" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="500.0" y1="838" x2="500.0" y2="886" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="862" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="832" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="908" font-size="12" fill="#444" font-style="italic">Resource interval ends entirely before the start of the search interval, no overlap (stricter than lt for ranges).</text>
|
||||
<text x="60" y="936" font-size="15" font-weight="700" fill="#111">ap — approximately</text>
|
||||
<text x="940" y="936" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ap2023-06-15</text>
|
||||
<rect x="440.0" y="962" width="120" height="20" fill="#6a1b9a" opacity="0.22"/>
|
||||
<line x1="60" y1="972" x2="940" y2="972" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,972 932,967 932,977" fill="#333"/>
|
||||
<line x1="440.0" y1="958" x2="440.0" y2="986" stroke="#6a1b9a" stroke-width="3"/>
|
||||
<line x1="560.0" y1="958" x2="560.0" y2="986" stroke="#6a1b9a" stroke-width="3"/>
|
||||
<line x1="500.0" y1="948" x2="500.0" y2="996" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="972" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="942" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="1018" font-size="12" fill="#444" font-style="italic">Resource date lies 'near' the search value (implementation-dependent tolerance, e.g. +/-10%).</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,56 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="586" viewBox="0 0 1000 586" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[stroke="#2e7d32"] { stroke: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="15" fill="#555" text-anchor="middle">Mehrere date-Parameter in derselben Query werden UND-verknuepft und ergeben einen Bereich</text>
|
||||
<text x="60" y="56" font-size="15" font-weight="700" fill="#111">Geschlossenes Intervall (inklusiv)</text>
|
||||
<text x="940" y="56" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-01-01&date=le2023-12-31</text>
|
||||
<rect x="340.0" y="91" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="101" x2="940" y2="101" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,101 932,96 932,106" fill="#333"/>
|
||||
<line x1="340.0" y1="85" x2="340.0" y2="117" stroke="#2e7d32" stroke-width="3" />
|
||||
<line x1="660.0" y1="85" x2="660.0" y2="117" stroke="#2e7d32" stroke-width="3" />
|
||||
<text x="340.0" y="77" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">ge (geschlossen)</text>
|
||||
<text x="660.0" y="77" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">le (geschlossen)</text>
|
||||
<text x="60" y="141" font-size="12" fill="#444" font-style="italic">Beide Grenzen sind inklusive Teil des Ergebnisses -- klassischer 'Jahresbereich'.</text>
|
||||
<text x="60" y="186" font-size="15" font-weight="700" fill="#111">Offenes Intervall (exklusiv)</text>
|
||||
<text x="940" y="186" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt2023-01-01&date=lt2023-12-31</text>
|
||||
<rect x="340.0" y="221" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="231" x2="940" y2="231" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,231 932,226 932,236" fill="#333"/>
|
||||
<line x1="340.0" y1="215" x2="340.0" y2="247" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="660.0" y1="215" x2="660.0" y2="247" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<text x="340.0" y="207" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">gt (offen)</text>
|
||||
<text x="660.0" y="207" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">lt (offen)</text>
|
||||
<text x="60" y="271" font-size="12" fill="#444" font-style="italic">Randwerte selbst sind ausgeschlossen -- enger als ge/le.</text>
|
||||
<text x="60" y="316" font-size="15" font-weight="700" fill="#111">Strikt getrennter Bereich (sa + eb)</text>
|
||||
<text x="940" y="316" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa2023-01-01&date=eb2023-12-31</text>
|
||||
<rect x="340.0" y="351" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="361" x2="940" y2="361" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,361 932,356 932,366" fill="#333"/>
|
||||
<line x1="340.0" y1="345" x2="340.0" y2="377" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="660.0" y1="345" x2="660.0" y2="377" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<text x="340.0" y="337" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">sa (offen)</text>
|
||||
<text x="660.0" y="337" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">eb (offen)</text>
|
||||
<text x="60" y="401" font-size="12" fill="#444" font-style="italic">Nur fuer Perioden/Ranges relevant: Resource-Range muss vollstaendig NACH dem 1. und vollstaendig VOR dem 2. Wert liegen.</text>
|
||||
<text x="60" y="446" font-size="15" font-weight="700" fill="#111">Untere Grenze + oberer Ausschluss</text>
|
||||
<text x="940" y="446" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-06-01&date=lt2023-07-01</text>
|
||||
<rect x="340.0" y="481" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="491" x2="940" y2="491" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,491 932,486 932,496" fill="#333"/>
|
||||
<line x1="340.0" y1="475" x2="340.0" y2="507" stroke="#2e7d32" stroke-width="3" />
|
||||
<line x1="660.0" y1="475" x2="660.0" y2="507" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<text x="340.0" y="467" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">ge (geschlossen)</text>
|
||||
<text x="660.0" y="467" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">lt (offen)</text>
|
||||
<text x="60" y="531" font-size="12" fill="#444" font-style="italic">Typisches Muster fuer 'genau ein Monat' bei Timestamp-Feldern: [start, ende).</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,56 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="586" viewBox="0 0 1000 586" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[stroke="#2e7d32"] { stroke: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="15" fill="#555" text-anchor="middle">Multiple date parameters in the same query are combined with AND and define a range</text>
|
||||
<text x="60" y="56" font-size="15" font-weight="700" fill="#111">Closed interval (inclusive)</text>
|
||||
<text x="940" y="56" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-01-01&date=le2023-12-31</text>
|
||||
<rect x="340.0" y="91" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="101" x2="940" y2="101" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,101 932,96 932,106" fill="#333"/>
|
||||
<line x1="340.0" y1="85" x2="340.0" y2="117" stroke="#2e7d32" stroke-width="3" />
|
||||
<line x1="660.0" y1="85" x2="660.0" y2="117" stroke="#2e7d32" stroke-width="3" />
|
||||
<text x="340.0" y="77" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">ge (closed)</text>
|
||||
<text x="660.0" y="77" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">le (closed)</text>
|
||||
<text x="60" y="141" font-size="12" fill="#444" font-style="italic">Both boundaries are inclusively part of the result -- the classic 'year range'.</text>
|
||||
<text x="60" y="186" font-size="15" font-weight="700" fill="#111">Open interval (exclusive)</text>
|
||||
<text x="940" y="186" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt2023-01-01&date=lt2023-12-31</text>
|
||||
<rect x="340.0" y="221" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="231" x2="940" y2="231" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,231 932,226 932,236" fill="#333"/>
|
||||
<line x1="340.0" y1="215" x2="340.0" y2="247" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="660.0" y1="215" x2="660.0" y2="247" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<text x="340.0" y="207" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">gt (open)</text>
|
||||
<text x="660.0" y="207" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">lt (open)</text>
|
||||
<text x="60" y="271" font-size="12" fill="#444" font-style="italic">The boundary values themselves are excluded -- narrower than ge/le.</text>
|
||||
<text x="60" y="316" font-size="15" font-weight="700" fill="#111">Strictly separated range (sa + eb)</text>
|
||||
<text x="940" y="316" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa2023-01-01&date=eb2023-12-31</text>
|
||||
<rect x="340.0" y="351" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="361" x2="940" y2="361" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,361 932,356 932,366" fill="#333"/>
|
||||
<line x1="340.0" y1="345" x2="340.0" y2="377" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<line x1="660.0" y1="345" x2="660.0" y2="377" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<text x="340.0" y="337" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">sa (open)</text>
|
||||
<text x="660.0" y="337" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">eb (open)</text>
|
||||
<text x="60" y="401" font-size="12" fill="#444" font-style="italic">Only relevant for Period/Range values: the resource range must lie entirely AFTER the 1st and entirely BEFORE the 2nd value.</text>
|
||||
<text x="60" y="446" font-size="15" font-weight="700" fill="#111">Lower bound + upper exclusion</text>
|
||||
<text x="940" y="446" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-06-01&date=lt2023-07-01</text>
|
||||
<rect x="340.0" y="481" width="320.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="491" x2="940" y2="491" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,491 932,486 932,496" fill="#333"/>
|
||||
<line x1="340.0" y1="475" x2="340.0" y2="507" stroke="#2e7d32" stroke-width="3" />
|
||||
<line x1="660.0" y1="475" x2="660.0" y2="507" stroke="#2e7d32" stroke-width="3" stroke-dasharray="4,4"/>
|
||||
<text x="340.0" y="467" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">ge (closed)</text>
|
||||
<text x="660.0" y="467" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">lt (open)</text>
|
||||
<text x="60" y="531" font-size="12" fill="#444" font-style="italic">Typical pattern for 'exactly one month' on timestamp fields: [start, end).</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,71 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="846" viewBox="0 0 1000 846" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#ffffff"] { fill: #121212; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
[fill="#f9a825"] { fill: #ffca28; }
|
||||
[stroke="#f9a825"] { stroke: #ffca28; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="14" fill="#555" text-anchor="middle">Redundante, widerspruechliche und ungewoehnliche, aber spec-konforme Kombinationen</text>
|
||||
<rect x="60" y="32" width="170" height="20" rx="4" fill="#f9a825" opacity="0.15"/>
|
||||
<text x="145" y="46" font-size="11" font-weight="700" fill="#f9a825" text-anchor="middle">REDUNDANT</text>
|
||||
<text x="60" y="68" font-size="15" font-weight="700" fill="#111">Redundant: eq + Grenzwert</text>
|
||||
<text x="940" y="68" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eq2023-06-15&date=ge2020-01-01</text>
|
||||
<line x1="60" y1="92" x2="940" y2="92" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,92 932,87 932,97" fill="#333"/>
|
||||
<rect x="400.0" y="82" width="200" height="20" fill="#f9a825" opacity="0.25"/>
|
||||
<line x1="600.0" y1="76" x2="600.0" y2="108" stroke="#f9a825" stroke-width="3"/>
|
||||
<text x="60" y="152" font-size="12.5" fill="#444" font-style="italic">eq2023-06-15 deckt bereits ein volles Intervall ab; die zusaetzliche ge-Bedingung aendert nichts, da 2023 > 2020 ohnehin erfuellt ist.</text>
|
||||
<rect x="60" y="162" width="170" height="20" rx="4" fill="#c62828" opacity="0.15"/>
|
||||
<text x="145" y="176" font-size="11" font-weight="700" fill="#c62828" text-anchor="middle">LEERES ERGEBNIS</text>
|
||||
<text x="60" y="198" font-size="15" font-weight="700" fill="#111">Widerspruch: eq + ne auf denselben Wert</text>
|
||||
<text x="940" y="198" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eq2023-06-15&date=ne2023-06-15</text>
|
||||
<line x1="60" y1="222" x2="940" y2="222" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,222 932,217 932,227" fill="#333"/>
|
||||
<line x1="485.0" y1="207" x2="515.0" y2="237" stroke="#c62828" stroke-width="4"/>
|
||||
<line x1="485.0" y1="237" x2="515.0" y2="207" stroke="#c62828" stroke-width="4"/>
|
||||
<text x="60" y="282" font-size="12.5" fill="#444" font-style="italic">eq verlangt Enthaltensein, ne verlangt Nicht-Enthaltensein im selben Intervall -> IMMER leeres Ergebnis.</text>
|
||||
<rect x="60" y="292" width="170" height="20" rx="4" fill="#c62828" opacity="0.15"/>
|
||||
<text x="145" y="306" font-size="11" font-weight="700" fill="#c62828" text-anchor="middle">LEERES ERGEBNIS</text>
|
||||
<text x="60" y="328" font-size="15" font-weight="700" fill="#111">Widerspruch: sich ausschliessende Grenzen</text>
|
||||
<text x="940" y="328" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-06-01&date=le2023-01-01</text>
|
||||
<line x1="60" y1="352" x2="940" y2="352" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,352 932,347 932,357" fill="#333"/>
|
||||
<line x1="485.0" y1="337" x2="515.0" y2="367" stroke="#c62828" stroke-width="4"/>
|
||||
<line x1="485.0" y1="367" x2="515.0" y2="337" stroke="#c62828" stroke-width="4"/>
|
||||
<text x="60" y="412" font-size="12.5" fill="#444" font-style="italic">Untergrenze liegt NACH der Obergrenze -> kein Datum kann beide Bedingungen erfuellen -> leeres Ergebnis.</text>
|
||||
<rect x="60" y="422" width="170" height="20" rx="4" fill="#f9a825" opacity="0.15"/>
|
||||
<text x="145" y="436" font-size="11" font-weight="700" fill="#f9a825" text-anchor="middle">REDUNDANT</text>
|
||||
<text x="60" y="458" font-size="15" font-weight="700" fill="#111">Redundant: gleicher Praefix doppelt</text>
|
||||
<text x="940" y="458" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2020-01-01&date=ge2023-01-01</text>
|
||||
<line x1="60" y1="482" x2="940" y2="482" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,482 932,477 932,487" fill="#333"/>
|
||||
<rect x="400.0" y="472" width="200" height="20" fill="#f9a825" opacity="0.25"/>
|
||||
<line x1="600.0" y1="466" x2="600.0" y2="498" stroke="#f9a825" stroke-width="3"/>
|
||||
<text x="60" y="542" font-size="12.5" fill="#444" font-style="italic">Beide Bedingungen sind vom Typ ge; nur die strengere (spaetere) Untergrenze 2023 ist effektiv wirksam.</text>
|
||||
<rect x="60" y="552" width="170" height="20" rx="4" fill="#6a1b9a" opacity="0.15"/>
|
||||
<text x="145" y="566" font-size="11" font-weight="700" fill="#6a1b9a" text-anchor="middle">SONDERFALL</text>
|
||||
<text x="60" y="588" font-size="15" font-weight="700" fill="#111">Sonderfall: drei Parameter (Ausschluss einer Teilspanne)</text>
|
||||
<text x="940" y="588" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-01-01&date=le2023-12-31&date=ne2023-06-15</text>
|
||||
<line x1="60" y1="612" x2="940" y2="612" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,612 932,607 932,617" fill="#333"/>
|
||||
<rect x="380.0" y="602" width="240" height="20" fill="#6a1b9a" opacity="0.2"/>
|
||||
<rect x="492.0" y="602" width="16" height="20" fill="#ffffff"/>
|
||||
<text x="60" y="672" font-size="12.5" fill="#444" font-style="italic">Spec-konform: Jahresbereich, aus dem zusaetzlich ein einzelner Tag per ne ausgeschlossen wird.</text>
|
||||
<rect x="60" y="682" width="170" height="20" rx="4" fill="#6a1b9a" opacity="0.15"/>
|
||||
<text x="145" y="696" font-size="11" font-weight="700" fill="#6a1b9a" text-anchor="middle">SONDERFALL</text>
|
||||
<text x="60" y="718" font-size="15" font-weight="700" fill="#111">Sonderfall: ap kombiniert mit Grenze</text>
|
||||
<text x="940" y="718" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ap2023-06-15&date=ge2023-01-01</text>
|
||||
<line x1="60" y1="742" x2="940" y2="742" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,742 932,737 932,747" fill="#333"/>
|
||||
<rect x="380.0" y="732" width="240" height="20" fill="#6a1b9a" opacity="0.2"/>
|
||||
<text x="60" y="802" font-size="12.5" fill="#444" font-style="italic">Selten verwendet: unscharfe Naeherung zusaetzlich auf einen Mindestwert eingeschraenkt (Toleranz ist serverabhaengig).</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1,71 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="846" viewBox="0 0 1000 846" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#ffffff"] { fill: #121212; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
[fill="#f9a825"] { fill: #ffca28; }
|
||||
[stroke="#f9a825"] { stroke: #ffca28; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="14" fill="#555" text-anchor="middle">Redundant, contradictory, and unusual but spec-compliant combinations</text>
|
||||
<rect x="60" y="32" width="170" height="20" rx="4" fill="#f9a825" opacity="0.15"/>
|
||||
<text x="145" y="46" font-size="11" font-weight="700" fill="#f9a825" text-anchor="middle">REDUNDANT</text>
|
||||
<text x="60" y="68" font-size="15" font-weight="700" fill="#111">Redundant: eq + boundary</text>
|
||||
<text x="940" y="68" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eq2023-06-15&date=ge2020-01-01</text>
|
||||
<line x1="60" y1="92" x2="940" y2="92" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,92 932,87 932,97" fill="#333"/>
|
||||
<rect x="400.0" y="82" width="200" height="20" fill="#f9a825" opacity="0.25"/>
|
||||
<line x1="600.0" y1="76" x2="600.0" y2="108" stroke="#f9a825" stroke-width="3"/>
|
||||
<text x="60" y="152" font-size="12.5" fill="#444" font-style="italic">eq2023-06-15 already covers a full interval; the additional ge condition changes nothing, since 2023 > 2020 is satisfied anyway.</text>
|
||||
<rect x="60" y="162" width="170" height="20" rx="4" fill="#c62828" opacity="0.15"/>
|
||||
<text x="145" y="176" font-size="11" font-weight="700" fill="#c62828" text-anchor="middle">EMPTY RESULT</text>
|
||||
<text x="60" y="198" font-size="15" font-weight="700" fill="#111">Contradiction: eq + ne on the same value</text>
|
||||
<text x="940" y="198" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=eq2023-06-15&date=ne2023-06-15</text>
|
||||
<line x1="60" y1="222" x2="940" y2="222" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,222 932,217 932,227" fill="#333"/>
|
||||
<line x1="485.0" y1="207" x2="515.0" y2="237" stroke="#c62828" stroke-width="4"/>
|
||||
<line x1="485.0" y1="237" x2="515.0" y2="207" stroke="#c62828" stroke-width="4"/>
|
||||
<text x="60" y="282" font-size="12.5" fill="#444" font-style="italic">eq requires containment, ne requires non-containment in the same interval -> ALWAYS an empty result.</text>
|
||||
<rect x="60" y="292" width="170" height="20" rx="4" fill="#c62828" opacity="0.15"/>
|
||||
<text x="145" y="306" font-size="11" font-weight="700" fill="#c62828" text-anchor="middle">EMPTY RESULT</text>
|
||||
<text x="60" y="328" font-size="15" font-weight="700" fill="#111">Contradiction: mutually exclusive bounds</text>
|
||||
<text x="940" y="328" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-06-01&date=le2023-01-01</text>
|
||||
<line x1="60" y1="352" x2="940" y2="352" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,352 932,347 932,357" fill="#333"/>
|
||||
<line x1="485.0" y1="337" x2="515.0" y2="367" stroke="#c62828" stroke-width="4"/>
|
||||
<line x1="485.0" y1="367" x2="515.0" y2="337" stroke="#c62828" stroke-width="4"/>
|
||||
<text x="60" y="412" font-size="12.5" fill="#444" font-style="italic">Lower bound lies AFTER the upper bound -> no date can satisfy both conditions -> empty result.</text>
|
||||
<rect x="60" y="422" width="170" height="20" rx="4" fill="#f9a825" opacity="0.15"/>
|
||||
<text x="145" y="436" font-size="11" font-weight="700" fill="#f9a825" text-anchor="middle">REDUNDANT</text>
|
||||
<text x="60" y="458" font-size="15" font-weight="700" fill="#111">Redundant: same prefix twice</text>
|
||||
<text x="940" y="458" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2020-01-01&date=ge2023-01-01</text>
|
||||
<line x1="60" y1="482" x2="940" y2="482" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,482 932,477 932,487" fill="#333"/>
|
||||
<rect x="400.0" y="472" width="200" height="20" fill="#f9a825" opacity="0.25"/>
|
||||
<line x1="600.0" y1="466" x2="600.0" y2="498" stroke="#f9a825" stroke-width="3"/>
|
||||
<text x="60" y="542" font-size="12.5" fill="#444" font-style="italic">Both conditions are of type ge; only the stricter (later) lower bound 2023 is effectively in force.</text>
|
||||
<rect x="60" y="552" width="170" height="20" rx="4" fill="#6a1b9a" opacity="0.15"/>
|
||||
<text x="145" y="566" font-size="11" font-weight="700" fill="#6a1b9a" text-anchor="middle">SPECIAL CASE</text>
|
||||
<text x="60" y="588" font-size="15" font-weight="700" fill="#111">Special case: three parameters (excluding a sub-range)</text>
|
||||
<text x="940" y="588" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge2023-01-01&date=le2023-12-31&date=ne2023-06-15</text>
|
||||
<line x1="60" y1="612" x2="940" y2="612" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,612 932,607 932,617" fill="#333"/>
|
||||
<rect x="380.0" y="602" width="240" height="20" fill="#6a1b9a" opacity="0.2"/>
|
||||
<rect x="492.0" y="602" width="16" height="20" fill="#ffffff"/>
|
||||
<text x="60" y="672" font-size="12.5" fill="#444" font-style="italic">Spec-compliant: a year range from which a single day is additionally excluded via ne.</text>
|
||||
<rect x="60" y="682" width="170" height="20" rx="4" fill="#6a1b9a" opacity="0.15"/>
|
||||
<text x="145" y="696" font-size="11" font-weight="700" fill="#6a1b9a" text-anchor="middle">SPECIAL CASE</text>
|
||||
<text x="60" y="718" font-size="15" font-weight="700" fill="#111">Special case: ap combined with a boundary</text>
|
||||
<text x="940" y="718" font-size="12.5" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ap2023-06-15&date=ge2023-01-01</text>
|
||||
<line x1="60" y1="742" x2="940" y2="742" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,742 932,737 932,747" fill="#333"/>
|
||||
<rect x="380.0" y="732" width="240" height="20" fill="#6a1b9a" opacity="0.2"/>
|
||||
<text x="60" y="802" font-size="12.5" fill="#444" font-style="italic">Rarely used: a fuzzy approximation additionally constrained to a minimum value (tolerance is server-dependent).</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
@@ -0,0 +1,92 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1100" height="590" viewBox="0 0 1100 590" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#fafafa"] { fill: #2a2a2a; }
|
||||
[stroke="#ddd"] { stroke: #484848; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
}
|
||||
</style>
|
||||
<text x="550.0" y="24" font-size="14" fill="#555" text-anchor="middle">Jede Zelle = eine gueltige Kombination aus zwei date-Parametern (z.B. date=ge...&date=le...)</text>
|
||||
<text x="380.0" y="65" font-size="16" font-weight="700" fill="#1565c0" text-anchor="middle">le</text>
|
||||
<text x="380.0" y="82" font-size="11" fill="#1565c0" text-anchor="middle">≤ (bis einschl.)</text>
|
||||
<text x="700.0" y="65" font-size="16" font-weight="700" fill="#1565c0" text-anchor="middle">lt</text>
|
||||
<text x="700.0" y="82" font-size="11" fill="#1565c0" text-anchor="middle">< (davor)</text>
|
||||
<text x="1020.0" y="65" font-size="16" font-weight="700" fill="#1565c0" text-anchor="middle">eb</text>
|
||||
<text x="1020.0" y="82" font-size="11" fill="#1565c0" text-anchor="middle">ends before (strikt davor)</text>
|
||||
<text x="200" y="159.0" font-size="16" font-weight="700" fill="#2e7d32" text-anchor="end">ge</text>
|
||||
<text x="200" y="177.0" font-size="11" fill="#2e7d32" text-anchor="end">≥ (ab einschl.)</text>
|
||||
<text x="200" y="309.0" font-size="16" font-weight="700" fill="#2e7d32" text-anchor="end">gt</text>
|
||||
<text x="200" y="327.0" font-size="11" fill="#2e7d32" text-anchor="end">> (danach)</text>
|
||||
<text x="200" y="459.0" font-size="16" font-weight="700" fill="#2e7d32" text-anchor="end">sa</text>
|
||||
<text x="200" y="477.0" font-size="11" fill="#2e7d32" text-anchor="end">starts after (strikt danach)</text>
|
||||
<rect x="226" y="96" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="341.6" y="174.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="240" y1="183.0" x2="520" y2="183.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="341.6" y1="170.0" x2="341.6" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<line x1="418.4" y1="170.0" x2="418.4" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<text x="380.0" y="226" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge...&date=le...</text>
|
||||
<text x="380.0" y="210" font-size="11" fill="#555" text-anchor="middle">geschl. / geschl.</text>
|
||||
<rect x="546" y="96" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="661.6" y="174.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="560" y1="183.0" x2="840" y2="183.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="661.6" y1="170.0" x2="661.6" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<line x1="738.4" y1="170.0" x2="738.4" y2="196.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="700.0" y="226" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge...&date=lt...</text>
|
||||
<text x="700.0" y="210" font-size="11" fill="#555" text-anchor="middle">geschl. / offen</text>
|
||||
<rect x="866" y="96" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="981.6" y="174.0" width="76.80000000000007" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="880" y1="183.0" x2="1160" y2="183.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="981.6" y1="170.0" x2="981.6" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<line x1="1058.4" y1="170.0" x2="1058.4" y2="196.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="1020.0" y="226" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge...&date=eb...</text>
|
||||
<text x="1020.0" y="210" font-size="11" fill="#555" text-anchor="middle">geschl. / offen</text>
|
||||
<rect x="226" y="246" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="341.6" y="324.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="240" y1="333.0" x2="520" y2="333.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="341.6" y1="320.0" x2="341.6" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="418.4" y1="320.0" x2="418.4" y2="346.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<text x="380.0" y="376" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt...&date=le...</text>
|
||||
<text x="380.0" y="360" font-size="11" fill="#555" text-anchor="middle">offen / geschl.</text>
|
||||
<rect x="546" y="246" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="661.6" y="324.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="560" y1="333.0" x2="840" y2="333.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="661.6" y1="320.0" x2="661.6" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="738.4" y1="320.0" x2="738.4" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="700.0" y="376" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt...&date=lt...</text>
|
||||
<text x="700.0" y="360" font-size="11" fill="#555" text-anchor="middle">offen / offen</text>
|
||||
<rect x="866" y="246" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="981.6" y="324.0" width="76.80000000000007" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="880" y1="333.0" x2="1160" y2="333.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="981.6" y1="320.0" x2="981.6" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="1058.4" y1="320.0" x2="1058.4" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="1020.0" y="376" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt...&date=eb...</text>
|
||||
<text x="1020.0" y="360" font-size="11" fill="#555" text-anchor="middle">offen / offen</text>
|
||||
<rect x="226" y="396" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="341.6" y="474.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="240" y1="483.0" x2="520" y2="483.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="341.6" y1="470.0" x2="341.6" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="418.4" y1="470.0" x2="418.4" y2="496.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<text x="380.0" y="526" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa...&date=le...</text>
|
||||
<text x="380.0" y="510" font-size="11" fill="#555" text-anchor="middle">offen / geschl.</text>
|
||||
<rect x="546" y="396" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="661.6" y="474.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="560" y1="483.0" x2="840" y2="483.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="661.6" y1="470.0" x2="661.6" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="738.4" y1="470.0" x2="738.4" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="700.0" y="526" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa...&date=lt...</text>
|
||||
<text x="700.0" y="510" font-size="11" fill="#555" text-anchor="middle">offen / offen</text>
|
||||
<rect x="866" y="396" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="981.6" y="474.0" width="76.80000000000007" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="880" y1="483.0" x2="1160" y2="483.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="981.6" y1="470.0" x2="981.6" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="1058.4" y1="470.0" x2="1058.4" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="1020.0" y="526" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa...&date=eb...</text>
|
||||
<text x="1020.0" y="510" font-size="11" fill="#555" text-anchor="middle">offen / offen</text>
|
||||
<text x="220" y="572" font-size="12" fill="#444" font-style="italic">Gestrichelte Grenze = exklusiv (Wert selbst nicht im Treffer) | Durchgezogene Grenze = inklusiv</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
@@ -0,0 +1,92 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1100" height="590" viewBox="0 0 1100 590" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#fafafa"] { fill: #2a2a2a; }
|
||||
[stroke="#ddd"] { stroke: #484848; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
}
|
||||
</style>
|
||||
<text x="550.0" y="24" font-size="14" fill="#555" text-anchor="middle">Each cell = a valid combination of two date parameters (e.g. date=ge...&date=le...)</text>
|
||||
<text x="380.0" y="65" font-size="16" font-weight="700" fill="#1565c0" text-anchor="middle">le</text>
|
||||
<text x="380.0" y="82" font-size="11" fill="#1565c0" text-anchor="middle">≤ (until, incl.)</text>
|
||||
<text x="700.0" y="65" font-size="16" font-weight="700" fill="#1565c0" text-anchor="middle">lt</text>
|
||||
<text x="700.0" y="82" font-size="11" fill="#1565c0" text-anchor="middle">< (before)</text>
|
||||
<text x="1020.0" y="65" font-size="16" font-weight="700" fill="#1565c0" text-anchor="middle">eb</text>
|
||||
<text x="1020.0" y="82" font-size="11" fill="#1565c0" text-anchor="middle">ends before (strictly before)</text>
|
||||
<text x="200" y="159.0" font-size="16" font-weight="700" fill="#2e7d32" text-anchor="end">ge</text>
|
||||
<text x="200" y="177.0" font-size="11" fill="#2e7d32" text-anchor="end">≥ (from, incl.)</text>
|
||||
<text x="200" y="309.0" font-size="16" font-weight="700" fill="#2e7d32" text-anchor="end">gt</text>
|
||||
<text x="200" y="327.0" font-size="11" fill="#2e7d32" text-anchor="end">> (after)</text>
|
||||
<text x="200" y="459.0" font-size="16" font-weight="700" fill="#2e7d32" text-anchor="end">sa</text>
|
||||
<text x="200" y="477.0" font-size="11" fill="#2e7d32" text-anchor="end">starts after (strictly after)</text>
|
||||
<rect x="226" y="96" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="341.6" y="174.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="240" y1="183.0" x2="520" y2="183.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="341.6" y1="170.0" x2="341.6" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<line x1="418.4" y1="170.0" x2="418.4" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<text x="380.0" y="226" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge...&date=le...</text>
|
||||
<text x="380.0" y="210" font-size="11" fill="#555" text-anchor="middle">closed / closed</text>
|
||||
<rect x="546" y="96" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="661.6" y="174.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="560" y1="183.0" x2="840" y2="183.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="661.6" y1="170.0" x2="661.6" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<line x1="738.4" y1="170.0" x2="738.4" y2="196.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="700.0" y="226" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge...&date=lt...</text>
|
||||
<text x="700.0" y="210" font-size="11" fill="#555" text-anchor="middle">closed / open</text>
|
||||
<rect x="866" y="96" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="981.6" y="174.0" width="76.80000000000007" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="880" y1="183.0" x2="1160" y2="183.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="981.6" y1="170.0" x2="981.6" y2="196.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<line x1="1058.4" y1="170.0" x2="1058.4" y2="196.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="1020.0" y="226" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=ge...&date=eb...</text>
|
||||
<text x="1020.0" y="210" font-size="11" fill="#555" text-anchor="middle">closed / open</text>
|
||||
<rect x="226" y="246" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="341.6" y="324.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="240" y1="333.0" x2="520" y2="333.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="341.6" y1="320.0" x2="341.6" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="418.4" y1="320.0" x2="418.4" y2="346.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<text x="380.0" y="376" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt...&date=le...</text>
|
||||
<text x="380.0" y="360" font-size="11" fill="#555" text-anchor="middle">open / closed</text>
|
||||
<rect x="546" y="246" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="661.6" y="324.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="560" y1="333.0" x2="840" y2="333.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="661.6" y1="320.0" x2="661.6" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="738.4" y1="320.0" x2="738.4" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="700.0" y="376" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt...&date=lt...</text>
|
||||
<text x="700.0" y="360" font-size="11" fill="#555" text-anchor="middle">open / open</text>
|
||||
<rect x="866" y="246" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="981.6" y="324.0" width="76.80000000000007" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="880" y1="333.0" x2="1160" y2="333.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="981.6" y1="320.0" x2="981.6" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="1058.4" y1="320.0" x2="1058.4" y2="346.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="1020.0" y="376" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=gt...&date=eb...</text>
|
||||
<text x="1020.0" y="360" font-size="11" fill="#555" text-anchor="middle">open / open</text>
|
||||
<rect x="226" y="396" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="341.6" y="474.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="240" y1="483.0" x2="520" y2="483.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="341.6" y1="470.0" x2="341.6" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="418.4" y1="470.0" x2="418.4" y2="496.0" stroke="#c62828" stroke-width="2.5" />
|
||||
<text x="380.0" y="526" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa...&date=le...</text>
|
||||
<text x="380.0" y="510" font-size="11" fill="#555" text-anchor="middle">open / closed</text>
|
||||
<rect x="546" y="396" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="661.6" y="474.0" width="76.79999999999995" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="560" y1="483.0" x2="840" y2="483.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="661.6" y1="470.0" x2="661.6" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="738.4" y1="470.0" x2="738.4" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="700.0" y="526" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa...&date=lt...</text>
|
||||
<text x="700.0" y="510" font-size="11" fill="#555" text-anchor="middle">open / open</text>
|
||||
<rect x="866" y="396" width="308" height="138" fill="#fafafa" stroke="#ddd" stroke-width="1" rx="6"/>
|
||||
<rect x="981.6" y="474.0" width="76.80000000000007" height="18" fill="#2e7d32" opacity="0.25"/>
|
||||
<line x1="880" y1="483.0" x2="1160" y2="483.0" stroke="#333" stroke-width="1.5"/>
|
||||
<line x1="981.6" y1="470.0" x2="981.6" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<line x1="1058.4" y1="470.0" x2="1058.4" y2="496.0" stroke="#c62828" stroke-width="2.5" stroke-dasharray="4,3"/>
|
||||
<text x="1020.0" y="526" font-size="11.5" fill="#6a1b9a" text-anchor="middle" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=sa...&date=eb...</text>
|
||||
<text x="1020.0" y="510" font-size="11" fill="#555" text-anchor="middle">open / open</text>
|
||||
<text x="220" y="572" font-size="12" fill="#444" font-style="italic">Dashed boundary = exclusive (value itself not included) | Solid boundary = inclusive</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.1 KiB |
@@ -0,0 +1,40 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="286" viewBox="0 0 1000 286" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#888"] { fill: #b0b0b0; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="15" fill="#555" text-anchor="middle">Ohne Praefix wird 'eq' angenommen -- die Genauigkeit (Precision) des Suchwerts bestimmt das Intervall</text>
|
||||
<text x="60" y="64" font-size="15" font-weight="700" fill="#111">Suchwert mit Tages-Genauigkeit</text>
|
||||
<text x="940" y="64" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=2023-06-15</text>
|
||||
<rect x="475.0" y="91" width="50.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="101" x2="940" y2="101" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,101 932,96 932,106" fill="#333"/>
|
||||
<text x="940" y="129" font-size="11" fill="#888" text-anchor="end">Zukunft →</text>
|
||||
<text x="60" y="129" font-size="11" fill="#888" text-anchor="start">← Vergangenheit</text>
|
||||
<line x1="500.0" y1="77" x2="500.0" y2="125" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="101" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="71" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="147" font-size="12" fill="#444" font-style="italic">Intervall = genau dieser Tag (00:00-24:00). Resource-Datum muss vollstaendig in diesem Intervall liegen.</text>
|
||||
<text x="60" y="174" font-size="15" font-weight="700" fill="#111">Suchwert mit Monats-Genauigkeit</text>
|
||||
<text x="940" y="174" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=2023-06</text>
|
||||
<rect x="410.0" y="201" width="180.0" height="20" fill="#1565c0" opacity="0.22"/>
|
||||
<line x1="60" y1="211" x2="940" y2="211" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,211 932,206 932,216" fill="#333"/>
|
||||
<text x="940" y="239" font-size="11" fill="#888" text-anchor="end">Zukunft →</text>
|
||||
<text x="60" y="239" font-size="11" fill="#888" text-anchor="start">← Vergangenheit</text>
|
||||
<line x1="500.0" y1="187" x2="500.0" y2="235" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="211" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="181" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">Juni 2023</text>
|
||||
<text x="60" y="257" font-size="12" fill="#444" font-style="italic">Intervall = ganzer Monat (2023-06-01 00:00 bis 2023-07-01 00:00). Je groeber die Precision, desto breiter das Intervall.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,40 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="286" viewBox="0 0 1000 286" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#888"] { fill: #b0b0b0; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[stroke="#c62828"] { stroke: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
[fill="#6a1b9a"] { fill: #ba68c8; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="15" fill="#555" text-anchor="middle">Without a prefix, 'eq' is assumed -- the precision of the search value determines the interval</text>
|
||||
<text x="60" y="64" font-size="15" font-weight="700" fill="#111">Search value with day precision</text>
|
||||
<text x="940" y="64" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=2023-06-15</text>
|
||||
<rect x="475.0" y="91" width="50.0" height="20" fill="#2e7d32" opacity="0.22"/>
|
||||
<line x1="60" y1="101" x2="940" y2="101" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,101 932,96 932,106" fill="#333"/>
|
||||
<text x="940" y="129" font-size="11" fill="#888" text-anchor="end">Future →</text>
|
||||
<text x="60" y="129" font-size="11" fill="#888" text-anchor="start">← Past</text>
|
||||
<line x1="500.0" y1="77" x2="500.0" y2="125" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="101" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="71" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">2023-06-15</text>
|
||||
<text x="60" y="147" font-size="12" fill="#444" font-style="italic">Interval = exactly this day (00:00-24:00). The resource date must lie fully within this interval.</text>
|
||||
<text x="60" y="174" font-size="15" font-weight="700" fill="#111">Search value with month precision</text>
|
||||
<text x="940" y="174" font-size="13" fill="#6a1b9a" text-anchor="end" font-family="Latin Modern Mono, CMU Typewriter Text, Computer Modern Typewriter, Consolas, Menlo, monospace">date=2023-06</text>
|
||||
<rect x="410.0" y="201" width="180.0" height="20" fill="#1565c0" opacity="0.22"/>
|
||||
<line x1="60" y1="211" x2="940" y2="211" stroke="#333" stroke-width="2"/>
|
||||
<polygon points="940,211 932,206 932,216" fill="#333"/>
|
||||
<text x="940" y="239" font-size="11" fill="#888" text-anchor="end">Future →</text>
|
||||
<text x="60" y="239" font-size="11" fill="#888" text-anchor="start">← Past</text>
|
||||
<line x1="500.0" y1="187" x2="500.0" y2="235" stroke="#c62828" stroke-width="2" stroke-dasharray="5,3"/>
|
||||
<circle cx="500.0" cy="211" r="4.5" fill="#c62828"/>
|
||||
<text x="500.0" y="181" font-size="12" fill="#c62828" text-anchor="middle" font-weight="600">June 2023</text>
|
||||
<text x="60" y="257" font-size="12" fill="#444" font-style="italic">Interval = entire month (2023-06-01 00:00 to 2023-07-01 00:00). The coarser the precision, the wider the interval.</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,111 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1160" height="754" viewBox="0 0 1160 754" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#777"] { fill: #aeaeae; }
|
||||
[stroke="#eee"] { stroke: #3a3a3a; }
|
||||
[stroke="#ffffff"] { stroke: #121212; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
}
|
||||
</style>
|
||||
<text x="550.0" y="24" font-size="14" fill="#555" text-anchor="middle">Fehlender Start = -unendlich | Fehlendes Ende = +unendlich | Pfeilspitze = offenes Ende</text>
|
||||
<text x="550.0" y="44" font-size="12.5" fill="#777" text-anchor="middle">Suchwert: date=&lt;praefix&gt;2023-06-15 | Gruen = Treffer, Rot = kein Treffer</text>
|
||||
<text x="30" y="74" font-size="20" font-weight="700" fill="#111">gt</text>
|
||||
<text x="180" y="74" font-size="12.5" fill="#555">Fehlendes Ende = +unendlich -> ueberlappt fast immer den oberen Bereich.</text>
|
||||
<rect x="700.0" y="90" width="360.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="100" x2="1060" y2="100" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,100 1053,96 1053,104" fill="#333"/>
|
||||
<line x1="700.0" y1="100" x2="700.0" y2="206" stroke="#333" stroke-width="2" />
|
||||
<text x="700.0" y="90" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="660.0" y="118" width="364.0" height="16" fill="#2e7d32"/>
|
||||
<rect x="660.0" y="118" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<polygon points="1040,126 1024,118 1024,134" fill="#2e7d32"/>
|
||||
<text x="246" y="130" font-size="11.5" fill="#333" text-anchor="end">Period D: nur Start (laeuft noch)</text>
|
||||
<path d="M 1074 126 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="152" width="394.0" height="16" fill="#c62828"/>
|
||||
<polygon points="280,160 296,152 296,168" fill="#c62828"/>
|
||||
<rect x="680.0" y="152" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<text x="246" y="164" font-size="11.5" fill="#333" text-anchor="end">Period E: nur Ende (Start unbekannt)</text>
|
||||
<line x1="1075" y1="153" x2="1089" y2="167" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="167" x2="1089" y2="153" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="186" width="728" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,194 296,186 296,202" fill="#2e7d32"/>
|
||||
<polygon points="1040,194 1024,186 1024,202" fill="#2e7d32"/>
|
||||
<text x="246" y="198" font-size="11.5" fill="#333" text-anchor="end">Period F: weder Start noch Ende bekannt</text>
|
||||
<path d="M 1074 194 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<line x1="30" y1="214" x2="1130" y2="214" stroke="#eee" stroke-width="1"/>
|
||||
<text x="30" y="236" font-size="20" font-weight="700" fill="#111">sa</text>
|
||||
<text x="180" y="236" font-size="12.5" fill="#555">Fehlender Start = -unendlich -> kann NIE vollstaendig 'danach' liegen.</text>
|
||||
<rect x="700.0" y="252" width="360.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="262" x2="1060" y2="262" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,262 1053,258 1053,266" fill="#333"/>
|
||||
<line x1="700.0" y1="262" x2="700.0" y2="368" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="700.0" y="252" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="660.0" y="280" width="364.0" height="16" fill="#c62828"/>
|
||||
<rect x="660.0" y="280" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<polygon points="1040,288 1024,280 1024,296" fill="#c62828"/>
|
||||
<text x="246" y="292" font-size="11.5" fill="#333" text-anchor="end">Period D: nur Start (laeuft noch)</text>
|
||||
<line x1="1075" y1="281" x2="1089" y2="295" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="295" x2="1089" y2="281" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="314" width="394.0" height="16" fill="#c62828"/>
|
||||
<polygon points="280,322 296,314 296,330" fill="#c62828"/>
|
||||
<rect x="680.0" y="314" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<text x="246" y="326" font-size="11.5" fill="#333" text-anchor="end">Period E: nur Ende (Start unbekannt)</text>
|
||||
<line x1="1075" y1="315" x2="1089" y2="329" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="329" x2="1089" y2="315" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="348" width="728" height="16" fill="#c62828"/>
|
||||
<polygon points="280,356 296,348 296,364" fill="#c62828"/>
|
||||
<polygon points="1040,356 1024,348 1024,364" fill="#c62828"/>
|
||||
<text x="246" y="360" font-size="11.5" fill="#333" text-anchor="end">Period F: weder Start noch Ende bekannt</text>
|
||||
<line x1="1075" y1="349" x2="1089" y2="363" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="363" x2="1089" y2="349" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<line x1="30" y1="376" x2="1130" y2="376" stroke="#eee" stroke-width="1"/>
|
||||
<text x="30" y="398" font-size="20" font-weight="700" fill="#111">lt</text>
|
||||
<text x="180" y="398" font-size="12.5" fill="#555">Fehlender Start = -unendlich -> ueberlappt fast immer den unteren Bereich.</text>
|
||||
<rect x="260" y="414" width="440.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="424" x2="1060" y2="424" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,424 1053,420 1053,428" fill="#333"/>
|
||||
<line x1="700.0" y1="424" x2="700.0" y2="530" stroke="#333" stroke-width="2" />
|
||||
<text x="700.0" y="414" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="660.0" y="442" width="364.0" height="16" fill="#2e7d32"/>
|
||||
<rect x="660.0" y="442" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<polygon points="1040,450 1024,442 1024,458" fill="#2e7d32"/>
|
||||
<text x="246" y="454" font-size="11.5" fill="#333" text-anchor="end">Period D: nur Start (laeuft noch)</text>
|
||||
<path d="M 1074 450 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="476" width="394.0" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,484 296,476 296,492" fill="#2e7d32"/>
|
||||
<rect x="680.0" y="476" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<text x="246" y="488" font-size="11.5" fill="#333" text-anchor="end">Period E: nur Ende (Start unbekannt)</text>
|
||||
<path d="M 1074 484 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="510" width="728" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,518 296,510 296,526" fill="#2e7d32"/>
|
||||
<polygon points="1040,518 1024,510 1024,526" fill="#2e7d32"/>
|
||||
<text x="246" y="522" font-size="11.5" fill="#333" text-anchor="end">Period F: weder Start noch Ende bekannt</text>
|
||||
<path d="M 1074 518 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<line x1="30" y1="538" x2="1130" y2="538" stroke="#eee" stroke-width="1"/>
|
||||
<text x="30" y="560" font-size="20" font-weight="700" fill="#111">eb</text>
|
||||
<text x="180" y="560" font-size="12.5" fill="#555">Fehlendes Ende = +unendlich -> kann NIE vollstaendig 'davor' liegen.</text>
|
||||
<rect x="260" y="576" width="440.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="586" x2="1060" y2="586" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,586 1053,582 1053,590" fill="#333"/>
|
||||
<line x1="700.0" y1="586" x2="700.0" y2="692" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="700.0" y="576" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="660.0" y="604" width="364.0" height="16" fill="#c62828"/>
|
||||
<rect x="660.0" y="604" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<polygon points="1040,612 1024,604 1024,620" fill="#c62828"/>
|
||||
<text x="246" y="616" font-size="11.5" fill="#333" text-anchor="end">Period D: nur Start (laeuft noch)</text>
|
||||
<line x1="1075" y1="605" x2="1089" y2="619" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="619" x2="1089" y2="605" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="638" width="394.0" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,646 296,638 296,654" fill="#2e7d32"/>
|
||||
<rect x="680.0" y="638" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<text x="246" y="650" font-size="11.5" fill="#333" text-anchor="end">Period E: nur Ende (Start unbekannt)</text>
|
||||
<path d="M 1074 646 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="672" width="728" height="16" fill="#c62828"/>
|
||||
<polygon points="280,680 296,672 296,688" fill="#c62828"/>
|
||||
<polygon points="1040,680 1024,672 1024,688" fill="#c62828"/>
|
||||
<text x="246" y="684" font-size="11.5" fill="#333" text-anchor="end">Period F: weder Start noch Ende bekannt</text>
|
||||
<line x1="1075" y1="673" x2="1089" y2="687" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="687" x2="1089" y2="673" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="30" y="722" width="18" height="14" rx="3" fill="#2e7d32"/><text x="54" y="734" font-size="12.5" fill="#333">Treffer</text>
|
||||
<rect x="130" y="722" width="18" height="14" rx="3" fill="#c62828"/><text x="154" y="734" font-size="12.5" fill="#333">kein Treffer</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
@@ -0,0 +1,111 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1160" height="754" viewBox="0 0 1160 754" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[fill="#777"] { fill: #aeaeae; }
|
||||
[stroke="#eee"] { stroke: #3a3a3a; }
|
||||
[stroke="#ffffff"] { stroke: #121212; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
}
|
||||
</style>
|
||||
<text x="550.0" y="24" font-size="14" fill="#555" text-anchor="middle">Missing start = -infinity | Missing end = +infinity | Arrowhead = open end</text>
|
||||
<text x="550.0" y="44" font-size="12.5" fill="#777" text-anchor="middle">Search value: date=&lt;prefix&gt;2023-06-15 | Green = match, Red = no match</text>
|
||||
<text x="30" y="74" font-size="20" font-weight="700" fill="#111">gt</text>
|
||||
<text x="180" y="74" font-size="12.5" fill="#555">Missing end = +infinity -> almost always overlaps the upper range.</text>
|
||||
<rect x="700.0" y="90" width="360.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="100" x2="1060" y2="100" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,100 1053,96 1053,104" fill="#333"/>
|
||||
<line x1="700.0" y1="100" x2="700.0" y2="206" stroke="#333" stroke-width="2" />
|
||||
<text x="700.0" y="90" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="660.0" y="118" width="364.0" height="16" fill="#2e7d32"/>
|
||||
<rect x="660.0" y="118" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<polygon points="1040,126 1024,118 1024,134" fill="#2e7d32"/>
|
||||
<text x="246" y="130" font-size="11.5" fill="#333" text-anchor="end">Period D: start only (ongoing)</text>
|
||||
<path d="M 1074 126 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="152" width="394.0" height="16" fill="#c62828"/>
|
||||
<polygon points="280,160 296,152 296,168" fill="#c62828"/>
|
||||
<rect x="680.0" y="152" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<text x="246" y="164" font-size="11.5" fill="#333" text-anchor="end">Period E: end only (start unknown)</text>
|
||||
<line x1="1075" y1="153" x2="1089" y2="167" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="167" x2="1089" y2="153" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="186" width="728" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,194 296,186 296,202" fill="#2e7d32"/>
|
||||
<polygon points="1040,194 1024,186 1024,202" fill="#2e7d32"/>
|
||||
<text x="246" y="198" font-size="11.5" fill="#333" text-anchor="end">Period F: neither start nor end known</text>
|
||||
<path d="M 1074 194 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<line x1="30" y1="214" x2="1130" y2="214" stroke="#eee" stroke-width="1"/>
|
||||
<text x="30" y="236" font-size="20" font-weight="700" fill="#111">sa</text>
|
||||
<text x="180" y="236" font-size="12.5" fill="#555">Missing start = -infinity -> can NEVER lie entirely 'after'.</text>
|
||||
<rect x="700.0" y="252" width="360.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="262" x2="1060" y2="262" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,262 1053,258 1053,266" fill="#333"/>
|
||||
<line x1="700.0" y1="262" x2="700.0" y2="368" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="700.0" y="252" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="660.0" y="280" width="364.0" height="16" fill="#c62828"/>
|
||||
<rect x="660.0" y="280" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<polygon points="1040,288 1024,280 1024,296" fill="#c62828"/>
|
||||
<text x="246" y="292" font-size="11.5" fill="#333" text-anchor="end">Period D: start only (ongoing)</text>
|
||||
<line x1="1075" y1="281" x2="1089" y2="295" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="295" x2="1089" y2="281" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="314" width="394.0" height="16" fill="#c62828"/>
|
||||
<polygon points="280,322 296,314 296,330" fill="#c62828"/>
|
||||
<rect x="680.0" y="314" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<text x="246" y="326" font-size="11.5" fill="#333" text-anchor="end">Period E: end only (start unknown)</text>
|
||||
<line x1="1075" y1="315" x2="1089" y2="329" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="329" x2="1089" y2="315" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="348" width="728" height="16" fill="#c62828"/>
|
||||
<polygon points="280,356 296,348 296,364" fill="#c62828"/>
|
||||
<polygon points="1040,356 1024,348 1024,364" fill="#c62828"/>
|
||||
<text x="246" y="360" font-size="11.5" fill="#333" text-anchor="end">Period F: neither start nor end known</text>
|
||||
<line x1="1075" y1="349" x2="1089" y2="363" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="363" x2="1089" y2="349" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<line x1="30" y1="376" x2="1130" y2="376" stroke="#eee" stroke-width="1"/>
|
||||
<text x="30" y="398" font-size="20" font-weight="700" fill="#111">lt</text>
|
||||
<text x="180" y="398" font-size="12.5" fill="#555">Missing start = -infinity -> almost always overlaps the lower range.</text>
|
||||
<rect x="260" y="414" width="440.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="424" x2="1060" y2="424" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,424 1053,420 1053,428" fill="#333"/>
|
||||
<line x1="700.0" y1="424" x2="700.0" y2="530" stroke="#333" stroke-width="2" />
|
||||
<text x="700.0" y="414" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="660.0" y="442" width="364.0" height="16" fill="#2e7d32"/>
|
||||
<rect x="660.0" y="442" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<polygon points="1040,450 1024,442 1024,458" fill="#2e7d32"/>
|
||||
<text x="246" y="454" font-size="11.5" fill="#333" text-anchor="end">Period D: start only (ongoing)</text>
|
||||
<path d="M 1074 450 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="476" width="394.0" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,484 296,476 296,492" fill="#2e7d32"/>
|
||||
<rect x="680.0" y="476" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<text x="246" y="488" font-size="11.5" fill="#333" text-anchor="end">Period E: end only (start unknown)</text>
|
||||
<path d="M 1074 484 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="510" width="728" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,518 296,510 296,526" fill="#2e7d32"/>
|
||||
<polygon points="1040,518 1024,510 1024,526" fill="#2e7d32"/>
|
||||
<text x="246" y="522" font-size="11.5" fill="#333" text-anchor="end">Period F: neither start nor end known</text>
|
||||
<path d="M 1074 518 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<line x1="30" y1="538" x2="1130" y2="538" stroke="#eee" stroke-width="1"/>
|
||||
<text x="30" y="560" font-size="20" font-weight="700" fill="#111">eb</text>
|
||||
<text x="180" y="560" font-size="12.5" fill="#555">Missing end = +infinity -> can NEVER lie entirely 'before'.</text>
|
||||
<rect x="260" y="576" width="440.0" height="124" fill="#1565c0" opacity="0.07"/>
|
||||
<line x1="260" y1="586" x2="1060" y2="586" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="1060,586 1053,582 1053,590" fill="#333"/>
|
||||
<line x1="700.0" y1="586" x2="700.0" y2="692" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="700.0" y="576" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="660.0" y="604" width="364.0" height="16" fill="#c62828"/>
|
||||
<rect x="660.0" y="604" width="10" height="16" rx="4" fill="#c62828"/>
|
||||
<polygon points="1040,612 1024,604 1024,620" fill="#c62828"/>
|
||||
<text x="246" y="616" font-size="11.5" fill="#333" text-anchor="end">Period D: start only (ongoing)</text>
|
||||
<line x1="1075" y1="605" x2="1089" y2="619" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="619" x2="1089" y2="605" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="296" y="638" width="394.0" height="16" fill="#2e7d32"/>
|
||||
<polygon points="280,646 296,638 296,654" fill="#2e7d32"/>
|
||||
<rect x="680.0" y="638" width="10" height="16" rx="4" fill="#2e7d32"/>
|
||||
<text x="246" y="650" font-size="11.5" fill="#333" text-anchor="end">Period E: end only (start unknown)</text>
|
||||
<path d="M 1074 646 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<rect x="296" y="672" width="728" height="16" fill="#c62828"/>
|
||||
<polygon points="280,680 296,672 296,688" fill="#c62828"/>
|
||||
<polygon points="1040,680 1024,672 1024,688" fill="#c62828"/>
|
||||
<text x="246" y="684" font-size="11.5" fill="#333" text-anchor="end">Period F: neither start nor end known</text>
|
||||
<line x1="1075" y1="673" x2="1089" y2="687" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="1075" y1="687" x2="1089" y2="673" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<rect x="30" y="722" width="18" height="14" rx="3" fill="#2e7d32"/><text x="54" y="734" font-size="12.5" fill="#333">Match</text>
|
||||
<rect x="130" y="722" width="18" height="14" rx="3" fill="#c62828"/><text x="154" y="734" font-size="12.5" fill="#333">No match</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
@@ -0,0 +1,84 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="756" viewBox="0 0 1000 756" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[stroke="#eee"] { stroke: #3a3a3a; }
|
||||
[stroke="#ffffff"] { stroke: #121212; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="14" fill="#555" text-anchor="middle">Suchwert: date=&lt;praefix&gt;2023-06-15 | Gruen = Treffer, Rot = kein Treffer</text>
|
||||
<text x="60" y="56" font-size="20" font-weight="700" fill="#111">gt</text>
|
||||
<text x="60" y="76" font-size="12.5" fill="#555">Overlap genuegt: Period muss nur ueber die Grenze hinausragen.</text>
|
||||
<rect x="544.0" y="84" width="396.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="92" x2="940" y2="92" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,92 933,88 933,96" fill="#333"/>
|
||||
<line x1="544.0" y1="72" x2="544.0" y2="112" stroke="#333" stroke-width="2" />
|
||||
<text x="544.0" y="66" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="100" y="113" width="354.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="270.0" y1="115" x2="284.0" y2="129" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="270.0" y1="129" x2="284.0" y2="115" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="277.0" y="154" font-size="11" fill="#444" text-anchor="middle">Period A: komplett davor</text>
|
||||
<rect x="454.0" y="113" width="160.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 526.0 122 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="534.0" y="154" font-size="11" fill="#444" text-anchor="middle">Period B: ueberlappt Grenze</text>
|
||||
<rect x="614.0" y="113" width="286.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 749.0 122 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="757.0" y="154" font-size="11" fill="#444" text-anchor="middle">Period C: komplett danach</text>
|
||||
<text x="60" y="226" font-size="20" font-weight="700" fill="#111">sa</text>
|
||||
<text x="60" y="246" font-size="12.5" fill="#555">Vollstaendige Trennung noetig: Period muss komplett hinter der Grenze liegen.</text>
|
||||
<rect x="544.0" y="254" width="396.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="262" x2="940" y2="262" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,262 933,258 933,266" fill="#333"/>
|
||||
<line x1="544.0" y1="242" x2="544.0" y2="282" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="544.0" y="236" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="100" y="283" width="354.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="270.0" y1="285" x2="284.0" y2="299" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="270.0" y1="299" x2="284.0" y2="285" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="277.0" y="324" font-size="11" fill="#444" text-anchor="middle">Period A: komplett davor</text>
|
||||
<rect x="454.0" y="283" width="160.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="527.0" y1="285" x2="541.0" y2="299" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="527.0" y1="299" x2="541.0" y2="285" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="534.0" y="324" font-size="11" fill="#444" text-anchor="middle">Period B: ueberlappt Grenze</text>
|
||||
<rect x="614.0" y="283" width="286.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 749.0 292 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="757.0" y="324" font-size="11" fill="#444" text-anchor="middle">Period C: komplett danach</text>
|
||||
<line x1="30" y1="361" x2="940" y2="361" stroke="#eee" stroke-width="1"/>
|
||||
<text x="60" y="396" font-size="20" font-weight="700" fill="#111">lt</text>
|
||||
<text x="60" y="416" font-size="12.5" fill="#555">Overlap genuegt: Period muss nur vor die Grenze hineinragen.</text>
|
||||
<rect x="60" y="424" width="484.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="432" x2="940" y2="432" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,432 933,428 933,436" fill="#333"/>
|
||||
<line x1="544.0" y1="412" x2="544.0" y2="452" stroke="#333" stroke-width="2" />
|
||||
<text x="544.0" y="406" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="100" y="453" width="354.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 269.0 462 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="277.0" y="494" font-size="11" fill="#444" text-anchor="middle">Period A: komplett davor</text>
|
||||
<rect x="454.0" y="453" width="160.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 526.0 462 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="534.0" y="494" font-size="11" fill="#444" text-anchor="middle">Period B: ueberlappt Grenze</text>
|
||||
<rect x="614.0" y="453" width="286.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="750.0" y1="455" x2="764.0" y2="469" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="750.0" y1="469" x2="764.0" y2="455" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="757.0" y="494" font-size="11" fill="#444" text-anchor="middle">Period C: komplett danach</text>
|
||||
<text x="60" y="566" font-size="20" font-weight="700" fill="#111">eb</text>
|
||||
<text x="60" y="586" font-size="12.5" fill="#555">Vollstaendige Trennung noetig: Period muss komplett vor der Grenze liegen.</text>
|
||||
<rect x="60" y="594" width="484.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="602" x2="940" y2="602" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,602 933,598 933,606" fill="#333"/>
|
||||
<line x1="544.0" y1="582" x2="544.0" y2="622" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="544.0" y="576" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Suchgrenze (2023-06-15)</text>
|
||||
<rect x="100" y="623" width="354.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 269.0 632 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="277.0" y="664" font-size="11" fill="#444" text-anchor="middle">Period A: komplett davor</text>
|
||||
<rect x="454.0" y="623" width="160.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="527.0" y1="625" x2="541.0" y2="639" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="527.0" y1="639" x2="541.0" y2="625" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="534.0" y="664" font-size="11" fill="#444" text-anchor="middle">Period B: ueberlappt Grenze</text>
|
||||
<rect x="614.0" y="623" width="286.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="750.0" y1="625" x2="764.0" y2="639" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="750.0" y1="639" x2="764.0" y2="625" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="757.0" y="664" font-size="11" fill="#444" text-anchor="middle">Period C: komplett danach</text>
|
||||
<rect x="30" y="724" width="18" height="14" rx="3" fill="#2e7d32"/><text x="54" y="736" font-size="12.5" fill="#333">Treffer</text>
|
||||
<rect x="130" y="724" width="18" height="14" rx="3" fill="#c62828"/><text x="154" y="736" font-size="12.5" fill="#333">kein Treffer</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -0,0 +1,84 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="756" viewBox="0 0 1000 756" font-family="Latin Modern Roman, CMU Serif, Computer Modern Serif, Georgia, Times New Roman, serif">
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
[fill="#111"] { fill: #f2f2f2; }
|
||||
[fill="#333"] { fill: #d6d6d6; }
|
||||
[stroke="#333"] { stroke: #d6d6d6; }
|
||||
[fill="#444"] { fill: #cfcfcf; }
|
||||
[fill="#555"] { fill: #c2c2c2; }
|
||||
[stroke="#eee"] { stroke: #3a3a3a; }
|
||||
[stroke="#ffffff"] { stroke: #121212; }
|
||||
[fill="#2e7d32"] { fill: #66bb6a; }
|
||||
[fill="#c62828"] { fill: #ff6659; }
|
||||
[fill="#1565c0"] { fill: #64b5f6; }
|
||||
}
|
||||
</style>
|
||||
<text x="500.0" y="24" font-size="14" fill="#555" text-anchor="middle">Search value: date=&lt;prefix&gt;2023-06-15 | Green = match, Red = no match</text>
|
||||
<text x="60" y="56" font-size="20" font-weight="700" fill="#111">gt</text>
|
||||
<text x="60" y="76" font-size="12.5" fill="#555">Overlap suffices: the period only needs to extend past the boundary.</text>
|
||||
<rect x="544.0" y="84" width="396.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="92" x2="940" y2="92" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,92 933,88 933,96" fill="#333"/>
|
||||
<line x1="544.0" y1="72" x2="544.0" y2="112" stroke="#333" stroke-width="2" />
|
||||
<text x="544.0" y="66" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="100" y="113" width="354.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="270.0" y1="115" x2="284.0" y2="129" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="270.0" y1="129" x2="284.0" y2="115" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="277.0" y="154" font-size="11" fill="#444" text-anchor="middle">Period A: entirely before</text>
|
||||
<rect x="454.0" y="113" width="160.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 526.0 122 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="534.0" y="154" font-size="11" fill="#444" text-anchor="middle">Period B: overlaps boundary</text>
|
||||
<rect x="614.0" y="113" width="286.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 749.0 122 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="757.0" y="154" font-size="11" fill="#444" text-anchor="middle">Period C: entirely after</text>
|
||||
<text x="60" y="226" font-size="20" font-weight="700" fill="#111">sa</text>
|
||||
<text x="60" y="246" font-size="12.5" fill="#555">Full separation required: the period must lie entirely beyond the boundary.</text>
|
||||
<rect x="544.0" y="254" width="396.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="262" x2="940" y2="262" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,262 933,258 933,266" fill="#333"/>
|
||||
<line x1="544.0" y1="242" x2="544.0" y2="282" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="544.0" y="236" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="100" y="283" width="354.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="270.0" y1="285" x2="284.0" y2="299" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="270.0" y1="299" x2="284.0" y2="285" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="277.0" y="324" font-size="11" fill="#444" text-anchor="middle">Period A: entirely before</text>
|
||||
<rect x="454.0" y="283" width="160.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="527.0" y1="285" x2="541.0" y2="299" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="527.0" y1="299" x2="541.0" y2="285" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="534.0" y="324" font-size="11" fill="#444" text-anchor="middle">Period B: overlaps boundary</text>
|
||||
<rect x="614.0" y="283" width="286.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 749.0 292 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="757.0" y="324" font-size="11" fill="#444" text-anchor="middle">Period C: entirely after</text>
|
||||
<line x1="30" y1="361" x2="940" y2="361" stroke="#eee" stroke-width="1"/>
|
||||
<text x="60" y="396" font-size="20" font-weight="700" fill="#111">lt</text>
|
||||
<text x="60" y="416" font-size="12.5" fill="#555">Overlap suffices: the period only needs to reach before the boundary.</text>
|
||||
<rect x="60" y="424" width="484.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="432" x2="940" y2="432" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,432 933,428 933,436" fill="#333"/>
|
||||
<line x1="544.0" y1="412" x2="544.0" y2="452" stroke="#333" stroke-width="2" />
|
||||
<text x="544.0" y="406" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="100" y="453" width="354.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 269.0 462 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="277.0" y="494" font-size="11" fill="#444" text-anchor="middle">Period A: entirely before</text>
|
||||
<rect x="454.0" y="453" width="160.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 526.0 462 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="534.0" y="494" font-size="11" fill="#444" text-anchor="middle">Period B: overlaps boundary</text>
|
||||
<rect x="614.0" y="453" width="286.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="750.0" y1="455" x2="764.0" y2="469" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="750.0" y1="469" x2="764.0" y2="455" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="757.0" y="494" font-size="11" fill="#444" text-anchor="middle">Period C: entirely after</text>
|
||||
<text x="60" y="566" font-size="20" font-weight="700" fill="#111">eb</text>
|
||||
<text x="60" y="586" font-size="12.5" fill="#555">Full separation required: the period must lie entirely before the boundary.</text>
|
||||
<rect x="60" y="594" width="484.0" height="16" fill="#1565c0" opacity="0.10"/>
|
||||
<line x1="60" y1="602" x2="940" y2="602" stroke="#333" stroke-width="1.5"/>
|
||||
<polygon points="940,602 933,598 933,606" fill="#333"/>
|
||||
<line x1="544.0" y1="582" x2="544.0" y2="622" stroke="#333" stroke-width="2" stroke-dasharray="4,4"/>
|
||||
<text x="544.0" y="576" font-size="11.5" fill="#333" text-anchor="middle" font-weight="600">Search boundary (2023-06-15)</text>
|
||||
<rect x="100" y="623" width="354.0" height="18" rx="4" fill="#2e7d32"/>
|
||||
<path d="M 269.0 632 l 5 5 l 10 -11" stroke="#ffffff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="277.0" y="664" font-size="11" fill="#444" text-anchor="middle">Period A: entirely before</text>
|
||||
<rect x="454.0" y="623" width="160.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="527.0" y1="625" x2="541.0" y2="639" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="527.0" y1="639" x2="541.0" y2="625" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="534.0" y="664" font-size="11" fill="#444" text-anchor="middle">Period B: overlaps boundary</text>
|
||||
<rect x="614.0" y="623" width="286.0" height="18" rx="4" fill="#c62828"/>
|
||||
<line x1="750.0" y1="625" x2="764.0" y2="639" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/><line x1="750.0" y1="639" x2="764.0" y2="625" stroke="#ffffff" stroke-width="3" stroke-linecap="round"/>
|
||||
<text x="757.0" y="664" font-size="11" fill="#444" text-anchor="middle">Period C: entirely after</text>
|
||||
<rect x="30" y="724" width="18" height="14" rx="3" fill="#2e7d32"/><text x="54" y="736" font-size="12.5" fill="#333">Match</text>
|
||||
<rect x="130" y="724" width="18" height="14" rx="3" fill="#c62828"/><text x="154" y="736" font-size="12.5" fill="#333">No match</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -1,18 +0,0 @@
|
||||
Title: About me
|
||||
Tags: about
|
||||
Date: 2023-03-30
|
||||
|
||||
As a computer scientist specializing in medical data science, my skills cover a broad range of technical areas. With a master's degree in medical informatics and a background in systems administration, I am proficient in both software development and system management.
|
||||
|
||||
My development skills encompass Python, Bash, PowerShell andsome prior experience with Java, JavaScript, C and C++. This enables me to deliver software solutions that address the unique needs of medical data science teams, including data exchange, interoperability, and automation.
|
||||
|
||||
On the system management side, I possess expertise in Linux and FreeBSD administration, enabling me to manage and secure Unix-based systems. I am well-versed in automation tools like Ansible, which I leverage to scale infrastructure and automate tasks. Additionally, I have experience in DevOps techniques and software test automation.
|
||||
|
||||
In terms of project management, I am skilled in using collaboration tools such as GitLab, Atlassian JIRA and Confluence to streamline team workflows and maximize productivity. My experience in these areas allows me to effectively communicate with stakeholders, facilitate project workflows, and track progress.
|
||||
|
||||
In addition to my technical skills, I am familiar with healthcare data exchange standards such as HL7 FHIR and HL7v2, as well as REST APIs. This knowledge is critical to my ability to work on medical data science projects that involve data exchange and interoperability.
|
||||
|
||||
Currently, I'm expanding into data architecture technologies, delving into advanced concepts in data modeling, database design, and optimizing data storage.
|
||||
|
||||
Overall, I am a versatile and experienced computer scientist with a passion for medical data science. My proficiencies in software development, system management, and project management equip me to tackle any technical challenge in the field of medical data science.
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
Title: Über mich
|
||||
Slug: about-me
|
||||
Lang: de
|
||||
Tags: about
|
||||
Date: 2023-03-30
|
||||
|
||||
Angefangen hat alles aus Spaß am Gerät, lange bevor daraus ein Beruf wurde. Über die Jahre bin ich vom IT-Administrator zur medizinischen Informatik gewandert. Linux und Unix sind dabei die Konstante geblieben, auf der so ziemlich alles andere aufbaut. Heute leite ich den Arbeitsbereich Infrastruktur am [Datenintegrationszentrum des Universitätsklinikums Jena](https://www.uniklinikum-jena.de/gbit/Datenintegrationszentrum.html), im Rahmen der [Medizininformatik-Initiative](https://www.medizininformatik-initiative.de/) und des [Netzwerks Universitätsmedizin](https://www.netzwerk-universitaetsmedizin.de/). Dazwischen lag ein Master in Medizinischer Informatik, weshalb ich mich meist an der Schnittstelle zwischen Systemadministration, Softwareentwicklung und klinischen Datenstandards bewege. Im Alltag arbeite ich viel mit FHIR und HL7v2, meist in Python, mit Kafka und PostgreSQL im Hintergrund.
|
||||
|
||||
Privat betreibe ich zuhause ein kleines Homelab: ein paar Proxmox-Nodes, Ceph-Storage, eigene PKI. Falls mal was fehlt, helfen ein 3D-Drucker und ein bisschen Elektronik weiter. Und wenn gerade kein Server brennt, bin ich auch mal im Garten zu finden.
|
||||
|
||||
Diese Seite ist eine Mischung aus beidem: technische HowTos und Notizen aus Arbeit und Homelab.
|
||||
@@ -0,0 +1,11 @@
|
||||
Title: About me
|
||||
Slug: about-me
|
||||
Lang: en
|
||||
Tags: about
|
||||
Date: 2023-03-30
|
||||
|
||||
It all started for the hack value of it, long before it became a job. Over the years I moved from IT administrator to medical informatics. Linux and Unix have stayed the constant that pretty much everything else is built on. Today I lead the Infrastructure work area at the [Data Integration Center of the Jena University Hospital](https://www.uniklinikum-jena.de/gbit/en/IT+Department/Data+Integration+Center.html), as part of the [Medical Informatics Initiative](https://www.medizininformatik-initiative.de/en) and the [Network of University Medicine](https://www.netzwerk-universitaetsmedizin.de/en). In between came a master's degree in Medical Informatics, which is why I usually sit at the intersection of systems administration, software development, and clinical data standards. Day to day I work a lot with FHIR and HL7v2, mostly in Python, with Kafka and PostgreSQL in the background.
|
||||
|
||||
At home I run a small homelab: a few Proxmox nodes, Ceph storage, my own PKI. If something's missing, a 3D printer and a bit of electronics usually help out. And when no server is on fire, you might also find me in the garden.
|
||||
|
||||
This site is a mix of both: technical how-tos and notes from work and homelab.
|
||||
@@ -6,14 +6,27 @@ AUTHOR = 'haemka'
|
||||
SITENAME = 'haemka'
|
||||
SITEURL = ''
|
||||
|
||||
PATH = './content/'
|
||||
|
||||
TIMEZONE = 'Europe/Berlin'
|
||||
|
||||
DEFAULT_LANG = 'en'
|
||||
LOCALE = 'en_US.UTF-8'
|
||||
|
||||
THEME = './themes/latex/'
|
||||
|
||||
PLUGINS = ['i18n_subsites']
|
||||
I18N_SUBSITES = {
|
||||
'de': {
|
||||
'SITENAME': 'haemka',
|
||||
'LOCALE': 'de_DE.UTF-8',
|
||||
},
|
||||
}
|
||||
|
||||
PATH = './content/'
|
||||
PAGE_PATHS = ['pages']
|
||||
ARTICLE_PATHS = ['en', 'de']
|
||||
|
||||
|
||||
|
||||
# Feed generation is usually not desired when developing
|
||||
FEED_ALL_ATOM = None
|
||||
CATEGORY_FEED_ATOM = None
|
||||
@@ -27,11 +40,22 @@ LINKS = (('Pelican', 'http://getpelican.com/'),
|
||||
('Jinja2', 'http://jinja.pocoo.org/'),
|
||||
('You can modify those links in your config file', '#'),)
|
||||
|
||||
# Social widget
|
||||
SOCIAL = (('You can add links in your config file', '#'),
|
||||
('Another social link', '#'),)
|
||||
|
||||
DEFAULT_PAGINATION = False
|
||||
|
||||
# Uncomment following line if you want document-relative URLs when developing
|
||||
RELATIVE_URLS = True
|
||||
|
||||
DISPLAY_RECENT_ARTICLES_ON_MENU = True
|
||||
RECENT_ARTICLES_COUNT = 10
|
||||
|
||||
MARKDOWN = {
|
||||
'extension_configs': {
|
||||
'markdown.extensions.extra': {},
|
||||
'markdown.extensions.codehilite': {'css_class': 'highlight'},
|
||||
'markdown.extensions.meta': {},
|
||||
'markdown.extensions.toc': {
|
||||
'permalink': True,
|
||||
'toc_depth': '2-4',
|
||||
},
|
||||
},
|
||||
'output_format': 'html5',
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
WEBSERVER='aquaria'
|
||||
|
||||
build() {
|
||||
[[ ! ${VIRTUAL_ENV} ]] && NO_VENV=1 && source ./venv/bin/activate
|
||||
[[ ! ${VIRTUAL_ENV} ]] && NO_VENV=1 && source ./.venv/bin/activate
|
||||
pelican
|
||||
retval=$?
|
||||
[[ ${NO_VENV} ]] && deactivate
|
||||
@@ -11,7 +11,7 @@ build() {
|
||||
}
|
||||
|
||||
upload() {
|
||||
rsync -avz --delete output/* ${WEBSERVER}:~/web/
|
||||
rsync -avz --delete output/* ${WEBSERVER}:~/web/haemka.de/
|
||||
}
|
||||
|
||||
build
|
||||
|
||||