Zum Inhalt

Template-Syntax

Diese Dokumentation beschreibt die Template-Syntax, mit der in OSIRIS individuelle Zitationsstile definiert werden können. Sie richtet sich an Personen, die den offiziellen Zitationsstil ihres Instituts (z. B. für Publikationen) möglichst genau nachbauen möchten.

Grundprinzip

Ein Zitations-Template ist ein Text mit Platzhaltern, der zur Laufzeit mit den Daten einer Aktivität gefüllt wird.

Beispiel:

1
{authors}. {title}. %journal ({year})% {journal}, {year}.

OSIRIS ersetzt dabei: - Feld-Platzhalter ({…}) durch konkrete Werte - Konditionale Blöcke (%…%) nur dann, wenn bestimmte Felder existieren - leere Klammern, doppelte Satzzeichen usw. automatisch

Bei neuen Aktivitäten wird ein Standard-Template verwendet, das aus Autoren, Titel und Jahr besteht. Dieses Template kann (und sollte) individuell angepasst werden. Besonders wenn deine Aktivitäten dir nur als leere Vorlage angezeigt werden, kannst du hier ansetzen.

1. Feld-Platzhalter

Einfacher Feldzugriff

  • {title}
  • {year}
  • {journal}

→ Wird durch den Inhalt des jeweiligen Feldes ersetzt. - Existiert das Feld nicht oder ist leer → leerer String - Arrays (z. B. Autorenlisten) werden automatisch mit , zusammengefügt - MongoDB-Objekte werden intern korrekt aufgelöst

Um herauszufinden, welche Felder zur Verfügung stehen, kann man den Template Baukasten verwenden. Dort sind alle Felder mit Beispieldaten aufgelistet.

Für benutzerdefinierte Felder gilt: Der Feldname ist die ID, die du bei der Anlage des benutzerdefinierten Feldes vergeben hast.

2. Fallback / Priorität

Mit | kann ein Fallback definiert werden.

Literal als Fallback

