この規格ページの目次
12
X 4160 : 2007
3.4 論理型
(boolean)
論理型のオブジェクトは,二つの値,真(true)及び偽(false),の一つをもつことができる。
or 式は,各々の演算対象を評価し,その値をboolean関数への呼出しを行ったものとして論理型に変換
することによって評価する。結果は,(演算対象の)いずれかの値が真の場合に真とし,そうでない場合は
偽とする。右側の演算対象は,左側の演算対象が真と評価される場合には,評価しない。
and 式は,各々の演算対象を評価し,その値をboolean関数への呼出しを行ったものとして論理型に変
換することによって評価する。結果は,(演算対象の)両方の値が真の場合に真とし,そうでない場合は偽
とする。右側の演算対象は,左側の演算対象が偽と評価される場合には,評価しない。
(RelationalExprではない)EqualityExpr又は(AdditiveExprではない)RelationalExprは,二つの演算対
象を評価した結果のオブジェクトを比較することによって評価する。結果のオブジェクトの比較は,次の
三つの段落で定義する。最初に,ノード集合を含む比較をノード集合を含まない比較を用いて定義する。
これは,=,!=,<=,<,>= 及び > に対して統一的に定義する。2番目に,ノード集合を含まない比較を
= 及び != に対して定義する。3番目に,ノード集合を含まない比較を <=,<,>= 及び > に対して定義
する。
比較する両方のオブジェクトがノード集合の場合,その比較は,あるノードが最初のノード集合の中に
存在し,更に,あるノードが2番目のノード集合の中にも存在して,その二つのノードの文字列値(箇条
5参照)に関して比較を実行した結果が,真の場合に限り,真とする。比較する一つのオブジェクトがノ
ード集合であって他方が数値の場合,その比較は,あるノードがノード集合の中に存在して,そのノード
の文字列値をnumber関数を用いて数値に変換した結果と,それと比較する数値に関する比較を実行した
結果とが,真の場合に限り,真とする。比較するオブジェクトの一つがノード集合であって他方が文字列
の場合,その比較は,あるノードがノード集合の中に存在し,そのノードの文字列値及び他方の文字列に
関して比較を実行した結果が,真の場合に限り,真とする。比較する一つのオブジェクトがノード集合で
あって他方が論理型の場合,その比較は,その論理型と,ノード集合をboolean関数を用いて論理型に変
換した結果とに関して比較を実行した結果が,真の場合に限り,真とする。
比較するオブジェクトのいずれもがノード集合ではなく,演算子が = 又は != の場合,それらのオブジ
ェクトは,次に示すとおりの共通型に変換しその後に比較することによって比較する。比較するオブジェ
クトの少なくとも一つが論理型の場合,比較する各々のオブジェクトは,boolean関数を適用するものとし
て論理型に変換する。そうでない場合であって,比較するオブジェクトの少なくとも一つが数値の場合,
比較する各々のオブジェクトは,number関数を適用するものとして数値に変換する。そうでない場合,比
較するオブジェクトの両方は,string関数を適用するものとして文字列に変換する。= の比較は,オブジ
ェクトが等しい場合に限り,真とする。!= の比較は,オブジェクトが等しくない場合に限り,真とする。
数値は,IEEE 754 [IEEE 754]に従う等しさで比較する。二つの論理型は,両方が真又は両方が偽のいずれ
かの場合に限り,等しい。二つの文字列は,それらがUCS文字の同じ列から成る場合に限り,等しい。
注記 $x がノード集合に束縛されている場合,$x="foo" は,not($x!="foo") と同じことを意味しない。
$x="foo" は,$x の中のあるノードが文字列値 foo をもつ場合に限り,真になる。not($x!="foo")
は,$x の中のすべてのノードが文字列値 foo をもつ場合に限り,真になる。
比較するオブジェクトのいずれもがノード集合でなく,演算子が <=,<,>= 又は > の場合,それらの
オブジェクトは,両方を数値に変換しIEEE 754に従って数値を比較することによって比較する。< の比較
は,最初の数値が2番目の数値よりも小さい場合に限り,真とする。<= の比較は,最初の数値が2番目
の数値以下の場合に限り,真とする。> の比較は,最初の数値が2番目の数値よりも大きい場合に限り,
――――― [JIS X 4160 pdf 16] ―――――
13
X 4160 : 2007
真とする。>= の比較は,最初の数値が2番目の数値以上の場合に限り,真とする。
注記 XPath式がXML文書に現れる場合,< 及び <= 演算子は,XML 1.0の規則に従って,例えば,
< 及び <= を用いて引用されなければならない。次の例では,test 属性の値が,XPath式
になっている。
<xsl:if test="@value < 10">...</xsl:if>
論理型の式の構文を次に示す。
[21] OrExpr ::= AndExpr
| OrExpr 'or' AndExpr
[22] AndExpr ::= EqualityExpr
| AndExpr 'and' EqualityExpr
[23] EqualityExpr ::= RelationalExpr
| EqualityExpr '=' RelationalExpr
| EqualityExpr '!=' RelationalExpr
[24] RelationalExpr ::= AdditiveExpr
| RelationalExpr '<' AdditiveExpr
| RelationalExpr '>' AdditiveExpr
| RelationalExpr '<=' AdditiveExpr
| RelationalExpr '>=' AdditiveExpr
注記1 この文法による効果は,次に示す優先順位の順序による。優先順位の順序は,より低い優先
順位のものを先(上及び左)に示してある。
or
and
=, !=
<=, <, >=, >
さらに,演算子は,すべて,左結合とする。例えば,3 > 2 > 1 は,(3 > 2) > 1 と等価であ
って,偽と評価する。
注記2 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。
OrExpr or式
AndExpr and式
EqualityExpr 等号類式
RelationalExpr 関係式
RelativeLocationPath 相対位置パス
AdditiveExpr 加減式
3.5 数値型
(number)
数値は,浮動小数点数値を表現する。数値は,倍精度64ビット形式のIEEE 754値[IEEE 754]をもつこと
ができる。これらには,“非数”(Not-a-Number,NaN)値,正の無限大及び負の無限大,並びに正の0及び
負の0を含む。IEEE 754規定の主要な要約については,[JLS]の4.2.3を参照する。
数値演算子は,その演算対象を,number関数の呼出しを行うものとして,数値に変換する。
+ 演算子は,加算を実行する。
2項の - 演算子は,減算を実行する。単項の - 演算子は,負数を示す。-0 は,負の0と評価されるこ
――――― [JIS X 4160 pdf 17] ―――――
14
X 4160 : 2007
とに注意。
注記 XMLは名前の中に - を許しているので,通常,- 演算子は,空白によって先行される必要が
ある。例えば,foo-bar は,foo-bar と名前が付けられた子要素を含むノード集合に評価される。
foo - bar は,最初の foo 子要素の文字列値を数値に変換した結果と,最初の bar 子要素の文
字列値を数値に変換した結果との差に評価する。
* 演算子は,IEEE 754に従った浮動小数点の乗算を実行する。結果がNaNでない場合,演算対象の両
方が同じ符号をもつとき及びそのときに限り,結果が正となることに注意。
div 演算子は,IEEE 754に従った浮動小数点の除算を実行する。結果がNaNでない場合,演算対象の両
方が同じ符号をもつとき及びそのときに限り,結果が正となることに注意。
mod 演算子は,切捨て(truncating)除算からの剰余を返す。次に例を示す。
例
5 mod 2 は,1 を返す。
5 mod -2 は,1 を返す。
-5 mod 2 は,-1 を返す。
-5 mod -2 は,-1 を返す。
注記1 これは,Java及びECMAScriptにおける % 演算子と同じになっている。
注記2 これは,IEEE 754の剰余演算子とは同じではない。IEEE 754の剰余演算子は,丸め(rounding)
除算からの剰余を返す。
数値型の式の構文を次に示す。
[25] AdditiveExpr ::= MultiplicativeExpr
| AdditiveExpr '+' MultiplicativeExpr
| AdditiveExpr '-' MultiplicativeExpr
[26] MultiplicativeExpr ::= UnaryExpr
| MultiplicativeExpr MultiplyOperator UnaryExpr
| MultiplicativeExpr 'div' UnaryExpr
| MultiplicativeExpr 'mod' UnaryExpr
[27] UnaryExpr ::= UnionExpr
| '-' UnaryExpr
注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。
AdditiveExpr 加減式
MultiplicativeExpr 乗除式
UnaryExpr 単項式
MultiplyOperator 乗算演算子
3.6 文字列型
(string)
文字列は,0個以上の文字の列から成る。ここで,文字とは,XMLの規格(JIS X 4159)のとおりに定義
される。したがって,XPathにおける単一の文字とは,単一の対応するUnicodeスカラ値をもつ単一の
Unicode抽象文字([Unicode]参照)に相当する。これは,16ビットのUnicode符号値と同じではない。U+FFFF
よりも大きなUnicodeスカラ値をもつ抽象文字のためのUnicode符号化文字表現は,16ビットのUnicode
符号値の対(サロゲートペア,surrogate pair)になる。多くのプログラム言語では,文字列は,16ビット
のUnicode符号値の列によって表現される。それらの言語でのXPathの実装は,サロゲートペアが単一の
――――― [JIS X 4160 pdf 18] ―――――
15
X 4160 : 2007
XPath文字として正しく取り扱われることを確実に行うように注意しなければならない。
注記 Unicodeでは,Unicode抽象文字の異なる列から成るにもかかわらず,同一として取り扱われる
ことが望ましい二つの文字列が存在する可能性がある。例えば,幾つかのアクセント付き文字
は,事前に構成した形式又は分解した形式のいずれかで表現してよい。そのために,XPath式
における文字及びXML文書における文字の両方が正準形式に正規化していない場合には,
XPath式は,期待しない結果を返すことがある([Character Model]参照)。
3.7 字句構造
トークン化を行う場合,最も長くて解釈が可能なトークンを常に返す。
読みやすさのために,空白は,文法によって明示的には許されていない場合であっても,式の中で使用
してもよい。すなわち,ExprWhitespaceを,ExprTokenの前後の式内に自由に追加してもよい。ただし,
ExprTokenの中間には追加してはならない。
ExprToken文法をあいまいにしないために,次の特殊なトークン化規則を指定した順序で適用しなけれ
ばならない。
a) 先行するトークンが存在し,その先行するトークンが @,::,(,[,,(コンマ) 又は Operatorの一
つではない場合,* は,MultiplyOperatorとして認識しなければならず,NCNameは,OperatorName
として認識しなければならない。
b) 挿入されているかもしれないExprWhitespaceの後のQNameに続く文字が ( (1バイト文字符号の開
き丸括弧)となる場合,そのトークンは,NodeType又はFunctionNameとして認識しなければならな
い。
c) 挿入されているかもしれないExprWhitespaceの後のNCNameに続く二つの文字が :: となる場合,そ
のトークンは,AxisNameとして認識しなければならない。
d) そうでない場合には,トークンを,MultiplyOperator,OperatorName,NodeType,FunctionName又は
AxisNameとして認識してはならない。
呼出し側の言語は,JIS X 4159及びJIS X 4158の字句規則に従うか,又はその代わりに[XML 1.1]及び
[XML Names 1.1]の字句規則に従うかを選択してよい。式の字句構造を次に示す。
[28] ExprToken ::= '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::'
| NameTest
| NodeType
| Operator
| FunctionName
| AxisName
| Literal
| Number
| VariableReference
[29] Literal ::= '"' [^"]* '"'
| "'" [^']* "'"
[30] Number ::= Digits ('.' Digits・)・
| '.' Digits
[31] Digits ::= [0-9]+
[32] Operator ::= OperatorName
――――― [JIS X 4160 pdf 19] ―――――
16
X 4160 : 2007
| MultiplyOperator
| '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>='
[33] OperatorName ::= 'and' | 'or' | 'mod' | 'div'
[34] MultiplyOperator ::= '*'
[35] FunctionName ::= QName - NodeType
[36] VariableReference ::= '$' QName
[37] NameTest ::= '*'
| NCName ':' '*'
| QName
[38] NodeType ::= 'comment'
| 'text'
| 'processing-instruction'
| 'node'
[39] ExprWhitespace ::= S (JIS X 4159で定義。)
注記 構文規則内の構成子は,(存在する場合には)本文中の次の日本語と対応する。
ExprToken 式トークン
NameTest 名前試験
NodeType ノード型
Operator 演算子
FunctionName 関数名
AxisName 軸名
Literal リテラル
Number 数,数値,数値型
VariableReference 変数参照
Digits 数字
OperatorName 演算子名
MultiplyOperator 乗算演算子
QName 修飾名
NCName 名前空間名
ExprWhitespace 式空白
4 主要関数ライブラリ
箇条4は,XPath実装が式を評価するために使用する関数ライブラリの中に常に含めなければならない
関数を定義する。
関数ライブラリの中の各関数は,関数の原型(prototype)を用いて指定する。この原型は,返却型,関数の
名前及び引数型を与える。引数型の後に疑問符(“・”)がある場合には,その引数は任意選択とする。そう
でない場合には,その引数は必す(須)とする。
4.1 ノード集合関数
関数 数値型 last()
last関数は,式評価文脈から文脈サイズに等しい数値を返す。
――――― [JIS X 4160 pdf 20] ―――――
次のページ PDF 21
JIS X 4160:2007の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.240 : 情報技術(IT)の応用 > 35.240.30 : 情報,ドキュメンテーション及び出版業務におけるITの応用
JIS X 4160:2007の関連規格と引用規格一覧
- 規格番号
- 規格名称