Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

SLAXパラメータの概要

パラメータは、名前付きテンプレートまたは名前なしテンプレート、または関数に渡すことができます。パラメーターを宣言した後、パラメーター名の前にドル記号 ($) を付けることで、パラメーターを参照できます。

パラメータの宣言

SLAX スクリプトでは、 param ステートメントを使用してパラメーターを宣言します。必要に応じて、宣言内の各パラメーターの初期値を定義できます。例えば:

パラメーターのスコープは、ローカルまたはグローバルです。ローカル パラメーターはブロックの先頭で宣言する必要があり、そのスコープは宣言されているブロックに制限されます。スクリプトの初期化時にJunos OSで値が設定されるパラメータは、グローバルパラメータとして定義する必要があります。グローバルパラメータ宣言は、スタイルシート宣言の直後に配置されます。スクリプトは、グローバル パラメータにデフォルト値を割り当てることができます。これは、Junos OS がパラメータに値を与えない場合に使用されます。

テンプレートでは、パラメーター リストでパラメーターを宣言するか、テンプレート ブロックで param ステートメントを使用してパラメーターを宣言します。必要に応じて、各テンプレート パラメーターの既定値を宣言できます。パラメーターを指定せずにテンプレートを呼び出すと、パラメーターは既定値を使用します。テンプレートでデフォルト値を定義しない場合、パラメータはデフォルトで空の文字列になります。

次の名前付きテンプレート print-host-name は、パラメーター message を宣言し、既定値を定義します。

代替の、しかし同等の宣言は、次のとおりです。

SLAX テンプレートでは、パラメーターを宣言するとき、およびパラメーターの値にアクセスするときに、パラメーターの前にドル記号 ($) を付けます。XSLT では、パラメーター名にアクセスするときにパラメーター名の前にドル記号を付けますが、宣言するときには付きません。

関数では、パラメーター リストでパラメーターを宣言するか、関数ブロックで param ステートメントを使用してパラメーターを宣言します。必要に応じて、末尾パラメーターの既定値を宣言できます。その末尾パラメーターを指定せずに関数を呼び出すと、パラメーターは既定値を使用します。既定値を定義しない場合、パラメーター値は既定で空の文字列になります。

次の例では、widthheightscale の 3 つのパラメーターを持つ size という名前の関数を定義します。scale のデフォルト値は 1 です。関数呼び出しの引数リストに scale 引数が含まれていない場合、計算ではその引数に既定値の 1 が使用されます。関数の戻り値は、<size> 要素で囲まれた widthheight、および scale 変数の積です。

param ステートメントを使用する代替の同等の宣言は、次のとおりです。

テンプレートへのパラメータの受け渡し

テンプレートを呼び出すときは、引数リストで、または with ステートメントを使用して、テンプレートに引数を渡します。呼び出し元の環境で指定されるパラメーターの名前は、実際のテンプレートで定義されているパラメーターの名前と一致する必要があります。それ以外の場合、パラメータは無視されます。必要に応じて、テンプレートに渡すパラメーターごとに、等号 (=) と値式を使用して値を定義できます。次の例では、名前付きテンプレート print-host-name への 2 つの呼び出しは同一です。

テンプレートで使用されるパラメーター値は、テンプレートの呼び出し方法によって異なります。 print-host-name テンプレートを呼び出す次の 3 つの例は、考えられる呼び出し環境を示しています。

テンプレートを呼び出し、特定のパラメーターを含めない場合、パラメーターは、そのパラメーターのテンプレートで定義されている既定値を使用します。テンプレートにそのパラメーターの既定値がない場合、パラメーター値の既定値は空の文字列になります。次の例では、名前付きテンプレートprint-host-nameを呼び出しますが、呼び出しにはパラメーターを含めません。この場合、名前付きテンプレートは、print-host-name テンプレートで定義された message パラメーターの既定値を使用するか、既定値が存在しない場合は空の文字列を使用します。

テンプレートを呼び出し、パラメーターを含めるが、呼び出し元の環境でパラメーターの値を定義しない場合、スクリプトはパラメーターの現在の値を渡します (パラメーターが以前に初期化されている場合)。パラメーターが宣言されていない場合、スクリプトはエラーを生成します。

次の例では、名前付きテンプレート print-host-name を呼び出し、 message パラメーターを渡しますが、値は含めません。スクリプトが message を宣言して初期化し、スコープがブロックから見える場合、テンプレートは現在の値 message を使用します。スクリプトで message が宣言されているが、パラメーターが初期化されていない場合、 message の値は空の文字列になります。スクリプトで message が宣言されていない場合、呼び出しはエラーを生成します。

テンプレートを呼び出し、パラメーターを含め、パラメーターの値を定義すると、テンプレートは指定された値を使用します。次の例では、message パラメーターと定義された値を使用して名前付きテンプレート print-host-nameを呼び出すため、テンプレートは新しい値を使用します。

例:パラメータと一致テンプレート

次の例では、最上位 configuration 階層要素を照合し、 system/host-name サブツリーにテンプレートを再帰的に適用するようにJunos OS管理プロセス(mgd)に指示します。パラメーター messagedomain は、一致するノードの処理に使用されます。

これに相当する XSLT は、以下の通りです。

関数へのパラメーターの引き渡し

SLAX は、SLAX バージョン 1.1 以降の機能をサポートしています。 param ステートメントを使用して関数パラメーターを定義することはできますが、 with ステートメントを使用して呼び出し元の環境から関数にパラメーター値を渡すことはできません。関数を呼び出すときは、コンマ区切りのリストで関数に引数を渡します。関数の引数は、テンプレートのように名前ではなく、位置によって関数に渡されます。

関数宣言では、末尾の引数の既定値を定義できます。関数呼び出しの引数が定義の引数よりも少ない場合は、末尾の引数に既定値が使用されます。関数呼び出しに定義よりも多くの引数がある場合、関数呼び出しはエラーを生成します。

次の一致テンプレートでは、関数呼び出しで、ソース XML ファイルの各 graphic/dimension 要素から選択された幅と高さのデータを使用します。スクリプトは関数を評価し、 copy-of ステートメントは戻り値を <out> 要素の内容として結果ツリーに出力します。関数呼び出しには、 widthheight の引数が含まれますが、 scaleの引数は含まれません。デフォルト値の 1 は、機能ブロック内の scale に使用されます。