„Hilfe:TemplateData“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Inhalt gelöscht Inhalt hinzugefügt
K Linkzielfix + kl. Anpassung Format + Anker? parms highlighted?
Ausgliederung von Hilfe:TemplateData/JSON
Zeile 169: Zeile 169:


== {{Anker|JSON-Struktur}} Struktur des TemplateData-Objekts ==
== {{Anker|JSON-Struktur}} Struktur des TemplateData-Objekts ==
Siehe dazu [[Hilfe:TemplateData/JSON]].
<div style="border:1px solid #8888CC; background:#EEEEFF; padding:1em; margin-bottom:2em;">
''Hinweis:'' Dieser Abschnitt beschreibt die zugrundeliegende Datenstruktur des TemplateData-Objekts als technische Hintergrundinformation. Wenn die im vorigen Abschnitt genannte formulargestützte Erstellung und Bearbeitung genutzt wird, können dieser und die folgenden Abschnitte daher übersprungen werden.</div>

Das in <code>&lt;templatedata>...&lt;/templatedata></code> eingebettete [[JavaScript Object Notation|JSON]]-Objekt (root) muss mindestens eine Komponente <code>params</code> 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|InterfaceText]] oder <code>null</code>
; params
: Objekt, das für jeden Vorlagenparameter ein [[#Parameter-Objekt|Parameter-Objekt]] enthält.
: Pflichtangabe; aber <code>{}</code> ausreichend für eine parameterlose Vorlage.
:* Typ: Objekt
; sets
: ''Optional''
: Array mit [[#Set-Objekte|Set-Objekten]], auf die für Parametergruppen Bezug genommen wird.
:* Typ: Array
; format
: Soll die Vorlage blockartig, d.h. ein Parameter je Zeile, oder alles auf einer Zeile ausgegeben werden.
:* Typ: <tt>block</tt> oder <tt>inline</tt> (Standard)
Andere als diese vier Komponenten sind in diesem Objekt auf der Dokumentationsseite nicht erlaubt.

Bei Abfragen über die [[Wikipedia:Technik/Datenbank/API|API]] wird allerdings eine weitere Komponente zurückgeliefert:
; paramOrder
: ''Automatisch generiert''
: Array mit den Komponenten-Bezeichnern im [[#params|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 <code>&lt;templatedata></code> gebildet.
: Das Array ist erforderlich, weil die Reihenfolge von Komponenten in einem Objekt beliebig und nicht vorhersagbar ist.

=== InterfaceText ===
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 <code>de</code> oder <code>de-ch</code> oder <code>en</code>) 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. <code>[[Hilfe:URL-Parameter#Sonstige|uselang=]]</code> 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.

=== {{Anker|params}} Parameter-Objekt ===
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 <code>params</code> des TemplateData-Objekts ist ein Objekt, bei dem jedem Namen eines Vorlagenparameters eine Einzelspezifikation zugewiesen wird:
<syntaxhighlight lang="javascript">
{ "description": "Zweck der Vorlage",
"params": { "ParameterA": { ... Einzelspezifikation A ... },
"ParameterB": { ... Einzelspezifikation B ... },
usw. usw.
}
}
</syntaxhighlight>
{| class="wikitable"
|+ Einzelspezifikation; alle Komponenten optional
|-
! Bezeichnung || Komponente !! [[JavaScript#Datentypen|JS-Datentyp]] !! Beschreibung
|-
| Bezeichnung || <code>label</code> || [[#InterfaceText|InterfaceText]]<br /><code>null</code>
| Eine kurze Beschreibung für den Parameter.<br />Der eigentliche Parametername kann stark abgekürzt oder lediglich eine Nummer sein.<br />Es sollte versucht werden, sich auf zwei Dutzend Zeichen zu beschränken.
|-
| Beschreibung || <code>description</code> || [[#InterfaceText|InterfaceText]]<br /><code>null</code>
| Eine kurze Erläuterung zum Parameter.<!-- pick from an option list -->
|-
| Typ || <code>type</code> || string
|
Der „Datentyp“ des Parameterwertes (alle Vorlagenparameter sind Zeichenketten) für Gültigkeitsprüfungen. Einer von:
* <code>"unknown"</code> (Nicht definiert) – ''(Vorgabe)''
* <code>"boolean"</code> (Boolesch) - Wahrheitswert, d.&nbsp;h. <code>0</code> für nein und <code>1</code> für ja
* <code>"content"</code> (Inhalt) – Wikitext, d.&nbsp;h. formatierter Text, Links, Bilder, usw.
* <code>"date"</code> (Datum) – Datum/Zeit nach [[ISO 8601]]
* <code>"line"</code> (Zeile) – kurzer Text, wie er in einzeiligem <code>&lt;input></code> vorkommen kann (Name, Label)
* <code>"number"</code> (Zahl) – lässt sich als Zahl interpretieren
* <code>"string"</code> (Zeichenfolge) – beliebige Zeichenkette
* <code>"wiki-file-name"</code> (Datei) – geeignet als Dateiname ohne Präfix wie <code>Datei:</code>, <code>File:</code> usw.; muss noch nicht existieren
* <code>"wiki-page-name"</code> (Seite) – geeignet als Seitenname; muss noch nicht existieren
* <code>"wiki-user-name"</code> (Benutzer) – geeignet als Benutzername; muss noch nicht existieren
* <code>"unbalanced-wikitext"</code> (Unausgeglichener Wikitext) – Wikitext-Fragment, das nicht wohlgeformte Einzelbestandteile enthält, z.&nbsp;B. <code><nowiki>{{echo|before=<u>|after=</u>}}</nowiki></code>
Veraltet aber weiterhin funktionsfähig sind die folgenden Codes, die baldmöglichst ersetzt werden sollten:
* <code>"string/line"</code> – jetzt nur <code>"line"</code>
* <code>"string/wiki-page-name"</code> – jetzt nur <code>"wiki-page-name"</code>
* <code>"string/wiki-user-name"</code> – jetzt nur <code>"wiki-user-name"</code>
|-
| Erforderlich || <code>required</code> || boolean
| <code>true</code>, falls es sich bei diesem Vorlagenparameter um einen Pflichtparameter handelt.<br />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 || <code>suggested</code> || boolean
| <code>true</code>, falls dieser Vorlagenparameter in den meisten Fällen erwartet wird bzw. standardmäßig angezeigt werden soll.
|-
| Beispiel || <code>example</code> || [[#InterfaceText|InterfaceText]]<br /><code>null</code>
| Mögliche Beispielwerte für den Parameter.
|-
| Standard || <code>default</code> || [[#InterfaceText|InterfaceText]]<br /><code>null</code>
| Standardwert, den die Vorlage annimmt, wenn der entsprechende Parameter nicht ausgefüllt wird. Dies ist lediglich eine visuelle Hilfe, d.&nbsp;h. wenn der entsprechende Parameter nicht vom Benutzer ausgefüllt wird und ein <code>default</code>-Wert angegeben ist, wird dieser beim Speichern ''nicht'' als Standardwert übernommen, sondern der Parameter bleibt leer.
|-
| Autowert || <code>autovalue</code> || string
| Standardwert mit dem der Vorlagenparameter ausgefüllt werden soll, z.&nbsp;B. <tt><nowiki>{{subst:#time:Y-m-d}}</nowiki></tt> wenn ein Parameter mit dem aktuellen Datum (im Format JJJJ-MM-TT) ausgefüllt werden soll.
|-
| – || <code>inherits</code> || string
| Name eines anderen Parameters, dessen Spezifikation als Basis für diesen Parameter geerbt werden soll. Zusätzlich angegebene Komponenten überschreiben diese Ausgangswerte.
|-
| – || <code>deprecated</code> || boolean<br />string
|
* <code>true</code>, falls veraltet
* Zeichenkette, mit kurzer Begründung für den Anlass; etwa als Tooltip
|-
| Aliasse || <code>aliases</code> || Array of strings
|
Liste von Aliasnamen. Ein Aliasname ist ein in der Vorlagenprogrammierung verwendeter Alternativname, der genauso wirksam ist wie die Standardform.<ref name="alias" /> Für einen reinen Aliasnamen wird keine gesonderte Einzelspezifikation angelegt.<br />Wenn zusätzliche Informationen erforderlich sind, ist eine gesonderte Einzelspezifikation zu benutzen und ggf. als <code>"deprecated"</code> zu markieren.
|}
Die Spalte Bezeichnung gibt den Namen dieses Parameter im eingebauten Vorlagendokumentations-Editor wieder. Falls diese "–" ist, dann kann diese über den Editor nicht angegeben werden.

=== Set-Objekte ===
Das Array <code>sets</code> kann Objekte mit der folgenden Struktur enthalten:
{| class="wikitable" id="Set"
|-
! Komponente !! Datentyp !! Beschreibung
|-
| <code>label</code> || [[#InterfaceText|InterfaceText]]
| Eine kurze Bezeichnung für den Parametersatz.<br />Es sollte versucht werden, sich auf zwei Dutzend Zeichen zu beschränken.
|-
| <code>params</code> || Array
| Ein Array mit Namen von Parametern in diesem Set.<br />Es muss sich um Bezeichner handeln, die im [[#Parameter-Objekt|Parameter-Objekt]] definiert sind.
|}
Zurzeit (Sommer 2015) ist noch keine Realisierung in der Benutzeroberfläche des [[Hilfe:VisualEditor|VisualEditor]] ersichtlich.<ref name="sets" />

=== JSON-Format ===
* Eine Zuweisung besteht aus dem Namen der Komponente, einem Doppelpunkt&nbsp;<code>:</code> und dem zugewiesenen Wert.
* Während dies bei allgemeinen JavaScript-Objekten nicht erforderlich ist, muss in JSON der Name in Anführungszeichen&nbsp;<code>"</code> eingeschlossen werden.
* Jedes Objekt ist in geschweifte Klammern <code>{}</code> einzuschließen.
* Als Wert kann ebenfalls ein neues Objekt auftreten.
* Zeichenketten sind in <code>"</code> 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 <code>"</code> vorkommen, muss es durch <code>\"</code> escaped werden; ein einzelner <code>\</code> ist als <code>\\</code> anzugeben.
* Das allereinfachste zulässige TemplateData-Element wäre damit:
*: <code><nowiki><templatedata>{"params":{}}</templatedata></nowiki></code>
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 [[Wikipedia:Technik/Werkstatt|Technik-Werkstatt]] hilft weiter.

== Code-Beispiele ==
Ein einfacheres und ein komplexeres Beispiel für die Definition und die Darstellung auf der Dokumentationsseite.

=== {{Anker|Commonscat}} Vorlage:Commonscat ===
Der nachstehende Code bewirkt die [[#Commonscat.render|darunter]] wiedergegebene Tabelle, wie sie für {{Vorlage|Commonscat}} benutzt wird. Daraus wird [https://de.wikipedia.org/w/api.php?action=templatedata&titles=Vorlage:Commonscat&format=jsonfm diese für Werkzeuge abrufbare Struktur] erzeugt.
<syntaxhighlight lang="javascript" style="overflow:auto">
{{TemplateData|<templatedata>
{ "description": "Verlinken einer Kategorie auf Wikimedia Commons",
"params": { "1": { "label": "Commons-Kategorie",
"description": "Die zu verlinkende Commons-Kategorie",
"default": "(Name der aktuellen Seite)",
"type": "wiki-page-name",
"required": false
},
"2": { "label": "Deutscher Name",
"description": "Angezeigter Name der Kategorie auf Deutsch, wenn abweichend",
"type": "string",
"required": false
},
"3": { "label": "Sammlung von …",
"description": "s = „Sammlung von Bildern“",
"default": "Sammlung von Bildern, Videos und Audiodateien",
"type": "string",
"required": false
}
}
}
</templatedata>}}
</syntaxhighlight>


{{Anker|Commonscat.render}}
{{TemplateData|<templatedata>
{ "description": "Verlinken einer Kategorie auf Wikimedia Commons",
"params": { "1": { "label": "Commons-Kategorie",
"description": "Die zu verlinkende Commons-Kategorie",
"default": "(Name der aktuellen Seite)",
"type": "wiki-page-name",
"required": false
},
"2": { "label": "Deutscher Name",
"description": "Angezeigter Name der Kategorie auf Deutsch, wenn abweichend",
"type": "string",
"required": false
},
"3": { "label": "Sammlung von …",
"description": "s = „Sammlung von Bildern“",
"default": "Sammlung von Bildern, Videos und Audiodateien",
"type": "string",
"required": false
}
}
}
</templatedata>
}}

=== {{Anker|inherits/Anker}} "inherits" – Vorlage:Anker ===
Der nachstehende Code bewirkt die [[#Anker.render|darunter]] wiedergegebene Tabelle ([[Vorlage:Anker]]). Hier wird für die wiederholten optionalen Parameter die Komponente <code>"inherits"</code> genutzt. Daraus wird [https://de.wikipedia.org/w/api.php?action=templatedata&titles=Vorlage:Anker&format=jsonfm diese für Werkzeuge abrufbare Struktur] erzeugt.
<syntaxhighlight lang="javascript" style="overflow:auto">
{{TemplateData|<templatedata>
{ "description": "Linkziel(e) zu einem Abschnitt oder einem Element in dieser Wiki-Seite vereinbaren",
"params": { "1": { "label": "Anker-1",
"description": "Fragmentbezeichner",
"type": "string",
"required": true },
"2": { "label": "Anker-2",
"inherits": "1",
"description": "Weiterer Fragmentbezeichner",
"required": false },
"3": { "label": "Anker-3",
"inherits": "2" },
"4": { "label": "Anker-4",
"inherits": "2" },
"5": { "label": "Anker-5",
"inherits": "2" },
"6": { "label": "Anker-6",
"inherits": "2" }
}
}
</templatedata>}}
</syntaxhighlight>


{{Anker|Anker.render}}
{{TemplateData|<templatedata>
{ "description": "Linkziel(e) zu einem Abschnitt oder einem Element in dieser Wiki-Seite vereinbaren",
"params": { "1": { "label": "Anker-1",
"description": "Fragmentbezeichner",
"type": "string",
"required": true },
"2": { "label": "Anker-2",
"inherits": "1",
"description": "Weiterer Fragmentbezeichner",
"required": false },
"3": { "label": "Anker-3",
"inherits": "2" },
"4": { "label": "Anker-4",
"inherits": "2" },
"5": { "label": "Anker-5",
"inherits": "2" },
"6": { "label": "Anker-6",
"inherits": "2" }
}
}
</templatedata>
}}

=== {{Anker|aliases|TemplateDataGenerator}} "aliases" – Vorlage:TemplateDataGenerator ===
Der nachstehende Code bewirkt die [[#TemplateDataGenerator.render|darunter]] wiedergegebene Tabelle ([[Vorlage:TemplateDataGenerator]]). Hier wird für die alternative Variante des Sortierungs-Parameters die Komponente <code>"aliases"</code> genutzt. Daraus wird [https://de.wikipedia.org/w/api.php?action=templatedata&titles=Vorlage:&format=jsonfm diese für Werkzeuge abrufbare Struktur] erzeugt.
<syntaxhighlight lang="javascript" style="overflow:auto">
{{TemplateData|<templatedata>
{ "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" ]
}
}
}
</templatedata>}}
</syntaxhighlight>


{{Anker|TemplateDataGenerator.render}}
{{TemplateData|<templatedata>
{ "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" ]
}
}
}
</templatedata>
}}

=== {{Anker|sets|unsigned}} "sets" – unsigned ===
Der nachstehende Code bewirkt die [[#unsigned.render|darunter]] wiedergegebene Tabelle, in der die Komponente <code>"sets"</code> verwendet wird. ''(vorläufig bis deutschsprachiger Ersatz)'':
<syntaxhighlight lang="javascript" style="overflow:auto">
{
"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"]
}
]
}
</syntaxhighlight>


{{Anker|unsigned.render}}
{{TemplateData|<templatedata>
{
"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"]
}
]
}
</templatedata>
}}


== Hilfsmittel und Hilfen ==
== Hilfsmittel und Hilfen ==
Zeile 551: Zeile 176:
* [[:Kategorie:Vorlage:mit TemplateData]] – Besser lesbar und würde keine Weiterleitungen aufzählen; dafür sind momentan zwangsläufig Vorlagenprogrammierung und Dokumentationsseite aufgeführt.
* [[:Kategorie:Vorlage:mit TemplateData]] – 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 {{Vorlage|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.
** Die Kategorisierung zählt nur Verwendungen auf, die in {{Vorlage|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 ===
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:
* [http://jsonlint.com/ jsonlint.com] – der Code kann auf diese Seite kopiert werden und zeigt die fehlerhaften Zeilen.
Jeder andere [[Wikipedia:Technik/Skin/JS#lint|JavaScript-Validierer]] kann ebenso zur ersten Fehlersuche verwendet werden.
* [http://www.jshint.com/ jshint.com] – Gleiches Prinzip; Analyse mittels [[JSHint]].


=== Generatoren ===
=== Generatoren ===
Zeile 574: Zeile 190:
Die TemplateData-Verwendung wurde im Frühsommer 2013 weltweit gestartet.
Die TemplateData-Verwendung wurde im Frühsommer 2013 weltweit gestartet.


Zu technischen Details für Programmierer siehe [[Hilfe:TemplateData/JSON #Sonstiges]].
=== Abfrage über die API ===
Mittels der [[Wikipedia:Technik/Datenbank/API|API]] kann zu einer Vorlage die gültige Definition zu einer Vorlage abgefragt werden. Damit stehen sie anderen Software-Werkzeugen zur Verfügung.


Wenn du Wünsche hast, dann kannst du es über [[Wikipedia:Technik/Phabricator|Phabricator]] mitteilen oder [[Wikipedia:Technik/Text/Edit/VisualEditor/Rückmeldungen|mitteilen lassen]]. Das gleiche gilt für Bugmeldungen.
Die spezifische API-Syntax ist [https://de.wikipedia.org/w/api.php?action=help&modules=templatedata automatisch generiert] abrufbar, aber nicht sehr aussagekräftig.

Ein Aufruf für die durch Software unmittelbar nutzbare Form wäre [https://de.wikipedia.org/w/api.php?action=templatedata&titles=Template:Commonscat action=templatedata&titles=Template:Commonscat]&nbsp;– in einer menschenfreundlicher formatierten Darstellung [[#Commonscat|siehe oben]].

=== Anpassung der Darstellung der Parametertabelle ===
Für das [[Hilfe:Tags|Tag]] <code>&lt;TemplateData></code> sind zurzeit keine eigenen Attribute vorgesehen.

Die [[Hilfe:Tags#Attribute|Standard-Attribute]] <code>id= class= style=</code> werden nicht beanstandet; sind jedoch zurzeit wirkungslos.<!-- sollte gePhabt werden; wenigstens id=; oder eine automatische Einheits-ID -->

Die optische Darstellung der auf der Dokumentationsseite angezeigten Tabelle kann angepasst werden.
{| class="wikitable"
! Selektor !! Element
|-
| <code>.mw-templatedata-doc-wrap</code> || Gesamte Beschreibung
|-
| <code>.mw-templatedata-doc-desc</code> || Aufgabenbeschreibung
|-
| <code>.mw-templatedata-doc-params</code> || Tabelle
|-
| <code>.mw-templatedata-doc-param-name</code> || Parametername
|-
| <code>.mw-templatedata-doc-param-type</code> || Parametertyp
|-
| <code>.mw-templatedata-doc-muted</code> || Standardwert
|}

=== Funktionswüsche und Bugs ===
Wenn du Wünsche hast, dann kannst du es über [[Wikipedia:Technik/Phabricator|Phabricator]] mitteilen ([https://phabricator.wikimedia.org/maniphest/task/create/?projects=TemplateData Phabricator-Kategorie]) oder [[Wikipedia:Technik/Text/Edit/VisualEditor/Rückmeldungen|mitteilen lassen]]. Das gleiche gilt für Bugmeldungen.


== Weitere Informationen ==
== Weitere Informationen ==
{{MediaWiki|Extension:TemplateData|Technische Dokumentation (englisch)}}
{{MediaWiki|Extension:TemplateData|Technische Dokumentation (englisch)}}
* [[Vorlage:TemplateData]] – Kennzeichnung generierter Dokumentationsblöcke
* [[Vorlage:TemplateData]] – Kennzeichnung generierter Dokumentationsblöcke
* {{Phab|project=mediawiki/extensions/TemplateData|plain=spec.templatedata.json}} Syntaktische Beschreibung bei der Implementierung (englisch)
* {{Phab|Engage=templatedata}} – Phabricator-Status mit Liste bekannter Bugs und Anfragen zur Funktionalitätserweitung (englisch)
* {{Phab|Engage=templatedata}} – Phabricator-Status mit Liste bekannter Bugs und Anfragen zur Funktionalitätserweitung (englisch)

== Anmerkungen ==
<references>
<ref name="alias">
Beispiele in der Vorlage:
: <code><nowiki>{{{Stadt|{{{city|}}}}}}</nowiki></code>
oder
: <code><nowiki>{{{5|{{{Sonderfall|}}}}}}</nowiki></code>
Dann ist <code>city</code> ein Alias für <code>Stadt</code> und <code>Sonderfall</code> ein Alias für den fünften unbenannten Parameter.
</ref>
<ref name="sets">
Sinnvolle Anwendungen wären:
* Datum (Tag, Monat, Jahr)
* Uhrzeit (Stunde, Minuten, Sekunden, Millisekunden, Zeitzone)
* Koordinate (Grad, Minuten, Sekunden, Himmelsrichtung)
</ref>
</references>


[[Kategorie:Vorlage:mit TemplateData|!]]
[[Kategorie:Vorlage:mit TemplateData|!]]

Version vom 1. Juni 2016, 21:53 Uhr

Dieses Element ermöglicht die Generierung von Angaben über Vorlagen, mit denen sich gültige Einbindungen überprüfen lassen und automatische Dokumentationen und Anwendungshinweise erstellt werden können.

Grundprinzip

Die als TemplateData vereinbarten Informationen über den Zweck der Vorlage und vor allem die detaillierte Beschreibung der Parameter haben zwei Anwendungsbereiche:

  • Erstellung einer standardisierten Dokumentationsseite oder eines wesentlichen Teils davon
  • Auswertung und automatische Generierung von Eingabeformularen für die Parameter nebst automatisierter Gültigkeitsprüfung der Werte schon bei der Eingabe. Dafür gibt es zurzeit zwei Anwendungen:
    1. VisualEditor – aktueller Anlass für die Entwicklung.
    2. Vorlagenmeister – früherer Ansatz, über eine XML-Spezifikation; mit einem Eingabeformular zum Einfügen in den Quelltext der Wikiseite. Falls keine (detailliertere) XML-Beschreibung für eine bestimmte Vorlage vorhanden ist, wird ersatzweise die TemplateData-Struktur zur Produktion eines Eingabeformulars und zur Gültigkeitsprüfung der Eingabedaten herangezogen.

Das Grundprinzip wurde üblichen Software-Dokumentationswerkzeugen entnommen; ist etwa an die mit javadoc zu gewinnenden Informationen angelehnt.

Technisch werden die TemplateData in einem <templatedata>...</templatedata>-Element kodiert, das im Abschnitt Struktur des JSON-Objekts beschrieben wird. Der Inhalt wird von der Software automatisch in Form einer Tabelle dargestellt, durch die im Prinzip die hergebrachte Parameterdokumentation ersetzt werden kann. Voraussetzung ist die syntaktische und semantische Richtigkeit.

Diese werden mit der Vorlagendefinition in Verbindung gebracht. In der deutschsprachigen Wikipedia sollte dies immer auf der Dokumentationsseite /Doku geschehen und nicht direkt im Quelltext der Vorlagenprogrammierung.

  • In der Versionsgeschichte der eigentlichen Programmierung sollen ausschließlich Änderungen an der wirksamen Programmierung erscheinen, niemals jedoch nachrangige Formulierungsverbesserungen an der Dokumentation; diese gehört deshalb auf die Unterseite /Doku.

Dabei wird das Element <templatedata>…</templatedata> immer in eine {{TemplateData}} eingeschlossen, die für eine Umrahmung und eine Verlinkung mit dieser Hilfeseite sorgt.

Die Inhalte von TemplateData sind dafür vorgesehen, in universell nutzbarem Format einfache und kurze Texte bereitzustellen; etwa in Tooltips oder automatisierten Dokumentationssystemen unabhängig vom Wikiprojekt. Elaborierte und komplexe Darstellungen müssen nach wie vor in gesondertem Wikitext aufbereitet werden.

Formulargestützte Erstellung und Bearbeitung

Schritt 1: Vorlagendokumentations-Editor aufrufen

Auf Vorlagen- oder deren Dokumentationsseiten kann das TemplateData-Element automatisch erzeugt werden indem man in den Bearbeitungsmodus geht und dort auf den Knopf Vorlagendaten verwalten am Seitenkopf klickt. Auf die gleiche Weise können bestehende TemplateData-Elemente nachträglich bearbeitet werden.

Wichtig: Wenn ein neues TemplateData-Element erstellt werden soll, sollte immer zuerst die Vorlagenseite entsprechend aufgerufen werden, da nur so der nachfolgende Editor alle Parameter der Vorlage automatisch finden und importieren kann. Das wie nachfolgend beschrieben am Ende erzeugte templatedata-Element sollte dann auf die entsprechende Dokumentationsseite kopiert und die Änderungen an der Vorlagenseite verworfen werden.

Schritt 2: Parameter automatisch importieren lassen oder manuell hinzufügen

Abbrechen
Anwenden
Vorlagendokumentations-Editor
Sprache hinzufügen
Deutsch

Sprache

Vorlagenbeschreibung (de)

Kurzbeschreibung der Vorlage


Parameterreihenfolge

 
Parameter1
 
Parameter2
 
Parameter3
 
Parameter4


Vorlagenparameter

 
Parameter1
Beschreibung des 1. Parameters
 
Parameter2
Beschreibung des 2. Parameters
 
Parameter3
Beschreibung des 3. Parameters
 
Parameter4
Beschreibung des 4. Parameters
Parameter hinzufügen

Nach dem Klick auf den Knopf erscheint der rechts abgebildete Vorlagendokumentations-Editor, der im Abschnitt Vorlagenparameter die gefunden Parameter auflistet, die mit einem Klick auf vorgeschlagene Parameter hinzufügen importiert werden können, die dann alle wie rechts beispielhaft abgebildet aufgelistet werden.

Die einzelnen Abschnitte sind:

Sprache
Hiermit kann die Dokumentationssprache der Vorlage geändert werden in dem mit einem Klick auf Sprache hinzufügen eine neue hinzugefügt oder aus dem Auswahlliste eine bestehende ausgewählt werden kann. Generell ist dies jedoch nicht notwendig und sollte auf Deutsch belassen werden.
Vorlagenbeschreibung (de)
In diesem Abschnitt sollte eine knappe einzeilige Beschreibung der Vorlage eingegeben werden, die dann im VisualEditor neben dem jeweiligen Vorlagennamen aufgeführt wird.
Parameterreihenfolge
Hier werden alle gefunden Parameter aufgeführt und deren Reihenfolge ausgegeben. Bei einem Parameterimport kann die Reihenfolge evtl. durcheinander sein und hier mittels Drag and Drop korrigiert werden. Die Reihenfolge beeinflusst, dabei nicht die Auflistung der Parameter im Vorlagen-Formular des VisualEditors, sondern auch im endgültigen Quelltext. Die Reihenfolge der Parameter sollte daher stets mit der von evtl. Beispielen, Kopierschnipseln usw. der jeweiligen Vorlagendokumentation übereinstimmen.
Vorlagenparameter
Diese wichtigste Abschnitt listet alle gefunden Parameter und deren Kurzbeschreibung, sowie vorhanden. Mit einem Klick auf den jeweiligen Parameter können bzw. bei einem neuen TemplateData-Element müssen hier die Zusatzinformationen (Metadaten) der Parameter hinzugefügt werden. Dabei erscheint ein weiteres Formular wie nachfolgend abgebildet.
Parameter hinzufügen
Am Ende des Formulars befindet sich ein weiter Knopf mit weitere Parameter hinzugefügt werden können, falls der automatische Import diese übersehen hat oder die Vorlage nachträglich um weitere Parameter ergänzt wurde.
Anwenden
Änderungen übernehmen und TemplateData-Element ausgeben.

Schritt 3: Parameter beschreiben

Zurück
Vorlagendokumentations-Editor
Name
 
Aliasse (durch Kommas getrennt)
 
Bezeichnung (de)
 
Beschreibung (de)
 
Beispiel (de)
 
Typ (de)
 
Standard (de)
 
Autowert
 
Veraltet
 
Erforderlich
 
Vorgeschlagen
 
Parameterinformationen entfernen

Das Vorlagenparameter-Formular besitzt folgende Felder:

Name
Bezeichnet den primären Namen des Parameters, d. h. denjenigen der am Ende ausgegeben werden soll. Unbenannte Parameter bekommen eine Nummer, die deren Position in der Vorlage angibt.
Aliasse
Listet die alternativen Namen des Parameters auf, wobei die einzelnen Einträge durch Kommas getrennt werden müssen. Hinweis: Wenn die Parameter automatisch importiert wurden, werden für alternativen Namen im vorigen Formular ebenfalls Einträge angelegt, da die Importmechanismus nicht erkennen kann, ob ein Parametername eine Alternativbezeichnung oder ein eigenständiger Parameter ist. Diese falschen Parametereinträge müssen in diesem Formular mit einem Klick auf den Knopf Parameterinformationen entfernen am Formularende gelöscht werden und deren Namen im Aliasse-Feld des korrekten Parametereintrags eingetragen werden.
Bezeichnung
Falls von dem Parameternamen nicht automatisch auf die Funktion geschlossen werden kann, kann hier eine verständlichere Bezeichnung angegeben werden, die im VisualEditor verwendet werden soll.
Beschreibung
Eine Beschreibung der Funktion des Parameters. Hinweis: Die Beschreibung unterstützt keine Wikitext-Sprachelemente wie Links, Formatierungen, usw., so dass auf diese verzichtet werden muss.
Beispiel
In diesem Feld kann ein Beispielwert angegeben werden, der im VisualEditor bei noch leeren Parametern anfangs angezeigt wird, damit der Vorlagennutzer erkennen kann, wie ein gültiger Eintrag aussehen muss.
Typ
Hier kann der Datentyp des Parameters angegeben werden, d. h. welche Werte der Parameter akzeptiert. Dabei kann nach folgende Checkliste vorgegangen werden, d. h. der Parameter erlaubt:
  1. Wikitext, z. B. Wikilinks, Formatierungen → Inhalt
  2. nur Name einer Medien- bzw. Bilddatei ohne Präfix (z. B. Datei:, Bild:, …) → Datentyp Datei
  3. nur Benutzername → Benutzer
  4. nur Artikel- oder sonstiger Seitenname → Seite
  5. nur Zahl, idealerweise ohne Tausendertrennzeichen und mit Punkt . als Dezimaltrenner → Nummer
  6. nur Datum nach ISO 8601, d. h. üblicherweise JJJJ-MM-TT → Datum
  7. nur Wahrheitswert mit 0 = Nein und 1 = Ja → Boolesch
  8. akzeptiert nicht wohlgeformten Wikitext, z. B. schließendes Tag ohne öffnendes Tag und umgekehrt → Unausgeglichener Wikitext
  9. sonstiger einzeiliger Text → Zeile
  10. sonstiger mehrzeiliger Text → Zeichenfolge
  11. unbekannt → Nicht definiert
Standard
Hier kann angegeben werden, welcher Wert von der Vorlage implizit angenommen wird, wenn der Parameter nicht ausgefüllt wird. Beispielsweise nutzen viele Infobox-Vorlagen den Seitentitel als Überschrift oder verwenden für Bilder eigene Bildgrößen (z. B. 200px) und besitzen einen Extra-Parameter mit dem dieses Verhalten überschrieben werden kann. In diesen Fällen kann dann bei diesen Parametern hier "Seitentitel" oder "200px" angegeben werden.
Autowert
Hier kann angegeben werden mit welchem Wert ein noch leerer Vorlagenparameter vorausgefüllt werden soll, der dann auch im Quelltext abgespeichert wird.
Veraltet
Gibt an, ob der Parameter veraltet ist. Wenn ein Parameter als veraltet markiert wurde, dann erscheint ein zusätzliches Eingabefeld in dem ein kurzer Hinweis angegeben werden sollte, wie weiter verfahren werden soll, z. B. welcher Parameter statt dessen genutzt werden sollte.
Erforderlich
Gibt an ob der Parameter unbedingt notwendig ist, damit die Vorlage ordnungsgemäß funktioniert.
Vorgeschlagen
Vorgeschlagene Parameter sind solche, deren Nutzung empfohlen wird, d. h. jene die am häufigsten verwendet werden. Diese werden im VisualEditor immer angezeigt und müssen nicht erst ergänzt werden und werden am Ende auch immer im Quelltext ausgegeben, selbst wenn sie nicht ausgefüllt wurden.
Parameterinformationen entfernen
Hiermit kann der Parameter gelöscht werden. Dies sollte nur gemacht werden, wenn der Parameter entweder aus der Vorlage vollständig entfernt wurde oder ein Alternativname eines bestehenden Parameters ist. Parameter die nicht mehr verwendet werden sollten und nur aus Kompatibilitätsgründen noch von der Vorlage unterstützt werden, sollten statt dessen als Veraltet markiert werden.
Zurück
Änderungen übernehmen und zur Parameterübersicht zurückkehren.

Schritt 4: Änderungen übernehmen

Nachdem alle Parameter beschrieben wurden, kann im Hauptformular auf Anwenden geklickt werden, woraufhin das TemplateData-Element erstellt wird. Falls die Vorlage eine Dokumentationsseite besitzt und man wie Eingangs beschrieben das TemplateData-Element auf der Vorlagenseite erzeugt hat, bitte das Element auf die Dokumentationseite kopieren und die Änderungen an der Vorlagenseite verwerfen.

Nach einer inhaltlichen Änderung der Informationen kann man optional einen Null-Edit auf der Vorlagenseite tätigen, damit auch diese im Cache umgehend aktualisiert wird und die Metadaten baldmöglichst allen Werkzeugen zur Verfügung stehen.

Struktur des TemplateData-Objekts

Siehe dazu Hilfe:TemplateData/JSON.

Hilfsmittel und Hilfen

Die Verwendung von TemplateData in dieser Wikipedia wird protokolliert unter:

  • Special:PagesWithProp/templatedata
  • Kategorie:Vorlage:mit TemplateData – 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.

Generatoren

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 Vorlagenmeister 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 Benutzerskript 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 Technik-Werkstatt weiter.

Sonstiges

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

Zu technischen Details für Programmierer siehe Hilfe:TemplateData/JSON #Sonstiges.

Wenn du Wünsche hast, dann kannst du es über Phabricator mitteilen oder mitteilen lassen. Das gleiche gilt für Bugmeldungen.

Weitere Informationen

MediaWiki: Technische Dokumentation (englisch) – Freie Wikisoftware (englisch)
  • Vorlage:TemplateData – Kennzeichnung generierter Dokumentationsblöcke
  • #templatedata – Phabricator-Status mit Liste bekannter Bugs und Anfragen zur Funktionalitätserweitung (englisch)