Dieses Hilfeseite vertieft die Realisierung und Syntax von TemplateData. Insbesondere wird die JSON-Struktur dokumentiert, die im Quelltext der Dokumentationsseiten sichtbar wird.

Struktur des TemplateData-Objekts

Bearbeiten

Das in <templatedata>...</templatedata> eingebettete JSON-Objekt (root) muss mindestens eine Komponente params haben. Zusätzlich sollte eine kurze Vorlagenbeschreibung mitgeliefert sein.

description
Optional
Kurzbeschreibung der Vorlage
Muss als Überschrift geeignet sein; also nur ultrakurz in wenigen Stichworten den Zweck nennen. Es sollte nur der eigentliche Zweck benannt werden, Einleitungsformalitäten wie „Vorlage zur“ sind redundant und sollten wegen beschränkten Platzes im Interface unterbleiben.
params
Objekt, das für jeden Vorlagenparameter ein Parameter-Objekt enthält.
Pflichtangabe; aber {} ausreichend für eine parameterlose Vorlage.
  • Typ: Objekt
format
Optional
Soll die Vorlage blockartig, d.h. ein Parameter je Zeile, oder alles auf einer Zeile ausgegeben werden?
  • Typ: block oder inline (Standard)
  • Freie Vereinbarung von Leerzeichen und Zeilenumbruch:[1] "{{_\n| _=_\n}}"
    • "{{_|_=_}}" entspricht inline
    • "{{_\n| _ = _\n}}" entspricht block
    • "{{_ |_=_}}" – vor jeder Pipe ein Leerzeichen, sonst kompakt
    • "\n{{_\n |_=_\n}}" – Einbindung auf neuer Zeile beginnend, bei jeder Parameterzeile auf neuer Zeile Pipe ein Leerzeichen eingerückt, Zuweisung kompakt
Siehe auch: Wikipedia:Lua/Modul/TemplateData/Wikitext
sets
Optional
Array mit Set-Objekten, auf die für Parametergruppen Bezug genommen wird.
  • Typ: Array
maps
Optional
Komponenten, die die Übertragung der Angaben in andere Strukturen ermöglichen.
  • Typ: Objekt

Andere als diese fünf Komponenten sind in diesem Objekt auf der Dokumentationsseite nicht erlaubt.

Bei Abfragen über die API wird allerdings eine weitere Komponente zurückgeliefert:

paramOrder
Automatisch generiert
Array mit den Komponenten-Bezeichnern im Parameter-Objekt, und zwar in der Reihenfolge, in der die Parameter in einer Benutzeroberfläche präsentiert werden sollen.
Es wird automatisch anhand der physischen Abfolge in <templatedata> gebildet.
Das Array ist erforderlich, weil die Reihenfolge von Komponenten in einem Objekt beliebig und nicht vorhersagbar ist.

InterfaceText

Bearbeiten

Der InterfaceText ist ein für Menschen lesbarer Text, der in der Vorlagendokumentation angezeigt wird.

Er kann in zwei Varianten auftreten:

  • Zeichenkette mit dem Text selbst.
  • Objekt mit Komponenten, wobei jeweils einem Sprachcode (wie de oder de-ch oder en) der entsprechende Text zugeordnet wird.
    • In der Darstellung auf der Dokumentationsseite der Vorlage wird die Projektsprache genutzt, da eine konstante Aufbereitung im Cache hinterlegt wird. uselang= ist hier also wirkungslos.
    • Dynamische Auswertungen des JSON-Objektes sehen alle Sprachvarianten und können bei intelligenter Programmierung die bevorzugte Sprache des Benutzers berücksichtigen.

Wie im gesamten JSON-Objekt ist kein Wikitext möglich; auch HTML-Formatierungen werden nicht umgesetzt.

Parameter-Objekt

Bearbeiten

Das Parameter-Objekt ist das Kernstück der Definition.

  • Weil es zum Auffinden ungültiger Parameterzuweisungen benutzt werden kann, müssen alle zulässigen Parameter einbezogen werden.
  • Zukünftig nicht mehr erwünschte Parameternamen können als deprecated (veraltet) gekennzeichnet werden.

