スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
この節では,次の表に示すXQueryの基本項目について説明します。
表1-50 XQueryの基本項目
項番 | 基本項目 | 概要 |
---|---|---|
1 | 焦点 | XQuery式を評価している,ある時点での評価対象であるXQuery項目の情報です。 |
2 | 修飾名 | XML要素やXML属性,XQuery関数,XQuery変数を識別するために,XQueryで使用する名前です。 |
3 | XQueryデータ型 | XQueryデータモデルで,ノードや基本単位値を型付ける型です。 |
4 | 基本単位化 | XQueryシーケンスを,基本単位値から構成されるXQueryシーケンスに変換する処理です。 |
5 | ブーリアン値への暗黙的な型変換 | ブーリアン値以外の値がXQuery式の評価対象である場合,暗黙的にブーリアン値に変換する処理です。 |
焦点は,XQuery式を評価しているある時点での評価対象であるXQuery項目の情報です。
焦点には,次の表に示す要素があります。
表1-51 焦点
項番 | 情報 | 概要 |
---|---|---|
1 | 文脈項目 | 評価対象であるXQuery項目 |
2 | 文脈位置 | 文脈項目の,文脈項目から構成されるXQueryシーケンス中での位置 |
3 | 文脈サイズ | 文脈項目の数 |
次に,それぞれの要素を詳細に説明します。
XQuery式を評価しているある時点で,評価の対象となっているXQuery項目を持ちます。
XQuery式を評価しているある時点での,各文脈項目の文脈項目から構成されるXQueryシーケンス中での位置を持ちます。文脈位置は,1から始まる整数値をとります。
XQuery式を評価しているある時点での文脈項目の数を持ちます。
焦点は,XQuery式を順次評価していくことで移動します。これを次の例を用いて説明します。
(例)
<評価対象のXML文書>
<書籍情報 書籍ID=”452469630”> <タイトル>リレーショナルデータベース解説</タイトル> <著者>伊藤栄一</著者> <著者>木村幸一</著者> </書籍情報> |
<XQuery式>
/書籍情報/著者/text() |
この例のXQuery式は,「書籍情報」「著者」「text()」という順に評価されます。このときの焦点の移動の流れを,次の図に示します。
図1-16 焦点の移動の流れ
XML要素やXML属性,XQuery関数,XQuery変数を識別するために,XQueryで使用する名前を修飾名といいます。修飾名は,接頭辞とコロン文字と局所名から構成されます。ユーザは,XML名前空間宣言(XML名前空間宣言については,「1.16.5 XQuery宣言部」を参照してください)を使って,接頭辞とXML名前空間URIを関連付けることができます。XML名前空間URIは,XML名前空間を識別するためのURIです。局所名は,個々のXML名前空間内で使用する名前です。
HiRDBでは,次の表に示す接頭辞があらかじめ定義されています。
表1-52 HiRDBで定義されている接頭辞
項番 | 接頭辞 | XML名前空間URI |
---|---|---|
1 | xml | http://www.w3.org/XML/1998/namespace |
2 | xs | http://www.w3.org/2001/XMLSchema |
3 | xsi | http://www.w3.org/2001/XMLSchema-instance |
4 | fn | http://www.w3.org/2006/xpath-functions |
5 | err | http://www.w3.org/2005/xqt-errors |
6 | hi-fn | http://www.hitachi.co.jp/Prod/comp/soft1/hirdb/xquery-functions |
接頭辞とコロン文字を省略し,局所名だけを指定して,修飾名として使用することもできます。接頭辞とコロン文字が省略された修飾名は,既定のXML名前空間に属することになります。既定のXML名前空間については,「1.16.5 XQuery宣言部」を参照してください。修飾名の例を,次の表に示します。
表1-53 修飾名の例
項番 | 修飾名 | 接頭辞 | 局所名 |
---|---|---|---|
1 | xs:string | xs | string |
2 | fn:data | fn | data |
3 | element_name | (省略) | element_name |
接頭辞に対応するXML名前空間URIと,局所名から構成される名前を展開後修飾名といいます。二つの修飾名は,それらの展開後修飾名のXML名前空間URIと局所名が共に等しい場合に,等価になります。この場合,二つの修飾名の接頭辞が異なっていても,二つの修飾名は等価とみなされます。例えば,次の表に示す二つの修飾名は,接頭辞が異なります。しかし,展開後修飾名のXML名前空間URIと局所名が共に等しいため,二つの修飾名は等価とみなされます。
表1-54 接頭辞は異なっていても,等価とみなされる二つの修飾名
項番 | 修飾名 | 接頭辞 | 局所名 | 関連付けされたXML名前空間URI |
---|---|---|---|---|
1 | xxx:element_name | xxx | element_name | http://www.hitachi.com |
2 | yyy:element_name | yyy | element_name | http://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で使用できる文字」を参照してください。
XQueryで扱うXQuery項目は,XQueryデータ型で型付けられています。HiRDBでは,次の表に示すXQueryデータ型を提供します。文字列データ型,数値データ型,時間データ型,その他のデータ型,xs:untypedAtomic型の単一の値を持つXQueryデータ型を基本単位型といいます。基本単位型の値を,基本単位値といいます。
表1-56 HiRDBが定義するXQueryデータ型
項番 | 分類 | XQueryデータ型 | 説明 |
---|---|---|---|
1 | 文字列データ型 | xs:string | 文字列を表す型です。 |
2 | 数値データ型 | xs:decimal | 最大38けたの固定小数点数を表す型です。 |
3 | xs:int | 値の範囲が−2147483648〜2147483647の整数を表す型です。 | |
4 | xs: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(小数秒)です。 |
6 | xs:date | 日付を表す値をとる型です。「YYYY-MM-DD」の形式で表現します。YYYYは年,MMは月,DDは日を表します。形式の各要素が取り得る値の範囲は,YYYY:0001〜9999(年),MM:01〜12(月),DD:01〜該当月最終日(日)です。 | |
7 | xs: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」の文字の並び)として表現する型です。 |
9 | xs:boolean | 論理値として真と偽をとる型です。 | |
10 | 不定データ型 | xs:untypedAtomic | 型が不定である基本単位値の型を表します。 |
(a)で示したそれぞれの基本単位型に対して,ある基本単位値から,基本単位値を生成するコンストラクタ関数が暗黙的に定義されます。コンストラクタ関数は,次の形式をとります。
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 |
△ | △ | △ | ○ | △ | △ | △ | △ | △ | ○ |
次の表に示す規則に従って変換します。
表1-58 xs:string型及びxs:untypedAtomic型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:string xs:untypedAtomic |
すべて | 変換しません。 |
2 | xs:int | すべて | XQuery整数定数の形式に変換します。 ただし,先頭の0は取り除きます。 また,値が0未満の場合は負符号(-)を付加します。 |
3 | xs:decimal | 小数部分が0 | |
4 | 小数部分が0でない | XQuery10進数定数の形式に変換します。ただし,10の位以上の先頭の0及び末尾の0は取り除きます。また,値が0未満の場合は負符号(-)を付加します。 | |
5 | xs:double | 絶対値が0.000001以上1000000未満 | xs:decimal型の変換規則(項番3及び4)に従います。 |
6 | 正の0 | "0"に変換します。 | |
7 | 負の0 | "-0"に変換します。 | |
8 | 正の最大値 | "INF"に変換します。 | |
9 | 負の最大値 | "-INF"に変換します。 | |
10 | NaN(非数) | "NaN"に変換します。 | |
11 | 上記以外 | 仮数部をXQuery10進数定数の形式に変換した文字列,その後に"E",その後に指数部をXQuery整数定数の形式に変換した文字列の形式に変換します。 ただし,先頭0は取り除きます。仮数部の整数部分は1けたであり,0にはなりません。 仮数部の小数第1位より下位の末尾の0は取り除きます。 また,値が0未満の場合は負符号(-)を付加します。 |
|
12 | xs:boolean | 真 | "true"に変換します。 |
13 | 偽 | "false"に変換します。 | |
14 | xs:dateTime | すべて | "YYYY-MM-DDThh:mm:ss.s…s"の形式に変換します。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒,s…sは小数秒を表します。 ただし,小数秒が0でない場合も小数秒の末尾の0は取り除きます。 さらに,小数秒が0の場合は,小数秒部分の直前の小数点は取り除きます。 |
15 | xs:date | すべて | "YYYY-MM-DD"の形式に変換します。YYYYは年,MMは月,DDは日を表します。 |
16 | xs:time | すべて | "hh:mm:ss"の形式に変換します。hhは時,mmは分,ssは秒を表します。 |
17 | xs:hexBinary | すべて | 16進数の文字の並びがそのまま結果になります。 ただし,A〜Fは大文字になります。 |
次の表に示す規則に従って変換します。
表1-59 xs:double型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:double | すべて | 変換しません。 |
2 | xs:int xs:decimal |
すべて | 対応するxs:double型の値に変換します。 |
3 | xs:boolean | 真 | 1.0E0に変換します。 |
4 | 偽 | 0.0E0に変換します。 | |
5 | xs:string | "INF" | 正の無限大に変換します。 |
6 | "-INF" | 負の無限大に変換します。 | |
7 | "NaN" | NaN(非数)に変換します。 | |
8 | XQuery数値定数の形式の文字列※ | 対応する数値データ型に変換した後,xs:double型に変換します。 | |
9 | 上記以外 | 変換できません。 | |
10 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:double型に変換します。 |
次の表に示す規則に従って変換します。
表1-60 xs:decimal型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:decimal | すべて | 変換しません。 |
2 | xs:double | 正の0 | 0.に変換します。 |
3 | 負の0 | 0.に変換します。 | |
4 | 正の無限大 | 変換できません。 | |
負の無限大 | |||
NaN(非数) | |||
5 | 整数部分が38けた以下である値 | 変換前の値に数値上最も近い,38けた以下のxs:decimal型の値に変換します。該当する値が二つ存在する場合は,0に近い方の値に変換します。 | |
6 | 上記以外 | 変換できません。 | |
7 | xs:int | すべて | 対応するxs: decimal型の値に変換します。 |
8 | xs:boolean | 真 | 1.に変換します。 |
9 | 偽 | 0.に変換します。 | |
10 | xs:string | XQuery数値定数の形式の文字列※ | 対応する数値データ型に変換した後,xs:decimal型に変換します。 |
11 | 上記以外 | 変換できません。 | |
12 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:decimal型に変換します。 |
次の表に示す規則に従って変換します。
表1-61 xs:int型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:int | すべて | 変換しません。 |
2 | xs:decimal | 小数点以下を切り捨てた値がxs:int型の最小値以上かつ最大値以下 | 小数点以下のけたを切り捨てた値に変換します。 |
3 | 上記以外 | 変換できません。 | |
4 | xs:double | 正の0 | 0に変換します。 |
5 | 負の0 | 0に変換します。 | |
6 | 正の無限大 | 変換できません。 | |
負の無限大 | |||
NaN(非数) | |||
7 | 小数点以下のけたを切り捨てた値がxs:int型の最小値以上かつ最大値以下 | 小数点以下のけたを切り捨てた値に変換します。 | |
8 | 上記以外 | 変換できません。 | |
9 | xs:boolean | 真 | 1に変換します。 |
10 | 偽 | 0に変換します。 | |
11 | xs:string | XQuery数値定数の形式の文字列※ | 対応する数値データ型に変換した後,xs:int型に変換します。 |
12 | 上記以外 | 変換できません。 | |
13 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:int型に変換します。 |
次の表に示す規則に従って変換します。
表1-62 xs:dateTime型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:dateTime | すべて | 変換しません。 |
2 | xs:date | すべて | 日付部分が変換前の値と等しく,時刻部分が00:00:00である値に変換します。 |
3 | xs:string | xs:dateTime型の文字列表現の形式の値 | 文字列表現に対応した値に変換します。 |
4 | 上記以外 | 変換できません。 | |
5 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:dateTime型に変換します。 |
次の表に示す規則に従って変換します。
表1-63 xs:date型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:date | すべて | 変換しません。 |
2 | xs:dateTime | すべて | 変換前の値の日付部分と等しい値に変換します。 |
3 | xs:string | xs:date型の文字列表現の形式の値 | 文字列表現に対応した値に変換します。 |
4 | 上記以外 | 変換できません。 | |
5 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:date型に変換します。 |
次の表に示す規則に従って変換します。
表1-64 xs:time型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:time | すべて | 変換しません。 |
2 | xs:dateTime | すべて | 変換前の値の時刻部分(小数秒部分を除く)と等しい値に変換します。 |
3 | xs:string | xs:time型の文字列表現の形式の値 | 文字列表現に対応した値に変換します。 |
4 | 上記以外 | 変換できません。 | |
5 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:time型に変換します。 |
次の表に示す規則に従って変換します。
表1-65 xs:boolean型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:boolean | すべて | 変換しません。 |
2 | 数値データ型 | 0 | 偽に変換します。 |
正の0 | |||
負の0 | |||
0.0 | |||
0.0E0 | |||
NaN(非数) | |||
3 | 上記以外 | 真に変換します。 | |
4 | xs:string | "true"※ | 真に変換します。 |
5 | "false"※ | 偽に変換します。 | |
6 | 上記以外 | 変換できません。 | |
7 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:boolean型に変換します。 |
次の表に示す規則に従って変換します。
表1-66 xs:hexBinary型への変換規則
項番 | 変換前 | 変換結果 | |
---|---|---|---|
XQueryデータ型 | 値の条件 | ||
1 | xs:hexBinary | すべて | 変換しません。 |
2 | xs:string | 16進数の文字の並び | 対応したxs:hexBinary型の値に変換します。 |
3 | 上記以外 | 変換できません。 | |
4 | xs:untypedAtomic | すべて | xs:string型に変換した後,xs:hexBinary型に変換します。 |
基本単位化とは,XQueryシーケンスを,基本単位値だけから構成されるXQueryシーケンスに変換する処理です。XQuery中に基本単位値だけから構成されるXQueryシーケンスが必要となる,次に示す式の評価時に基本単位化を行います。
基本単位化の結果は,XQueryシーケンスに対して,XQuery関数のfn:data関数を呼び出した結果になります。fn:data関数の詳細については「1.16.8 XQuery関数」を参照してください。
XQuery中のブーリアン値(xs:boolean型の値)として評価する必要がある箇所で,ブーリアン値以外の値が評価対象である場合,暗黙的にブーリアン値に変換されます。ブーリアン値への変換結果はXQueryシーケンスに対して,XQuery関数のfn:boolean関数を呼び出した結果になります。fn:boolean関数の詳細については「1.16.8 XQuery関数」を参照してください。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.