Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Übersicht über SLAX-Vorlagen

Ein SLAX-Skript besteht aus einem oder mehreren Regelsätzen, die als Vorlagen bezeichnet werden. Jede Vorlage ist ein Codesegment, das Regeln enthält, die angewendet werden sollen, wenn ein bestimmter Knoten übereinstimmt.

Hinweis:

Version 1.2 der SLAX-Sprache, die in Junos OS Version 14.2 und höheren Versionen unterstützt wird, unterstützt SLAX-Elemente als Argumente für Vorlagen und Funktionen.

Es gibt zwei Arten von Vorlagen, benannte und unbenannte (oder Übereinstimmungen), die in den folgenden Abschnitten beschrieben werden.

Unbenannte (Übereinstimmungs-)Vorlagen

Unbenannte Vorlagen, auch als Übereinstimmungsvorlagen bezeichnet, enthalten eine match Anweisung mit einem XPath-Ausdruck , um die Kriterien für Nodes anzugeben, auf denen die Vorlage aufgerufen werden soll. Im folgenden Commitskriptbeispiel stimmt die Vorlage mit dem Element der obersten Ebene in der Konfigurationshierarchie überein:

Standardmäßig durchläuft der Prozessor rekursiv die gesamte Dokumenthierarchie, überprüft jeden Knoten und sucht nach einer Vorlage, die mit dem aktuellen Knoten übereinstimmt. Wenn eine passende Vorlage gefunden wird, wird der Inhalt dieser Vorlage ausgewertet.

Die apply-templates Anweisung kann innerhalb einer unbenannten Vorlage verwendet werden, um das standardmäßige, hierarchische Durchlaufen von Knoten einzuschränken und zu steuern. Diese Anweisung akzeptiert einen optionalen XPath-Ausdruck, der dem select Attribut in einem <xsl:apply-templates> Element entspricht. Wenn ein optionaler XPath-Ausdruck enthalten ist, werden nur Nodes durchlaufen, die dem XPath-Ausdruck entsprechen. Andernfalls werden alle untergeordneten Elemente des Kontextknotens durchlaufen. Wenn der XPath-Ausdruck enthalten ist, aber mit keinem Knoten übereinstimmt, wird nichts durchlaufen und es passiert nichts.

Im folgenden Beispiel stimmt die Vorlagenregel mit dem <route> Element in der XML-Hierarchie überein. Alle Knoten, die ein changed Attribut enthalten, werden verarbeitet. Alle route Elemente, die ein Attribut enthalten, werden durch ein changed new Element ersetzt.

Das XSLT-Äquivalent:

Durch die Verwendung unbenannter Vorlagen kann das Skript die Position eines Tags in der XML-Hierarchie ignorieren. Wenn Sie z. B. alle Tags in <div class="author"> Tags konvertieren möchten, können Sie mithilfe von Vorlagen eine einzelne Regel schreiben, die alle <author> <author> Tags unabhängig von ihrer Position im XML-Eingabedokument konvertiert.

Benannte Vorlagen

Benannte Vorlagen funktionieren wie Funktionen in herkömmlichen Programmiersprachen. Wenn die Komplexität eines Skripts zunimmt oder ein Codesegment an mehreren Stellen angezeigt wird, können Sie den Code modularisieren und benannte Vorlagen erstellen. Wie Funktionen akzeptieren benannte Vorlagen Argumente und werden nur ausgeführt, wenn sie explizit aufgerufen werden.

In SLAX besteht die benannte Vorlagendefinition aus dem Schlüsselwort, dem template Vorlagennamen, einem Satz von Parametern und einem durch geschweifte Klammern getrennten Codeblock. Parameterdeklarationen können inline sein und aus dem Parameternamen und optional einem Standardwert bestehen. Alternativ können Sie Parameter innerhalb des Vorlagenblocks mit der param Anweisung deklarieren. Wenn kein Standardwert definiert ist, wird der Parameter standardmäßig als leere Zeichenfolge verwendet.

Im folgenden Beispiel wird eine Vorlage mit dem Namen und der Definition von drei Parametern erstellt, von denen einer standardmäßig die Zeichenfolge falseund einer standardmäßig den Inhalt des Elementknotens namens name enthält, der dem my-template aktuellen Kontextknoten untergeordnet ist. Wenn das Skript die Vorlage aufruft und keinen Parameter übergibt, wird der Standardwert verwendet.

Eine alternative Methode besteht darin, die Parameter innerhalb der Vorlage mithilfe der param Anweisung zu deklarieren. Der folgende Code ist identisch mit dem vorherigen Beispiel:

In SLAX rufen Sie benannte Vorlagen mithilfe der call Anweisung auf, die aus dem Schlüsselwort und dem call Vorlagennamen besteht, gefolgt von einer Reihe von Parameterbindungen. Bei diesen Bindungen handelt es sich um eine durch Trennzeichen getrennte Liste von Parameternamen, die aus der aufrufenden Umgebung an die Vorlage übergeben werden. Die Parametrierung erfolgt nach Namen und nicht nach Position in der Liste. Alternativ können Sie Parameter innerhalb des call Blocks mit der with Anweisung deklarieren. Parameter, die an eine Vorlage übergeben werden, müssen mit einem Parameter übereinstimmen, der in der tatsächlichen Vorlage definiert ist. Andernfalls wird der Parameter ignoriert. Optional können Sie für jeden Parameter einen Wert festlegen. Wenn Sie in der aufrufenden Umgebung keinen Wert für den Parameter definieren, übergibt das Skript den aktuellen Wert des Parameters, wenn er zuvor initialisiert wurde, oder es generiert einen Fehler, wenn der Parameter nie deklariert wurde. Weitere Informationen zum Übergeben von Parametern finden Sie unter Übersicht über SLAX-Parameter.

Im folgenden Beispiel wird die Vorlage my-template mit dem Parameter c aufgerufen, der den Inhalt des Elementknotens namens other-name enthält, der ein untergeordnetes Element des aktuellen Kontextknotens ist:

Im folgenden Beispiel werden zwei Parameter deklariert: name-servers-template name-servers und size. Der size Parameter erhält den Standardwert Null. Die Übereinstimmungsvorlage, die deklariert und initialisiert name-servers, ruft die name-servers-template drei Male auf.

Der erste Aufruf der Vorlage enthält keine Parameter. Daher name-servers wird standardmäßig eine leere Zeichenfolge und size standardmäßig ein Wert von Null verwendet, wie in der Vorlage definiert. Der zweite Aufruf enthält die name-servers Parameter and size , liefert jedoch nur einen Wert für den size Parameter. Somit name-servers hat der Wert durch seine Initialisierung im Skript definiert und size ist gleich der Anzahl der Elemente in der name-servers Konfigurationshierarchie. Der letzte Aufruf ist identisch mit dem zweiten Aufruf, liefert jedoch die Parameter mithilfe der with Anweisungssyntax.

Das XSLT-Äquivalent lautet: