Vorlagenprogrammierung | Diskussionen | Lua | Test | Unterseiten | |||
Modul | Deutsch | English
|
Modul: | Dokumentation |
TemplatePar
– Modul mit Hilfsfunktionen für die Vorlagenprogrammierung; namentlich die Analyse der Parameter der umgebenden Vorlageneinbindung.
Zusätzlich werden analog auch Lua-Module unterstützt.
- assert – Einzelne Zeichenkette prüfen
- check – Gesamt-Einbindung der Vorlage prüfen
- count – Anzahl der Parameter der Vorlage
- countNotEmpty – Anzahl der nicht-leeren Parameter der Vorlage
- downcase – Alle Parameternamen in Kleinbuchstaben
- match – Vorlageneinbindung mit gefordertem Profil abgleichen
- valid – Einzelnen Parameterwert prüfen
- verify – Gesamtparameter des
#invoke
prüfen - failsafe – Versionskontrolle
Insbesondere sollen den Anwendern für Standardfälle der Parameteranalyse auf einfache Weise Standard-Fehlermeldungen dargestellt werden.
Funktionen für Vorlagen
BearbeitenEinzelfunktionen
BearbeitenAlle Funktionen wirken hinsichtlich der analysierten Parameter auf die umgebende Vorlageneinbindung; die Parameter von #invoke
spezifizieren die Regeln für die Analyse.
assert
Bearbeiten- Überprüfung einer beliebigen Zeichenkette nach den Regeln für das Parameterformat.
- 1
- Zu untersuchende Zeichenkette (Pflichtparameter).
- 2
- Format („Nur Ziffern“, „ASCII“, begrenzter Zeichensatz, Lua-pattern); siehe unten. Optional, aber sinnvollerweise in der Regel anzugeben.
check
Bearbeiten- Überprüfung auf vorgesehene und unerwartete Parameter der Vorlageneinbindung; Vollständigkeit von Pflichtangaben. Details siehe unten.
- Eine Fehlermeldung wird mit
class=error
zurückgegeben. - Wenn nichts zurückgegeben wird, scheint alles in Ordnung zu sein.
- Parameter (alle optional):
- all
- Namen der Pflichtparameter; müssen auch mit Wert belegt sein.
- Untereinander durch Gleichheitszeichen
=
getrennt. - Fehlende Angaben lösen eine Standard-Fehlermeldung aus; wenn individuelle Fehlermeldungen gewünscht werden, sind sie unter opt aufzuführen und mittels Vorlagenprogrammierung zu analysieren.
- opt
- Namen der optionalen Parameter.
- Untereinander durch Gleichheitszeichen
=
getrennt. - low
- Ignoriere Groß- und Kleinschreibung.
- →Beispiele und Test.
count
Bearbeiten- Anzahl der Parameter der umgebenden Vorlageneinbindung.
- Parameter: Keine (beim #invoke)
- Das Ergebnis ist eine Zahl ab
0
. - →Beispiele und Test.
countNotEmpty
Bearbeiten- Anzahl der Parameter der umgebenden Vorlageneinbindung, die nicht leer sind (höchstens Leerzeichen oder Zeilenumbruch enthalten).
- Parameter: Keine (beim
#invoke
) - Das Ergebnis ist eine Zahl ab
0
. - →Beispiele und Test.
match
Bearbeiten- Umgebende Vorlageneinbindung mit gefordertem Profil abgleichen. Für Lua-Schnittstelle zurzeit noch nicht vorgesehen; dort individuell zusammenzustellen.
- 1
- Regel im Format
1=
Parametername=
Spezifikation - Die Spezifikation entspricht der von valid.
- nnn…
- Wie 1 – beliebig viele unbenannte Parameter als Regeln; in beliebiger Reihenfolge und nicht lückenlos.
- Alle zulässigen Parameternamen müssen aufgelistet werden; optionale sind mit der Bedingung
*
anzugeben oder einer geeigneten Spezifikation zu unterwerfen. - Es wird eine Fehlermeldung (
class=error
) zurückgegeben, wenn etwas nicht stimmt; sonst nichts. - Fatale Fehler führen in der folgenden Reihenfolge zum Abbruch: Unbekannter Parametername – fehlender Parameter – ungültiger Parameterwert.
- →Beispiele und Test.
- Mittels der Funktion lässt sich durch einen einzigen Aufruf gleichzeitig für alle Parameter eine Prüfung ausführen auf
- Pflichtparameter vorhanden?
- keine unbekannten Parameternamen (Falschschreibung)?
- gültige Werte für jeden Parameter?
- Für jeden Parameternamen bei der Vorlageneinbindung muss mindestens eine Regel vorhanden sein. Gibt es für einen Vorlagenparameter keine Regel, ist er unbekannt und damit unzulässig.
- Für denselben Parameternamen kann es mehrere Regeln geben. Die Einhaltung der Regeln wird in der Reihenfolge geprüft, in der sie vereinbart werden.
- Die Reihenfolge der Parameternamen ist ohne Bedeutung.
valid
Bearbeiten- Überprüfung eines einzelnen Parameterwerts.
- Eine Fehlermeldung wird mit
class=error
zurückgegeben. - Wenn nichts zurückgegeben wird, scheint alles in Ordnung zu sein.
- Parameter (bis auf 1 alle optional):
- 1
- Name des einzelnen Parameters.
- 2
- Format („Nur Ziffern“, „ASCII“, begrenzter Zeichensatz, Lua-pattern); siehe unten.
- min
- Mindestlänge ≥0.
- max
- Maximale Länge >0.
- low
- Ignoriere Groß- und Kleinschreibung.
- Aus der Gruppe 2, min, max sollte sinnvollerweise wenigstens eine angegeben werden.
- →Beispiele und Test.
failsafe
BearbeitenDie Failsafe-Schnittstelle erlaubt den damit ausgerüsteten Modulen in globaler Verteilung
- sicherzustellen, dass eine von einer Vorlage oder einem Modul benötigte Funktion in der lokalen Kopie eines Bibliotheksmoduls vorhanden ist, und ggf. auch in einer erforderlichen Mindestversion;
- die globale Aktualisierung und Verknüpfung von Modulen über Wikidata zu verwalten.
Die Failsafe-Schnittstelle liegt sowohl auf Ebene der Vorlagen wie auch in direktem Lua-Zugriff vor.
Die Funktionen sind im Einzelnen (nicht alle werden bereits überall in vollem Umfang unterstützt):
Wert | Ergebnis | aktuell |
---|---|---|
nichtsfalse
|
lokale Version | »2023-03-20« |
Mindestversion | Mindestversionsbezeichnung Datum im ISO-Format Es wird verglichen, ob das aktuelle Modul diese Version oder später erfüllt.
|
|
wikidata
|
Versionsbezeichnung der globalen Mutter (d:Q15393417)
|
»2023-03-20« |
item
|
ID des Wikidata-Items
|
»Q15393417« |
~
|
Übereinstimmung der lokalen mit der auf Wikidata registrierten Versionsbezeichnung
|
»« |
@
|
Ist die aktuelle (Modul-)Seite richtig mit Wikidata verknüpft?
|
|
Der Rückgabewert ist in der Vorlagenprogrammierung leer und per Lua false ; andernfalls die angegebene Zeichenkette.
|
Handhabung von Fehlern
BearbeitenAlle Funktionen, die auf einen Fehlerfall führen können (check, valid sowie downcase, verify), unterstützen auch die nachstehenden Parameter:
- template
- Titel der für Autoren sichtbaren Vorlage (für Fehlermeldungen).
- Kann auch ein anderes Schlüsselwort sein; vor allem für Untervorlagen vorgesehen.
- Ein Wikilink ist darin ebenfalls möglich; etwa auf eine bestimmte Doku-, Hilfe- oder Projektseite. (Hier wäre – anders als beim Titel – natürlich der Namensraum anzugeben.)
- cat
- Titel einer Wartungskategorie.
- Im Fehlerfall wird diese aktiviert.
- Mit
errNS
lässt sich die Kategorisierung auf bestimmte Namensräume beschränken. - Falls der Titel die Zeichenkette
@@@
enthält undtemplate
gesetzt ist, wird dies durchtemplate
ersetzt. - errNS
- Durch Leerzeichen getrennte Auflistung von Namensraumnummern, auf die
cat
beschränkt bleibt.
Info: Die Angabe des Parameters ohne Wert (errNS=
) bedeutet keine Namensräume! - format
- Fehlermeldung formatieren oder unterdrücken.
- Standardfall, Standardmeldung mit
class="error"
formatiert:- Parameter
format
nicht angegeben. |format=*
- Parameter
- Unterdrücken (dann sollte
cat=
gesetzt sein):|format=
|format=0
|format=-
- Fester Text:
|format=Fester Text
- Fester Text, eigene Formatierung:
|format=<span …>Fester Text</span>
- Freie Formatierung der Standardmeldung:
- Enthält
@@@
als Platzhalter für die unformatierte Standardmeldung. |format=<span …>Standardmeldung: @@@</span>
- Enthält
- Standardfall, Standardmeldung mit
- preview
- Fehlermeldung im Vorschaumodus immer anzeigen, auch wenn diese sonst unterdrückt ist, also trotz
|format=0
usw. immer Standardmeldung anzeigen:|preview=1
- Fester Text im Vorschaumodus:
|preview=Fester Text
- Fester Text, eigene Formatierung im Vorschaumodus:
|preview=<span …>Fester Text</span>
- Standardmeldung in eigener Formatierung im Vorschaumodus:
|preview=<span …>Standardmeldung: @@@</span>
Lua-Module liefern false
bei fehlerfreier Analyse, ansonsten die Fehlermeldung.
Parameterprüfung (check)
BearbeitenAnwendungsfall für check am Beispiel der {{Information}}:
{{#invoke:TemplatePar
|check
|all= Beschreibung= Quelle= Urheber=
|opt= Datum= Genehmigung= Andere Versionen= Anmerkungen=
|template=[[Vorlage:Information]]}}
- Weil der Name eines Vorlagenparameters kein Gleichheitszeichen
=
enthalten kann, werden diese zur Abtrennung der Namen benutzt. Leerzeichen vor und nach dem Namen werden ignoriert. Zusätzliche Gleichheitszeichen sind unproblematisch. - Die ersten drei Vorlagenparameter des Beispiels sind Pflichtparameter und müssen auch mit Wert angegeben werden.
- Alle bei der Vorlageneinbindung benutzten Parameter, die weder unter
all=
nochopt=
aufgeführt sind, lösen eine Fehlermeldung aus. - Die unbenannten Vorlagenparameter tragen ihre laufende Nummer als Namen; im Übrigen werden die Namen in der Fehlermeldung bezeichnet.
- Es gibt vier Fehlermeldungen:
- #invoke:TemplatePar * Optionsparameter wiederholt
- Beim Aufruf des Moduls wurde ein Name sowohl unter
all=
als auchopt=
angegeben.
- Beim Aufruf des Moduls wurde ein Name sowohl unter
- Fehler bei Vorlage * Parametername unbekannt
- Bei der Vorlageneinbindung wurde ein Parameter benutzt, der weder unter
all=
nochopt=
aufgeführt ist.
- Bei der Vorlageneinbindung wurde ein Parameter benutzt, der weder unter
- Fehler bei Vorlage * Pflichtparameter fehlt
- Bei der Vorlageneinbindung fehlt ein unter
all=
aufgeführter Parameter.
- Bei der Vorlageneinbindung fehlt ein unter
- Fehler bei Vorlage * Pflichtparameter ohne Wert
- Bei der Vorlageneinbindung ist ein unter
all=
aufgeführter Parameter nur mit Gleichheitszeichen, aber ohne sichtbaren Wert angegeben; oder ein unbenannter Parameter ist leer.
- Bei der Vorlageneinbindung ist ein unter
- #invoke:TemplatePar * Optionsparameter wiederholt
- Die Fehlermeldungen sind hierarchisch gestaffelt. Bei einem Schreibfehler, der zu einem Problem höherer Ordnung führt, könnten die weiteren lediglich Folgefehler sein, die sich mit Korrektur des Grundproblems von selbst erledigen. Es wird daher nur die wichtigste gefundene Fehlerkategorie angezeigt.
Parameterformat (valid)
BearbeitenFür die optionale Bedingung 2 in valid gibt es zwei Grundtypen:
- Schlüsselwort
- Erleichterung für Vorlagenprogrammierer; einige Ausdrücke mit Lua-Patterns nicht möglich.
- Siehe Tabelle.
- Spezielle Datentypen wie URL, DOI, ISBN, Datum sind nicht erwünscht. Hier müssten bei jedem neuen Typ alle Artikel (mehrere Hunderttausend) neu zusammengestellt werden. Hingegen gibt es darauf spezialisierte Funktionen wie in URLutil.
- Erleichterung für Vorlagenprogrammierer; einige Ausdrücke mit Lua-Patterns nicht möglich.
- Lua-Pattern (Ustring)
- Eingeschlossen in Schrägstriche, um sie von einem Schlüsselwort unterscheiden zu können und ggf. führende und schließende Leerzeichen bei Werten unbenannter Vorlagenparameter zu identifizieren.
- Die Zeichenketten
|
sowie{{
und}}
sind in der Vorlagenprogrammierung nicht möglich. Dafür sind zu ersetzen:|
→%!
{{
→%((
}}
→%))
Zur Spalte Implementierung siehe Hilfe:Lua/Zeichenketten #Pattern
Schlüssel | Bedeutung | Implementierung |
---|---|---|
ASCII
|
ASCII-Zeichen (Codes 32–126), nur innerhalb einer Zeile, oder leer | ^[ -~]*$
|
ASCII+
|
wie vor; nicht leer | ^[ -~]+$
|
ASCII+1
|
in einem Wort; sonst wie vor und nicht leer | ^[!-~]+$
|
n
|
Nur ASCII-Ziffern 0–9, sowie vorangestelltes Vorzeichen ASCII-Minus, oder leer | ^[%-]?[0-9]*$ einzelnes Minus ausschließen |
n>0
|
Nur ASCII-Ziffern 0–9, ohne Vorzeichen, nicht leer und mindestens eine Ziffer nicht Null | ^[0-9]*[1-9][0-9]*$
|
N+
|
Wie n , aber führende Null nicht erlaubt und nicht leer
|
^[%-]?[1-9][0-9]*$
|
N>0
|
Wie n>0 , aber führende Null nicht erlaubt
|
^[1-9][0-9]*$
|
x
|
Hexadezimalzahl; ASCII-Ziffern 0–9 Buchstaben a–f A–F, oder leer | ^[0-9A-Fa-f]*$
|
x+
|
wie vor; nicht leer | ^[0-9A-Fa-f]+$
|
X
|
Hexadezimalzahl; ASCII-Ziffern 0–9 Buchstaben A–F, oder leer | ^[0-9A-F]*$
|
X+
|
wie vor; nicht leer | ^[0-9A-F]+$
|
0,0
|
Beliebige Zahl; auch kleiner Null; kann Komma enthalten; oder leer | ^[%-]?[0-9]*,?[0-9]*$ nicht nur Minus oder Komma |
0,0+
|
Zahl mit Komma und Nachkommastelle; auch kleiner Null | ^[%-]?[0-9]+,[0-9]+$
|
0,0+?
|
Beliebige Zahl; auch kleiner Null; kann Komma und Nachkommastelle enthalten; nicht leer | ^[%-]?[0-9]+,?[0-9]*$
|
0.0
|
Beliebige Zahl; auch kleiner Null; kann Dezimalpunkt enthalten; oder leer | ^[%-]?[0-9]*[%.]?[0-9]*$ nicht nur Minus oder Punkt |
0.0+
|
Zahl mit Dezimalpunkt und Dezimalstelle; auch kleiner Null | ^[%-]?[0-9]+%.[0-9]+$
|
0.0+?
|
Beliebige Zahl; auch kleiner Null; kann Dezimalpunkt und Dezimalstelle enthalten; nicht leer | ^[%-]?[0-9]+[%.]?[0-9]*$
|
.0+
|
Beliebige Zahl; auch kleiner Null; kann Dezimalpunkt und Dezimalstelle enthalten, aber nicht notwendigerweise mit Ziffer davor; nicht leer | ^[%-]?[0-9]*[%.]?[0-9]+$
|
aa
|
Mindestens zwei Buchstaben (nicht nur nebeneinander: N.N.) oder ein CJK | %a.*%a oder CJK |
ID
|
Identifizierer unter Einschränkungen, wie sie für viele Sprachen üblich sind: ASCII, beginnend mit Buchstaben; weiter Ziffern und Unterstreichungsstrich; oder leer. Die nachfolgenden ASCII-Wörter sind ebenfalls unter dem Aspekt solcher Bezeichner zu sehen; etwa als Komponente einer URL. |
^[A-Za-z]?[A-Za-z_0-9]*$
|
ID+
|
wie vor; aber nicht leer. | ^[A-Za-z][A-Za-z_0-9]*$
|
ABC
|
Wort in ASCII-Großbuchstaben; oder leer. | ^[A-Z]*$
|
ABC+
|
wie vor; aber nicht leer. | ^[A-Z]+$
|
Abc
|
Wort in ASCII-Buchstaben mit nur erstem Buchstaben groß; oder leer. | ^[A-Z]*[a-z]*$
|
Abc+
|
wie vor; aber nicht leer. | ^[A-Z][a-z]+$
|
abc
|
Wort in ASCII-Kleinbuchstaben; oder leer. | ^[a-z]*$
|
abc+
|
wie vor; aber nicht leer. | ^[a-z]+$
|
aBc+
|
Wort in ASCII-Buchstaben mit lower camel casing; nicht leer. | ^[a-z]+[A-Z][A-Za-z]*$
|
base64
|
Base64; oder leer. | ^[A-Za-z0-9%+/]*$
|
base64+
|
wie vor; aber nicht leer. | ^[A-Za-z0-9%+/]+$
|
pagename
|
Zulässiger Seitenname; nicht leer. | nicht #<>[]|{} oder 12710 oder 1–3110
|
|
Zulässiger Titel oder Name einer Mediendatei bei
Als | |
|
Bedingung: Arithmetischer Vergleich oder (auch) numerische Ungleichheit | |
url url+
|
leer oder genau eine Internet URL (Pflicht) |
|
ref
|
<ref> enthalten – Citation needed
|
|
|
leer oder Sprachcode leer oder Leerzeichen-getrennte Liste von Sprachcodes |
|
*
|
leer oder beliebig | |
+ nichts |
nicht leer | %S
|
In Planung | ||
date
|
Irgendein bekanntes Format für Datum und auch Zeit. | |
Hier eher nicht vorgesehen | ||
|
Beispiele (Testseite)
BearbeitenEine Testseite illustriert praktische Beispiele.
Funktionen für Lua-Module
BearbeitenDie Funktionen für Vorlagen sind geeignet erreichbar. Zur prinzipiellen Funktionalität siehe jeweils dort. Weitere Funktionen nur für Module kommen hinzu.
Einbindung über require()
:
local lucky, TemplatePar = pcall( require, "Modul:TemplatePar" )
if type( TemplatePar ) == "table" then
TemplatePar = TemplatePar()
else
-- Fehlerfall; TemplatePar enthält Fehlermeldung
return "<span class='error'>" .. TemplatePar .. "</span>"
end
Danach stehen zur Verfügung:
- TemplatePar.assert(analyze,append,options)
- Analysiere eine Zeichenkette wie mit valid.
- analyze
-
- string; zu analysieren
- append
-
- string; Fehlermeldung anhängen;
<br />
voranstellen, wenn nicht leer - sonst: Fehler werfen
- string; Fehlermeldung anhängen;
- options
- table; Details;
options
und alle Komponenten optionalkey
- string; Schlüsselwort
pattern
- string; Pattern
min
- number
max
- number
template
cat
errNS
format
preview
- Rückgabewert:
false
, wenn in Ordnung; sonst Fehlermeldung - TemplatePar.check(options)
-
- options
- table; Details;
options
und alle Komponenten optionalmandatory
- table; sequence mit Namen der Pflichtparameter
optional
- table; sequence mit Namen der optionalen Parameter
low
true
: ignoriere Groß- und Kleinschreibung
template
cat
errNS
format
preview
- Rückgabewert:
false
, wenn in Ordnung; sonst Fehlermeldung - TemplatePar.count()
- TemplatePar.countNotEmpty()
- TemplatePar.downcase(options)
- Alle Vorlagenparameter in Kleinschreibung
- Liefert table mit den
.args
(number bei unbenannten, string bei benannten Vorlagenparametern). - Fehlermeldung, wenn der gleiche Name in unterschiedlichen Schreibungen auftritt.
- options
- table; Details;
options
und alle Komponenten optionaltemplate
cat
errNS
format
preview
- TemplatePar.valid(seek, options)
-
- seek
- Zeichenkette; Name des Vorlagen-Parameters.
- options
- table; Details;
options
und alle Komponenten optionalkey
- string; Schlüsselwort
pattern
- string; Pattern
min
- number
max
- number
low
true
: ignoriere Groß- und Kleinschreibung
template
cat
errNS
format
preview
key
undpattern
können nicht gleichzeitig angegeben werden.
- Rückgabewert:
false
, wenn in Ordnung; sonst Fehlermeldung - TemplatePar.verify(options)
- Wie
TemplatePar.check()
, jedoch Parameter des#invoke
- TemplatePar.failsafe(atleast)
-
- atleast
- optional
- nil oder Mindestversion oder
"wikidata"
- Rückgabewert:
false
oder string - TemplatePar()
- Liefert table mit dem Zugriff auf die Funktionen (veraltet).
Verwendung
BearbeitenAllgemeines Hilfsmittel; nicht eingegrenzt.
Abhängigkeiten
BearbeitenFortgeschrittene Prüfungen der Parametersyntax benötigen die folgenden Bibliotheken:
- FileMedia –
file
/image
- Multilingual –
lang
- URLutil –
url
Internationalisierung
BearbeitenFehlermeldungen sind grundsätzlich in englischer Sprache verfügbar.
Wenn im aktuellen Projekt ein zur Projektsprache passendes Datenmodul vorhanden ist, wird es automatisch statt der englischen Texte verwendet. Langfristig soll statt der Projektsprache sogar die Seiten- bzw. Benutzersprache verwendet werden.
Die nachstehenden Übersetzungen sind bekannt:
- als:Module:TemplatePar/als – Alemannisch (nicht toskisch)
- ast:Module:TemplatePar/ast – asturisch
- frr:Module:TemplatePar/frr – nordfriesisch
- ilo:Module:TemplatePar/ilo – Ilokano
- sr:Module:TemplatePar/sr – serbisch (kyrillisch)
Die nicht-englischen Mitteilungen sollen als Systemnachrichten in MediaWiki: ausgelagert werden, um bei weiteren Sprachen und Umformulierungen nicht alle einbindenden Seiten neu aufbauen zu müssen. Sie werden bereits unterstützt und haben Vorrang vor den im Modul deklarierten Texten.
lua-module-TemplatePar-badPattern
|
#invoke:TemplatePar pattern syntax error #invoke:TemplatePar Syntaxfehler des pattern |
lua-module-TemplatePar-dupOpt
|
#invoke:TemplatePar repeated optional parameter #invoke:TemplatePar Optionsparameter wiederholt |
lua-module-TemplatePar-dupRule
|
#invoke:TemplatePar parameter conflict key/pattern #invoke:TemplatePar Parameterkonflikt key/pattern |
lua-module-TemplatePar-empty
|
Error in template * undefined value for mandatory Fehler bei Vorlage: Pflichtparameter ohne Wert |
lua-module-TemplatePar-invalid
|
Error in template * invalid parameter Fehler bei Vorlage: Parameter ungültig |
lua-module-TemplatePar-invalidPar
|
#invoke:TemplatePar invalid parameter #invoke:TemplatePar Ungültiger Parameter |
lua-module-TemplatePar-minmax
|
#invoke:TemplatePar min > max #invoke:TemplatePar min > max |
lua-module-TemplatePar-multiSpell
|
Error in template * multiple spelling of parameter Fehler bei Vorlage * Mehrere Parameter-Schreibweisen |
lua-module-TemplatePar-noMSGnoCAT
|
#invoke:TemplatePar neither message nor category #invoke:TemplatePar weder Meldung noch Kategorie |
lua-module-TemplatePar-noname
|
#invoke:TemplatePar missing parameter name #invoke:TemplatePar Parametername nicht angegeben |
lua-module-TemplatePar-tooLong
|
Error in template * parameter too long Fehler bei Vorlage: Parameter zu lang |
lua-module-TemplatePar-tooShort
|
Error in template * parameter too short Fehler bei Vorlage: Parameter zu kurz |
lua-module-TemplatePar-undefined
|
Error in template * mandatory parameter missing Fehler bei Vorlage: Pflichtparameter fehlt |
lua-module-TemplatePar-unknown
|
Error in template * unknown parameter name Fehler bei Vorlage: Parametername unbekannt |
lua-module-TemplatePar-unknownRule
|
#invoke:TemplatePar unknown rule #invoke:TemplatePar Unbekannte Regel |