スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

1.16.6 XQuery問合せ本体

<この項の構成>
(1) 機能
(2) 形式
(3) XQueryシーケンス連結式
(4) FLWOR式
(5) XQuery限定式
(6) XQuery条件式
(7) XQuery論理式
(8) XQuery比較式
(9) XQuery範囲式
(10) XQuery算術式
(11) XQueryシーケンス集合演算式
(12) XQuery単項式
(13) XQuery値式
(14) XQueryパス式
(15) XQuery基本式

(1) 機能

XQuery問合せ本体には,XQuery問合せの結果を定義するXQuery式を指定します。

(2) 形式

 
XQuery問合せ本体::= XQuery式
 
XQuery式 ::= XQueryシーケンス連結式
 
(a) XQuery式を構成する式

XQuery式は,次の表に示す式を組み合わせて指定します。

表1-67 XQuery式を構成する式

項番 説明
1 XQueryシーケンス連結式 XQueryシーケンスを連結する式です。
2 FLWOR式
  • 指定したXQueryシーケンスを構成するすべてのXQuery項目ごとに,XQuery式を評価し,その結果のXQueryシーケンスを返却します。
  • 指定したXQueryシーケンスをXQuery変数に割り当て,そのXQuery変数を指定したXQuery式を評価し,その結果のXQueryシーケンスを返却します。
3 XQuery限定式 指定したXQueryシーケンスを構成するXQuery項目のどれか(some),又はすべて(every)が指定した条件を満たすかどうかを判定する式です。
4 XQuery条件式 指定した条件の判定結果に応じてXQuery式を選択し,選択したXQuery式を評価する式です。
5 XQuery論理式 論理演算(OR,AND)を行う式です。
6 XQuery比較式 比較を行う式です。比較には値比較,汎用比較,ノード比較があります。
7 XQuery範囲式 連続する整数(xs:int型)の基本単位値のXQueryシーケンスを生成する式です。
8 XQuery算術式 加算,減算,乗算,除算,剰余算を行う式です。
9 XQueryシーケンス集合演算式 ノードから構成されるXQueryシーケンスに対して,和,共通部分,差を求める式です。
10 XQuery単項式 単項演算を行う式です。
11 XQuery値式 値を指定する式です。
12 XQueryパス式 XQueryデータモデルの木をたどって,特定のノードを選択する式です。
13 XQuery基本式 XQueryパス式を構成する基本的な構成要素です。
次に示すものがあります。
  • XQuery定数
  • XQuery変数参照
  • 括弧付きXQuery式
  • 文脈項目式
  • XQuery関数呼出し

(3) XQueryシーケンス連結式

(a) 機能

XQueryシーケンスを連結します。

複数のXQueryシーケンスを連結すると,連結対象のXQueryシーケンスが左から順に評価され,そのXQueryシーケンスに含まれるXQuery項目が結果のXQueryシーケンスの末尾に追加されていきます。連結結果のXQueryシーケンスは,連結対象のXQueryシーケンスのすべてのXQuery項目を含みます。また,連結結果のXQueryシーケンスに含まれるXQuery項目の数は,連結対象のXQueryシーケンスに含まれるXQuery項目の数の合計となります。

(b) 形式
 
XQueryシーケンス連結式 ::= XQuery式単独 〔, XQuery式単独 〕…
 
XQuery式単独 ::= { FLWOR式|XQuery限定式|XQuery条件式|XQuery論理式}
 
(c) 使用例

XQueryシーケンス連結式の使用例を次に示します。

項番 結果 説明
1 1, 2, 3, 4, 5 (1, 2, 3, 4, 5) 1から5までのXQuery整数定数の評価結果であるxs:int型の基本単位値一つから構成される,XQueryシーケンス五つを連結したXQueryシーケンスを返します。
2 (1, 2, 3), (), (4, 5) (1, 2, 3, 4, 5) xs:int型の基本単位値1,2,3から構成されるXQueryシーケンス,空のXQueryシーケンス,及び xs:int型の基本単位値4,5から構成されるXQueryシーケンスを連結したXQueryシーケンスを返します。
「1, 2, 3, 4, 5」で表現されるXQuery式と同じ評価結果になります。

(4) FLWOR式

(a) 機能

XQueryシーケンスをXQuery変数に割り当て,XQuery変数を含むXQuery式を評価し,その結果のXQueryシーケンスを返却します。

XQuery変数の割り当て方法及びXQuery式の評価方法を次に示します。

W3Cの規格ではFLWOR式は,FOR句,LET句,WHERE句,ORDER BY句,及びRETURN句から構成されますが,HiRDBでは,FOR句,LET句及びRETURN句だけサポートしています。

(b) 形式
 
 FLWOR式 ::= { FOR句 | LET句 }〔 { FOR句 | LET句 }〕…
         RETURN句
 FOR句 ::= for $ XQuery変数名 in  XQuery式単独
         〔, $ XQuery変数名 in XQuery式単独 〕… 
 LET句 ::= let $ XQuery変数名 : 等号演算子 XQuery式単独
         〔, $ XQuery変数名 : 等号演算子 XQuery式単独〕… 
 RETURN句 ::= return  XQuery式単独
 
(c) オペランド

FOR句及びLET句を一つ以上の任意の組み合わせで指定することができます。

複数のFOR句やLET句を指定した場合,各句がネストして指定されたものとして扱います。

(例)

次に示すXQuery式1とXQuery式2の内容は同じです。

●XQuery式1
  for $XQuery変数名1 in XQuery式単独1
  let $XQuery変数名2 := XQuery式単独2
  for $XQuery変数名3  in XQuery式単独3
  let $XQuery変数名4 := XQuery式単独4
  return XQuery式単独5
 

●XQuery式2
  for $XQuery変数名1 in XQuery式単独1
  return
    let $XQuery変数名2 := XQuery式単独2
    return
      for $XQuery変数名3 in XQuery式単独3
      return
        let $XQuery変数名4 := XQuery式単独4
          return XQuery式単独5

次に示す方法でRETURN句の評価を繰り返します。

  1. 単一のXQuery変数を使用する場合は,XQuery式単独の評価結果であるXQueryシーケンスを構成するすべてのXQuery項目に対して,RETURN句の評価を繰り返します。
  2. 複数のXQuery変数を使用する場合は,FOR句がネストして指定されたものとして扱います。
    (例)
    次に示すXQuery式1とXQuery式2の内容は同じです。
     ●XQuery式1
      for $XQuery変数名1 in XQuery式単独1 ,
          $XQuery変数名2 in XQuery式単独2 
      return XQuery式単独3
      
     ●XQuery式2
      for $XQuery変数名1 in XQuery式単独1  
      return for $XQuery変数名2 in XQuery式単独2  
              return XQuery式単独3
      

XQuery変数名
XQuery式単独を評価したXQueryシーケンス中の各XQuery項目に関連付けられるXQuery変数の名前を指定します。
ここで指定したXQuery変数は,該当するFLWOR式の中で,該当するXQuery変数名より後に指定したXQuery変数名の入力として指定したXQuery式単独内,このFOR句より後に指定したFOR句及びLET句中のXQuery式単独内,及びRETURN句に指定したXQuery式単独内で有効となります。

XQuery式単独
入力とするXQueryシーケンスを返すXQuery式単独を指定します。

XQuery式単独を評価した結果をXQuery変数に関連付け,RETURN句を評価します。

XQuery変数名
XQuery式単独を評価したXQueryシーケンスに関連付けられるXQuery変数の名前を指定します。
ここで指定したXQuery変数は,該当するFLWOR式の中で,該当するXQuery変数名より後に指定したXQuery変数名の入力として指定したXQuery式単独内,このLET句より後に指定したFOR句及びLET句中のXQuery式単独内,及びRETURN句に指定したXQuery式単独内で有効となります。

XQuery式単独
入力とするXQueryシーケンスを返すXQuery式単独を指定します。

