XPath
[Wikipedia|▼Menu]
XML文書に XPath の式を適用したイメージXML変換におけるXPathの位置付け

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 と同時に勧告として公表された[1][2]。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 の翻訳版がある。
データモデル

XPathのデータモデルでは、XML文書はルートノードを頂点とするノードの木構造であり、以下の7種類のノードから構成される (参考: XML) 。

ルートノード

要素ノード

テキストノード

属性ノード

名前空間ノード

処理命令ノード

コメントノード

ロケーションパス

XPathで最も一般的な式は、ロケーションパスである。ロケーションパスにより、XML文書のあるノード(現在のコンテクストノード)を基準として、別のノードもしくは複数のノード(ノード集合)が指定される(指定されるノードが0個すなわち1個も存在しない場合もある)。

ロケーションパスは、1つまたは複数のロケーションステップの並びとして記述される。複数のロケーションステップでロケーションパスが記述される場合、各ロケーションステップは/により区切られる。
ロケーションステップ

ロケーションパスを構成する各ロケーションステップは、次の3つの要素から構成される。

(axis)

ノードテスト(node test)

述語 (predicate)

ロケーションステップは次の2種類の構文を使って記述することができる。
省略構文
簡潔でXPathの式を読みやすく書きやすく記述することができる。直観的で多くの場合親しみやすい文字列と構文で記述する。
完全な構文
省略構文と比べて記述が冗長ではあるが、省略構文より多くのオプションを指定することができ、またXPath式を注意深く読む際には省略構文より説明的に記述していることがXPath式の正確な理解に役立つ。
省略構文

省略構文は簡潔な構文であり、よく使われる多くの既定値を使い省略してロケーションステップを記述することができる。

省略構文による簡単なロケーションパスの記述例を示す。/A/B/C

この例では、先頭が/となっている絶対パスであり、0個以上のC要素を選択する。選択されたC要素はB要素の子要素(child element)であり、そのB要素はA要素の子要素であり、A要素はそのXML文書のルート要素である。

XPathの構文は、URI(Uniform Resource Identifier)の構文やファイルパスの構文に似せて、設計されている。

省略構文では、先の例より複雑な式を記述することもできる。ただし完全な構文と比べると記述能力は制限される。

既定のchild軸以外にもいくつかの(attribute軸、descendant-or-self軸、self軸、parent軸)を指定することができる。

簡明なノード名による指定以外のノードテストを指定することができる。

どのロケーションステップにも角括弧[と]を後ろにつけて述語を指定することができる。

少し複雑なロケーションパスの例を示す。A//B/*[1]

この例は、先頭が/となっていない相対パスであり、任意の名前の(*)最初の要素([1])を選択する。選択された「最初の要素」はB要素の子要素(/)であり、そのB要素はA要素の直接的または間接的な子要素(子孫要素、//)であり、そのA要素は現在のコンテクストノードの子要素である。

省略構文の一覧と正式な定義については後の#完全な構文と省略構文の対応関係の節で示す。
完全な構文

完全な構文の一般式は以下の形となる。/軸方向::名前空間:ノードテスト[述語]/??

先の#省略構文の節で示した2つの例を、省略しない完全な構文によって書き直すと次のようになる。/child::A/child::B/child::Cchild::A/descendant-or-self::node()/child::B/child::*[1]

このように完全な構文で記述されたロケーションパスの各ロケーションステップにおいては、

をchildやdescendant-or-selfのように明示的に指定する。

軸の指定に続けて::を記述し、さらにノードテストをAやnode()、*のように記述する。

省略構文と同様に、ノードテストの指定に続けて角括弧[と]を後ろにつけて述語を指定することができる。

ロケーションステップの軸の記述は、XML文書の木構造において、方向を指定する。XPath仕様で定義されている13種類の軸(#完全な構文)を示す。
child
コンテクストノードの子ノード
descendant
コンテクストノードの子孫ノード
parent
コンテクストノードの親ノード
ancestor
コンテクストノードの祖先ノード
following-sibling
コンテクストノードの兄弟ノードのうち後方のノード
preceding-sibling
コンテクストノードの兄弟ノードのうち前方のノード
following
XML文書の文書順でコンテクストノードより後方にある全てのノード
preceding
XML文書の文書順でコンテクストノードより前方にある全てのノード
attribute
コンテクストノードが要素の場合、その属性ノード
namespace
コンテクストノードが要素の場合、その名前空間ノード
self
コンテクストノード自身
descendant-or-self
コンテクストノード自身とコンテクストノードの子孫ノード
ancestor-or-self
コンテクストノード自身とコンテクストノードの祖先ノード

省略構文でattribute軸を使う例を示す。//a/@href

この例では、href属性ノードの集合を選択する。選択された href属性ノードは、XML文書内のいずれかのa要素ノードに属している。

self軸は、後述する述語の中でその述語の直前のノードテストで選択されたノードを記述するためによく使われる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:35 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef