1.16.2 基本項目

この節では,次の表に示すXQueryの基本項目について説明します。

表1-50 XQueryの基本項目

項番基本項目概要
1焦点XQuery式を評価している,ある時点での評価対象であるXQuery項目の情報です。
2修飾名XML要素やXML属性,XQuery関数,XQuery変数を識別するために,XQueryで使用する名前です。
3XQueryデータ型XQueryデータモデルで,ノードや基本単位値を型付ける型です。
4基本単位化XQueryシーケンスを,基本単位値から構成されるXQueryシーケンスに変換する処理です。
5ブーリアン値への暗黙的な型変換ブーリアン値以外の値がXQuery式の評価対象である場合,暗黙的にブーリアン値に変換する処理です。
<この項の構成>
(1) 焦点
(2) 修飾名
(3) XQueryデータ型
(4) 基本単位化
(5) ブーリアン値への暗黙的な型変換

(1) 焦点

焦点は,XQuery式を評価しているある時点での評価対象であるXQuery項目の情報です。

焦点には,次の表に示す要素があります。

表1-51 焦点

項番情報概要
1文脈項目評価対象であるXQuery項目
2文脈位置文脈項目の,文脈項目から構成されるXQueryシーケンス中での位置
3文脈サイズ文脈項目の数

次に,それぞれの要素を詳細に説明します。

(a) 文脈項目

XQuery式を評価しているある時点で,評価の対象となっているXQuery項目を持ちます。

(b) 文脈位置

XQuery式を評価しているある時点での,各文脈項目の文脈項目から構成されるXQueryシーケンス中での位置を持ちます。文脈位置は,1から始まる整数値をとります。

(c) 文脈サイズ

XQuery式を評価しているある時点での文脈項目の数を持ちます。

焦点は,XQuery式を順次評価していくことで移動します。これを次の例を用いて説明します。

(例)

<評価対象のXML文書>

<書籍情報 書籍ID=”452469630​”>
 <タイトル>リレーショナルデータベース解説</タイトル>
 <著者>伊藤栄一</著者>
 <著者>木村幸一</著者>
</書籍情報>

<XQuery式>

/書籍情報/著者/text()

この例のXQuery式は,「書籍情報」「著者」「text()」という順に評価されます。このときの焦点の移動の流れを,次の図に示します。

図1-16 焦点の移動の流れ

[図データ]

〔説明〕
  1. XQuery式の評価を開始する前に,文脈項目を文書ノードに初期化します。文書ノードの文脈位置は1,文脈サイズは1になります。
  2. XQuery式の'書籍情報'部分を評価すると,文脈項目は,現在の文脈項目である文書ノードの子ノードの「書籍情報」要素ノードに移動します。文脈項目は一つであるため,「書籍情報」要素ノードの文脈位置は1,文脈サイズは1になります。
  3. XQuery式の'著者'部分を評価すると,文脈項目は,現在の文脈項目である「書籍情報」要素ノードの子ノード中の「著者」要素ノードに移動します。「書籍情報」要素ノードの子ノードの「著者」要素ノードは二つあるため,文書順序に従って,一つ目の「著者」要素ノードの文脈位置は1,二つ目の「著者」要素ノードの文脈位置は2になり,文脈サイズは2になります。
  4. XQuery式の’text()’部分を評価すると,文脈項目は,現在の文脈項目である「著者」要素ノードの子ノードのテキストノードに移動します。現在の文脈項目である「著者」要素ノードの子ノードのテキストノードは二つあるため,一つ目の「著者」要素ノードの子ノードのテキストノードの文脈位置は1,二つ目の「著者」要素ノードの子ノードのテキストノードの文脈位置は2になり,文脈サイズは2になります。

(2) 修飾名