XQuery式単独
返却するXQueryシーケンスを表すXQuery式単独を指定します。
FOR句で得られたXQuery項目の組み合わせ一つにつき,1回評価します。
FOR句を指定せずに,LET句を指定した場合は,1回だけ評価します。
FLWOR式の評価結果は,ここで指定したXQuery式単独を繰り返して評価した結果のXQueryシーケンスを連結したXQueryシーケンスとなります。
(d) 使用例

FLWOR式の例を次に示します。

<XQuery変数bookが表す要素>
<書籍情報 書籍ID="452469630">
  <タイトル>リレーショナルデータベース解説</タイトル>
  <カテゴリ>データベース </カテゴリ>
  <著者>伊藤栄一</著者>
  <著者>木村幸一</著者>
 <価格>3000</価格>
</書籍情報>

<FLWOR式の例と結果>
項番 結果 説明
1 for $a in $book/著者
return fn:string($a)
("伊藤栄一", "木村幸一") 「書籍情報」要素ノードの子であるすべての「著者」要素ノードに対して,fn:string関数を適用し,文字列として表現した結果を返します。
2 for $i in (10, 20),
$j in (1,2)
return ($i + $j)
(11, 12, 21, 22) for $i in (10, 20)
return
for $j in (1, 2)
return ( $i + $j )
と同じ結果を返します。
3 let $a := $book/著者
return $a/fn:string()
("伊藤栄一", "木村幸一") 「書籍情報」要素ノードの子であるすべての「著者」要素ノードに対して,fn:string関数を適用し,文字列として表現した結果を返します。
4 for $i in (1,2)
let $a := $book/著者[$i]
return fn:string($a)
("伊藤栄一", "木村幸一") 「書籍情報」要素ノードの子である「著者」要素ノードのうち,1番目の要素ノード及び2番目の要素ノードに対して,fn:string関数を適用し,文字列として表現した結果を返します。
5 let $a := $book/著者
for $i in (1,2)
return fn:string($a[$i])
("伊藤栄一", "木村幸一") 「書籍情報」要素ノードの子である「著者」要素ノードのうち,1番目の要素ノード及び2番目の要素ノードに対して,fn:string関数を適用し,文字列として表現した結果を返します。
6 for $a in $book/著者
return fn:count($a)
(1,1) 「書籍情報」要素ノードの子であるそれぞれの「著者」要素ノードに対して,fn:count関数を適用した結果1を連結したXQueryシーケンスを返します。
7 let $a := $book/著者
return fn:count($a)
(2) 「書籍情報」要素ノードの子である「著者」要素ノードから成るXQueryシーケンスに対して,fn:count関数を適用した結果である2を返します。

(5) XQuery限定式

(a) 機能

指定したXQueryシーケンスを構成するXQuery項目のどれか(some),又はすべて(every)が指定した条件を満たすかどうかを判定し,その結果を返却します。

(b) 形式
 
  XQuery限定式::= { some | every }  $ XQuery変数名  in  XQuery式単独
         [ , $ 変数名 in  XQuery式単独 ]… satisfies  XQuery式単独
 
(c) オペランド

some
'some'を指定すると,in句により生成されたXQueryシーケンスのXQuery項目に対して,satisfies句に指定した条件が一つでも真であれば,結果は真となります。そうでなければ,結果は偽となります。in句により生成されたXQueryシーケンスが空のXQueryシーケンスである場合,XQuery限定式の結果は偽となります。

every
'every'を指定すると,in句により生成されたXQueryシーケンスのXQuery項目に対して,satisfies句に指定した条件がすべて真であれば,結果は真となります。そうでなければ,結果は偽となります。in句で生成されたXQueryシーケンスが空のXQueryシーケンスである場合,XQuery限定式の結果は真となります。

XQuery変数名
XQuery式単独を評価したXQueryシーケンス中のXQuery項目に関連付けられるXQuery変数の名前を指定します。
ここで指定したXQuery変数は,該当するXQuery限定式の中で,該当するXQuery変数名より後に指定したXQuery変数名の入力として指定したXQuery式単独内,及びsatisfies句に指定したXQuery式単独内で有効となります。

in XQuery式単独
入力となるXQueryシーケンスを意味するXQuery式単独を指定します。

satisfies XQuery式単独
XQuery変数に対して,条件を評価するXQuery式単独を指定します。複数のin句を指定した場合,複数のXQuery変数の組み合わせに対して,XQuery式単独を評価します。
(d) 使用例

XQuery 限定式の例を次に示します。

<XQuery変数bookが表す要素>

<書籍情報 書籍ID="452469630">
  <タイトル>リレーショナルデータベース解説</タイトル>
  <カテゴリ>データベース </カテゴリ>
  <著者>伊藤栄一</著者>
  <著者>木村幸一</著者>
 <価格>3000</価格>
</書籍情報>

<XQuery限定式の例と結果>

項番 結果 説明
1 some $text in $book /著者/text() satisfies ( $text eq "木村幸一" ) 「書籍情報」要素ノードの子である「著者」要素ノードが持つテキストノードの内容の一つが"木村幸一"に等しいため,真となります。
2 some $i in (1, 2, 3), $j in (4, 5, 6) satisfies $i + $j >= 6 some’を指定した場合,$i+$j>=6となるXQuery項目の組み合わせ(例:$i=1$j=5)を含むため,XQuery限定式の結果は真となります。
3 every $i in (1, 2, 3), $j in (4, 5, 6) satisfies $i + $j >= 6 every’を指定した場合,すべてのXQuery項目の組み合わせが$i+$j>=6となるわけではないため(例:$i=1$j=4),XQuery限定式の結果は偽となります。

(6) XQuery条件式

(a) 機能

指定した条件の判定結果に応じてXQuery式を選択し,選択したXQuery式を評価した結果を返却します。

(b) 形式
 
  XQuery条件式 ::= if  ( XQuery式 )  then  XQuery式単独  else  XQuery式単独
 
(c) オペランド

XQuery式
条件として評価するXQuery式を指定します。ここで指定したXQuery式の評価結果が真ならばthen句の直後に指定したXQuery式単独を評価し,偽ならばelse句の直後に指定したXQuery式単独を評価します。ただし,ここで指定したXQuery式の評価結果がxs:boolean型の基本単位値の単一XQueryシーケンスでない場合は,xs:boolean型の基本単位値の単一XQueryシーケンスに変換して判定します。

XQuery式単独
if句に指定した条件が真となった場合に評価するXQuery式単独を指定します。

XQuery式単独
if句に指定した条件が偽となった場合に評価するXQuery式単独を指定します。
(d) 使用例

XQuery条件式の例を次に示します。

<XQuery変数book1が表すXML要素>

<書籍情報 書籍ID="452469630">
  <タイトル>リレーショナルデータベース解説</タイトル>
  <カテゴリ>データベース </カテゴリ>
  <著者>伊藤栄一</著者>
  <著者>木村幸一</著者>
  <価格>3000</価格>
</書籍情報>

<XQuery変数book2が表すXML要素>

<書籍情報 書籍ID="452469631">
  <タイトル> XML入門教科書</タイトル>
  <著者>中村弘子</著者>
  <価格>2500</価格>
</書籍情報>

<XQuery条件式の例と結果>

項番 結果 説明
1 if ($book1/価格 > $book2/価格)
then $book1 else $book2
then句で指定された,XQuery変数book1が示す要素ノード $book1が示す要素ノードの子である「価格」要素ノードの型付き値(=3000)は,$book2が示す要素ノードの子である「価格」要素ノードの型付き値(=2500)より大きいため,$book1が示す要素ノードが結果となります。

(7) XQuery論理式

(a) 機能

XQuery比較式に対して論理演算(OR,AND)を行った結果を返却します。

又は,XQuery比較式の評価結果をそのまま返却します。

(b) 形式
 
XQuery論理式 ::=  XQueryOR式
XQueryOR式 ::=  XQueryAND式 〔or  XQueryAND式 〕…
XQueryAND式 ::=  XQuery比較式〔and  XQuery比較式〕…
 
(c) オペランド

or演算子を指定した場合は,XQueryAND式の評価結果に対してOR論理演算をします。

XQueryAND式を単独で指定した場合は,そのXQueryAND式の評価結果をそのまま返します。

OR論理演算をする場合に,各XQueryAND式の評価結果がブーリアン値(xs:boolean型の基本単位値)の単一XQueryシーケンスでない場合は,暗黙的にブーリアン値(xs:boolean型の基本単位値)の単一XQueryシーケンスに変換してから演算します。

第1演算項及び第2演算項のブーリアン値によるOR論理演算の結果を,次の表に示します。

表1-68  XQuery論理式でのOR論理演算の結果

項番 第1演算項 第2演算項
1
2

and演算子を指定した場合は,XQuery比較式の評価結果に対してAND論理演算をします。

XQuery比較式を単独で指定した場合は,そのXQuery比較式の評価結果をそのまま返します。

AND論理演算をする場合に,各XQuery比較式の評価結果がブーリアン値(xs:boolean型の基本単位値)の単一XQueryシーケンスでない場合は,ブーリアン値(xs:boolean型の基本単位値)の単一XQueryシーケンスに変換してから演算します。

第1演算項及び第2演算項のブーリアン値によるAND論理演算の結果を,次の表に示します。

表1-69 XQuery論理式でのAND論理演算の結果

項番 第1演算項 第2演算項
1
2

(8) XQuery比較式

(a) 機能

XQuery範囲式に対して比較を行った結果を返却します。

又は,XQuery範囲式の評価結果をそのまま返却します。

(b) 形式
 
XQuery比較式 ::= XQuery範囲式 〔{値比較|汎用比較|ノード比較} XQuery範囲式〕
 
値比較 ::= { eq|ne|lt|le|gt|ge}
汎用比較 ::= {=|!=|<|<=|>|>=|<>}
ノード比較 ::= {is|<<|>>}
 
(c) オペランド

値比較,汎用比較,又はノード比較を指定した場合は,XQuery範囲式の評価結果を比較します。

XQuery範囲式を単独で指定した場合は,そのXQuery範囲式の評価結果をそのまま返却します。

単一の基本単位値同士を比較します。

各指定での比較方法を次の表に示します。

表1-70 値比較の比較方法

項番 値比較演算子 真となる条件
1 eq 第1比較項と第2比較項の値が等しい
2 ne 第1比較項と第2比較項の値が等しくない
3 lt 第1比較項の値が第2比較項の値より小さい
4 le 第1比較項の値が第2比較項の値以下である
5 gt 第1比較項の値が第2比較項の値より大きい
6 ge 第1比較項の値が第2比較項の値以上である

次に示す手順で比較を行います。

  1. 各比較項に基本単位化を適用します。
  2. 比較項のどれかを基本単位化した結果が空のXQueryシーケンスであれば,比較の結果は空のXQueryシーケンスになります。
  3. 比較項のどれかを基本単位化した結果が二つ以上のXQuery項目を持つXQueryシーケンスであれば,エラーとなります。
  4. 基本単位化した結果がxs:untypedAtomic型であれば,xs:stirng型に変換し比較します。
  5. xs:string型の値同士の比較で,比較するデータの長さが異なる場合は,短い方のデータの長さ分だけ左側から比較します。このとき,結果が等しければ更に文字列長を比較します。比較した結果,文字列長が大きい値を持つxs:string型の値が大きいと定まります。
  6. 数値データ同士の比較で,評価対象となるXQueryデータ型が異なる場合は,範囲の広い方のXQueryデータ型で比較します。範囲の広さを次に示します。
     xs:double > xs:decimal > xs:int
  7. xs:hexBinary型同士の比較で,比較するデータの長さが異なる場合は,短い方のデータの長さ分だけを左側から比較します。このとき,結果が等しければ更にデータ長を比較します。比較した結果,データ長が大きい値を持つxs:hexBinary型の値が大きいと定まります。

比較項のXQueryデータ型が比較できない組み合わせの場合はエラーになります。比較できるXQueryデータ型の組み合わせを次の表に示します。

表1-71 比較可能なXQueryデータ型の組み合わせ

第1演算項のXQueryデータ型 第2演算項のXQueryデータ型
xs:stirng 数値データ型 xs:dateTime xs:date xs:time xs:hexBinary s:boolean
xs:stirng × × × × × ×
数値データ型 × × × × × ×
xs:dateTime × × × × × ×
xs:date × × × × × ×
xs:time × × × × × ×
xs:hexBinary × × × × × ×
xs:boolean × × × × × ×

(凡例)
○:比較できます。
×:比較できません。

注※
比較演算子eq又はneを用いて比較できます。その他の比較演算子で比較することはできません。

xs:double型で比較する場合の比較結果を,演算子ごとに次の表に示します。

表1-72 xs:double型で比較する場合の比較結果(eq演算子)

項番 第1演算項
(xs:double型に変換した値)
第2演算項(xs:double型に変換した値)
+0 -0 +INF -INF NaN 左記以外の負数 左記以外
1 +0
2 -0
3 +INF
4 -INF
5 NaN
6 上記以外の負数 比較結果 比較結果
7 上記以外 比較結果 比較結果

(凡例)
+0:正の0
-0:負の0
+INF:正の無限大
-INF:負の無限大
NaN:非数
比較結果:表1-70の比較方法に従った比較結果

表1-73 xs:double型で比較する場合の比較結果(ne演算子)

項番 第1演算項
(xs:double型に変換した値)
第2演算項(xs:double型に変換した値)
+0 -0 +INF -INF NaN 左記以外の負数 左記以外
1 +0
2 -0
3 +INF
4 -INF
5 NaN
6 上記以外の負数 比較結果 比較結果
7 上記以外 比較結果 比較結果

(凡例)
+0:正の0
-0:負の0
+INF:正の無限大
-INF:負の無限大
NaN:非数
比較結果:表1-70の比較方法に従った比較結果

表1-74 xs:double型で比較する場合の比較結果(lt演算子)

項番 第1演算項
(xs:double型に変換した値)
第2演算項(xs:double型に変換した値)
+0 -0 +INF -INF NaN 左記以外の負数 左記以外
1 +0
2 -0
3 +INF
4 -INF
5 NaN
6 上記以外の負数 比較結果 比較結果
7 上記以外 比較結果 比較結果

(凡例)
+0:正の0
-0:負の0
+INF:正の無限大
-INF:負の無限大
NaN:非数
比較結果:表1-70の比較方法に従った比較結果

表1-75 xs:double型で比較する場合の比較結果(le演算子)

項番 第1演算項
(xs:double型に変換した値)
第2演算項(xs:double型に変換した値)
+0 -0 +INF -INF NaN 左記以外の負数 左記以外
1 +0
2 -0
3 +INF
4 -INF
5 NaN
6 上記以外の負数 比較結果 比較結果
7 上記以外 比較結果 比較結果

(凡例)
+0:正の0
-0:負の0
+INF:正の無限大
-INF:負の無限大
NaN:非数
比較結果:表1-70の比較方法に従った比較結果

表1-76 xs:double型で比較する場合の比較結果(gt演算子)

項番 第1演算項
(xs:double型に変換した値)
第2演算項(xs:double型に変換した値)
+0 -0 +INF -INF NaN 左記以外の負数 左記以外
1 +0
2 -0
3 +INF
4 -INF
5 NaN
6 上記以外の負数 比較結果 比較結果
7 上記以外 比較結果 比較結果

(凡例)
+0:正の0
-0:負の0
+INF:正の無限大
-INF:負の無限大
NaN:非数
比較結果:表1-70の比較方法に従った比較結果

表1-77 xs:double型で比較する場合の比較結果(ge演算子)

項番 第1演算項
(xs:double型に変換した値)
第2演算項(xs:double型に変換した値)
+0 -0 +INF -INF NaN 左記以外の負数 左記以外
1 +0
2 -0
3 +INF
4 -INF
5 NaN
6 上記以外の負数 比較結果 比較結果
7 上記以外 比較結果 比較結果