Die Komponente params des TemplateData-Objekts ist ein Objekt, bei dem jedem Namen eines Vorlagenparameters eine Einzelspezifikation zugewiesen wird:

 { "description": "Zweck der Vorlage",
   "params": { "ParameterA": { ... Einzelspezifikation A ... },
               "ParameterB": { ... Einzelspezifikation B ... },
               usw. usw.
             }
 }
Einzelspezifikation; alle Komponenten optional
Bezeichnung Komponente JS-Datentyp Beschreibung
Bezeichnung label InterfaceText
null
Eine kurze Beschreibung für den Parameter.
Der eigentliche Parametername kann stark abgekürzt oder lediglich eine Nummer sein.
Es sollte versucht werden, sich auf zwei Dutzend Zeichen zu beschränken.
Beschreibung description InterfaceText
null
Eine kurze Erläuterung zum Parameter.
Typ type string

Der „Datentyp“ des Parameterwertes (alle Vorlagenparameter sind Zeichenketten) für Gültigkeitsprüfungen. Einer von:

  • "unknown" (Nicht definiert) – (Vorgabe)
  • "boolean" (Boolesch) – Wahrheitswert, d. h. 0 für nein und 1 für ja
  • "content" (Inhalt) – Wikitext, d. h. formatierter Text, Links, Bilder, usw.
  • "date" (Datum) – Datum/Zeit nach ISO 8601
  • "line" (Zeile) – kurzer Text, wie er in einzeiligem <input> vorkommen kann (Name, Label)
  • "number" (Zahl) – lässt sich als Zahl interpretieren
  • "string" (Zeichenfolge) – beliebige Zeichenkette
  • "url" (Zeichenfolge) – soll als URL geeignet sein
  • "wiki-file-name" (Datei) – geeignet als Dateiname ohne Präfix wie Datei:, File: usw.; muss noch nicht existieren
  • "wiki-page-name" (Seite) – geeignet als Seitenname; muss noch nicht existieren
  • "wiki-template-name" (Seite) – geeignet als Vorlagenname; muss noch nicht existieren.
    • Der Unterschied zu wiki-page-name bleibt im Dunkeln; jede reguläre Seite lässt sich einbinden.
  • "wiki-user-name" (Benutzer) – geeignet als Benutzername; muss noch nicht existieren
  • "unbalanced-wikitext" (Unausgeglichener Wikitext) – Wikitext-Fragment, das nicht wohlgeformte Einzelbestandteile enthält, z. B. {{echo|before=<u>|after=</u>}}

Veraltet aber weiterhin funktionsfähig sind die folgenden Codes, die baldmöglichst ersetzt werden sollten:

  • "string/line" – jetzt nur "line"
  • "string/wiki-page-name" – jetzt nur "wiki-page-name"
  • "string/wiki-user-name" – jetzt nur "wiki-user-name"
Erforderlich required boolean Status-Parameter
  • true, falls es sich bei diesem Vorlagenparameter um einen Pflichtparameter handelt.
    Wenn ein Parameter als notwendig markiert ist, kann man dieses Feld nicht löschen, wenn man eine neue Vorlage hinzufügt, oder eine bestehende Vorlage bearbeitet.
Vorgeschlagen suggested boolean Status-Parameter
  • true, falls dieser Vorlagenparameter in den meisten Fällen erwartet wird bzw. standardmäßig angezeigt werden soll. (Der VE ergänzt diesen Parameter bei der Nachbearbeitung)
Veraltet deprecated boolean
string
Status-Parameter
  • true, falls veraltet
  • Zeichenkette, mit kurzer Begründung für den Anlass; etwa als Tooltip