XML要素やXML属性,XQuery関数,XQuery変数を識別するために,XQueryで使用する名前を修飾名といいます。修飾名は,接頭辞とコロン文字と局所名から構成されます。ユーザは,XML名前空間宣言(XML名前空間宣言については,「1.16.5 XQuery宣言部」を参照してください)を使って,接頭辞とXML名前空間URIを関連付けることができます。XML名前空間URIは,XML名前空間を識別するためのURIです。局所名は,個々のXML名前空間内で使用する名前です。

HiRDBでは,次の表に示す接頭辞があらかじめ定義されています。

表1-52 HiRDBで定義されている接頭辞

項番接頭辞XML名前空間URI
1xmlhttp://www.w3.org/XML/1998/namespace
2xshttp://www.w3.org/2001/XMLSchema
3xsihttp://www.w3.org/2001/XMLSchema-instance
4fnhttp://www.w3.org/2006/xpath-functions
5errhttp://www.w3.org/2005/xqt-errors
6hi-fnhttp://www.hitachi.co.jp/Prod/comp/soft1/hirdb/xquery-functions

接頭辞とコロン文字を省略し,局所名だけを指定して,修飾名として使用することもできます。接頭辞とコロン文字が省略された修飾名は,既定のXML名前空間に属することになります。既定のXML名前空間については,「1.16.5 XQuery宣言部」を参照してください。修飾名の例を,次の表に示します。

表1-53 修飾名の例

項番修飾名接頭辞局所名
1xs:stringxsstring
2fn:datafndata
3element_name(省略)element_name

接頭辞に対応するXML名前空間URIと,局所名から構成される名前を展開後修飾名といいます。二つの修飾名は,それらの展開後修飾名のXML名前空間URIと局所名が共に等しい場合に,等価になります。この場合,二つの修飾名の接頭辞が異なっていても,二つの修飾名は等価とみなされます。例えば,次の表に示す二つの修飾名は,接頭辞が異なります。しかし,展開後修飾名のXML名前空間URIと局所名が共に等しいため,二つの修飾名は等価とみなされます。

表1-54 接頭辞は異なっていても,等価とみなされる二つの修飾名

項番修飾名接頭辞局所名関連付けされたXML名前空間URI
1xxx:element_namexxxelement_namehttp://www.hitachi.com
2yyy:element_nameyyyelement_namehttp://www.hitachi.com

接頭辞及び局所名に指定できる文字を次の表に示します。

表1-55 接頭辞及び局所名に使用できる文字

項番分類接頭辞及び局所名に使用できる文字先頭指定可否
1半角文字コード文字英小文字(A~Z)
2英小文字(a~z)
3数字(0-9)×
4片仮名文字
5全角文字コード全角文字コードの文字すべて
6特殊記号(半角文字コード)ピリオド( . )×
7ハイフン又は負符号( - )×
8下線文字( _ )
(凡例)
○:接頭辞及び局所名の先頭に指定できます。
×:接頭辞及び局所名の先頭に指定できません。

XQueryの接頭辞及び局所名として使用できる文字は,pdsetupコマンドで指定した文字コード種別によって異なります。pdsetupコマンドについては,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。指定した文字コード種別と使用できる文字の関係は,「1.1.5 SQLで使用できる文字」を参照してください。

(3) XQueryデータ型

(a) HiRDBが定義するXQueryデータ型

XQueryで扱うXQuery項目は,XQueryデータ型で型付けられています。HiRDBでは,次の表に示すXQueryデータ型を提供します。文字列データ型,数値データ型,時間データ型,その他のデータ型,xs:untypedAtomic型の単一の値を持つXQueryデータ型を基本単位型といいます。基本単位型の値を,基本単位値といいます。

表1-56 HiRDBが定義するXQueryデータ型

項番分類XQueryデータ型説明
1文字列データ型xs:string文字列を表す型です。
2数値データ型xs:decimal最大38けたの固定小数点数を表す型です。
3xs:int値の範囲が-2147483648​~2147483647​の整数を表す型です。
4xs:double値の範囲が約±4.9×10-324~±1.7×10308の倍精度浮動小数点数を表す型です。
5時間データ型xs:dateTime日付と時刻の組み合わせを値とし,ある日付のある時刻を表す型です。「YYYY-MM-DDThh:mm:ss[.nn…n]」の形式で表現します。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒,nn…nは小数秒(1~6けた)を表します。Tは日付と時刻を分離するために表記します。形式の各要素が取り得る値の範囲は,YYYY:0001~9999(年),MM:01~12(月),DD:01~該当月最終日(日),hh:00~23(時),mm:00~59(分),ss:00~59(秒),nnnnnn:000000~999999(小数秒)です。
6xs:date日付を表す値をとる型です。「YYYY-MM-DD」の形式で表現します。YYYYは年,MMは月,DDは日を表します。形式の各要素が取り得る値の範囲は,YYYY:0001~9999(年),MM:01~12(月),DD:01~該当月最終日(日)です。
7xs:time時刻を表す値をとる型です。「hh:mm:ss」の形式で表現します。hhは時,mmは分,ssは秒を表します。形式の各要素が取り得る値の範囲は,hh:00~23(時),mm:00~59(分),ss:00~59(秒)です。
8その他のデータ型xs:hexBinaryバイナリデータを16進数の文字の並び(「0~9」「a~f」「A~F」の文字の並び)として表現する型です。
9xs:boolean論理値として真と偽をとる型です。
10不定データ型xs:untypedAtomic型が不定である基本単位値の型を表します。
注※
浮動小数点数の値の範囲は,ハードウェア表現に従います。
(b) コンストラクタ関数

(a)で示したそれぞれの基本単位型に対して,ある基本単位値から,基本単位値を生成するコンストラクタ関数が暗黙的に定義されます。コンストラクタ関数は,次の形式をとります。

●形式

XQueryデータ型名 ( 引数 )

●規則
  1. XQueryデータ型名には,生成する基本単位値のXQueryデータ型の修飾名を指定します。
  2. 引数には,基本単位値又は空のXQueryシーケンスを指定します。空のXQueryシーケンスを指定した場合,空のXQueryシーケンスを返却します。
  3. 引数に指定された基本単位値が,生成する基本単位値のXQueryデータ型に変換できない場合エラーとなります。変換可能なXQueryデータ型の組み合わせは「(c) 変換可能なXQueryデータ型」を参照してください。
(c) 変換可能なXQueryデータ型

変換可能なXQueryデータ型を次の表に示します。

表1-57 変換可能なXQueryデータ型

変換前の
XQuery
データ型
変換後のXQueryデータ型
数値データ型文字列
データ型
時間データ型その他のデータ型
xs:
double
xs:
decimal
xs:
int
xs:
string
xs:
dateTime
xs:
date
xs:
time
xs:
hexBinary
xs:
boolean
xs:
untyped
Atomic
xs:double××××
xs:decimal××××
xs:int××××
xs:string
xs:dateTime×××××
xs:date××××××
xs:time×××××××
xs:hexBinary×××××××
xs:boolean××××
xs:untyped
Atomic
(凡例)
○:変換できます。
△:値によっては変換できます。
×:変換できません。
●xs:string型及びxs:untypedAtomic型への変換

次の表に示す規則に従って変換します。

表1-58 xs:string型及びxs:untypedAtomic型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:string
xs:untypedAtomic
すべて変換しません。
2xs:intすべてXQuery整数定数の形式に変換します。
ただし,先頭の0は取り除きます。
また,値が0未満の場合は負符号(-)を付加します。
3xs:decimal小数部分が0
4小数部分が0でないXQuery10進数定数の形式に変換します。ただし,10の位以上の先頭の0及び末尾の0は取り除きます。また,値が0未満の場合は負符号(-)を付加します。
5xs:double絶対値が0.000001以上1000000​未満xs:decimal型の変換規則(項番3及び4)に従います。
6正の0"0"に変換します。
7負の0"-0"に変換します。
8正の最大値"INF"に変換します。
9負の最大値"-INF"に変換します。
10NaN(非数)"NaN"に変換します。
11上記以外仮数部をXQuery10進数定数の形式に変換した文字列,その後に"E",その後に指数部をXQuery整数定数の形式に変換した文字列の形式に変換します。
ただし,先頭0は取り除きます。仮数部の整数部分は1けたであり,0にはなりません。
仮数部の小数第1位より下位の末尾の0は取り除きます。
また,値が0未満の場合は負符号(-)を付加します。
12xs:boolean"true"に変換します。
13"false"に変換します。
14xs:dateTimeすべて"YYYY-MM-DDThh:mm:ss.s…s"の形式に変換します。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒,s…sは小数秒を表します。
ただし,小数秒が0でない場合も小数秒の末尾の0は取り除きます。
さらに,小数秒が0の場合は,小数秒部分の直前の小数点は取り除きます。
15xs:dateすべて"YYYY-MM-DD"の形式に変換します。YYYYは年,MMは月,DDは日を表します。
16xs:timeすべて"hh:mm:ss"の形式に変換します。hhは時,mmは分,ssは秒を表します。
17xs:hexBinaryすべて16進数の文字の並びがそのまま結果になります。
ただし,A~Fは大文字になります。
●xs:double型への変換

次の表に示す規則に従って変換します。

表1-59  xs:double型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:doubleすべて変換しません。
2xs:int
xs:decimal
すべて対応するxs:double型の値に変換します。
3xs:boolean1.0E0に変換します。
40.0E0に変換します。
5xs:string"INF"正の無限大に変換します。
6"-INF"負の無限大に変換します。
7"NaN"NaN(非数)に変換します。
8XQuery数値定数の形式の文字列対応する数値データ型に変換した後,xs:double型に変換します。
9上記以外変換できません。
10xs:untypedAtomicすべてxs:string型に変換した後,xs:double型に変換します。
注※
先頭及び末尾のホワイトスペース(半角空白(X'20'),タブ(X'09'),NL(X'0A'),又はCR(X'0D'))を取り除いた結果がXQuery数値定数の形式であれば,該当します。
●xs:decimal型への変換

次の表に示す規則に従って変換します。

表1-60  xs:decimal型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:decimalすべて変換しません。
2xs:double正の00.に変換します。
3負の00.に変換します。
4正の無限大変換できません。
負の無限大
NaN(非数)
5整数部分が38けた以下である値変換前の値に数値上最も近い,38けた以下のxs:decimal型の値に変換します。該当する値が二つ存在する場合は,0に近い方の値に変換します。
6上記以外変換できません。
7xs:intすべて対応するxs: decimal型の値に変換します。
8xs:boolean1.に変換します。
90.に変換します。
10xs:stringXQuery数値定数の形式の文字列対応する数値データ型に変換した後,xs:decimal型に変換します。
11上記以外変換できません。
12xs:untypedAtomicすべてxs:string型に変換した後,xs:decimal型に変換します。
注※
先頭及び末尾のホワイトスペース(半角空白(X'20'),タブ(X'09'),NL(X'0A'),又はCR(X'0D'))を取り除いた結果がXQuery数値定数の形式であれば,該当します。
●xs:int型への変換

次の表に示す規則に従って変換します。

表1-61  xs:int型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:intすべて変換しません。
2xs:decimal小数点以下を切り捨てた値がxs:int型の最小値以上かつ最大値以下小数点以下のけたを切り捨てた値に変換します。
3上記以外変換できません。
4xs:double正の00に変換します。
5負の00に変換します。
6正の無限大変換できません。
負の無限大
NaN(非数)
7小数点以下のけたを切り捨てた値がxs:int型の最小値以上かつ最大値以下小数点以下のけたを切り捨てた値に変換します。
8上記以外変換できません。
9xs:boolean1に変換します。
100に変換します。
11xs:stringXQuery数値定数の形式の文字列対応する数値データ型に変換した後,xs:int型に変換します。
12上記以外変換できません。
13xs:untypedAtomicすべてxs:string型に変換した後,xs:int型に変換します。
注※
先頭及び末尾のホワイトスペース(半角空白(X'20'),タブ(X'09'),NL(X'0A'),又はCR(X'0D'))を取り除いた結果がXQuery数値定数の形式であれば,該当します。
●xs:dateTime型への変換

次の表に示す規則に従って変換します。

表1-62  xs:dateTime型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:dateTimeすべて変換しません。
2xs:dateすべて日付部分が変換前の値と等しく,時刻部分が00:00:00である値に変換します。
3xs:stringxs:dateTime型の文字列表現の形式の値文字列表現に対応した値に変換します。
4上記以外変換できません。
5xs:untypedAtomicすべてxs:string型に変換した後,xs:dateTime型に変換します。
●xs:date型への変換

次の表に示す規則に従って変換します。

表1-63  xs:date型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:dateすべて変換しません。
2xs:dateTimeすべて変換前の値の日付部分と等しい値に変換します。
3xs:stringxs:date型の文字列表現の形式の値文字列表現に対応した値に変換します。
4上記以外変換できません。
5xs:untypedAtomicすべてxs:string型に変換した後,xs:date型に変換します。
●xs:time型への変換

次の表に示す規則に従って変換します。

表1-64  xs:time型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:timeすべて変換しません。
2xs:dateTimeすべて変換前の値の時刻部分(小数秒部分を除く)と等しい値に変換します。
3xs:stringxs:time型の文字列表現の形式の値文字列表現に対応した値に変換します。
4上記以外変換できません。
5xs:untypedAtomicすべてxs:string型に変換した後,xs:time型に変換します。
●xs:boolean型への変換

次の表に示す規則に従って変換します。

表1-65  xs:boolean型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:booleanすべて変換しません。
2数値データ型0偽に変換します。
正の0
負の0
0.0
0.0E0
NaN(非数)
3上記以外真に変換します。
4xs:string"true"真に変換します。
5"false"偽に変換します。
6上記以外変換できません。
7xs:untypedAtomicすべてxs:string型に変換した後,xs:boolean型に変換します。
注※
先頭及び末尾のホワイトスペース(半角空白(X'20'),タブ(X'09'),NL(X'0A'),又はCR(X'0D'))を取り除いた結果が等しければ,該当します。また,大文字小文字を区別しません。
●xs:hexBinary型への変換

次の表に示す規則に従って変換します。

表1-66  xs:hexBinary型への変換規則

項番変換前変換結果
XQueryデータ型値の条件
1xs:hexBinaryすべて変換しません。
2xs:string16進数の文字の並び対応したxs:hexBinary型の値に変換します。
3上記以外変換できません。
4xs:untypedAtomicすべてxs:string型に変換した後,xs:hexBinary型に変換します。

(4) 基本単位化

基本単位化とは,XQueryシーケンスを,基本単位値だけから構成されるXQueryシーケンスに変換する処理です。XQuery中に基本単位値だけから構成されるXQueryシーケンスが必要となる,次に示す式の評価時に基本単位化を行います。

基本単位化の結果は,XQueryシーケンスに対して,XQuery関数のfn:data関数を呼び出した結果になります。fn:data関数の詳細については「1.16.8 XQuery関数」を参照してください。

(5) ブーリアン値への暗黙的な型変換

XQuery中のブーリアン値(xs:boolean型の値)として評価する必要がある箇所で,ブーリアン値以外の値が評価対象である場合,暗黙的にブーリアン値に変換されます。ブーリアン値への変換結果はXQueryシーケンスに対して,XQuery関数のfn:boolean関数を呼び出した結果になります。fn:boolean関数の詳細については「1.16.8 XQuery関数」を参照してください。