(凡例)
+0:正の0
-0:負の0
+INF:正の無限大
-INF:負の無限大
NaN:非数
比較結果:表1-70の比較方法に従った比較結果

任意の長さのXQueryシーケンス同士を比較します。

次に示す手順で比較を行います。

  1. 各比較項に基本単位化を適用します。
  2. 基本単位化した各比較項のXQueryシーケンス間での基本単位値の組み合わせの中で,次に示す方法で値比較した結果が真となる基本単位値の組が一組でも存在すれば,結果は真となります。一組も存在しない場合は,結果が偽となります。
    • 二つの基本単位値に対して,汎用比較の指定に対応する表1-78に示す値比較を行います。ただし,xs:untypedAtomic型である基本単位値の場合は,他方の基本単位値のXQueryデータ型に従って表1-79に示す型変換を行ってから値比較を行います。

      表1-78 汎用比較と対応する値比較

      項番 汎用比較演算子 対応する値比較
      1 = eq
      2 !=,<> ne
      3 < lt
      4 <= le
      5 > gt
      6 >= ge

      表1-79  xs:untypedAtomic型の基本単位値の型変換

      項番 他方の基本単位値XQueryデータ型 型変換後のXQueryデータ型
      1 数値データ型 xs:double
      2 xs:untypedAtomic xs:string
      3 xs:string xs:string
      4 上記以外 他方の基本単位値と同じXQueryデータ型

ノードIDと,文書順序に基づいてノード同士を比較します。

ノードIDとは,XQueryデータモデルで表現した木の中のすべてのノードに割り当てられている,木で一意な識別子です。

各指定での比較方法を次の表に示します。

表1-80 ノード比較の比較方法

項番 ノード比較演算子 真となる条件
1 is 比較する二つのノードのノードIDが等しい。
2 << 第1比較項のノードが第2比較項のノードよりも文書順序で前に出現する。
3 >> 第1比較項のノードが第2比較項のノードよりも文書順序で後に出現する。

次に示す手順で比較を行います。

  1. 各比較項は,単一のノードのXQueryシーケンス,又は空のXQueryシーケンスでなければなりません。
  2. どちらか一方でも空のXQueryシーケンスである場合,結果は空のXQueryシーケンスとなります。
  3. どちらも単一ノードのXQueryシーケンスである場合,各比較項のXQueryシーケンスを構成するノードを比較します。
  4. 各比較項で指定されるノードが,XQueryデータモデルでの異なる木に属する場合は,第1比較項として指定されたノードの順序が前になります。
(d) 使用例

XQuery比較式の例を次に示します。

<XQuery変数bookが表す要素>

<書籍情報 書籍ID="452469630">
  <タイトル>リレーショナルデータベース解説</タイトル>
  <カテゴリ>データベース </カテゴリ>
  <著者>伊藤栄一</著者>
  <著者>木村幸一</著者>
  <価格>3000</価格>
</書籍情報>

<XQuery比較式の例と結果>

項番 結果 説明
1 $book[ @書籍ID
eq "452469630" ]
「書籍情報」要素ノード XQuery変数bookが表す「書籍情報」要素ノードに属する「書籍ID」属性ノードの型付き値が”452469630”と等しいため,結果は,XQuery変数bookが表す「書籍情報」要素ノードとなります。
2 (1, 2) = (2, 3) 第1比較項の2番目のXQuery項目と,第2比較項の1番目のXQuery項目の間でeqの関係が成り立つため,結果は真となります。
3 (1, 2) != (2, 3) 第1比較項の1番目のXQuery項目と,第2比較項の1番目のXQuery項目の間でneの関係が成り立つため,結果は真となります。

(9) XQuery範囲式

(a) 機能

連続する整数値(xs:int型)の基本単位値から構成されるXQueryシーケンスを返却します。

又は,XQuery算術式の評価結果をそのまま返却します。

(b) 形式
 
XQuery範囲式 ::= XQuery算術式 〔to  XQuery算術式〕
 
(c) オペランド

toを指定した場合は,XQuery算術式の評価結果を比較します。

XQuery算術式を単独で指定した場合は,そのXQuery算術式の評価結果をそのまま返却します。

toを指定した場合,次の規則に従って生成したXQueryシーケンスを返却します。

  1. 各XQuery算術式の評価結果に基本単位化を適用します。
  2. 基本単位化した結果は,空のXQueryシーケンス,又はxs:int型に変換可能な基本単位値一つから構成される単一XQueryシーケンスである必要があります。
  3. XQuery算術式のどれかの評価結果が空のXQueryシーケンスである場合は,結果は空のXQueryシーケンスになります。
  4. 一つ目のXQuery算術式の評価結果である基本単位値をxs:int型に変換した整数値が,二つ目のXQuery算術式の評価結果である基本単位値をxs:int型に変換した整数値よりも大きい場合,結果は空のXQueryシーケンスになります。
  5. 上記2.又は3.に該当しない場合,結果は,XQuery算術式の評価結果である基本単位値をxs:int型に変換した二つの整数値の間(一つ目の整数値以上,二つ目の整数値以下)に含まれるすべての整数値から構成されるXQueryシーケンスになります。
(d) 使用例

XQuery範囲式の例を次に示します。

項番 結果 説明
1 ( 1 to 10 ) (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 1から10までの整数値から成るXQueryシーケンスを生成します。

(10) XQuery算術式

(a) 機能

加算,減算,乗算,除算,剰余算を行った結果を返却します。

又は,XQueryシーケンス集合演算式の評価結果をそのまま返却します。

(b) 形式
 
XQuery算術式 ::= XQuery加減算式
XQuery加減算式 ::= XQuery乗除算式 〔{+|-} XQuery乗除算式〕…
XQuery乗除算式 ::= XQueryシーケンス集合演算式
         〔{*|div|idiv|mod} XQueryシーケンス集合演算式〕…
 
(c) オペランド

演算子(+,−)を指定した場合は,XQuery乗除算式の評価結果に対して,加算又は減算を行います。

XQuery乗除算式を単独で指定した場合は,そのXQuery乗除算式の評価結果をそのまま返却します。

各演算子の意味と機能を次の表に示します。

表1-81 XQuery加減算式での演算子の機能

項番 演算子 意味 機能
1 + 加算 第1演算項に第2演算項を加えます。
2 - 減算 第1演算項から第2演算項を減らします。

演算子(*,div,idiv,mod)を指定した場合は,XQueryシーケンス集合演算式の評価結果に対して,乗算,除算又は剰余算を行います。

XQueryシーケンス集合演算式を単独で指定した場合は,そのXQueryシーケンス集合演算式の評価結果をそのまま返却します。

各演算子の意味と機能を次の表に示します。

表1-82 XQuery乗除算式での演算子の機能

項番 演算子 意味 機能
1 * 乗算 第1演算項に第2演算項を掛けます。
2 div 除算 第1演算項を第2演算項で割ります。
3 idiv 整数除算 第1演算項を第2演算項で割った商を切り捨てた整数値を求めます。
4 mod 剰余算 第1演算項(仮にaとします)を第2演算項(仮にbとします)で割ったときの剰余を求めます。演算結果は,a - (a idiv b) * bとなります。
(d) XQuery算術式の評価

XQuery算術式では,次に示す手順で,加算,減算,乗算,除算,剰余算を行います。

  1. 各演算項に基本単位化を適用します。
  2. 基本単位化した演算項のどれかが空のXQueryシーケンスである場合は,結果は空のXQueryシーケンスになります。
  3. 基本単位化した演算項のどれかが二つ以上の基本単位値を持つXQueryシーケンスである場合は,エラーになります。
  4. 基本単位化した演算項のXQueryデータ型がxs:untypedAtomic型であった場合は,xs:double型に変換します。変換できない場合はエラーになります。
  5. 上記手順によって得られた二つのXQueryシーケンスに対して演算を行います。各演算子での,演算項のXQueryデータ型と,結果のXQueryデータ型を次の表に示します。

    表1-83 演算項のXQueryデータ型と演算結果のXQueryデータ型の関係(+演算子)

    項番 第1演算項 第2演算項
    xs:int xs:decimal xs:double
    1 xs:int xs:int xs:decimal xs:double
    2 xs:decimal xs:decimal xs:decimal xs:double
    3 xs:double xs:double xs:double xs:double

    表1-84  演算項のXQueryデータ型と演算結果のXQueryデータ型の関係(-演算子)

    項番 第1演算項 第2演算項
    xs:int xs:decimal xs:double
    1 xs:int xs:int xs:decimal xs:double
    2 xs:decimal xs:decimal xs:decimal xs:double
    3 xs:double xs:double xs:double xs:double

    表1-85  演算項のXQueryデータ型と演算結果のXQueryデータ型の関係(*演算子)

    項番 第1演算項 第2演算項
    xs:int xs:decimal xs:double
    1 xs:int xs:int xs:decimal xs:double
    2 xs:decimal xs:decimal xs:decimal xs:double
    3 xs:double xs:double xs:double xs:double

    表1-86 演算項のXQueryデータ型と演算結果のXQueryデータ型の関係(div演算子)

    項番 第1演算項 第2演算項
    xs:int xs:decimal xs:double
    1 xs:int xs:decimal xs:decimal xs:double
    2 xs:decimal xs:decimal xs:decimal xs:double
    3 xs:double xs:double xs:double xs:double

    表1-87 演算項のXQueryデータ型と演算結果のXQueryデータ型の関係(idiv演算子)

    項番 第1演算項 第2演算項
    xs:int xs:decimal xs:double
    1 xs:int xs:int xs:int xs:int
    2 xs:decimal xs:int xs:int xs:int
    3 xs:double xs:int xs:int xs:int

    表1-88 演算項のXQueryデータ型と演算結果のXQueryデータ型の関係(mod演算子)

    項番 第1演算項 第2演算項
    xs:int xs:decimal xs:double
    1 xs:int xs:int xs:decimal xs:double
    2 xs:decimal xs:decimal xs:decimal xs:double
    3 xs:double xs:double xs:double xs:double
  6. 演算項が次のどちらかの条件を満たす場合,エラーとなります。
    • 演算項がどちらもxs:double型ではなく,かつdiv演算又はmod演算の第2演算項に0を指定した場合
    • idiv演算の第2演算項に0を指定した場合
  7. 演算項の少なくとも一方がxs:double型である場合の演算結果を,演算子ごとに次の表に示します。

    表1-89 演算項の少なくとも一方がxs:double型である場合の演算結果(+演算子)

    項番 第1演算項
    (xs:double型に変換した値)
    第2演算項(xs:double型に変換した値)
    +0 -0 +INF -INF NaN 左記以外の負数 左記以外
    1 +0 +0 +0 +INF -INF NaN 加算結果 加算結果
    2 -0 +0 -0 +INF -INF NaN 加算結果 加算結果
    3 +INF +INF +INF +INF NaN NaN +INF +INF
    4 -INF -INF -INF NaN -INF NaN -INF -INF
    5 NaN NaN NaN NaN NaN NaN NaN NaN
    6 上記以外の負数 加算結果 加算結果 +INF -INF NaN 加算結果 加算結果
    7 上記以外 加算結果 加算結果 +INF -INF NaN 加算結果 加算結果
    (凡例)
    +0:正の0
    -0:負の0
    +INF:正の無限大
    -INF:負の無限大
    NaN:非数
    加算結果:表1-81に示す機能に従った演算結果

    表1-90 演算項の少なくとも一方がxs:double型である場合の演算結果(-演算子)

    項番 第1演算項
    (xs:double型に変換した値)
    第2演算項(xs:double型に変換した値)
    +0 -0 +INF -INF NaN 左記以外の負数 左記以外
    1 +0 +0 +0 -INF +INF NaN 減算結果 減算結果
    2 -0 -0 +0 -INF +INF NaN 減算結果 減算結果
    3 +INF +INF +INF NaN +INF NaN +INF +INF
    4 -INF -INF -INF -INF NaN NaN -INF -INF
    5 NaN NaN NaN NaN NaN NaN NaN NaN
    6 上記以外の負数 減算結果 減算結果 -INF +INF NaN 減算結果 減算結果
    7 上記以外 減算結果 減算結果 -INF +INF NaN 減算結果 減算結果
    (凡例)
    +0:正の0
    -0:負の0
    +INF:正の無限大
    -INF:負の無限大
    NaN:非数
    減算結果:表1-81に示す機能に従った演算結果

    表1-91 演算項の少なくとも一方がxs:double型である場合の演算結果(*演算子)

    項番 第1演算項
    (xs:double型に変換した値)
    第2演算項(xs:double型に変換した値)
    +0 -0 +INF -INF NaN 左記以外の負数 左記以外
    1 +0 +0 -0 NaN NaN NaN 乗算結果 乗算結果
    2 -0 -0 +0 NaN NaN NaN 乗算結果 乗算結果
    3 +INF NaN NaN +INF -INF NaN -INF +INF
    4 -INF NaN NaN -INF +INF NaN +INF -INF
    5 NaN NaN NaN NaN NaN NaN NaN NaN
    6 上記以外の負数 乗算結果 乗算結果 -INF +INF NaN 乗算結果 乗算結果
    7 上記以外 乗算結果 乗算結果 +INF -INF NaN 乗算結果 乗算結果
    (凡例)
    +0:正の0
    -0:負の0
    +INF:正の無限大
    -INF:負の無限大
    NaN:非数
    乗算結果:表1-82に示す機能に従った演算結果

    表1-92 演算項の少なくとも一方がxs:double型である場合の演算結果(div演算子)

    項番 第1演算項
    (xs:double型に変換した値)
    第2演算項(xs:double型に変換した値)
    +0 -0 +INF -INF NaN 左記以外の負数 左記以外
    1 +0 NaN NaN +0 -0 NaN 除算結果 除算結果
    2 -0 NaN NaN -0 +0 NaN 除算結果 除算結果
    3 +INF +INF -INF NaN NaN NaN -INF +INF
    4 -INF -INF +INF NaN NaN NaN +INF -INF
    5 NaN NaN NaN NaN NaN NaN NaN NaN
    6 上記以外の負数 -INF INF -0 +0 NaN 除算結果 除算結果
    7 上記以外 INF -INF +0 -0 NaN 除算結果 除算結果
    (凡例)
    +0:正の0
    -0:負の0
    +INF:正の無限大
    -INF:負の無限大
    NaN:非数
    除算結果:表1-82に示す機能に従った演算結果

    表1-93 演算項の少なくとも一方がxs:double型である場合の演算結果(idiv演算子)

    項番 第1演算項
    (xs:double型に変換した値)
    第2演算項(xs:double型に変換した値)
    +0 -0 +INF -INF NaN 左記以外の負数 左記以外
    1 +0 0除算エラー 0除算エラー 0 0 型変換エラー 整数除算結果 整数除算結果
    2 -0 0除算エラー 0除算エラー 0 0 型変換エラー 整数除算結果 整数除算結果
    3 +INF 0除算エラー 0除算エラー 型変換エラー 型変換エラー 型変換エラー 型変換エラー 型変換エラー
    4 -INF 0除算エラー 0除算エラー 型変換エラー 型変換エラー 型変換エラー 型変換エラー 型変換エラー
    5 NaN 0除算エラー 0除算エラー 型変換エラー 型変換エラー 型変換エラー 型変換エラー 型変換エラー
    6 上記以外の負数 0除算エラー 0除算エラー 0 0 型変換エラー 整数除算結果 整数除算結果
    7 上記以外 0除算エラー 0除算エラー 0 0 型変換エラー 整数除算結果 整数除算結果
    (凡例)
    0:xs:int型の0
    整数除算結果:表1-82に示す機能に従った演算結果
    0除算エラー:除数が0であるため,エラーとなります
    変換エラー:div演算の結果をxs:int型で表現できないため,エラーとなります

    表1-94 演算項の少なくとも一方がxs:double型である場合の演算結果(mod演算子)

    項番 第1演算項
    (xs:double型に変換した値)
    第2演算項(xs:double型に変換した値)
    +0 -0 +INF -INF NaN 左記以外の負数 左記以外
    1 +0 NaN NaN +0 +0 NaN 剰余算結果 剰余算結果
    2 -0 NaN NaN -0 -0 NaN 剰余算結果 剰余算結果
    3 +INF NaN NaN NaN NaN NaN NaN NaN
    4 -INF NaN NaN NaN NaN NaN NaN NaN
    5 NaN NaN NaN NaN NaN NaN NaN NaN
    6 上記以外の負数 NaN NaN 第1演算項(xs:double型に変換した値) 第1演算項(xs:double型に変換した値) NaN 剰余算結果 剰余算結果
    7 上記以外 NaN NaN 第1演算項(xs:double型に変換した値) 第1演算項(xs:double型に変換した値) NaN 剰余算結果 剰余算結果
    (凡例)
    +0:正の0
    -0:負の0
    +INF:正の無限大
    -INF:負の無限大
    NaN:非数
    第1演算項:第1演算項の値
    剰余算結果:表1-82に示す機能に従った演算結果
(e) 留意事項

減算演算子(-)の前には,空白(X'20'),TAB(X'09'),NL(X'0a')又はCR(X'0d')のどれかを指定してください。空白(X'20'),AB(X'09'),NL(X'0a')又はCR(X'0d')を指定しない場合,減算演算子の直前に指定した名前の一部と見なされます。例えば,'a-b'と指定した場合は名前として解釈しますが,'a - b'や'a -b'と指定した場合は,XQuery算術式として解釈します。

(f) 使用例

XQuery算術式の例を次に示します。

項番 結果(XQueryデータ型)
1 4 - 2 2 (xs:int)
2 5 div 2 2.5 (xs:decimal)
3 5 idiv 2 2 (xs:int)
4 5 mod 2 1 (xs:int)

(11) XQueryシーケンス集合演算式

(a) 機能

ノードから構成されるXQueryシーケンスを順序付けられた集合として,和集合演算,共通集合演算又は差集合演算を行った結果のXQueryシーケンスを返却します。

又は,XQuery単項式の評価結果をそのまま返却します。

(b) 形式
 
XQueryシーケンス集合演算式 ::= XQuery和集合式
XQuery和集合式 ::= {XQuery共通集合式|XQuery差集合式}
                      〔{union|垂直棒} {XQuery共通集合式|XQuery差集合式}〕…
XQuery共通集合式 ::= XQuery単項式 〔intersect XQuery単項式〕…
XQuery差集合式 ::= XQuery単項式 〔except XQuery単項式〕…
 
(c) オペランド

union又は垂直棒(|)を指定した場合は,XQuery共通集合式又はXQuery差集合式の評価結果である二つのXQueryシーケンス中に含まれる異なるすべてのノードから構成されるXQueryシーケンスを求めます。

XQuery共通集合式又はXQuery差集合式を単独で指定した場合は,そのXQuery共通集合式又はXQuery差集合式の評価結果をそのまま返却します。

intersectを指定した場合は,XQuery単項式の評価結果である二つのXQueryシーケンスの両方に含まれる異なるすべてのノードから構成されるXQueryシーケンスを求めます。

XQuery単項式を単独で指定した場合は,そのXQuery単項式の評価結果をそのまま返却します。

exceptを指定した場合は,一つ目のXQuery単項式の評価結果であるXQueryシーケンスに含まれるが,二つ目のXQuery単項式の評価結果であるXQueryシーケンスに含まれない異なるすべてのノードから構成されるXQueryシーケンスを求めます。

XQuery単項式を単独で指定した場合は,そのXQuery単項式の評価結果をそのまま返却します。

(d) 規則
  1. 結果のXQueryシーケンスからは,重複したノードは除かれます。また,結果のXQueryシーケンス中のノードの順序は文書順序になります。
  2. 結果のXQueryシーケンス内に,異なる木に属するノードが混在する場合,次の規則に従って木の順序を定めます。順序が定まった木の中では,文書順序に従って結果のノードの順序を決定します。ここで,第1演算項のXQueryシーケンス内の各ノードが属する木を(T1-1,T1-2,T1-n),第2演算項のXQueryシーケンス内の各ノードが属する木を(T2-1,T2-2,…T2-m)とします。
    • T1-1〜T1-nの木の間での順序は,木が第1演算項のXQueryシーケンス内で初めて出現した位置の順序になります。
    • T2-1〜T2-mのうち,T1-1〜T1-nのどの木とも異なる木の間での順序は,木が第2演算項のXQueryシーケンス内で初めて出現した位置の順序になります。また,T1-1〜T1-nのどの木よりも後の順序になります。
(e) 留意事項

XQuery中のXQueryシーケンス集合演算式(union,intersect,及びexcept)とSQLの問合せ本体中の集合演算(UNION,及びEXCEPT)では,評価順序が異なりますので注意してください。

(f) 使用例
  1. XQueryシーケンス集合演算式の例を次に示します。

<XQueryシーケンス集合演算式の例と結果>

項番 結果
1 (A,B) union (A,B) (A, B)
2 (A,B) union (B,C) (A, B, C)
3 (A,B) intersect (A,B) (A, B)
4 (A,B) intersect (B,C) (B)
5 (A,B) except (A,B) ()
6 (A,B) except (B,C) (A)

A,B及びCは,同じXML文書内の要素ノードを表します。
文書順序はA,B,Cの順に割り当てられています。

(12) XQuery単項式

(a) 機能

XQuery値式に対して,単項演算を行った結果を返却します。

又は,XQuery値式の評価結果をそのまま返却します。

(b) 形式
 
XQuery単項式 ::= 〔{-|+}〕… XQuery値式
 
(c) オペランド

単項演算子(-, +)を指定した場合は,XQuery値式に対して,単項演算を行った結果を返却します。

XQuery値式を単独で指定した場合は,XQuery値式の評価結果をそのまま返却します。

各演算子の意味と機能を次の表に示します。

表1-95 XQuery単項式での演算子の機能

項番 演算子 意味 機能
1 - 負符号 符号を反転します。
2 + 正符号 符号を反転しません。
(d) XQuery単項式の評価

XQuery単項式では,次に示す手順で単項演算を行います。

  1. 演算項に基本単位化を適用します。
  2. 基本単位化した演算項が空のXQueryシーケンスである場合は,結果は空のXQueryシーケンスになります。
  3. 基本単位化した演算項が二つ以上の基本単位値を持つXQueryシーケンスである場合は,エラーになります。
  4. 基本単位化した演算項のXQueryデータ型がxs:untypedAtomic型であった場合は,xs:double型に変換します。変換できない場合はエラーになります。
  5. 上記手順によって得られたXQueryシーケンスに対して演算を行います。結果のXQueryデータ型は,手順4を終えた時点でのXQueryデータ型と同じになります。

(13) XQuery値式

(a) 機能

XQueryパス式を評価した結果を返却します。

(b) 形式
 
XQuery値式 ::= XQueryパス式
 
(c) オペランド

評価する値をXQueryパス式で指定します。

(14) XQueryパス式

(a) 機能

XQueryパス式は,XQueryデータモデルでのノードを特定し,その評価結果を返却します。

(b) 形式
 
  XQueryパス式 ::= {/〔相対パス式〕 | //相対パス式 | 相対パス式}
  相対パス式 ::= ステップ式 〔{/ | // }ステップ式 〕…
  ステップ式 ::= {軸ステップ式 | フィルタ式}
  軸ステップ式 ::= 軸ステップ〔 XQuery述語 〕…
  軸ステップ ::= {軸 {名前テスト |種別テスト}| 省略軸ステップ}
  名前テスト ::= {修飾名 | * | 接頭辞:* | *:局所名}
  省略軸ステップ ::= {〔@〕{名前テスト | 種別テスト}|.. }
  フィルタ式 ::= XQuery基本式〔 XQuery述語 〕…
  XQuery述語 ::= 左角括弧 XQuery式 右角括弧
 
(c) オペランド

文脈項目のノードが属する木の根となるノードを特定します。

文脈項目がノードでない場合はエラーになります。

文脈項目のノードが属する木の根となるノード及びそのノードが持つすべての子孫ノードを特定します。

文脈項目がノードでない場合はエラーになります。

XQueryパス式の先頭以外で指定する'/'は,ステップ式の区切りを意味します。ステップ式を評価して得られたXQueryシーケンスは,左側から右側に向かって評価されます。

例えば,'E1/E2'という相対パス式は,次のように評価します。

  1. ステップ式E1を評価します。
  2. ステップ式E1を評価して得られたXQueryシーケンスの各XQuery項目をステップ式E2の評価での文脈項目とし,その各文脈項目に対してステップ式E2を評価します。ステップ式E1を評価して得られたXQueryシーケンスが空の場合は,E2は評価しないで,'E1/E2'の評価結果は空のXQueryシーケンスになります。
  3. 2.で各文脈項目に対してステップ式E2を評価して得られたXQueryシーケンスを連結します。連結した結果のXQueryシーケンスが'E1/E2'を評価した結果となります。

斜線の左側のステップ式を評価した結果のXQueryシーケンスは,基本単位値を含むことはできません。

'/descendant-or-self::node()/'の省略記法です。

左側に指定したステップ式を評価結果した後の各文脈項目での,子孫ノード及び文脈項目自身から構成されるXQueryシーケンスに対して右側に指定したステップ式を評価します。

二つの斜線の左側のステップ式を評価した結果のXQueryシーケンスは,基本単位値を含むことはできません。

軸ステップ式は,文脈項目を基点として,指定された木のたどり方で到達可能なノードに対して,指定された名前,ノードの種別及び条件に従って絞り込んだ結果のノードのXQueryシーケンスを返します。このXQueryシーケンス中のノードが次の文脈項目になります。

文脈項目がノードでない場合はエラーになります。

軸ステップは,文脈項目を基点として,指定された軸を経由して到達可能なノード中の,名前テスト又は種別テストに合致するノードのXQueryシーケンスを返します。このXQueryシーケンス中のノードが次の文脈項目になります。

文脈項目からの木のたどり方を指定します。
軸として指定できる項目,及び返却する文脈項目の文脈位置の割り当て方法を,次の表と図で示します。

表1-96 軸の一覧

項番 説明 文脈位置の割り当て
1 child:: 子ノードを示します。 文書順
2 descendant:: 子孫ノードを示します。
3 attribute:: 文脈項目であるノードに属する属性ノードを示します。
4 self:: 文脈項目であるノード自身を示します。
5 descendant-or-self 子孫ノード及び文脈項目であるノード自身を示します。
6 following-sibling:: 文脈項目であるノードの兄弟となるノードの中で,後の文書順序にあるノードを示します。文脈項目であるノードが属性ノードである場合,結果は空のXQueryシーケンスです。
7 following:: 文脈項目であるノードの子孫ではなく,後の文書順序にあるノードを示します。なお,属性ノードは選択されません。
8 parent:: 親ノードを示します。文脈項目であるノードが親ノードを持たない場合,結果は空のXQueryシーケンスです。
9 ancestor:: 祖先ノードを示します。 逆文書順
10 preceding-sibling:: 文脈項目であるノードの兄弟となるノードで,前の文書順序にあるノードを示します。文脈項目であるノードが属性ノードの場合,結果は空のXQueryシーケンスです。
11 preceding:: 文脈項目であるノードの祖先でなく,前の文書順序にあるノードを示します。なお,属性ノードは含まれません。
12 ancestor-or-self:: 祖先ノードと,文脈項目であるノード自身を示します。

(凡例)
文書順:文書順序に沿った順序で,文脈位置が割り当てられます。
逆文書順:文書順序とは逆の順序で,文脈位置が割り当てられます。

図1-17 

[図データ]
[図データ]
[図データ]

軸で指定されたたどり方で到達可能なノード中から,名前が合致するノードを絞り込む場合に指定します。

修飾名
指定した修飾名の展開後修飾名と,名前テストの対象であるノードの展開後修飾名が等価であるノードを絞り込みます。

*
名前テストの対象であるノードを絞り込まない場合に指定します。

接頭辞:*
名前テストの対象であるノードのうち,その展開後修飾名のXML名前空間URIがここで指定された接頭辞に対応するURIと等しいノードを絞り込みます。局所名には依存しません。

*:局所名
名前テストの対象であるノードのうち,局所名がここで指定された局所名に等しいノードを絞り込みます。XML名前空間URIには依存しません。

軸で指定されたたどり方でたどって得られたノード中から,種別が合致するノードを絞り込む場合に指定します。

種別テストには,次の表に示すものがあります。

表1-97 種別テスト一覧

項番 種類 指定方法 説明
1 文書テスト document-node() 文書ノードに合致します。
2 document-node(要素テスト) 要素ノードを子ノードとして必ず一つだけ持ち,その他の子ノードがコメントノード又は処理命令ノードだけである文書ノードのうち,子ノードの要素ノードが要素テストに合致する文書ノードに合致します。
3 要素テスト element() 任意の要素ノードに合致します。
4 element(*)
5 element(修飾名) XML要素のうち,指定した修飾名の展開後修飾名と等価な展開後修飾名を持つ要素ノードに合致します。
6 属性テスト attribute() 任意の属性ノードに合致します。
7 attribute(*)
8 attribute(修飾名) XML属性のうち,指定した修飾名の展開後修飾名と等価な展開後修飾名を持つ属性ノードに合致します。
9 処理命令テスト processing-instruction() 任意の処理命令ノードに合致します。
10 processing-instruction(処理命令ターゲット) 処理命令ノードのうち,指定した処理命令ターゲットと一致する処理命令ターゲットプロパティの値を持つ処理命令ノードに合致します。
11 コメントテスト comment() 任意のコメントノードに合致します。
12 テキストテスト text() 任意のテキストノードに合致します。
13 任意種別テスト node() 任意の種別のノードに合致します。

軸ステップを簡略化して記述する場合に指定します。

〔@〕{名前テスト | 種別テスト}
'@'は',attribute::'に置き換わります。
'@'を省略した場合は,種別テストが属性テストの場合は'attribute::'が,それ以外の場合は'child::'が名前テストや種別テストの前に指定されたものと仮定します。

..
'..'は,'parent::node()'に置き換わります。
省略軸ステップの指定例を次の表に示します。

表1-98 省略軸ステップの指定例

項番 省略軸ステップ 同じ意味を持つ省略しない記法 意味
1 /elem/ElemName /elem/child::ElemName 「elem」評価後での文脈項目の子ノード中の,「ElemName」という名前の子ノードを意味します。
2 /elem/@AttrName /elem/attribute::AttrName 「elem」評価後での文脈項目の属性ノード中の,「AttrName」という名前の属性ノードを意味します。
3 /elem/attribute() /elem/attribute::attribute() 「elem」評価後での文脈項目のすべての属性ノードを意味します。
4 /elem/.. /elem/parent::node() 「elem」評価後での文脈項目の親ノードを意味します。

XQuery基本式を評価します。XQuery述語を指定した場合は,XQuery基本式の評価結果であるXQueryシーケンスのXQuery項目をXQuery述語で指定した条件で絞り込みます。

文脈項目を絞り込む条件をXQuery式で指定します。

各文脈項目に対してXQuery述語に指定したXQuery式を評価します。

XQuery述語の評価結果は,次のようになります。

(d) 規則
  1. 一つ以上の斜線(/)を含むXQueryパス式の評価結果であるXQueryシーケンスは次のようになります。
    • XQueryパス式の最後のステップ式の結果がノードだけを含むXQueryシーケンスである場合,重複されるノードは除かれ,ノードの順序は文書順序に並び替えたXQueryシーケンスが結果になります。
    • XQueryパス式の最後のステップ式の結果が基本単位値だけを含むXQueryシーケンスである場合は,そのまま結果になります。
    • XQueryパス式の最後のステップ式の結果がノード及び基本単位値を含むXQueryシーケンスの場合は,エラーになります。
(e) 使用例

XQueryパス式の例を次に示します。

項番 説明
1 child::書籍情報 文脈項目の子ノードである「書籍情報」要素ノードを選択します。
2 書籍情報 'child::書籍情報'の省略記法です。
3 attribute::書籍ID 文脈項目の書籍ID属性ノードを選択します。
4 @書籍ID 'attribute::書籍ID'の省略記法です。
5 attribute::* 文脈項目に属するすべての属性ノードを選択します。
6 parent::element() 文脈項目の親ノードである要素ノードを選択します。
7 書籍情報[カテゴリ="プログラミング"] 子ノードとして,「カテゴリ」要素ノードを持ち,その型付き値プロパティの値が"プログラミング"である「書籍情報」要素ノードを選択します。
8 書籍情報[@書籍ID = "12345"] 文脈項目の子ノードであり,書籍ID属性の値が"12345"である「書籍情報」要素ノードを選択します。
9 著者[2] 文脈項目の子ノードである,2番目の「著者」要素ノードを選択します。

(15) XQuery基本式

(a) 機能

XQueryパス式を構成する基本的な構成要素です。

XQuery基本式には,次に示すものがあります。

(b) 形式
 
XQuery基本式 ::= {XQuery定数|XQuery変数参照|
                        括弧付きXQuery式|文脈項目式|XQuery関数呼出し}
 

各XQuery基本式について説明します。

(c) XQuery定数
●機能

XQuery定数は,基本単位値を直接表現するための式です。解析時に値が決定します。

XQuery中で指定できるXQuery定数を次の表に示します。

表1-99 XQuery定数

項番 XQuery定数 結果 解釈するXQueryデータ型
形式 説明
1 XQuery数値定数 XQuery整数定数 〔符号〕符号なし整数
(例)
 -123
 45
 6789
符号なし整数は,数字の並びで表します。
符号は,+又は−で表します。
xs:int
2 XQuery10進数定数 〔符号〕〔整数部〕.〔小数部〕
(例)
 12.3
 -456.
 .789
整数部と小数部は符号なし整数で表します。整数部か小数部のどちらか一方は必ず指定する必要があります。 xs:decimal
3 XQuery浮動小数点定数 仮数{E|e}指数
(例)
 1.0E2
 .5E+67
仮数は,XQuery整数定数又はXQuery10進数定数で表します。指数は1〜3けたのXQuery整数定数で表します。指数は10のべき乗を表します。 xs:double
4 XQuery文字列定数 {"文字列"|
'文字列'}
(例)
 "HiRDB"
 'HITACHI'
 '''06.9.13'
文字列は文字の並びで表します。
引用符で囲んだ文字列中に引用符そのものを指定する場合は,引用符を2個続けて書いてください。
アポストロフィで囲んだ文字列中にアポストロフィそのものを指定する場合は,アポストロフィを2個続けて書いてください。
次に示す文字列は,対応する文字を意味します。
  • 「&amp;」:& (アンパーサンド)
  • 「&lt;」:< (小なり演算子)
  • 「&gt;」:> (大なり演算子)
  • 「&quot;」:" (引用符)
  • 「&apos;」: (アポストロフィ)
'&'は単独で指定できません。
xs:string

注※
XQuery整数定数の値の範囲を超える定数を整数定数の表記法で指定すると,HiRDBは,定数の右側に小数点を仮定し,10進数定数が指定されたものと解釈します。
(d) XQuery変数参照
●機能

XQuery変数参照は,XQuery式中でXQuery変数の値を返却します。

●形式
 
 XQuery変数参照 ::= $ XQuery変数名
 
●オペランド

参照したいXQuery変数の修飾名を指定します。

指定した修飾名を持つ有効なXQuery変数の値を返却します。該当するXQuery変数が複数該当する場合は,最も内側のFLWOR式やXQuery限定式で指定したXQuery変数の値を返却します。

●使用例

変数名がPRICEであるXQuery変数の値より大きい型付き値プロパティを持つ「価格」XML要素を,子のXML要素として持つ「書籍情報」XML要素に表します。

 
/書籍情報[価格> $PRICE]
 
(e) 括弧付きXQuery式
●機能

XQuery式を評価した結果を返却します。括弧で囲まれたXQuery式の評価を先に行う場合に使用します。

また,括弧内にXQuery式を指定しない場合は,空のXQueryシーケンスを表します。

●形式
 
 括弧付きXQuery式 ::= ( 〔 XQuery式 〕 )
 
●使用例

括弧付きXQuery式の例を次に示します。

項番 結果 説明
1 (2 + 4) * 5 ( 30 ) 括弧で囲まれた'2+4'が先に評価されます。'2+4'を括弧で囲わない場合は,XQuery乗除算式である'4*5'を先に評価するため,結果は22になります。
(f) 文脈項目式
●機能

文脈項目式は,文脈項目式を評価する直前の文脈項目を構成するXQueryシーケンスを返却します。

●形式
 
  文脈項目式 ::= ピリオド
  ピリオド ::= .
 
●使用例

文脈項目式の例を次に示します。

項番 結果 説明
1 (1 to 20)[ . mod 5 eq 0] (5, 10, 15, 20) まず,XQuery範囲式により,1から20までの整数値から構成されるXQueryシーケンスが生成されます。生成されたXQueryシーケンスの各XQuery項目が文脈項目となり,範囲式に続くXQuery述語が評価されます。この評価の結果が真となるXQuery項目から構成されるXQueryシーケンスが結果となります。
(g) XQuery関数呼出し
●機能

XQuery関数呼出しは,XQuery関数を呼び出し,評価した結果を返却します。

●形式
 
  関数呼出し ::= XQuery関数名 ( 〔 引数 〔 , 引数〕… 〕 ) 
  引数 ::= XQuery式単独
 
●オペランド

呼び出すXQuery関数の修飾名を指定します。

XQuery式単独
呼び出すXQuery関数のパラメタに対する値を表すXQuery式単独を指定します。
引数にコンマ演算子を含む場合,最上位のコンマ演算子を含むXQuery式を括弧で囲んでください。
●規則
  1. 引数は,指定した順序でパラメタと対応します。
  2. XQuery関数の引数のXQueryデータ型が基本単位型である場合,次の手順で引数を評価して関数に渡します。
    (a) XQuery関数の引数に指定したXQuery単項式を評価し,評価結果であるXQueryシーケンスを求めます。
    (b) 引数の評価結果に基本単位化を適用し,基本単位値から構成されたXQueryシーケンスに変換します。
    (c) XQueryシーケンスに含まれるXQuery項目それぞれに対して,次の変換をします。
    • XQuery項目のXQueryデータ型がxs:untypedAtomic型,又はxs:string型であり,かつ関数のパラメタのXQueryデータ型が数値データ型の場合
      xs:double型に変換します。
    • 上記以外の場合
      関数のパラメタのXQueryデータ型に変換します。
  3. XQuery関数の引数のXQueryデータ型が基本単位型以外である場合,XQuery関数の引数に指定したXQuery単項式を評価し,評価結果であるXQueryシーケンスを関数に渡します。
  4. 規則2及び3の各手順のXQueryデータ型の変換で,互換性がなく変換できない場合はエラーとなります。互換性があるデータ型については,「1.16.2(3) XQueryデータ型」を参照してください。
●関数の呼出し規則
  1. XQuery関数の修飾名と引数の数が一致すれば,そのXQuery関数を呼び出します。それ以外の場合は,エラーとなります。