「XML Path Language」の版間の差分

編集の要約なし
 
演算子は次のとおり。
* "<code>/"</code> 演算子と "<code>//</"code> 演算子 (先述)
* "<code>|"</code> 演算子: 2つのノード集合の和集合のノード集合を返す
* 論理演算子: "<code>and" "</code>、<code>or"</code> - 論理値を返す
* 算術演算子: "<code>+" "</code>、<code>-" "</code>、<code>*" "</code>、<code>div"</code> ([[IEEE 754]]に基づく割り算) "、<code>mod" </code>(剰余) - 数値 (浮動小数点数) を返す
* 比較演算子: "<code>=", "</code>、<code>!=", "<", "/code>、<code><</code>、<code>></code>、<code>", "<=", "</code>、<code>>="</code> - 論理値を返す
 
関数には次のようなものがある。
* 文字列を扱う関数: <code>concat(), </code>、<code>substring(), </code>、<code>contains(), </code>、<code>starts-with(), </code>、<code>ends-with(), </code>、<code>substring-before(), </code>、<code>substring-after(), </code>、<code>translate(), </code>、<code>normalize-space(), </code>、<code>string-length()</code>
* 数値を扱う関数: <code>sum(), </code>、<code>round(), </code>、<code>floor(), </code>、<code>ceiling()</code>
* ノードの情報を取得する関数: <code>name(), </code>、<code>local-name(), </code>、<code>namespace-uri()</code>
* 処理中のコンテクストに関する情報を取得する関数: <code>position(), </code>、<code>last()</code>
* 型を変換する関数: <code>string(), </code>、<code>number(), </code>、<code>boolean()</code>
 
比較的よく使われる関数については、次の節以降で少し詳しく述べる。
完全な定義は、[http://www.w3.org/TR/xpath W3Cの勧告][http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm (日本語訳)]を参照。
 
XPathの式は、丸括弧の <code>( </code> <code>) </code>で括りグループ化して評価順序を明記することができる。
 
[[#述語|述語]]には演算子を使った式を含めることができる。論理式 (論理値を返す式) は、 <code>and</code> 演算子や <code>or</code> 演算子でつなげることや、<code>not</code>関数の引数にすることができる。<!--数値演算には <code><nowiki>* + - div</nowiki></code> <code><nowiki>mod</nowiki></code> を使うことができる。-->
論理式 (論理値を返す式) は、 <code>and</code> 演算子や <code>or</code> 演算子でつなげることや、<code>not()</code> 関数の引数にすることができる。
<!--数値演算には <code><nowiki>* + - div</nowiki></code> <code><nowiki>mod</nowiki></code> を使うことができる。-->
文字列 (string) には[[Unicode]]の文字を含めることができる。
述語で演算子を使う例を示す。
この例では、<code>price</code> 属性の数値が <code>discount</code> 属性の数値の2倍以上である <code>item</code> 要素の集合を選択する。
 
演算子 <code>| </code>は、述語の内部でも、述語の外部でも、ノード集合の和を求めるために使うことができる。述語の外部で<code>|</code>演算子を使う例を示す
述語の外部で | 演算子を使う例を示す。
* <code>v[x or y] | w[z]</code>
この例では、一つのノード集合を返す。返されるノード集合は、処理中のコンテクストにおいて、子要素として <code>x</code> 要素もしくは <code>y</code> 要素をもつ <code>v</code> 要素の集合と、子要素として <code>z</code> 要素をもつ <code>w</code> 要素の集合の、和集合である。
 
=== ノード集合関数 ===
; ''number'' <code>position()</code>
: 評価中のコンテクストノードの位置を数値で返す (兄弟ノードにおける位置) 。
; ''number'' <code>count(</code>''node-set''<code>)</code>
: 引数のノード集合 (もしくはノード集合を返す式) のノードの数を返す。
; ''node-set'' <code>id(</code>''object''<code>)</code>
: 引数のオブジェクトの文字列値をID型の属性値としてもつノードの集合を返す。
; ''string'' <code>name(</code>''node-set?''<code>)</code>
: 引数として渡されたノード集合の最初のノードの名前を返す (ノードが要素の場合は要素名、属性の場合は属性名) 。
 
=== 文字列関数 ===
; ''string'' <code>string(</code>''object?''<code>)</code>
: XPathで規定されている4種類の[[データ型]]を引数としてとることができ、仕様で定められた変換規則によって文字列に変換する。引数としてXPath式も渡すことができる。
; ''number'' <code>string-length(</code>''string?''<code>)</code>
: 引数として渡す文字列の長さ (文字の数) を返す。
; ''string'' <code>substring(</code>''string<code>, </code>number<code>, </code>number?''<code>)</code>
: 引数として渡す文字列の部分文字列を返す。
; ''string'' <code>concat(</code>''string<code>, </code>string<code>, </code>string*''<code>)</code>
: 引数として渡す複数の文字列を連結して返す。
; ''boolean'' <code>contains(</code>''string1<code>, </code>string2''<code>)</code>
: 引数の文字列 <code>''string1''</code> に文字列 <code>''string2''</code> が含まれていた場合には<code>true</code>関数が返すのと同じ値を返す。含まれていなかった場合は<code>false</code>関数が返すのと同じ値を返す。
; ''string'' <code>normalize-space(</code>''string?''<code>)</code>
: 引数の文字列を正規化して返す。すなわち、文字列の前後の空白文字を除去し、さらに除去後の文字列中に連続して現れる空白文字を一つの空白で置き換えた文字列を、返す。
 
=== 論理関数 ===
; ''boolean'' <code>not(</code>''boolean''<code>)</code>
: 引数の論理値の逆の値を返す。
 
=== 数値関数 ===
; ''number'' <code>sum(</code>''node-set''<code>)</code>
: 引数として渡されたノード集合の各ノードの文字列値を、仕様で定められた変換規則にしたがって数値に変換し、合計した値を返す。