SLAX ステートメントの概要
このセクションでは、一般的に使用される SLAX ステートメントと、簡単な例と XSLT 同等のステートメントを示します。
各ステートメント用
SLAX for-each
ステートメントは、 要素と同様に機能します <xsl:for-each>
。ステートメントは、 for-each
キーワード、括弧区切りの式、中括弧で区切られたブロックで構成されています。ステートメントは for-each
、プロセッサにノードのセットを集め、それらを1つずつ処理するように指示します。指定された XPath 式によってノードが選択されます。各ノードは、コード ブロックに for-each
保持されている命令に従って処理されます。
for-each (xpath-expression) { ... }
命令内の for-each
コードは、XPath 式に一致する各ノードに対して再帰的に評価されます。つまり、現在のコンテキストは、 句によって for-each
選択された各ノードに移動され、処理はその現在のコンテキストに対して相対的です。
次の例では、変数はinventory
インベントリ階層を格納します。ステートメントは、for-each
ノードのchassis-module
子である各chassis-sub-module
ノードを再帰的にchassis
処理します。指定された部品番号と同じ値の をpart-number
含む要素ごとにchassis-sub-module
、message
シャーシモジュールの名前とシャーシサブモジュールの名前と説明を含む要素が作成されます。
for-each ($inventory/chassis/chassis-module/ chassis-sub-module[part-number == '750-000610']) { <message> "Down rev PIC in " _ ../name _ ", " _ name _ ": " _ description; }
XSLT と同等の値は次のとおりです。
<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、else ステートメント
SLAX は、 if
else if
ステートメントをelse
サポートしています。if
ステートメントは、指定された XPath 式が true と評価された場合に命令を処理する条件付き構造です。構成要素には if
1 つ以上の関連else if
する句があり、それぞれに XPath 式がテストされます。ステートメント内の式が if
false と評価された場合、プロセッサは各else if
式をチェックします。ステートメントが true と評価された場合、スクリプトは関連するブロック内の命令を実行し、後続else if
のステートメントおよびelse
ステートメントをすべて無視します。オプションelse
の句は、関連付けられているif
else-if
すべての式が false と評価された場合に実行される既定のコードです。すべての および else if
ステートメントが if
false と評価されelse
、 ステートメントが存在しない場合、アクションは実行されません。
括弧内に表示される式は拡張XPath式であり、XPathの単一の等符号()の代わりに二重等符号(==
=
)をサポートしています。
if (expression) { /* If block Statement */ } else if (expression) { /* else if block statement */ } else { /* else block statement */ }
スクリプト処理中にif
、 または else
ステートメントが関連付else if
けられていないステートメントが要素に<xsl:if>
変換されます。or else
節のいずれかがelse if
存在する場合、ステートメントif
と関連else if
およびelse
ブロックは要素に<xsl:choose>
変換されます。
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 */ } }
XSLT と同等の値は次のとおりです。
<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>
一致ステートメント
基本一致テンプレートは、 ステートメントを match
使用して指定し、その後に、テンプレートをいつ許可するかを指定する式と、中括弧で囲まれたステートメントのブロックを指定します。
match configuration { <xnm:error> { <message> "..."; } }
XSLT と同等の値は次のとおりです。
<xsl:template match="configuration"> <xnm:error> <message> ...</message> </xnm:error> </xsl:template>
一致テンプレートの構築の詳細については、 SLAX テンプレートの概要を参照してください。
ns ステートメント
SLAX ns
ステートメントを使用して名前空間の定義を指定します。これは、 ns
キーワード、プレフィックス文字列、等しい符号、名前空間 の統一リソース識別子 (URI)で構成されています。デフォルトの名前空間を定義するには、キーワードと名前空間の ns
URI のみを使用します。
ns junos = "https://www.juniper.net/junos/";
ステートメントは ns
、スタイル シートの version
先頭または任意のブロックの先頭の ステートメントの後に表示できます。
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; } }
スタイル シートの先頭に表示される場合、 ns
ステートメントには または extension
キーワードのいずれかをexclude
含めることができます。キーワードは、名前空間のプレフィックスを または extension-element-prefixes
属性に追加するようパーサーにexclude-result-prefixes
指示します。
ns exclude foo = "http://example.com/foo"; ns extension jcs = "http://xml.juniper.net/jcs";
XSLT と同等の値は次のとおりです。
<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>
バージョン ステートメント
すべての SLAX スタイル シートは、SLAX 言語のバージョン番号を version
指定するステートメントで始める必要があります。サポートされているバージョンは 1.0 と 1.1 です。SLAX バージョン 1.0 では、XML バージョン 1.0 と XSLT バージョン 1.1 が使用されます。
version 1.0;
XSLT と同等の値は次のとおりです。
<xsl:stylesheet version="1.0">