Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

SLAXテンプレートの概要

SLAX スクリプトは 、テンプレートと呼ばれるルールの 1 つ以上のセットで構成されています。各テンプレートは、指定されたノードが一致したときに適用するルールを含むコードのセグメントです。

メモ:

Junos OSリリース14.2以降のリリースでサポートされているSLAX言語のバージョン1.2は、テンプレートと機能の両方の引数としてSLAX要素をサポートしています。

次のセクションで説明する、名前付きテンプレートと名前なし(または一致)の2種類のテンプレートがあります。

名前なし(一致)テンプレート

一致テンプレートとも呼ばれる名前のないテンプレートには、テンプレートを呼び出すノードの基準を指定する XPath 式を持つステートメントが含matchまれています。次のコミット スクリプトのサンプルでは、テンプレートは設定階層の最上位要素と一致します。

デフォルトでは、プロセッサはドキュメント階層全体を再帰的にトラバースし、各ノードを検査して、現在のノードに一致するテンプレートを探します。一致するテンプレートが見つかった場合、そのテンプレートの内容が評価されます。

ステートメントは apply-templates 、名前のないテンプレート内で使用して、ノードのデフォルトの階層トラバーサルを制限および制御できます。このステートメントは、要素内の属性に相当するオプションの select XPath 式を <xsl:apply-templates> 受け入れます。オプションの XPath 式が含まれている場合は、XPath 式に一致するノードのみがトラバースされます。それ以外の場合、 コンテキスト ノード のすべての子が通過します。XPath 式が含まれているがノードに一致しない場合、何も通過せず、何も起こりません。

次の例では、テンプレート ルールは XML 階層の要素に一致 <route> します。属性を changed 含むすべてのノードが処理されます。 route 属性を changed 含むすべての要素は、要素に new 置き換えられます。

XSLT と同等の値:

名前のないテンプレートを使用すると、スクリプトは XML 階層のタグの場所を無視できます。たとえば、すべての <author> タグをタグに変換する場合、テンプレートを使用すると、入力 XML ドキュメント内の場所に <div class="author"> 関係なく、すべての <author> タグを変換する単一のルールを作成できます。

名前付きテンプレート

名前付きテンプレートは、従来のプログラミング言語の関数と同様に動作します。スクリプトの複雑さが増したり、コード セグメントが複数の場所に表示された場合は、コードをモジュール化して名前付きテンプレートを作成できます。関数と同様に、名前付きテンプレートは引数を受け入れ、明示的に呼び出された場合にのみ実行されます。

SLAXでは、名前付きテンプレート定義は、キーワード、テンプレート名、パラメーターのセット、および中括弧で区切られたコードブロックで構成されています template 。パラメーター宣言はインラインで構成でき、パラメーター名、およびオプションでデフォルト値で構成されます。または、 ステートメントを使用して、テンプレートブロック内でパラメーターを param 宣言することもできます。既定値が定義されていない場合、パラメーターの既定値は空の文字列です。

次の例では、 という名前 my-template のテンプレートを作成し、3 つのパラメーターを定義します。そのうちの 1 つは文字列 falseにデフォルトで、そのうちの 1 つは、現在のコンテキスト ノードの子という名前 name の要素ノードのコンテンツにデフォルト設定されます。スクリプトがテンプレートを呼び出し、パラメーターを渡さない場合、デフォルト値が使用されます。

別の方法は、 ステートメントを使用してテンプレート内でパラメーターを param 宣言することです。次のコードは、前の例と同じです。

SLAX では、 ステートメントを使用して名前付きテンプレートを call 呼び出します。ステートメントは、 キーワード名とテンプレート名で構成 call され、その後にパラメーター・バインディングのセットが続きます。これらのバインディングは、呼び出し元環境からテンプレートに渡されるパラメーター名のコンマ区切りのリストです。パラメーターの割り当ては、リスト内の位置ではなく名前によって行われます。または、 ステートメントを使用して、ブロック内で call パラメーターを with 宣言することもできます。テンプレートに渡されるパラメーターは、実際のテンプレートで定義されたパラメーターと一致する必要があります。それ以外の場合、パラメーターは無視されます。必要に応じて、各パラメーターの値を設定できます。呼び出し元環境でパラメーターの値を定義していない場合、スクリプトは以前に初期化されていた場合、パラメーターの現在の値を渡すか、パラメーターが宣言されていない場合にエラーが生成されます。パラメーターの受け渡しの詳細については、 SLAX パラメーターの概要を参照してください。

次の例では、現在のコンテキスト ノードの子という名前other-nameの要素ノードの内容を含むパラメーターcを使用してテンプレートmy-templateを呼び出します。

次の例では、2 つのパラメーターをname-servers-template宣言します。sizename-serverssizeこのパラメータには、デフォルト値がゼロが与えられました。一致テンプレートを宣言して初期化name-serversすると、3 回が呼び出されますname-servers-template

テンプレートの最初の呼び出しには、パラメーターは含まれていません。そのためname-servers、デフォルトは空の文字列でsize、デフォルトはテンプレートで定義されたゼロの値になります。2 番目の呼び出しには、 name-servers および size パラメーターが含まれていますが、 パラメーターのsize値のみを提供します。そのためname-servers、スクリプト内の初期化で定義された値は、設定階層内の要素のname-servers数とsize等しくなります。最後の呼び出しは 2 番目の呼び出しと同じですが、ステートメント構文を使用してパラメーターをwith提供します。

XSLT と同等の値は次のとおりです。