XPathの概要
XSLT は、XML パス言語 (XPath) 標準を使用して、入力文書の XML 階層内の要素を指定および検索します。XPath の強力な式構文を使用すると、XML 入力ドキュメントの一部を選択するための複雑な基準を定義できます。
ノードと軸
XPath は、ドキュメント階層のすべての部分を ノードとして見ます。コミットスクリプト、opスクリプト、イベントスクリプト、SNMPスクリプトにおいて重要なノードタイプは、 要素ノード、 テキストノード、 属性ノードです。次のXMLタグについて考えてみましょう。
<system>
<host-name>my-router</host-name>
<accounting inactive="inactive">
...
</accounting>
</system>
これらの XML タグ要素は、以下のタイプの XPath ノードの例を示しています。
-
<host-name>my-router</host-name>- 要素ノード -
my-router- テキストノード -
inactive="inactive"- 属性ノード
XPath は、ノードが特定の 軸に配置されていると見なします。以下のリストには、いくつかの共通軸を示します。ただし、XPathにはここに記載されていない他の多くの軸があります。
-
祖先 - ノードから一連の親ノードまでのポイント
-
child - 要素ノードの直接の子ノードのリストを指す
-
attribute - 要素ノードの属性セットのリストを指し示します。
-
follow-sibling—ノードに続くが、同じ親の下にあるノードを指す
-
descendant - ノードのすべての子孫が含まれます
XSLT は、 コンテキストノード (または単に コンテキスト) と呼ばれる特定のノードから各 XPath 式を評価します。コンテキスト・ノードは、XSLT プロセッサーが現在検索しているノードです。XSLT は、ドキュメントの階層を通過するときにコンテキストを変更します。特定のコンテキストノードからのXPath式を評価します。
Junos OSコミットスクリプトでは、コンテキストノードの概念はJunos OS階層レベルに対応しています。例えば、 /configuration/system/domain-name XPath式は、コンテキストノードを [edit system domain-name] 階層レベルに設定します。
すべてのコミットスクリプトに<xsl:template match="configuration">テンプレートを含めることをお勧めします。この要素を使用すると、スクリプト内のプログラミング命令 (<xsl:for-each> や <xsl:if> など) のすべての XPath 式から /configuration/ ルート要素を除外できます。したがって、XPath式は、Junos階層レベル(例えば、system/domain-name)から開始できます。詳細については、「コミットスクリプトに必要な定型文」を参照してください。
パスと述語構文
XPath式には、パス構文と述語構文の2種類の構文が含まれています。パス構文は、現在のコンテキストノードからのドキュメントの階層内の軸の1つ上のパス位置に関して、検査するノードを指定します。パス構文の例をいくつか以下に示します。
accounting-options- 現在のコンテキストの子であるaccounting-optionsという名前の要素ノードを選択します。server/name- 現在のコンテキストの子であるserverという名前の要素の子であるnameという名前の要素ノードを選択します。/configuration/system/domain-name- ドキュメントのルート要素 (configuration) の子であるsystemという名前の要素の子であるdomain-nameという名前の要素ノードを選択します。parent::system/host-name- 現在のコンテキストノードの親であるsystemという名前の要素の子であるhost-nameという名前の要素ノードを選択します。parent::軸は2つのピリオド(..)に省略できます。
述語構文を使用すると、パス構文によって選択された各ノードでテストを実行できます。結果セットには、テストに合格したノードのみが含まれます。述語は、パスノードの後の角括弧([ ])内に表示されます。述語構文の例をいくつか示します。
server[name = '10.1.1.1']- 現在のコンテキストの子であり、値が 10.1.1.1 のnameという名前の子要素を持つserverという名前の要素を選択します。*[@inactive]- 現在のコンテキストの子であり、inactiveという名前の属性 (@はattribute軸からノードを選択する) を持つ任意のノード (任意のノードに一致*) を選択します。route[starts-with(next-hop, '10.10.')]- 現在のコンテキストの子であり、値が文字列 10.10 で始まるnext-hopという名前の子要素を持つrouteという名前の要素を選択します。starts-with関数は、XPath に組み込まれている多くの関数の 1 つです。XPath は、リレーショナル テスト、等価性テスト、およびここにリストされていないその他の多くの機能もサポートします。
XPath演算子
XPath は、次のような多くの演算子をサポートしています。
-
ANDや|(または)などの論理演算子 -
=、!=、<などの比較演算子> -
数値演算子(
+、-、*
XSLT スクリプトは XML ドキュメントです。XSLT では、XML の場合と同じ方法で小なり記号を表す必要があります。したがって、より小さい(<)の運用担当者を < として表し、小さいまたは等しい(<=)の運用担当者を <=として表す必要があります。
XPath の関数と演算子の詳細については、包括的な XPath リファレンス・ガイドを参照してください。XPathについては、 http://w3c.org/TR/xpath のW3C仕様に詳しく記載されています。