1
{doi|"ohne DOI"}
  • Wenn doi leer ist → Text ohne DOI
  • Literale müssen in Anführungszeichen stehen (")
  • Wichtig: Dies gilt nur für das Fallback, nicht für konditionale Blöcke! Dort müssen Literale nicht in Anführungszeichen stehen und Felder müssen dafür in {} gesetzt werden. Der Grund für diese Inkonsistenz ist, dass eine verschachtelung mehrerer {} schwer lesbar und fehleranfällig wäre.

Feld als Fallback

1
{doi|link}
  • Wenn doi leer ist → Wert aus dem Feld link
  • Wenn link kein bekanntes Feld wäre, würde es als Literal interpretiert und so ausgegeben werden.

Regel zur Auflösung

  1. Erstes Element wird immer als Feld interpretiert
  2. Ist dieses leer:
  3. Quoted → Literal
  4. Unquoted + bekanntes Feld → Feldwert
  5. sonst → Literal

3. Konditionale Blöcke %...%

Konditionale Blöcke werden nur ausgegeben, wenn bestimmte Felder existieren.

Syntax ist wie folgt:

1
%BEDINGUNG Text%

Einzelnes Feld

1
%journal ({journal})%

→ Wird nur ausgegeben, wenn journal existiert und nicht leer ist. Dadurch werden leere Klammern vermieden. (Leere Klammern werden später automatisch entfernt, dies ist also nur ein Beispiel für die Verwendung von Konditionen.)

UND-Bedingung (&)

1
%journal&year ({journal}, {year})%

→ Wird nur ausgegeben, wenn alle Felder existieren.

Typischer Use Case: - Jahr nur, wenn auch Journal existiert - Band/Heft nur, wenn Seiten existieren

ODER-Bedingung (|)

1
%doi|link (Verfügbar unter: {doi|link})%

→ Wird ausgegeben, wenn mindestens eines der Felder existiert.

Negation (!)

1
%!title (Kein Titel vorhanden)%

→ Wird nur ausgegeben, wenn title nicht existiert oder leer ist.

Sonderfall: Platzhalterwert -

Ein Feld mit dem Wert - gilt als leer → Kondition schlägt fehl

4. Datumsformatierung {date:format}

2.1.0

Datumsfelder können mit einem individuellen Format ausgegeben werden. Dazu wird nach dem Feldnamen, getrennt durch einen Doppelpunkt, das gewünschte Datumsformat angegeben.

Verfügbare Datumsfelder:

  • date: Datum einer Aktivität
  • start: Startdatum eines Zeitraums
  • end: Enddatum eines Zeitraums

Häufig verwendete Formatzeichen

Zeichen Bedeutung Beispiel
Y Vierstelliges Jahr 2026
y Zweistelliges Jahr 26
F Vollständiger Monatsname July
M Abgekürzter Monatsname Jul
m Monat mit führender Null 07
n Monat ohne führende Null 7
d Tag mit führender Null 04
j Tag ohne führende Null 4

Weitere Formatzeichen sind in der PHP-Dokumentation zur Datumsformatierung beschrieben.

Beispiele

ISO-Datum:

1
{date:Y-m-d}

Ergebnis:

1
2026-07-24

Datum nach APA-Konvention:

1
({date:Y}, {date:F j})

Ergebnis:

1
(2026, July 24)

Datumsbereiche

Start- und Enddatum können unabhängig voneinander formatiert werden:

1
{start:Y, F j}–{end:Y, F j}

Ergebnis:

1
2026, July 24–2026, July 26

Optionales Enddatum

Bei einem normalen Datumsbereich bedeutet ein fehlendes Enddatum, dass die Aktivität nur am Startdatum stattgefunden hat. Das Enddatum und der Gedankenstrich können deshalb in einen konditionalen Block gesetzt werden:

1
{start:Y, F j}%end –{end:Y, F j}%

Ist kein Enddatum vorhanden, wird nur das Startdatum ausgegeben.

Laufender Datumsbereich

Bei einem laufenden Datumsbereich bedeutet ein fehlendes Enddatum, dass die Aktivität noch andauert. Über einen Literal-Fallback kann dafür ein beliebiger Text eingesetzt werden:

1
{start:Y, F j}–{end:Y, F j|"Today"}

Für ein deutschsprachiges Template kann die Schreibweise selbst festgelegt werden:

1
{start:j. F Y}–{end:j. F Y|"heute"}

Dadurch kann für jedes Template individuell entschieden werden, welche Sprache und Großschreibung verwendet werden soll.

5. Automatische Bereinigung

Nach der Ersetzung führt OSIRIS eine automatische Format-Bereinigung durch:

Entfernt werden u. a.: - Leere Klammern: () oder [] - Überflüssige Leerzeichen - Mehrfache Punkte oder Kommas - Kommas vor Satzende - Kommas nach <br /> (Zeilenumbruch)

Beispiel-Template:

1
{authors}. {title}. ({journal}) {year}.

Ohne Journal: Müller J. Titel. 2024.

Kein händisches Abfangen nötig ✅

6. Die Sprache der Templates

Einige Felder können in mehreren Sprachen ausgegeben werden, z. B. der Monat oder die Art der Abschlussarbeit. Standardmäßig wird die Sprache der OSIRIS-Benutzeroberfläche verwendet, was allerdings bei unterschiedlichen Nutzern zu uneinheitlichen Zitaten führen kann. Deshalb empfehlen wirdt, die Sprache der Templates explizit festzulegen. Dies kannst du in den allgemeinen Einstellungen tun.

7. Grenzen der aktuellen Syntax

Nicht unterstützt wird bisher: - Verschachtelte Konditionen - Mathematische Vergleiche - Explizite else-Zweige

➡️ Ziel ist Nachvollziehbarkeit und Wartbarkeit, nicht Turing-Vollständigkeit.