Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Présentation des modèles SLAX

Un script SLAX se compose d’un ou plusieurs ensembles de règles appelés modèles. Chaque modèle est un segment de code qui contient des règles à appliquer lorsqu’un nœud spécifié est mis en correspondance.

Note:

La version 1.2 du langage SLAX, prise en charge dans les versions 14.2 et ultérieures de Junos OS, prend en charge les éléments SLAX comme arguments pour les modèles et les fonctions.

Il existe deux types de modèles, nommés et sans nom (ou correspondance), décrits dans les sections suivantes.

Modèles sans nom (correspondance)

Les modèles sans nom, également appelés modèles de correspondance, contiennent une match déclaration avec une expression XPath pour spécifier les critères des nœuds sur lesquels le modèle doit être invoqué. Dans l’exemple de script de validation suivant, le modèle correspond à l’élément de niveau supérieur de la hiérarchie de configuration :

Par défaut, le processeur traverse l’ensemble de la hiérarchie des documents de manière récursive, inspectant chaque nœud et recherchant un modèle correspondant au nœud actuel. Lorsqu’un modèle correspondant est trouvé, le contenu de ce modèle est évalué.

L’instruction apply-templates peut être utilisée dans un modèle sans nom pour limiter et contrôler la traversée hiérarchique par défaut des nœuds. Cette instruction accepte une expression XPath en option, qui est équivalente à l’attribut select d’un <xsl:apply-templates> élément. Si une expression XPath est incluse en option, seuls les nœuds correspondant à l’expression XPath sont traversés. Sinon, tous les enfants du nœud de contexte sont traversés. Si l’expression XPath est incluse mais ne correspond à aucun nœud, rien n’est traversé et rien ne se passe.

Dans l’exemple suivant, la règle de modèle correspond à l’élément <route> de la hiérarchie XML. Tous les nœuds contenant un changed attribut sont traités. Tous les route éléments contenant un changed attribut sont remplacés par un new élément.

L’équivalent XSLT :

L’utilisation de modèles sans nom permet au script d’ignorer l’emplacement d’une balise dans la hiérarchie XML. Par exemple, si vous souhaitez convertir toutes les <author> balises en <div class="author"> balises, l’utilisation de modèles vous permet d’écrire une règle unique qui convertit toutes les <author> balises, quel que soit leur emplacement dans le document XML d’entrée.

Modèles nommés

Les modèles nommés fonctionnent comme des fonctions dans les langages de programmation traditionnels. Lorsque la complexité d’un script augmente ou qu’un segment de code apparaît à plusieurs endroits, vous pouvez modulariser le code et créer des modèles nommés. Comme les fonctions, les modèles nommés acceptent les arguments et ne s’exécutent que lorsqu’ils sont explicitement appelés.

Dans SLAX, la définition du modèle nommé se compose du template mot-clé, du nom du modèle, d’un ensemble de paramètres et d’un bloc de code délimité par des broches. Les déclarations de paramètres peuvent être inline et se composer du nom du paramètre et, éventuellement, d’une valeur par défaut. Vous pouvez également déclarer les paramètres dans le bloc de modèle à l’aide de l’instruction param . Si une valeur par défaut n’est pas définie, le paramètre s’applique par défaut à une chaîne vide.

L’exemple suivant crée un modèle nommé my-template et définit trois paramètres, dont l’un par défaut pour la chaîne falseet l’un par défaut le contenu du nœud d’élément nommé name qui est un enfant du nœud de contexte actuel. Si le script appelle le modèle et ne passe pas dans un paramètre, la valeur par défaut est utilisée.

Une autre méthode consiste à déclarer les paramètres dans le modèle à l’aide de l’instruction param . Le code suivant est identique à l’exemple précédent :

Dans SLAX, vous appelez des modèles nommés à l’aide de l’instruction call , qui se compose du mot-clé et du call nom du modèle, suivi d’un ensemble de liaisons de paramètres. Ces liaisons sont une liste de noms de paramètres séparés par des virgules qui sont transmises au modèle à partir de l’environnement d’appel. Les attributions de paramètres sont effectuées par nom et non par position dans la liste. Vous pouvez également déclarer les paramètres dans le call bloc à l’aide de l’instruction with . Les paramètres transmis dans un modèle doivent correspondre à un paramètre défini dans le modèle réel ; dans le cas contraire, le paramètre est ignoré. Vous pouvez éventuellement définir une valeur pour chaque paramètre. Si vous ne définissez pas de valeur pour le paramètre dans l’environnement d’appel, le script transmet la valeur actuelle du paramètre s’il a été initialisé précédemment, ou il génère une erreur si le paramètre n’a jamais été déclaré. Pour plus d’informations sur la transmission des paramètres, consultez la présentation des paramètres SLAX.

Dans l’exemple suivant, le modèle my-template est appelé avec le paramètre c contenant le contenu du nœud d’élément nommé other-name qui est un enfant du nœud de contexte actuel :

Dans l’exemple suivant, la name-servers-template déclaration de deux paramètres : name-servers et size. Le size paramètre reçoit une valeur par défaut de zéro. Le modèle de correspondance, qui déclare et initialise name-servers, appelle les name-servers-template trois fois.

Le premier appel au modèle n’inclut aucun paramètre. Ainsi, name-servers par défaut, une chaîne vide et size une valeur de zéro définie dans le modèle. Le deuxième appel inclut les name-servers paramètres et size , mais ne fournit qu’une valeur pour le size paramètre. Ainsi name-servers , la valeur définie par son initialisation dans le script size est égale au nombre d’éléments dans la hiérarchie de name-servers configuration. Le dernier appel est identique au deuxième appel, mais il fournit les paramètres à l’aide de la syntaxe de l’instruction with .

L’équivalent XSLT est :