機能
あるシーケンスの一部(some)、またはすべて(every)の項目が、特定の条件を満たす場合、trueを返します。それ以外の場合、falseを返します。
記述形式
参照項番
QName → 2.1.5 名前(QName)
単式 → 4.1 式の概要
一般規則
in節の目的は、各in節の変数がバインドする値の組み合わせを表したタプルを生成することです。
some $x in (1, 2, 3) , $y in (2, 4, 6) satisfies $x = $y
この例では、以下に示す9個のタプルが生成されます。
($x=1, $y=2) ($x=1, $y=4) ($x=1, $y=6) ($x=2, $y=2) ($x=2, $y=4) ($x=2, $y=6) ($x=3, $y=2) ($x=3, $y=4) ($x=3, $y=6)
量化式の評価規則を以下に示します。
量化式がキーワードsomeで始まる場合、量化式は、in節が生成した各タプルに対してテスト式を評価します。その評価結果のうち、少なくとも1つの有効ブール値がtrueであればtrueを返します。すべての有効ブール値がfalseであればfalseを返します。in節が生成するタプルが1つもなければ、量化式はfalseを返します。
量化式がキーワードeveryで始まる場合、量化式は、in節が生成した各タプルに対してテスト式を評価します。その評価結果のうち、すべての有効ブール値がtrueであればtrueを返します。少なくとも1つの有効ブール値がfalseであれば、falseを返します。in節が生成するタプルが1つもなければ、量化式はtrueを返します。
量化式中でバインドされた変数は、変数がバインドされた後に指定される量化式の部分式中においてのみ有効です。変数がバインドする式の中で、その変数を使用することはできません。
量化式は、有効範囲内にある変数と同じ名前の変数で異なる式を複数回バインドすることができます。このとき、変数参照で参照可能な変数の値は、有効範囲内で最後にバインドした変数の値になります。
テスト式が各タプルに対して評価される順序は、動的に決定します。量化式がキーワードsomeで始まる場合、テスト式があるタプルに対してtrueという有効ブール値を返したら、その他のタプルに対してテスト式は評価されません。そのため、テスト式の評価結果がtrueを返すようなタプルとエラーを返すようなタプルが同時に含まれていた場合、量化式はtrueまたはエラーを返します。同様に、量化式がキーワードeveryで始まる場合、テスト式の評価結果がfalseを返すようなタプルとエラーを返すようなタプルが同時に含まれていた場合、量化式はfalseまたはエラーを返します。
使用例
この式は、すべてのエレメントノードemployeeの属性sexの属性値が“man”ではないため、falseを返します。
every $emp in /employees/employee satisfies $emp/ @sex = "man"
この式は、属性sexの属性値が“male”であるエレメントノードemployeeが少なくとも1つ存在するため、trueを返します。
some $emp in /employees/employee satisfies $emp/ @sex = "male"
この式は、キーワードeveryから始まり、in節が生成するタプルが1つもないため、trueを返します。
every $x in () satisfies $x = ()
この式は、キーワードsomeから始まり、in節が生成するタプルが1つもないため、falseを返します。
some $x in () satisfies $x = ()