#?SuikaWiki/0.9 [1] [DFN[述部]] (predicate; ) は、[[位置段階]]の末尾に零個以上つけることができます。 述部は、位置段階の前の部分、すなわち[[軸]]と[[節検査]]の結果で得た[[節集合]]を[[濾過]]して更に絞り込むのに使います。 述部は複数記述できますが、前の述部から順に濾過します。 例えば、 [SAMP(XPath)[ child:foo [ [VAR[expr1]] ] [ [VAR[expr2]] ] ]] は、まず [CODE(XPath)[[[child]]:foo]] を評価して得た節集合を、 まず [VAR[expr1]] で濾過し、次に [VAR[expr2]] で濾過して、この結果を全体の評価結果の節集合とします。 [2] - [CODE(ABNF)[[DFN[述部]] := [ [[WSP]] ] "[" 述部式 "]" [WSP] - [CODE(ABNF)[[DFN[述部式]] := [[式]] ]] [3] 述部式は、次のように評価します。 = まず、式を評価します。 =- [[文脈節]]は濾過対象の節とします。 =- [[文脈寸法]]は濾過対象の節集合の節の数とします。 =- [[文脈位置]]は濾過対象の節の、濾過対象の節集合中における[[近接位置]]とします。 = 評価結果が[[数値]]である場合、 文脈位置との比較の真偽を結果とします。 例えば、述部 [SAMP(XPath)[ [3] ]] は、 [SAMP(XPath)[ [ [[position]]() = 3 ] ]] と等価です。 = それ以外の場合、 [CODE(XPath)[ [[boolean]]( [VAR[$述部式]] ) ]] を結果とします。 結果が真ならその節は濾過結果の節集合に入れられ、 偽であれば位置段階中でのその節の評価はそこでおしまいです。 [4] [PRE[

]PRE] で、 [SAMP(XPath)[[[descendant]]:p[position()=2] ]] は要素 [CODE(XML)[p2]] です。