#?SuikaWiki/0.9 [1] 【[[XPath]]】 [DFN[節検査]] (node test, ) は、[[位置段階]]の必須の部分で、 [[節]]の種類や名前が一致するかを検査します。 - [CODE(ABNF)[[DFN[節検査]] := 名前検査 / 節検査関数]] - [CODE(ABNF)[[DFN[名前検査]] := [ [[WSP]] ] [ [[名前空間接頭辞]] ":" ] ([[局部名]] / "*") [WSP] ]] - [CODE(ABNF)[節検査関数 := 節検査関数名 [WSP] "(" [引数並び] ")" [WSP] ]] [2] 名前検査は、型が[[主要節型]]である節のうち、 名前が一致する節の場合に[[真]]となります。 接頭辞がある場合、その[[文脈]]で解決した[[名前空間URI]] と節の名前空間 URI の一致をみます。 接頭辞が無い場合は、 [CODE[null]] 名前空間とみなされます。 局部名が [CODE(XPath)[[[*]]]] の場合は、 名前空間 URI が一致する全ての節が真となります。 名前検査が [CODE(XPath)[*]] で接頭辞が無い時は、 その型が主要節型である全ての節と一致します。 接頭辞を解決できない場合は[[誤り]]とします。 [3] 節検査関数は、次のものが定義されています。 ,関数 ,一致する節 ,[CODE(XPath)[[[[comment]] ()]] ,[[注釈節]] ,[CODE(XPath)[[[[node]] ()]] ,全ての節 ,[CODE(XPath)[[[[processing-instruction]] ( [ [VAR[[[表記]]]] ] )]],[ [[対象名]]が引数と一致する ] [[処理指令節]] ,[CODE(XPath)[[[text]] ()]] ,[[文節]] [4] >>3 つまらないことに [CODE(XPath)[processing-instruction]] の引数は表記であって任意の文字列じゃないのね。 [5] 例: - [SAMP(XPath)[foo]] -- 真 [SAMP(XML)[foo]] -- 偽 [SAMP(XML)[{http://ns.example/}:foo]] - [SAMP(XPath)[foo:bar]] ([SAMP(XML)[[[xmlns]]:foo="http://ns.example/"]]) -- 偽 [SAMP(XML)[bar]] -- 真 [SAMP(XML)[foo:bar]] ([SAMP(XML)[xmlns:foo="http://ns.example/"]]) -- 偽 [SAMP(XML)[foo:bar]] ([SAMP(XML)[xmlns:foo="ftp://ns.example/"]]) -- 真 [SAMP(XML)[baz:bar]] ([SAMP(XML)[xmlns:baz="http://ns.example/"]]) - [SAMP(XPath)[baz:bar]] ([SAMP(XML)[xmlns:baz]] = ??) -- 誤り - [SAMP(XML)[*]] -- 真 [SAMP(XML)[foo]] -- 真 [SAMP(XML)[bar]] -- 真 [SAMP(XML)[foo:bar]] - [SAMP(XML)[foo:*]] ([SAMP(XML)[xmlns:foo="http://ns.example/"]]) -- 偽 [SAMP(XML)[foo]] -- 真 [SAMP(XML)[foo:bar]] ([SAMP(XML)[xmlns:foo="http://ns.example/"]]) -- 偽 [SAMP(XML)[foo:bar]] ([SAMP(XML)[xmlns:foo="ftp://ns.example/"]]) -- 真 [SAMP(XML)[bar:bar]] ([SAMP(XML)[xmlns:bar="http://ns.example/"]]) [6] [CODE(XPath)[*:foo]] みたいな書き方は出来ないわけですね。 まあこんなもの役に立つとは思えませんが。