Beispiel example InterfaceText
null
Mögliche Beispielwerte für den Parameter.
Standard default InterfaceText
null
Standardwert, den die Vorlage annimmt, wenn der entsprechende Parameter nicht ausgefüllt wird. Dies ist lediglich eine visuelle Hilfe, d. h. wenn der entsprechende Parameter nicht vom Benutzer ausgefüllt wird und ein default-Wert angegeben ist, wird dieser beim Speichern nicht als Standardwert übernommen, sondern der Parameter bleibt leer.
Autowert autovalue string Standardwert mit dem der Vorlagenparameter ausgefüllt werden soll, z. B. {{subst:#time:Y-m-d}} wenn ein Parameter mit dem aktuellen Datum (im Format JJJJ-MM-TT) ausgefüllt werden soll.
inherits string Name eines anderen Parameters, dessen Spezifikation als Basis für diesen Parameter geerbt werden soll. Zusätzlich angegebene Komponenten überschreiben diese Ausgangswerte.
Aliasse aliases Array of strings

Liste von Aliasnamen. Ein Aliasname ist ein in der Vorlagenprogrammierung verwendeter Alternativname, der genauso wirksam ist wie die Standardform.[2] Für einen reinen Aliasnamen wird keine gesonderte Einzelspezifikation angelegt.
Wenn zusätzliche Informationen erforderlich sind, ist eine gesonderte Einzelspezifikation zu benutzen und ggf. als "deprecated" zu markieren.

Die Spalte „Bezeichnung“ in der obigen Tabelle gibt den Namen dieses Parameter im eingebauten Vorlagendokumentations-Editor wieder. Falls dort ein "–" steht, kann dieser Parameter über den Editor nicht angegeben werden.

Set-Objekte

Bearbeiten

Das Array sets kann Objekte mit der folgenden Struktur enthalten:

Komponente Datentyp Beschreibung
label InterfaceText Eine kurze Bezeichnung für den Parametersatz.
Es sollte versucht werden, sich auf zwei Dutzend Zeichen zu beschränken.
params Array Ein Array mit Namen von Parametern in diesem Set.
Es muss sich um Bezeichner handeln, die im Parameter-Objekt definiert sind.

Zurzeit (Sommer 2015) ist noch keine Realisierung in der Benutzeroberfläche des VisualEditor ersichtlich.[3]

JSON-Format

Bearbeiten
  • Eine Zuweisung besteht aus dem Namen der Komponente, einem Doppelpunkt : und dem zugewiesenen Wert.
  • Während dies bei allgemeinen JavaScript-Objekten nicht erforderlich ist, muss in JSON der Name in Anführungszeichen " eingeschlossen werden.
  • Jedes Objekt ist in geschweifte Klammern {} einzuschließen.
  • Als Wert kann ebenfalls ein neues Objekt auftreten.
  • Zeichenketten sind in " einzuschließen.
  • In einem Objekt aufeinanderfolgende Zuweisungen (=Komponenten) werden durch Kommata getrennt. Nach der letzten Komponente darf kein Komma stehen.
  • Leerzeichen und Zeilenumbrüche außerhalb von Zeichenketten sind beliebig.
  • Soll im Text " vorkommen, muss es durch \" escaped werden; ein einzelner \ ist als \\ anzugeben.
  • Das allereinfachste zulässige TemplateData-Element wäre damit:
    <templatedata>{"params":{}}</templatedata>

Ein geeigneter Einrückungsstil sollte die Lesbarkeit für Menschen sichern.

Die syntaktische Gültigkeit wird bei der Seitenvorschau überprüft; bei Syntaxfehlern das Feld rot ausgefüllt. Die Technik-Werkstatt hilft weiter.

Code-Beispiele

Bearbeiten

Zwei einfachere und zwei komplexere Beispiele für die Definition und die Darstellung auf der Dokumentationsseite (Präsentation gegenüber MediaWiki verbessert).

Erläuterung des Status anhand eines Minimalbeispiels

Bearbeiten
  • Es gibt vier verschiedene Status eines Parameters:
    1. erforderlich,
    2. vorgeschlagen (hiermit ist eher „empfohlen“ gemeint),
    3. optional und
    4. veraltet,
die auch in dieser Reihenfolge in der Tabelle sortiert werden.
  • Diese werden durch folgende drei Boolean-Parameter beeinflusst:
    1. required (erforderlich)
    2. suggested (vorgeschlagen)
    3. deprecated (veraltet).
Dabei schließen sich required = TRUE und deprecated = TRUE („empfohlen“ und „veraltet“) zusammen aus und erzeugen in dieser Kombination eine Fehlermeldung!
Standardwert für Status : Ist keiner der Parameter angegeben, so ist der Status standardmäßig optional.

Das folgende Beispiel soll den Zusammenhang zwischen den Parametern so reduziert wie möglich verdeutlichen:

{{TemplateData|lazy=1|JSON=
{ "description": "Verlinken einer Kategorie auf Wikimedia Commons",
  "params": { "1": { "description": "<code>required</code> = '''TRUE'''",
                     "required":    true
                   },
              "2": { "description": "<code>required</code> = ''FALSE''<br>könnte auch weggelassen werden, siehe Parameter 3",
                     "required":    false
                   },
              "3": { "description": "ohne Angabe eines der drei Status-Parameter"
                   },
              "4": { "description": "<code>suggested</code> = '''TRUE'''",
                     "suggested":   true
                   },
              "5": { "description": "<code>deprecated</code> = '''TRUE'''",
                     "deprecated":  true
                   },
              "6": { "description": "<code>deprecated</code> = '''TRUE''' überschreibt<br><s><code>suggested</code> = '''TRUE'''</s>",
                     "suggested":   true,
                     "deprecated":  true
                   }
            }
}
}}
Verlinken einer Kategorie auf Wikimedia Commons
ParameterBeschreibungTypStatus
11
required = TRUE
Unbekannterforderlich
22
required = FALSE
könnte auch weggelassen werden, siehe Parameter 3
Unbekanntoptional
33
ohne Angabe eines der drei Status-Parameter
Unbekanntoptional
44
suggested = TRUE
Unbekanntvorgeschlagen
55
deprecated = TRUE
Unbekanntveraltet
66
deprecated = TRUE überschreibt
suggested = TRUE
Unbekanntveraltet

Suggesting deprecated 6

"inherits" – Vorlage:Anker

Bearbeiten

Der nachstehende Code bewirkt die darunter wiedergegebene Tabelle (Vorlage:Anker). Hier wird für die wiederholten optionalen Parameter die Komponente "inherits" genutzt. Daraus wird diese für Werkzeuge abrufbare Struktur erzeugt.

{{TemplateData|JSON=
{ "description": "Linkziel(e) zu einem Abschnitt oder einem Element in dieser Wiki-Seite vereinbaren",
  "params": { "a": { "label":       "Anker-1",
                     "description": "Fragmentbezeichner",
                     "type":        "string",
                     "required":    true },
              "b": { "label":       "Anker-2",
                     "inherits":    "a",
                     "description": "Weiterer Fragmentbezeichner",
                     "required":    false },
              "c": { "label":    "Anker-3",
                     "inherits": "b" },
              "d": { "label":    "Anker-4",
                     "inherits": "b" },
              "e": { "label":    "Anker-5",
                     "inherits": "b" },
              "f": { "label":    "Anker-6",
                     "inherits": "b" }
            }
}
}}


Linkziel(e) zu einem Abschnitt oder einem Element in dieser Wiki-Seite vereinbaren
ParameterBeschreibungTypStatus
Anker-1a
Fragmentbezeichner
Mehrzeiliger Texterforderlich
Anker-2b
Weiterer Fragmentbezeichner
Mehrzeiliger Textoptional
Anker-3c
Weiterer Fragmentbezeichner
Mehrzeiliger Textoptional
Anker-4d
Weiterer Fragmentbezeichner
Mehrzeiliger Textoptional
Anker-5e
Weiterer Fragmentbezeichner
Mehrzeiliger Textoptional
Anker-6f
Weiterer Fragmentbezeichner
Mehrzeiliger Textoptional

"aliases" – Vorlage:TemplateDataGenerator

Bearbeiten

Der nachstehende Code bewirkt die darunter wiedergegebene Tabelle (Vorlage:TemplateDataGenerator). Hier wird für die alternative Variante des Sortierungs-Parameters die Komponente "aliases" genutzt. Daraus wird diese für Werkzeuge abrufbare Struktur erzeugt.

{{TemplateData|JSON=
{ "description": "Erstellt aus der Vorlagenprogrammierung ein Grundgerüst für die Dokumentation der vorkommenden Parameter mittels TemplateData",
  "params": { "sort":
              { "label":       "Sortierung",
                "description": "Alphabetische Sortierung, wenn Ziffer 1 angegeben",
                "type":        "string",
                "required":    false,
                "default":     "0",
                "aliases":     [ "1" ]
              }
            }
}
}}


Erstellt aus der Vorlagenprogrammierung ein Grundgerüst für die Dokumentation der vorkommenden Parameter mittels TemplateData
ParameterBeschreibungTypStatus
Sortierungsort
1
Alphabetische Sortierung, wenn Ziffer 1 angegeben
Standard
0
Mehrzeiliger Textoptional

"sets" – unsigned

Bearbeiten

Der nachstehende Code bewirkt die darunter wiedergegebene Tabelle, in der die Komponente "sets" verwendet wird. (vorläufig bis deutschsprachiger Ersatz):

{
	"description": "Label unsigned comments in a conversation.",
	"params": {
		"user": {
			"label": "Username",
			"type": "wiki-user-name",
			"required": true,
			"description": "User name of person who forgot to sign their comment.",
			"aliases": ["1"]
		},
		"date": {
			"label": "Date",
			"description": {
				"en": "Timestamp of when the comment was posted, in YYYY-MM-DD format.",
				"de": "Zeitpunkt, zu dem der Kommentar geschrieben wurde; im Datumsformat JJJJ-MM-TT."
			},
			"aliases": ["2"],
			"suggested": true
		},
		"year": {
			"label": "Year",
			"type": "number"
		},
		"month": {
			"label": "Month",
			"inherits": "year"
		},
		"day": {
			"label": "Day",
			"inherits": "year"
		},
		"comment": {
			"required": false
		}
	},
	"sets": [
		{
			"label": "Date",
			"params": ["year", "month", "day"]
		}
	]
}


Label unsigned comments in a conversation.
ParameterBeschreibungTypStatus
Usernameuser
1
User name of person who forgot to sign their comment.
Benutzererforderlich
Datedate
2
Zeitpunkt, zu dem der Kommentar geschrieben wurde; im Datumsformat JJJJ-MM-TT.
Unbekanntvorgeschlagen
YearyearZahlenwertoptional
MonthmonthZahlenwertoptional
DaydayZahlenwertoptional
commentcommentUnbekanntoptional

Hilfsmittel und Hilfen

Bearbeiten

Die Verwendung von TemplateData in dieser Wikipedia wird protokolliert unter:

Debugger / Validierer

Bearbeiten

Die syntaktische Gültigkeit des Codes kann vor dem Speichern überprüft werden; in der Seitenvorschau wird entweder die erwartete Tabelle gezeigt, oder im Fehlerfall das Feld rot ausgefüllt.

  • Wenn bei Vorschau der Dokumentationsseite die Fehlermeldung Syntaxfehler in JSON erscheint, aber mit den Werkzeugen kein Fehler im JSON-Code gefunden wurde, dann stimmt etwas mit dem abschließenden Tag nicht (etwa vergessener Schrägstrich).

Speziell für JSON-Code eignet sich:

  • jsonlint.com – der Code kann auf diese Seite kopiert werden und zeigt die fehlerhaften Zeilen.

Jeder andere kann ebenso zur ersten Fehlersuche verwendet werden.

  • jshint.com – Gleiches Prinzip; Analyse mittels JSHint.
  • jsonformatting.com – Hier können Sie das Format überprüfen und eine Reihe von Vorgängen ausführen, z. B. die Formatierung.

Generatoren

Bearbeiten

Alternativ zum eingebauten Vorlagendokumentations-Editor:

  • liefert das Benutzerskript jsonXMLutils aus der Vorlagenprogrammierung oder aber der Kopiervorlage einer älteren Dokumentation oder dem Quelltext einer beliebigen Einbindung ein Grundgerüst.
    • Nebenbei formatiert es auch den JSON-Code und analysiert ihn auf bestimmte mutmaßliche inhaltliche Fehler.
    • Eine XML-Struktur für den kann aus jeder mit TemplateData ausgestatteten Vorlagendokumentation generiert werden.
  • kann mit dem vorübergehendem Einfügen von {{subst:TemplateDataGenerator}} in die Dokumentationsseite ebenfalls ein Grundgerüst generiert werden.
  • gibt es ein in der französisch- und englischsprachigen Wikipedia mit einem alternativen Dialogmenü: fr:User:Ltrlg/scripts/TemplateDataEditor.js bzw. en:User:NicoV/TemplateDataEditor. Dieses befindet sich jedoch auf einem älteren Stand und unterstützt daher nicht alle Datentypen oder den „Vorgeschlagen“-Parameter (suggested), dafür aber den deprecated- und den inherited-Parameter.

Bei anhaltenden Problemen hilft die weiter.

Sonstiges

Bearbeiten

Die TemplateData-Verwendung wurde im Frühsommer 2013 weltweit gestartet.

Abfrage über die API

Bearbeiten

Mittels der kann zu einer Vorlage die gültige Definition zu einer Vorlage abgefragt werden. Damit stehen sie anderen Software-Werkzeugen zur Verfügung.

Die spezifische API-Syntax ist automatisch generiert abrufbar, aber nicht sehr aussagekräftig.

Anpassung der Darstellung der Parametertabelle

Bearbeiten

Für das Tag <TemplateData> sind zurzeit keine eigenen Attribute vorgesehen.

Die Standard-Attribute id= class= style= werden nicht beanstandet; sind jedoch zurzeit wirkungslos.

Die optische Darstellung der auf der Dokumentationsseite angezeigten Tabelle kann angepasst werden.

Selektor Element
.mw-templatedata-doc-wrap Gesamte Beschreibung
.mw-templatedata-doc-desc Aufgabenbeschreibung
.mw-templatedata-doc-params Tabelle
.mw-templatedata-doc-param-name Parametername
.mw-templatedata-doc-param-type Parametertyp
.mw-templatedata-doc-muted Standardwert

Weitere Informationen

Bearbeiten
  • Vorlage:TemplateData – Kennzeichnung generierter Dokumentationsblöcke
  • Phabricator – Workboard: #templatedata – Phabricator-Status mit Liste bekannter Bugs und Anfragen zur Funktionalitätserweitung (englisch)
  • Spezifikation (englisch)
  • – verbesserte Präsentation auf der Vorlagendokumentationsseite

Anmerkungen

Bearbeiten
  1. Wie bei jeder anderen Vorlagensyntax gilt, falls der JSON-Code als Vorlagenparameter übergeben wird: Pipe-Symbole sind geeignet zu maskieren, etwa durch {{!}} oder &#124; – und unbalancierte }} desgleichen.
  2. Beispiele in der Vorlage:
    {{{Stadt|{{{city|}}}}}}
    oder
    {{{5|{{{Sonderfall|}}}}}}
    Dann ist city ein Alias für Stadt und Sonderfall ein Alias für den fünften unbenannten Parameter.
  3. Sinnvolle Anwendungen wären:
    • Datum (Tag, Monat, Jahr)
    • Uhrzeit (Stunde, Minuten, Sekunden, Millisekunden, Zeitzone)
    • Koordinate (Grad, Minuten, Sekunden, Himmelsrichtung)