XML Path Language
コンテクストノードが要素の場合、その属性ノード
比較的よく使われる関数については、次の節以降で少し詳しく述べる。 完全な定義は、W3Cの勧告(日本語訳)を参照。
XPathの式は、丸括弧の(と)で括りグループ化して評価順序を明記することができる。
述語には演算子を使った式を含めることができる。論理式 (論理値を返す式) は、 and 演算子や or 演算子でつなげることや、not関数の引数にすることができる。 文字列 (string) にはUnicodeの文字を含めることができる。 述語で演算子を使う例を示す。
//item[@price >= 2*@discount]
この例では、price 属性の数値が discount 属性の数値の2倍以上である item 要素の集合を選択する。
演算子|は、述語の内部でも、述語の外部でも、ノード集合の和を求めるために使うことができる。述語の外部で|演算子を使う例を示す。
v[x or y] | w[z]
この例では、一つのノード集合を返す。返されるノード集合は、処理中のコンテクストにおいて、子要素として x 要素もしくは y 要素をもつ v 要素の集合と、子要素として z 要素をもつ w 要素の集合の、和集合である。
XML Path Language (XPath(エックスパス)) は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文である。XPath自体は簡潔な構文 (式言語) であり、XMLベースのマークアップ言語ではない。標準化団体 W3C (World Wide Web Consortium) で開発され、1999年11月16日に XML Path Language (XPath) 1.0 が XSL Transformations (XSLT) 1.0 と同時に勧告として公表された。XPathは、XSLT と XSL-FO とともに XSL の構成要素である。2007年1月23日、W3C で XPath 1.0 の次期バージョンが制定され、XPath 2.0 が XSLT 2.0 と同時に勧告された。2014年4月8日に XPath 3.0、2017年3月21日に XPath 3.1 が勧告された。他に、XPathを拡張したようなものとして XQuery がある。
XPathは、XML文書中から必要な要素群(サブセット)を取り出す、などといった用途に使うものとして、急速に受け入れられていった。なお、もともとはXPathは、XSL (XSLT) と XPointer に共通する構文と振る舞いのモデルを目標としていた。
XSLTでは、XML文書内の処理対象などの指定に、XPathを使用する。一般に、XSLT処理系を実装するには、XPath処理系のライブラリなどを利用してXPathを取り扱う必要がある。
日本では日本工業規格(JIS)に、JIS X 4160 として XPath 1.0 の翻訳版がある。
次のXML文書でXPathを例示して説明する。
/document : ルート要素 document を選択する。
/* : 名前を限定せずにルート要素を選択する。この場合は同じく document が選択される(XML文書は必ず一つのルート要素をもつ)
/document/chapter : document 要素の子要素である全ての chapter 要素を選択する。
/document/chapter[1] : document 要素の子要素のうち1番目の chapter 要素を選択する。
//paragraph : 文書内の全ての paragraph 要素を選択する。
//chapter[@title="第1章"]/paragraph : title 属性の値が "第1章" である chapter 要素の子要素である全ての paragraph 要素を選択する。
XPath 2.0 は2007年1月23日に標準化団体 W3C で勧告された。 XQuery 1.0 は XPath 2.0 の拡張である。 また XPath 2.0 は XSLT 2.0 でも採用されている。
XPath 2.0 仕様は、1.0 と比べて大規模になっており非常に多くの機能が規定されている。 そのうち特に重要な変更は、多様なデータ型を扱えるようになったことである。 XPath 2.0 では、スキーマ言語 XML Schema で規定されている組み込みのアトミックデータ型と、スキーマで定義されたユーザ定義型を、扱うことができる。 あらゆる値は、シーケンスとして扱われる。 一つの文字列値やノードは、シーケンスに含まれる要素の一つと位置づけられる。 XPath 1.0 のノード集合は、XPath 2.0 では何らかの順序をもつシーケンスに、置き換わる。 多様な型を扱うために、XPath 2.0 では関数と演算子が大幅に拡張される。
XPath 2.0 は XQuery 1.0 のサブセットとなっている。 XPath 2.0 は XQuery 1.0 の構文のパス式を構成する。 XQuery 1.0 の FLWOR と呼ばれる式においては、for 句の構成要素となる。
コンテクストノード自身