Vue d’ensemble des relevés SLAX
Cette section répertorie quelques instructions SLAX couramment utilisées, avec de brefs exemples et des équivalents XSLT .
Instruction for-each
L’instruction SLAX for-each
fonctionne comme l’élément <xsl:for-each>
. L’instruction se compose du mot-clé, d’une expression délimitée par des parenthèses et d’un for-each
bloc délimité par des accolades. L’instruction for-each
indique au processeur de rassembler un ensemble de nœuds et de les traiter un par un. Les noeuds sont sélectionnés par l’expression XPath spécifiée. Chacun des nœuds est ensuite traité selon les instructions contenues dans le for-each
bloc de code.
for-each (xpath-expression) { ... }
Le code à l’intérieur de l’instruction for-each
est évalué récursivement pour chaque nœud qui correspond à l’expression XPath. C’est-à-dire que le contexte actuel est déplacé vers chaque nœud sélectionné par la clause, et le for-each
traitement est relatif à ce contexte actuel.
Dans l’exemple suivant, la inventory
variable stocke la hiérarchie d’inventaire. L’instruction for-each
traite de manière récursive chaque chassis-sub-module
noeud qui est un enfant du chassis-module
chassis
noeud. Pour chaque chassis-sub-module
élément qui contient un part-number
avec une valeur égale au numéro de pièce spécifié, un message
élément est créé qui comprend le nom du module de châssis ainsi que le nom et la description du sous-module de châssis.
for-each ($inventory/chassis/chassis-module/ chassis-sub-module[part-number == '750-000610']) { <message> "Down rev PIC in " _ ../name _ ", " _ name _ ": " _ description; }
L’équivalent XSLT est :
<xsl:for-each select="$inventory/chassis/chassis-module/ chassis-sub-module[part-number = '750-000610']"> <message> <xsl:value-of select="concat('Down rev PIC in ', ../name, ', ', name, ': ', description)"/> </message> </xsl:for-each>
if, else if, et else Instructions
SLAX prend en charge if
, else if
et else
les instructions. L’instruction if
est une construction conditionnelle qui entraîne le traitement des instructions si l’expression XPath spécifiée a la valeur true. La if
construction peut avoir une ou plusieurs clauses associéeselse if
, chacune d’entre elles testant une expression XPath. Si l’expression de l’instruction if
a la valeur false, le processeur vérifie chaque else if
expression. Si une instruction a la valeur true, le script exécute les instructions du bloc associé et ignore toutes les instructions suivantes else if
etelse
. La clause facultative else
est le code par défaut qui est exécuté dans le cas où toutes les expressions et else-if
associées if
sont évaluées à false. Si toutes les if
instructions et else if
sont évaluées à false et que l’instruction n’est else
pas présente, aucune action n’est entreprise.
Les expressions qui apparaissent entre parenthèses sont des expressions XPath étendues, qui prennent en charge le double signe égal (==
) à la place du signe égal unique de XPath (=
).
if (expression) { /* If block Statement */ } else if (expression) { /* else if block statement */ } else { /* else block statement */ }
Lors du traitement de script, une if
instruction qui n’a pas d’instruction ou else if
else
associée est transformée en <xsl:if>
élément. Si l’une else if
ou l’autre des clauses ou else
sont présentes, l’instruction et les if
blocs et associés else if
else
sont transformés en <xsl:choose>
élément.
if (starts-with(name, "fe-")) { if (mtu < 1500) { /* Select Fast Ethernet interfaces with low MTUs */ } } else { if (mtu > 8096) { /* Select non-Fast Ethernet interfaces with high MTUs */ } }
L’équivalent XSLT est :
<xsl:choose> <xsl:when test="starts-with(name, 'fe-')"> <xsl:if test="mtu < 1500"> <!-- Select Fast Ethernet interfaces with low MTUs --> </xsl:if> </xsl:when> <xsl:otherwise> <xsl:if test="mtu > 8096"> <!-- Select non-Fast Ethernet interfaces with high MTUs --> </xsl:if> </xsl:otherwise> </xsl:choose>
Énoncé de match
Vous spécifiez les modèles de correspondance de base à l’aide de l’instruction match
, suivie d’une expression spécifiant quand le modèle doit être autorisé et d’un bloc d’instructions entourées d’un ensemble d’accolades.
match configuration { <xnm:error> { <message> "..."; } }
L’équivalent XSLT est :
<xsl:template match="configuration"> <xnm:error> <message> ...</message> </xnm:error> </xsl:template>
Pour plus d’informations sur la création de modèles de correspondance, consultez Vue d’ensemble des modèles SLAX.
Déclaration ns
Vous spécifiez les définitions d’espace de noms à l’aide de l’instruction SLAXns
. Il se compose du mot-clé, d’une chaîne de préfixe, d’un signe égal et d’un URI (Uniform Resource Identifier) d’espace de ns
noms. Pour définir l’espace de noms par défaut, utilisez uniquement le mot-clé et un URI d’espace ns
de noms.
ns junos = "https://www.juniper.net/junos/";
L’instruction ns
peut apparaître après l’instruction version
au début de la feuille de style ou au début de n’importe quel bloc.
ns a = "http://example.com/1"; ns "http://example.com/global"; ns b = "http://example.com/2"; match / { ns c = "http://example.com/3"; <top> { ns a = "http://example.com/4"; apply-templates commit-script-input/configuration; } }
Lorsqu’il apparaît au début de la feuille de style, l’instruction ns
peut inclure le exclude
mot-clé ou extension
. Le mot-clé demande à l’analyseur d’ajouter le préfixe de l’espace de noms à l’attribut exclude-result-prefixes
or extension-element-prefixes
.
ns exclude foo = "http://example.com/foo"; ns extension jcs = "http://xml.juniper.net/jcs";
L’équivalent XSLT est :
<xsl:stylesheet xmlns:foo="http://example.com/foo" xmlns:jcs="http://xml.juniper.net/jcs" exclude-result-prefixes="foo" extension-element-prefixes="jcs"> <!-- ... --> </xsl:stylesheet>
Déclaration de version
Toutes les feuilles de style SLAX doivent commencer par une version
instruction, qui spécifie le numéro de version du langage SLAX. Les versions prises en charge sont les suivantes : 1.0, 1.1 et 1.2.
version 1.2;