ノード・テスト

ノード・テスト は、軸ステップにより選択される各ノードについて true でなければならない条件です。ノード・テストは、名前テストまたは種類テストとして表されます。名前テスト は、ノードの名前に基づいて ノードを選択します。 種類テスト は、ノードの種類に基づいて ノードを選択します。

名前テスト

名前テストは、QName またはワイルドカードで構成されます。 軸ステップで 名前テストが指定されると、ステップは、QName またはワイルドカードに一致する 指定された軸上のノードを選択します。 名前テストが attribute 軸で指定される場合、 ステップは名前テストに一致する任意の属性を選択します。 それ以外の場合、ステップは、他のすべての軸において、名前テストに一致する任意のエレメントを選択します。 QName が一致するためには、ノードの拡張 QName が、名前テストで指定される 拡張 QName に (コード・ポイント・ベースで) 等しくなければなりません。2 つの 拡張 QName は、そのネーム・スペース URI が等しく、ローカル名も等しい場合に (ネーム・スペース接頭部が等しくなくても) 等しくなります。

重要: 名前テストで指定される接頭部は、式の静的に既知の名前空間の 1 つに 対応する必要があります。 属性軸について実行される名前テストの場合、 接頭部なしの QName には名前空間 URI はありません。 他のすべての 軸について実行される名前テストの場合、接頭部なしの QName にはデフォルト・ エレメント・ネーム・スペースのネーム・スペース URI があります。

表 1 では、DB2® XPath でサポートされる名前テストを説明しています。

表 1. DB2 XPath でサポートされる名前テスト
テスト 説明
QName その QName が、指定された QName に等しい (指定された軸上の) 任意のノードに一致します。 軸が attribute 軸の場合、このテストは指定された QName に等しい 属性ノードに一致します。他のすべての軸の場合、このテストは指定された QName に等しいエレメント・ノードに一致します。 child::para において、 名前テスト para は、子軸上のすべての para 要素を 選択します。
* 指定された軸上のすべてのノードに一致します。 軸が属性軸の場合、このテストはすべての属性ノードに一致します。 他のすべての 軸の場合、このテストはすべての要素ノードに一致します。 child::* において、 名前テスト * は、child 軸上のすべてのエレメントに一致します。

種類テスト

軸ステップで種類テストが指定されると、ステップは、種類テストに一致する 指定された軸上のノードのみを選択します。 表 2 では、DB2 XPath でサポートされる種類テストを説明しています。

表 2. DB2 XPath でサポートされる種類テスト
テスト 説明
node() 指定された軸上の任意のノードに一致します。 child::node() において、 種類テスト node() は、子軸上の任意のノードを選択します。
text() 指定された軸上の任意のテキスト・ノードに一致します。 child::text() において、 種類テスト text() は、子軸上の任意のテキスト・ノードを 選択します。
comment() 指定された軸上の任意のコメント・ノードに 一致します。 child::comment() において、 種類テスト comment() は、子軸上の任意のコメント・ノードを 選択します。
processing-instruction(NCName) この名前テストで指定されている NCName に一致する名前 (XML では "PITarget"と呼ばれています) の任意の処理命令ノード (指定された軸上にある) に一致します。 child::processing-instruction(xml-stylesheet) に おいて、種類テスト processing-instruction(xml-stylesheet) は、 PITarget が xml-stylesheet である child 軸上の任意の処理命令ノードを選択します。
processing-instruction(StringLiteral) このテストで指定されているストリング・リテラルに一致する名前の任意の処理命令ノード (指定された軸上にある) に一致します。

このノード・テストには、XPath 1.0 との後方の互換性があります。

child::processing-instruction("xml-stylesheet") に おいて、種類テスト processing-instruction("xml-stylesheet") は、PITarget が xml-stylesheet である child 軸上の任意の処理命令ノードを選択します。
element() 指定された軸上の任意の要素ノードに 一致します。 child::element() において、 種類テスト element() は、child 軸上の任意のエレメント・ノードを 選択します。
element(QName) このテストで指定されている修飾名に一致する名前の任意のエレメント・ノード (指定された軸上にある) に一致します。 child::element("price") において、 種類テスト element("price") は、price という名前の、child 軸上の任意のエレメント・ノードを 選択します。
element(*) 指定された軸上の任意の要素ノードに 一致します。 child::element(*) において、 種類テスト element(*) は、子軸上の任意の要素ノードを選択します。
attribute() 指定された軸上の任意の属性ノードに 一致します。 child::attribute() において、 種類テスト attribute() は、child 軸上の任意の属性ノードを 選択します。
attribute(QName) このテストで指定されている修飾名に一致する名前の任意の属性ノード (指定された軸上にある) に一致します。 child::attribute("price") において、 種類テスト attribute("price") は、price という名前の、child 軸上の任意の属性ノードを 選択します。
attribute(*) 指定された軸上の任意の属性ノードに 一致します。 child::attribute(*) において、 種類テスト attribute(*) は、子軸上の任意の属性ノードを 選択します。
document-node() 指定された軸上の任意の文書ノードに 一致します。 self::document-node() では、種類テスト document-node() で self 軸上のいずれかの文書ノードが選択されます。
document-node(element(QName)) 指定された軸上で、エレメント・ノードが 1 つしかない文書ノードと一致します。 self::document-node(element("price")) では、種類テスト document-node(element("price")) によって self 軸上で price という名前の単一のルート・エレメントを持ついずれかの文書ノードが選択されます。
document-node(element(*)) エレメント・ノードを持つ、指定された軸上の任意の文書ノードに 一致します。 self::document-node(element(*)) では、種類テスト document-node(element(*)) によって self 軸上でエレメント・ノードを持ついずれかの文書ノードが選択されます。