Hilfe:TemplateData/JSON
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.
- Typ: InterfaceText oder
null
- Typ: InterfaceText oder
- 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
oderinline
(Standard) - Freie Vereinbarung von Leerzeichen und Zeilenumbruch:[1]
"{{_\n| _=_\n}}"
"{{_|_=_}}"
entsprichtinline
"{{_\n| _ = _\n}}"
entsprichtblock
"{{_ |_=_}}"
– 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
- Typ:
- 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
oderde-ch
oderen
) 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.
- In der Darstellung auf der Dokumentationsseite der Vorlage wird die Projektsprache genutzt, da eine konstante Aufbereitung im Cache hinterlegt wird.
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.
}
}
Bezeichnung | Komponente | JS-Datentyp | Beschreibung |
---|---|---|---|
Bezeichnung | label | InterfaceTextnull |
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 | InterfaceTextnull |
Eine kurze Erläuterung zum Parameter. |
Typ | type | string |
Der „Datentyp“ des Parameterwertes (alle Vorlagenparameter sind Zeichenketten) für Gültigkeitsprüfungen. Einer von:
Veraltet aber weiterhin funktionsfähig sind die folgenden Codes, die baldmöglichst ersetzt werden sollten:
|
Erforderlich | required | boolean | Status-Parameter
|
Vorgeschlagen | suggested | boolean | Status-Parameter
|
Veraltet | deprecated | boolean string |
Status-Parameter
|
Beispiel | example | InterfaceTextnull |
Mögliche Beispielwerte für den Parameter. |
Standard | default | InterfaceTextnull |
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. |
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:
- erforderlich,
- vorgeschlagen (hiermit ist eher „empfohlen“ gemeint),
- optional und
- veraltet,
- die auch in dieser Reihenfolge in der Tabelle sortiert werden.
- Diese werden durch folgende drei Boolean-Parameter beeinflusst:
required
(erforderlich)suggested
(vorgeschlagen)deprecated
(veraltet).
- Dabei schließen sich
required = TRUE
unddeprecated = 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
}
}
}
}}
Parameter | Beschreibung | Typ | Status | |
---|---|---|---|---|
1 | 1 | required = TRUE | Unbekannt | erforderlich |
2 | 2 | required = FALSEkönnte auch weggelassen werden, siehe Parameter 3 | Unbekannt | optional |
3 | 3 | ohne Angabe eines der drei Status-Parameter | Unbekannt | optional |
4 | 4 | suggested = TRUE | Unbekannt | vorgeschlagen |
5 | 5 | deprecated = TRUE | Unbekannt | veraltet |
6 | 6 | deprecated = TRUE überschreibtsuggested = TRUE | Unbekannt | veraltet |
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" }
}
}
}}
Parameter | Beschreibung | Typ | Status | |
---|---|---|---|---|
Anker-1 | a | Fragmentbezeichner | Mehrzeiliger Text | erforderlich |
Anker-2 | b | Weiterer Fragmentbezeichner | Mehrzeiliger Text | optional |
Anker-3 | c | Weiterer Fragmentbezeichner | Mehrzeiliger Text | optional |
Anker-4 | d | Weiterer Fragmentbezeichner | Mehrzeiliger Text | optional |
Anker-5 | e | Weiterer Fragmentbezeichner | Mehrzeiliger Text | optional |
Anker-6 | f | Weiterer Fragmentbezeichner | Mehrzeiliger Text | optional |
"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" ]
}
}
}
}}
Parameter | Beschreibung | Typ | Status | |
---|---|---|---|---|
Sortierung | sort 1 | Alphabetische Sortierung, wenn Ziffer 1 angegeben
| Mehrzeiliger Text | optional |
"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"]
}
]
}
Parameter | Beschreibung | Typ | Status | |
---|---|---|---|---|
Username | user 1 | User name of person who forgot to sign their comment. | Benutzer | erforderlich |
Date | date 2 | Zeitpunkt, zu dem der Kommentar geschrieben wurde; im Datumsformat JJJJ-MM-TT. | Unbekannt | vorgeschlagen |
Year | year | Zahlenwert | optional | |
Month | month | Zahlenwert | optional | |
Day | day | Zahlenwert | optional | |
comment | comment | Unbekannt | optional |
Hilfsmittel und Hilfen
[Bearbeiten]Die Verwendung von TemplateData
in dieser Wikipedia wird protokolliert unter:
- Special:PagesWithProp/templatedata
- Kategorie:Vorlagen:Benutzung der TemplateData-Vorlage – Besser lesbar und würde keine Weiterleitungen aufzählen; dafür sind momentan zwangsläufig Vorlagenprogrammierung und Dokumentationsseite aufgeführt.
- Die Kategorisierung zählt nur Verwendungen auf, die in {{TemplateData}} eingeschlossen sind. Die Aufzählung der Seiten mit der templatedata-Eigenschaft auf der Spezialseite muss identisch sein mit den Doku-Seiten in der Kategorie.
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]- ↑ Wie bei jeder anderen Vorlagensyntax gilt, falls der JSON-Code als Vorlagenparameter übergeben wird: Pipe-Symbole sind geeignet zu maskieren, etwa durch
{{!}}
oder|
– und unbalancierte}}
desgleichen. - ↑
Beispiele in der Vorlage:
{{{Stadt|{{{city|}}}}}}
{{{5|{{{Sonderfall|}}}}}}
city
ein Alias fürStadt
undSonderfall
ein Alias für den fünften unbenannten Parameter. - ↑
Sinnvolle Anwendungen wären:
- Datum (Tag, Monat, Jahr)
- Uhrzeit (Stunde, Minuten, Sekunden, Millisekunden, Zeitzone)
- Koordinate (Grad, Minuten, Sekunden, Himmelsrichtung)