Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


1.15.2 基本項目

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

表1‒48 XQueryの基本項目

項番

基本項目

概要

1

焦点

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

2

修飾名

XML要素やXML属性,XQuery関数,XQuery変数を識別するために,XQueryで使用する名前です。

3

XQueryデータ型

XQueryデータモデルで,ノードや基本単位値を型付ける型です。

4

基本単位化

XQueryシーケンスを,基本単位値から構成されるXQueryシーケンスに変換する処理です。

5

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

ブーリアン値以外の値がXQuery式の評価対象である場合,暗黙的にブーリアン値に変換する処理です。

〈この項の構成〉

(1) 焦点

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

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

表1‒49 焦点

項番

情報

概要

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名前空間宣言については,「XQuery宣言部」を参照してください)を使って,接頭辞とXML名前空間URIを関連づけることができます。XML名前空間URIは,XML名前空間を識別するためのURIです。局所名は,個々のXML名前空間内で使用する名前です。

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

表1‒50 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名前空間については,「XQuery宣言部」を参照してください。修飾名の例を,次の表に示します。

表1‒51 修飾名の例

項番

修飾名

接頭辞

局所名

1

xs:string

xs

string

2

fn:data

fn

data

3

element_name

(省略)

element_name

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

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

項番

修飾名

接頭辞

局所名

関連づけされた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‒53 接頭辞及び局所名に使用できる文字

項番

分類

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

先頭指定可否

1

半角文字コード文字

英小文字(A〜Z)

2

英小文字(a〜z)

3

数字(0-9)

×

4

片仮名文字

5

全角文字コード

全角文字コードの文字すべて

6

特殊記号(半角文字コード)

ピリオド( . )

×

7

ハイフン又は負符号( - )

×

8

下線文字( _ )

(凡例)

○:接頭辞及び局所名の先頭に指定できます。

×:接頭辞及び局所名の先頭に指定できません。

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

(3) XQueryデータ型

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

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

表1‒54 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

型が不定である基本単位値の型を表します。

注※

浮動小数点数の値の範囲は,ハードウェア表現に従います。

(b) コンストラクタ関数

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

  • 形式

    XQueryデータ型名 ( 引数 )
  • 規則

    1. XQueryデータ型名には,生成する基本単位値のXQueryデータ型の修飾名を指定します。

    2. 引数には,基本単位値又は空のXQueryシーケンスを指定します。空のXQueryシーケンスを指定した場合,空のXQueryシーケンスを返却します。

    3. 引数に指定された基本単位値が,生成する基本単位値のXQueryデータ型に変換できない場合エラーとなります。変換可能なXQueryデータ型の組み合わせは「(c) 変換可能なXQueryデータ型」を参照してください。

(c) 変換可能なXQueryデータ型

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

表1‒55 変換可能な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‒56 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は大文字になります。

  • xs:double型への変換

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

    表1‒57  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型に変換します。

注※

先頭及び末尾のホワイトスペース(半角空白(X’20’),タブ(X’09’),NL(X’0A’),又はCR(X’0D’))を取り除いた結果がXQuery数値定数の形式であれば,該当します。

  • xs:decimal型への変換

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

    表1‒58  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型に変換します。

注※

先頭及び末尾のホワイトスペース(半角空白(X’20’),タブ(X’09’),NL(X’0A’),又はCR(X’0D’))を取り除いた結果がXQuery数値定数の形式であれば,該当します。

  • xs:int型への変換

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

    表1‒59  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型に変換します。

注※

先頭及び末尾のホワイトスペース(半角空白(X’20’),タブ(X’09’),NL(X’0A’),又はCR(X’0D’))を取り除いた結果がXQuery数値定数の形式であれば,該当します。

  • xs:dateTime型への変換

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

    表1‒60  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型に変換します。

  • xs:date型への変換

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

    表1‒61  xs:date型への変換規則

    項番

    変換前

    変換結果

    XQueryデータ型

    値の条件

    1

    xs:date

    すべて

    変換しません。

    2

    xs:dateTime

    すべて

    変換前の値の日付部分と等しい値に変換します。

    3

    xs:string

    xs:date型の文字列表現の形式の値

    文字列表現に対応した値に変換します。

    4

    上記以外

    変換できません。

    5

    xs:untypedAtomic

    すべて

    xs:string型に変換した後,xs:date型に変換します。

  • xs:time型への変換

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

    表1‒62  xs:time型への変換規則

    項番

    変換前

    変換結果

    XQueryデータ型

    値の条件

    1

    xs:time

    すべて

    変換しません。

    2

    xs:dateTime

    すべて

    変換前の値の時刻部分(小数秒部分を除く)と等しい値に変換します。

    3

    xs:string

    xs:time型の文字列表現の形式の値

    文字列表現に対応した値に変換します。

    4

    上記以外

    変換できません。

    5

    xs:untypedAtomic

    すべて

    xs:string型に変換した後,xs:time型に変換します。

  • xs:boolean型への変換

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

    表1‒63  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型に変換します。

注※

先頭及び末尾のホワイトスペース(半角空白(X’20’),タブ(X’09’),NL(X’0A’),又はCR(X’0D’))を取り除いた結果が等しければ,該当します。また,大文字小文字を区別しません。

  • xs:hexBinary型への変換

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

    表1‒64  xs:hexBinary型への変換規則

    項番

    変換前

    変換結果

    XQueryデータ型

    値の条件

    1

    xs:hexBinary

    すべて

    変換しません。

    2

    xs:string

    16進数の文字の並び

    対応したxs:hexBinary型の値に変換します。

    3

    上記以外

    変換できません。

    4

    xs:untypedAtomic

    すべて

    xs:string型に変換した後,xs:hexBinary型に変換します。

(4) 基本単位化

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

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

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

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