Hitachi

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


1.15.6 XQuery問合せ本体

〈この項の構成〉

(1) 機能

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

(2) 形式

XQuery問合せ本体::= XQuery式
 
XQuery式 ::= XQueryシーケンス連結式

(a) XQuery式を構成する式

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

表1‒65 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関数呼出し

14

XQuery変換式

XQueryデータモデルの木に,ノードの挿入,削除,名前変更,又は置換をして,その結果のXQueryデータモデルの木を返却する式です。

15

XQuery挿入式

XQueryデータモデルの木の,指定した位置にノードを挿入する式です。

16

XQuery削除式

XQueryデータモデルの木の,指定した位置のノードを削除する式です。

17

XQuery名前変更式

XQueryデータモデルの木の,指定した位置のノードの修飾名又は処理命令ターゲットを変更する式です。

18

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論理式
                      |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式の評価方法を次に示します。

  • 指定したXQueryシーケンスを構成するすべてのXQuery項目ごとに,単一XQueryシーケンスとしてXQuery変数に割り当て,それぞれのXQuery項目に対して,XQuery式を評価します(FOR句)。

  • 指定したXQueryシーケンスをXQuery変数に割り当て,XQuery式を評価します(LET句)。

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句 }〕…

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
  • FOR句 ::= for $ XQuery変数名 in XQuery式単独

            〔, $ XQuery変数名 in XQuery式単独〕…

次に示す方法で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式単独を指定します。

  • LET句::= let $ 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式単独を指定します。

  • RETURN句 ::= return 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|every } $ XQuery変数名 in XQuery式単独

             [ , $ 変数名 in XQuery式単独 ]… satisfies XQuery式単独

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) オペランド

  • if ( XQuery式 )

XQuery式

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

  • then XQuery式単独

XQuery式単独

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

  • else 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) オペランド

  • XQueryOR式 ::= XQueryAND式 〔or XQueryAND式 〕…

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

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

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

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

表1‒66  XQuery論理式でのOR論理演算の結果

項番

第1演算項

第2演算項

1

2

  • XQueryAND式 ::= XQuery比較式〔and XQuery比較式〕…

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

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

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

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

表1‒67 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範囲式の評価結果を比較します。

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

  • 値比較 ::= { eq|ne|lt|le|gt|ge}

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

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

表1‒68 値比較の比較方法

項番

値比較演算子

真となる条件

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‒69 比較可能な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‒70 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‒71 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‒72 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‒73 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‒74 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‒75 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:非数

比較結果:表「値比較の比較方法」の比較方法に従った比較結果

  • 汎用比較 ::= {=|!=|<|<=|>|>=|<>}

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

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

  1. 各比較項に基本単位化を適用します。

  2. 基本単位化した各比較項のXQueryシーケンス間での基本単位値の組み合わせの中で,次に示す方法で値比較した結果が真となる基本単位値の組が一組でも存在すれば,結果は真となります。一組も存在しない場合は,結果が偽となります。

    • 二つの基本単位値に対して,汎用比較の指定に対応する表「汎用比較と対応する値比較」に示す値比較を行います。ただし,xs:untypedAtomic型である基本単位値の場合は,他方の基本単位値のXQueryデータ型に従って表「xs:untypedAtomic型の基本単位値の型変換」に示す型変換を行ってから値比較を行います。

      表1‒76 汎用比較と対応する値比較

      項番

      汎用比較演算子

      対応する値比較

      1

      =

      eq

      2

      !=,<>

      ne

      3

      <

      lt

      4

      <=

      le

      5

      >

      gt

      6

      >=

      ge

      表1‒77 xs:untypedAtomic型の基本単位値の型変換

      項番

      他方の基本単位値XQueryデータ型

      型変換後のXQueryデータ型

      1

      数値データ型

      xs:double

      2

      xs:untypedAtomic

      xs:string

      3

      xs:string

      xs:string

      4

      上記以外

      他方の基本単位値と同じXQueryデータ型

  • ノード比較 ::= {is|<<|>>}

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

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

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

表1‒78 ノード比較の比較方法

項番

ノード比較演算子

真となる条件

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) オペランド

  • XQuery算術式 〔to XQuery算術式〕

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乗除算式〕…

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

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

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

表1‒79 XQuery加減算式での演算子の機能

項番

演算子

意味

機能

1

+

加算

第1演算項に第2演算項を加えます。

2

-

減算

第1演算項から第2演算項を減らします。

  • XQuery乗除算式 ::= XQueryシーケンス集合演算式

    〔{*|div|idiv|mod} XQueryシーケンス集合演算式〕…

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

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

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

表1‒80 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‒81 演算項の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‒82  演算項の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‒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データ型の関係(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‒85 演算項の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‒86 演算項の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‒87 演算項の少なくとも一方が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:非数

    加算結果:表「XQuery加減算式での演算子の機能」に示す機能に従った演算結果

    表1‒88 演算項の少なくとも一方が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:非数

    減算結果:表「XQuery加減算式での演算子の機能」に示す機能に従った演算結果

    表1‒89 演算項の少なくとも一方が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:非数

    乗算結果:表「XQuery乗除算式での演算子の機能」に示す機能に従った演算結果

    表1‒90 演算項の少なくとも一方が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:非数

    除算結果:表「XQuery乗除算式での演算子の機能」に示す機能に従った演算結果

    表1‒91 演算項の少なくとも一方が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

    整数除算結果:表「XQuery乗除算式での演算子の機能」に示す機能に従った演算結果

    0除算エラー:除数が0であるため,エラーとなります

    変換エラー:div演算の結果をxs:int型で表現できないため,エラーとなります

    表1‒92 演算項の少なくとも一方が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演算項の値

    剰余算結果:表「XQuery乗除算式での演算子の機能」に示す機能に従った演算結果

(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) オペランド

  • XQuery和集合式 ::= {XQuery共通集合式|XQuery差集合式}

    〔{union|垂直棒} {XQuery共通集合式|XQuery差集合式}〕…

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

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

  • XQuery共通集合式 ::= XQuery単項式 〔intersect XQuery単項式〕…

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

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

  • XQuery差集合式 ::= XQuery単項式 〔except 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値式を単独で指定した場合は,XQuery値式の評価結果をそのまま返却します。

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

表1‒93 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パス式

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

(14) XQueryパス式

(a) 機能

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

(b) 形式

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

(c) オペランド

  • XQueryパス式の先頭の斜線(/)

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

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

  • XQueryパス式の先頭の二つの斜線(//)

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

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

  • XQueryパス式の先頭以外の斜線(/)

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シーケンスは,基本単位値を含むことはできません。

  • XQueryパス式の先頭以外の二つの斜線(//)

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

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

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

  • 軸ステップ式 ::= 軸ステップ〔 XQuery述語 〕…

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

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

  • 軸ステップ ::= {軸 {名前テスト |種別テスト}| 省略軸ステップ}

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

文脈項目からの木のたどり方を指定します。

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

表1‒94 軸の一覧

項番

説明

文脈位置の割り当て

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‒95 種別テスト一覧

項番

種類

指定方法

説明

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‒96 省略軸ステップの指定例

項番

省略軸ステップ

同じ意味を持つ省略しない記法

意味

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式 右角括弧

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

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

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基本式には,次に示すものがあります。

  • XQuery定数

  • XQuery変数参照

  • 括弧付きXQuery式

  • 文脈項目式

  • XQuery関数呼出し

(b) 形式

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

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

(c) XQuery定数

  • 機能

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

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

    表1‒97 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変数の値を返却します。該当する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関数のパラメタに対する値を表す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データ型の変換で,互換性がなく変換できない場合はエラーとなります。互換性があるデータ型については,「XQueryデータ型」を参照してください。

  • 関数の呼出し規則

    1. XQuery関数の修飾名と引数の数が一致すれば,そのXQuery関数を呼び出します。それ以外の場合は,エラーとなります。

(16) XQuery変換式

(a) 機能

XQueryデータモデルの木に,ノードの挿入,削除,名前変更,又は置換をして,その結果のXQueryデータモデルの木を返却する式です。

XQuery変換式では,テキストノードに含まれる空白類に対して,次の正規化処理をしてからノードの挿入又は置換をします。

  • 先頭及び末尾の空白類を除去

  • 連続する空白類を一つの空白(X'20')に置き換え

空白類とは,空白(X'20'),水平タブ(X'09'),改行(X'0A'),及び復帰(X'0D')を指します。

XQuery変換式は,UPDATE文の更新値に指定したXMLQUERYのXQuery式の最上位にだけ指定できます。

XQuery変換式では,DTD,XMLスキーマがないものとして処理されます。

XQuery変換式を使用する場合は,マニュアル「HiRDB XML Extension」の「XQuery変換式使用時の運用」を参照してください。

(b) 形式

XQuery変換式 ::= copy $ XQuery変数名 :=  文脈項目式
                    modify { XQuery変更式
                             |( XQuery変更式 〔, XQuery変更式 〕… ) }
                    return XQuery変数参照
XQuery変更式 ::={ XQuery挿入式
                      | XQuery削除式
                      | XQuery名前変更式
                      | XQuery置換式
                      }

(c) オペランド

  • XQuery変換式 ::= copy $ XQuery変数名 := 文脈項目式

       modify { XQuery変更式

            |( XQuery変更式 〔, XQuery変更式 〕… ) }

       return XQuery変数参照

XQuery変換式は,最初にcopy句でXQueryデータモデルの木をコピーします。次に,modify句で指定したXQuery変更式で,XQueryデータモデルの木に対して,ノードの挿入,削除,名前変更,又は置換をします。最後に,return句で変換後のXQueryデータモデルの木を返却する式です。

XQuery変数名

文脈項目式をコピーするXQuery変数の名前を指定します。ここで指定したXQuery変数は,該当するXQuery変換式の中のmodify句に指定するXQuery変更式中,及びreturn句に指定するXQuery変数参照で有効となります。

XQuery変更式

copy句でコピーしたXQueryデータモデルの木に,ノードの挿入,削除,名前変更,又は置換をするXQuery変更式を指定します。同じXQuery変換式中にXQuery変更式を複数指定する場合は,次の順序でXQueryデータモデルの木を変更します。

  1. as first into,as last into,before,若しくはafterの指定がないXQuery挿入式,value of指定があるXQueryターゲット式が要素ノード以外のXQuery置換式,又はXQuery名前変更式

  2. as first into,as last into,before,又はafterの指定があるXQuery挿入式

  3. value ofの指定がないXQuery置換式

  4. value ofの指定があるXQueryターゲット式が要素ノードのXQuery置換式

  5. XQuery削除式

変更処理中のXQueryデータモデルの木が,次の条件のどれかを満たす場合はエラーになります。

  • 属性ノードの修飾名の接頭辞が,属性ノードの親ノードの接頭辞又は同じ親を持つ属性ノードの接頭辞と同じで,各接頭辞のXML名前空間URIが異なる。

  • 一つの要素ノードが重複する属性ノードの修飾名を持っている。

  • ドキュメントノードの子ノードに要素ノードが存在しない。

  • ドキュメントノードの子ノードに要素ノードが複数存在する。

  • ドキュメントノードの子ノードにテキストノードが存在する。

  • 接頭辞及び局所名の長さが4,096バイトを超えている。

  • 要素のネスト数が100を超えている。

また,変更処理後のXMLのサイズが5メガバイトを超える場合はエラーになります。

XQuery変数参照

XQuery変数参照には,copy句で指定したXQuery変数名だけ指定できます。

  • XQuery変更式 ::={ XQuery挿入式

       | XQuery削除式

       | XQuery名前変更式

       | XQuery置換式}

XQuery変更式は,XQuery変換式のcopy句で指定したXQueryデータモデルの木に存在するノードだけ変更できます。例えば,XQuery削除式は,同じXQuery変換式中のXQuery挿入式で追加したノードは削除できませんが,XQuery変換式のcopy句に指定したXQueryシーケンス中のノードは削除できます。また,XQuery名前変更式で名前変更したノードの変更はできますが,XQuery置換式で置換したノードの変更はできません。

(d) 使用例

表の定義と,表に挿入されているデータを次に示します。

<表定義SQL>
CREATE TABLE 書籍管理表 (書籍ID INTEGER, 書籍情報 XML)
<書籍管理表に挿入されているデータ>

書籍ID

書籍情報

452469631

<書籍情報>

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

XQuery変換式の例を次に示します。

(例1)

書籍管理表の書籍情報の価格を"2500"から"2000"に置換します。

<実行SQL>
UPDATE 書籍管理表 SET 書籍情報 = XMLQUERY(
'copy $new := .
modify replace node $new/書籍情報/価格/text() with "2000"
return $new' 
PASSING BY VALUE 書籍情報 EMPTY ON EMPTY)
<実行結果>

書籍ID

書籍情報

452469631

<書籍情報>

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2000</価格>

</書籍情報>

(例2)

書籍管理表の書籍情報の書籍情報要素に,書籍管理表の書籍IDの値を属性として挿入します。

<実行SQL>
UPDATE 書籍管理表 SET 書籍情報 = XMLQUERY(
'copy $new := .
modify insert node attribute 書籍ID { $value } into $new/書籍情報
return $new' 
PASSING BY VALUE 書籍情報, 書籍ID AS "value" EMPTY ON EMPTY)
<実行結果>

書籍ID

書籍情報

452469631

<書籍情報 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

(17) XQuery挿入式

(a) 機能

XQueryデータモデルの木の指定した位置にノードを挿入する式です。

(b) 形式

XQuery挿入式 ::= insert { node | nodes }XQueryソース式
                    { 〔 as { first | last }〕 into 
                     | after
                     | before
                     }
                    XQueryターゲット式
XQueryソース式 ::= { XQuery式単独 | XQuery構成子 }
XQuery構成子 ::={ XQuery要素構成子 | XQuery属性構成子 | XQueryテキスト構成子
                      | XQueryコメント構成子 | XQuery処理命令構成子 }
XQuery要素構成子 ::= element 修飾名 左波括弧 〔 
                       { XQuery式単独 | XQuery構成子 }
                         〔, { XQuery式単独 | XQuery構成子 } 〕…
                         〕 右波括弧
XQuery属性構成子 ::= attribute 修飾名 左波括弧 〔 XQuery式 〕 右波括弧
XQueryテキスト構成子 ::= text 左波括弧 〔 XQuery式 〕 右波括弧
XQueryコメント構成子 ::= comment 左波括弧 〔 XQuery式 〕 右波括弧
XQuery処理命令構成子 ::= processing-instruction 処理命令ターゲット 
                            左波括弧 〔 XQuery式 〕 右波括弧
XQueryターゲット式 ::= XQuery式単独

(c) オペランド

  • XQuery挿入式 ::= insert { node | nodes }XQueryソース式

       { 〔 as { first | last }〕 into

       | after

       | before}

       XQueryターゲット式

{ node | nodes }

XQueryソース式に指定しているノードの数に関係なく,node又はnodesを指定できます。

as first into

XQueryターゲット式で指定したノードの,最初の子としてノードを挿入します。XQueryソース式のXQueryシーケンスに属性ノードを含む場合は,XQueryターゲット式に指定したノードに属性ノードを挿入します。

as last into

XQueryターゲット式で指定したノードの,最後の子としてノードを挿入します。XQueryソース式のXQueryシーケンスに属性ノードを含む場合は,XQueryターゲット式に指定したノードに属性ノードを挿入します。

into

XQueryターゲット式で指定したノードの子としてノードを挿入します。XQueryソース式のXQueryシーケンスに属性ノードを含む場合は,XQueryターゲット式に指定したノードに属性ノードを挿入します。

after

XQueryターゲット式で指定したノードの直後に弟となるノードを挿入します。XQueryソース式のXQueryシーケンスに属性ノードを含む場合は,XQueryターゲット式に指定したノードの親ノードに属性ノードを挿入します。

before

XQueryターゲット式で指定したノードの直前に兄となるノードを挿入します。XQueryソース式のXQueryシーケンスに属性ノードを含む場合は,XQueryターゲット式に指定したノードの親ノードに属性ノードを挿入します。

  • XQueryソース式 ::= { XQuery式単独 | XQuery構成子 }

XQueryソース式には,挿入するノードのXQueryシーケンスを指定します。

XQueryソース式のXQueryシーケンスの構成要素として指定するXQuery項目と,挿入されるノードとの関係を次に示します。

項番

XQueryソース式のXQueryシーケンスの構成要素として指定するXQuery項目

挿入されるノード

1

文書ノード

指定した文書ノードの子ノード

2

要素ノード

指定した要素ノード

3

属性ノード※1,※2,※3,※4

指定した属性ノード

4

テキストノード

テキストノードを連続して二つ以上指定した場合

指定した各テキストノードの内容を連結した文字列を内容に持つ,単一のテキストノード※5

その他の場合

指定したテキストノード※5

5

コメントノード

指定したコメントノード

6

処理命令ノード

指定した処理命令ノード

7

基本単位値

基本単位値を連続して二つ以上指定した場合

指定した基本単位値をxs:string型に変換し,各値の間に半角空白(X'20')を追加して連結した文字列を内容に持つ,単一のテキストノード

その他の場合

指定した基本単位値をxs:string型に変換した文字列を内容に持つ,テキストノード※5

注※1

一つの要素ノード内で重複しない修飾名を指定してください。

注※2

一つの要素ノード内で,属性ノードは属性ノード以外の前に指定してください。

注※3

親ノードと同じ接頭辞の属性ノードを挿入する場合,それらの接頭辞のXML名前空間URIが異なるものは指定できません。

注※4

同じ接頭辞を持つ複数の属性ノードを挿入する場合,それらの接頭辞のXML名前空間URIが異なるものは指定できません。

注※5

テキストノードの内容が空の場合,そのテキストノードは省略されます。

  • XQuery構成子 ::= { XQuery要素構成子 | XQuery属性構成子

       | XQueryテキスト構成子 | XQueryコメント構成子

       | XQuery処理命令構成子}

XQuery構成子は,要素ノード,属性ノード,テキストノード,コメントノード,又は処理命令ノードから構成されるXQueryシーケンスを返します。

XQuery構成子の例を次に示します。

<XQuery構成子の例>

項番

作成されるXQueryデータモデル

説明

1

element タイトル{}

[図データ]

ノード名が「タイトル」の要素ノードを返却します。

2

element データベース {"楽しい"}

[図データ]

ノード名が「データベース」の要素ノードを返却します。

要素ノードは,子ノードに内容が「楽しい」のテキストノードを持ちます。

3

attribute 書籍ID {"1234"}

[図データ]

文字列値に「1234」の値を持つ,ノード名が「書籍ID」の属性ノードを返却します。

4

text{"日立", "太郎"}

[図データ]

内容が「日立△太郎」のテキストノードを返却します。

5

element 書籍情報{

attribute 書籍ID {"12","34"},

text {"XML"},text{"入門"}

}

[図データ]

ノード名が「書籍情報」の要素ノードを返却します。

要素ノードは,子ノードに内容が「XML入門」のテキストノードと,文字列値が「12△34」でノード名が「書籍ID」の属性ノードを持ちます。

[図データ]

<指定できないXQuery構成子の例>

項番

説明

1

element 書籍情報{

attribute 書籍ID{”123456”},

attribute 書籍ID{”A-1”}

}

同じ名前の属性ノードは複数指定できません。例の下線部が該当します。

2

element 書籍情報{

text {”XML入門”} ,

attribute 書籍ID{”123456”}

}

属性ノード以外の後に属性ノードを指定することはできません。例の下線部が該当します。

  • XQuery要素構成子 ::= element 修飾名 左波括弧 〔

       { XQuery式単独 | XQuery構成子 }

       〔, { XQuery式単独 | XQuery構成子 } 〕…

       〕右波括弧

XQuery要素構成子は,要素ノードのXQueryシーケンスを返します。

修飾名

作成する要素ノードの修飾名を指定します。

修飾名の接頭辞を指定する場合,XML名前空間宣言で宣言した接頭辞を指定してください。XML名前空間宣言については,「XQuery宣言部」を参照してください。

修飾名の接頭辞及び局所名に使用できる文字については,「接頭辞及び局所名に使用できる文字」を参照してください。

なお,次の要素ノードは指定できません。

  1. 要素ノードの局所名が「xml」で始まる。

  2. 要素ノードの修飾名の接頭辞が「xmlns」である。

  3. 要素ノードの修飾名の接頭辞に対応するXML名前空間URIが「http://www.w3.org/2000/xmlns/」である。

  4. 要素ノードの修飾名の接頭辞が「xml」で,かつその接頭辞に対応するXML名前空間URIが「http://www.w3.org/XML/1998/namespace」以外である。

  5. 要素ノードの修飾名の接頭辞が「xml」以外で,かつその接頭辞に対応するXML名前空間URIが「http://www.w3.org/XML/1998/namespace」である。

  6. 接頭辞が「xmlns」のXML名前空間を含む要素ノードである。

XQuery式

XQuery式には,作成する要素ノードが持つ,0個以上の子ノード又は属性ノードから成るXQueryシーケンスを指定します。

XQuery式の,XQueryシーケンスの構成要素として指定するXQuery項目と,作成する要素ノードが持つことになる子ノード又は属性ノードを次に示します。

項番

XQuery式のXQueryシーケンスの構成要素として指定するXQuery項目

作成する要素ノードが持つことになる子ノード又は属性ノード

1

文書ノード

指定した文書ノードの子ノード

2

要素ノード

指定した要素ノード

3

属性ノード※1,※2

指定した属性ノード

4

テキストノード

テキストノードを連続して二つ以上指定した場合

指定した各テキストノードの内容を連結した文字列を内容に持つ,単一のテキストノード※3

その他の場合

指定したテキストノード※3

5

コメントノード

指定したコメントノード

6

処理命令ノード

指定した処理命令ノード

7

基本単位値

基本単位値を連続して二つ以上指定した場合

指定した基本単位値をxs:string型に変換し,各値の間に半角空白(X'20')を追加して連結した文字列を内容に持つ,単一のテキストノード

その他の場合

指定した基本単位値をxs:string型に変換した文字列を内容に持つ,テキストノード※3

注※1

一つの要素ノード内で重複しない修飾名を指定してください。

注※2

一つの要素ノード内で,属性ノードは属性ノード以外の前に指定してください。

注※3

テキストノードの内容が空の場合,そのテキストノードは省略されます。

  • XQuery属性構成子 ::= attribute 修飾名

       左波括弧 〔 XQuery式 〕 右波括弧

XQuery属性構成子は属性ノードを返します。

修飾名

作成する属性ノードの修飾名を指定します。

修飾名の接頭辞を指定する場合,XML名前空間宣言で宣言した接頭辞を指定します。XML名前空間宣言については,「XQuery宣言部」を参照してください。

修飾名の接頭辞及び局所名に使用できる文字については,「接頭辞及び局所名に使用できる文字」を参照してください。

なお,次の属性ノードは指定できません。

  1. 属性ノードの修飾名の接頭辞が「xmlns」である。

  2. 属性ノードの修飾名の接頭辞に対応するXML名前空間URIが「http://www.w3.org/2000/xmlns/」である。

  3. 属性ノードの修飾名の接頭辞が「xml」で,かつその接頭辞に対応するXML名前空間URIが「http://www.w3.org/XML/1998/namespace」以外である。

  4. 属性ノードの接頭辞が「xml」以外で,かつその接頭辞に対応するXML名前空間URIが「http://www.w3.org/XML/1998/namespace」である。

XQuery式

属性ノードの文字列値プロパティの値を指定します。

XQuery式に基本単位化を適用した結果の基本単位値を,xs:string型に変換した値が文字列値プロパティの値となります。基本単位化で二つ以上の基本単位値が返却される場合,各基本単位値の間に半角空白(X'20')を追加して,連結した一つのxs:string型の値になります。

  • XQueryテキスト構成子 ::= text 左波括弧 〔 XQuery式 〕 右波括弧

XQueryテキスト構成子はテキストノードを返します。

XQuery式

内容プロパティの値を指定します。内容プロパティの値が空の場合,テキストノードは省略されます。

基本単位化を適用した結果の基本単位値を,xs:string型に変換した値が内容プロパティの値となります。基本単位化で二つ以上の基本単位値が返却される場合,各基本単位値の間に半角空白(X'20')を追加して,連結した一つのxs:string型の値になります。

  • XQueryコメント構成子 ::= comment 左波括弧 〔 XQuery式 〕 右波括弧

XQueryコメント構成子はコメントノードを返します。

XQuery式

内容プロパティの値を指定します。

基本単位化を適用した結果の基本単位値を,xs:string型に変換した値が内容プロパティの値となります。基本単位化で二つ以上の基本単位値が返却される場合,各基本単位値の間に半角空白(X'20')を追加して,連結した一つのxs:string型の値になります。

内容プロパティの値には,連続するハイフンを含まない,かつ最後がハイフンで終わらない値を指定してください。

  • XQuery処理命令構成子 ::= processing-instruction 処理命令ターゲット

       左波括弧 〔 XQuery式 〕 右波括弧

XQuery処理命令構成子は処理命令ノードを返します。

処理命令ターゲット

作成する処理命令ノードの処理命令ターゲットを指定します。

「XML」(大文字,小文字を問わない)でない値を指定してください。

処理命令ターゲットに使用できる文字は,「接頭辞及び局所名に使用できる文字」と同じです。

XQuery式

処理命令ノードの内容プロパティの値を指定します。

XQuery式に,基本単位化を適用した結果の基本単位値を,xs:string型に変換した値が内容プロパティの値となります。基本単位化で二つ以上の基本単位値が返却される場合,各基本単位値の間に半角空白(X'20')を追加して,連結した一つのxs:string型の値になります。

内容プロパティの値の先頭及び末尾がホワイトスペース(半角空白(X'20'),タブ(X'09'),NL(X'0A'),又はCR(X'0D'))の場合,ホワイトスペースを取り除きます。

内容プロパティの値には,「?>」を含まない値を指定してください。

  • XQueryターゲット式 ::= XQuery式単独

ノードを挿入する位置を指定します。XQuery変換式のcopy句に指定する,XQueryデータモデルの木に存在するノードを指定してください。

XQuery挿入式にas first into,as last into,又はintoを指定する場合,XQueryターゲット式には単一の要素ノードを指定してください。

XQuery挿入式にafter又はbeforeを指定する場合,XQueryターゲット式には単一の要素ノード,テキストノード,コメントノード,又は処理命令ノードを指定してください。また,指定するノードは要素ノードである親ノードを持っている必要があります。

(d) 使用例

XQuery挿入式の例を次に示します。

<文脈項目である文書ノード以下のXML要素>
<書籍情報 書籍ID="452469631">
 <タイトル>XML入門教科書</タイトル>
 <著者>中村弘子</著者>
 <著者>日立太郎</著者>
 <価格>2500</価格>
</書籍情報>
<XQuery挿入式の例と結果>

項番

結果(下線部が変更箇所)

1

copy $new := .

modify insert node element カテゴリ{"XML"} after $new/書籍情報/タイトル

return $new

<書籍情報 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <カテゴリ>XML</カテゴリ>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

2

copy $new := .

modify insert node attribute 保管場所{"倉庫"} before $new/書籍情報/価格

return $new

<書籍情報 書籍ID="452469631" 保管場所="倉庫" >

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

3

copy $new := .

modify ( insert node attribute カテゴリ{"XML"} into $new/書籍情報,

insert node element 保管場所{"倉庫"} into $new/書籍情報 )

return $new

<書籍情報 書籍ID="452469631" カテゴリ="XML">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

 <保管場所>倉庫</保管場所>

</書籍情報>

4

declare namespace hirdb = "http://www.hitachi.co.jp/hirdb/";

copy $new := .

modify insert node attribute hirdb:管理番号{"ABC"} into $new/書籍情報

return $new

<書籍情報 xmlns:hirdb="http://www.hitachi.co.jp/hirdb/" 書籍ID="452469631" hirdb:管理番号="ABC">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

<指定できないXQuery挿入式の例と結果>

項番

説明

1

copy $new := .

modify insert node element カテゴリ{"XML"} before $new/書籍情報/著者

return $new

XQueryターゲット式には,単一の要素ノードを指定する必要があります。例の下線部が該当します。

2

copy $new := .

modify insert node element カテゴリ{"XML"}into $new/書籍情報/@書籍ID

return $new

into指定した場合,XQueryターゲット式には要素ノードを指定する必要があります。例の下線部が該当します。

(18) XQuery削除式

(a) 機能

XQueryデータモデルの木の指定した位置のノードを削除する式です。ノードが属性ノード又は子孫ノードを持つ場合は,その属性ノード又は子孫ノードも削除します。

(b) 形式

XQuery削除式 ::= delete { node | nodes } XQueryターゲット式
XQueryターゲット式 ::= XQuery式単独

(c) オペランド

  • XQuery削除式 ::= delete{ node | nodes }XQueryターゲット式

XQueryターゲット式で指定しているノードの数に関係なく,node又はnodesを指定できます。

  • XQueryターゲット式 ::= XQuery式単独

削除するノードを指定します。XQuery変換式のcopy句に指定する,XQueryデータモデルの木のノード,又は空のXQueryシーケンスを指定してください。

XQueryターゲット式で指定したノードが親を持たない場合は,省略されます。

(d) 使用例

XQuery削除式の例を次に示します。

<文脈項目である文書ノード以下のXML要素>
<書籍情報 書籍ID="452469631">
 <タイトル>XML入門教科書</タイトル>
 <著者>中村弘子</著者>
 <著者>日立太郎</著者>
 <価格>2500</価格>
</書籍情報>
<XQuery削除式の例と結果>

項番

結果

1

copy $new := .

modify delete node $new/書籍情報/著者

return $new

<書籍情報 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <価格>2500</価格>

</書籍情報>

2

copy $new := .

modify delete node $new/書籍情報/著者[. = "中村弘子"]

return $new

<書籍情報 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

3

copy $new := .

modify delete node $new/書籍情報/@書籍ID

return $new

<書籍情報>

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

(19) XQuery名前変更式

(a) 機能

XQueryデータモデルの木の,指定した位置のノードの修飾名又は処理命令ターゲットを変更する式です。

(b) 形式

XQuery名前変更式 ::= rename node XQueryターゲット式 as 
                        XQuery式単独
XQueryターゲット式 ::= XQuery式単独

(c) オペランド

  • XQuery名前変更式 ::= rename node XQueryターゲット式 as

       XQuery式単独

XQuery式単独

名前変更後の修飾名又は処理命令ターゲットを指定します。

修飾名の接頭辞を指定する場合,XML名前空間宣言で宣言した接頭辞を指定します。XML名前空間宣言については,「XQuery宣言部」を参照してください。

修飾名の接頭辞及び局所名に使用できる文字については,「接頭辞及び局所名に使用できる文字」を参照してください。処理命令ターゲットで使用できる文字は,修飾名の接頭辞及び局所名と同じです。

XQuery式単独の規則を次に示します。

  1. XQueryターゲット式が要素ノード又は属性ノードの場合は,修飾名を指定します。

    XQuery式単独に,基本単位化を適用した結果が単一の基本単位値になり,その基本単位値のXQueryデータ型がxs:string又はxs:untypedAtomicになるXQuery式単独を指定してください。その基本単位化を適用した結果の基本単位値が修飾名になります。

    属性ノードの修飾名に親ノードと同じ接頭辞の指定する場合,それらの接頭辞のXML名前空間URIは同じものを指定してください。

    なお,次の修飾名は指定できません。

    ・修飾名の接頭辞が「xmlns」である。

    ・修飾名の接頭辞に対応するXML名前空間URIが「http://www.w3.org/2000/xmlns/」である。

    ・修飾名の接頭辞が「xml」で,かつその接頭辞に対応するXML名前空間URIが「http://www.w3.org/XML/1998/namespace」以外である。

    ・修飾名の接頭辞が「xml」以外で,かつその接頭辞に対応するXML名前空間URIが「http://www.w3.org/XML/1998/namespace」である。

  2. XQueryターゲット式が要素ノードの場合,次の修飾名は指定できません。

    ・変更後の要素ノードの局所名が「xml」で始まる。

  3. XQueryターゲット式が属性ノードの場合,次の修飾名は指定できません。

    ・修飾名の接頭辞を指定しないかつ局所名が「xmlns」である。

  4. XQueryターゲット式が処理命令ノードの場合は,処理命令ターゲットを指定します。

    XQuery式単独に基本単位化を適用した結果が単一の基本単位値になり,その基本単位値のXQueryデータ型がxs:string又はxs:untypedAtomicになるXQuery式単独を指定してください。その基本単位化を適用した結果の基本単位値が処理命令ターゲットになります。

    処理命令ターゲットが「XML」(大文字,小文字を問わない)になるXQuery式単独は指定できません。

  • XQueryターゲット式 ::= XQuery式単独

名前を変更するノードを指定します。

XQuery変換式の,copy句に指定するXQueryデータモデルの木に存在する,単一の要素ノード,属性ノード,又は処理命令ノードを指定してください。

同じXQuery変換式中で,複数のXQuery名前変更式に同じノードを指定することはできません。

(d) 使用例

XQuery名前変更式の例を次に示します。

<文脈項目である文書ノード以下のXML要素>
<書籍情報 書籍ID="452469631">
 <タイトル>XML入門教科書</タイトル>
  <著者>中村弘子</著者>
  <著者>日立太郎</著者>
  <価格>2500</価格>
</書籍情報>
<XQuery名前変更式の例と結果>

項番

結果(下線部が変更箇所)

1

copy $new := .

modify rename node $new/書籍情報 as "情報"

return $new

<情報 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</情報>

2

copy $new := .

modify rename node $new/書籍情報/@書籍ID as "管理ID"

return $new

<書籍情報 管理ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

3

declare namespace hirdb = "http://www.hitachi.co.jp/hirdb/";

copy $new := .

modify rename node $new/書籍情報 as "hirdb:書籍情報"

return $new

<hirdb:書籍情報 xmlns:hirdb="http://www.hitachi.co.jp/hirdb/" 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</hirdb:書籍情報>

<指定できないXQuery名前変更式の例>

項番

説明

1

copy $new := .

modify rename node $new/書籍情報/著者 as "作者"

return $new

XQueryターゲット式には単一の要素ノードを指定する必要があります。例の下線部が該当します。

(20) XQuery置換式

(a) 機能

XQueryデータモデルの木の,指定した位置のノード又はノードの値を置換する式です。

(b) 形式

XQuery置換式 ::= replace 〔 value of 〕 node XQueryターゲット式
                    with XQueryソース式
XQueryターゲット式 ::= XQuery式単独
XQueryソース式 ::= { XQuery式単独 | XQuery構成子 }
XQuery構成子 ::={ XQuery要素構成子 | XQuery属性構成子 | XQueryテキスト構成子
                      | XQueryコメント構成子 | XQuery処理命令構成子 }
XQuery要素構成子 ::= element 修飾名 左波括弧 〔 
                       { XQuery式単独 | XQuery構成子 }
                         〔, { XQuery式単独 | XQuery構成子 } 〕…
                         〕 右波括弧
XQuery属性構成子 ::= attribute 修飾名 左波括弧 〔 XQuery式 〕 右波括弧
XQueryテキスト構成子 ::= text 左波括弧 〔 XQuery式 〕 右波括弧
XQueryコメント構成子 ::= comment 左波括弧 〔 XQuery式 〕 右波括弧
XQuery処理命令構成子 ::= processing-instruction 処理命令ターゲット 
                            左波括弧 〔 XQuery式 〕 右波括弧

(c) オペランド

  • XQuery置換式 ::= replace 〔 value of 〕 node XQueryターゲット式

       with XQueryソース式

〔 value of 〕

ノードの値を変更する場合は,指定します。

ノードを変更する場合は,省略します。

  • XQueryターゲット式 ::= XQuery式単独

置換するノードを指定します。

XQuery変換式のcopy句に指定する,XQueryデータモデルの木に存在する単一の要素ノード,属性ノード,テキストノード,コメントノード,又は処理命令ノードを指定してください。

同じXQuery変換式中で,value ofの指定がない複数のXQuery置換式に同じノードを指定することはできません。

同じXQuery変換式中で,value ofの指定がある複数のXQuery置換式に同じノードを指定することはできません。

  • XQueryソース式 ::= { XQuery式単独 | XQuery構成子 }

置換後のノードの,XQueryシーケンス又はノードの値を指定します。

value ofの指定がある場合,XQuery式単独だけ指定できます。

  1. value ofを指定しない場合

    置換後のノードのXQueryシーケンスを指定します。

    XQueryソース式の,XQueryシーケンスの構成要素として指定するXQuery項目と,置換後のノードの関係を次に示します。

    項番

    XQueryソース式のXQueryシーケンスの構成要素として指定するXQuery項目

    置換後のノード

    1

    文書ノード

    指定した文書ノードの子ノード

    2

    要素ノード

    指定した要素ノード

    3

    属性ノード※1,※2,※3

    指定した属性ノード

    4

    テキストノード

    テキストノードを連続して二つ以上指定した場合

    指定した各テキストノードの内容を連結した文字列を内容に持つ,単一のテキストノード※4

    その他の場合

    指定したテキストノード※4

    5

    コメントノード

    指定したコメントノード

    6

    処理命令ノード

    指定した処理命令ノード

    7

    基本単位値

    基本単位値を連続して二つ以上指定した場合

    指定した基本単位値をxs:string型に変換し,各値の間に半角空白(X'20')を追加し連結した文字列を内容に持つ,単一のテキストノード

    その他の場合

    指定した基本単位値をxs:string型に変換した文字列を内容に持つ,テキストノード※4

    注※1

    一つの要素ノード内で重複しない修飾名を指定してください。

    注※2

    親ノードと同じ接頭辞の属性ノードに置換する場合,それらの接頭辞のXML名前空間URIが異なるものは指定できません。

    注※3

    同じ接頭辞を持つ複数の属性ノードに置換する場合,それらの接頭辞のXML名前空間URIが異なるものは指定できません。

    注※4

    テキストノードの内容が空の場合,そのテキストノードは省略されます。

    XQueryターゲット式が要素ノード,テキストノード,コメントノード,又は処理命令ノードの場合,0個以上の要素ノード,テキストノード,コメントノード,又は処理命令ノードから構成されるXQueryシーケンスを指定してください。

    XQueryターゲット式が属性ノードの場合,0個以上の属性ノードから構成されるXQueryシーケンスを指定してください。

  2. value ofを指定する場合

    置換後のノードの値を指定します。

    XQueryソース式に基本単位化を適用した結果の基本単位値を,xs:string型に変換した値となります。基本単位化で二つ以上の基本単位値が返却される場合,各基本単位値の間に半角空白(X'20')を追加して,連結した一つのxs:string型の値になります。

    XQueryターゲット式がコメントノードの場合,XQueryソース式は連続するハイフンを含まない,かつ最後がハイフンで終わらない値を指定してください。

    XQueryターゲット式が処理命令ノードの場合,XQeuryソース式は「?>」を含まない値を指定してください。

  • XQuery構成子 ::= { XQuery要素構成子 | XQuery属性構成子

       | XQueryテキスト構成子 | XQueryコメント構成子

       | XQuery処理命令構成子}

XQuery構成子については,「オペランド」を参照してください。

  • XQuery要素構成子 ::= element 修飾名 左波括弧 〔

       { XQuery式単独 | XQuery構成子 }

       〔, { XQuery式単独 | XQuery構成子 } 〕…

       〕 右波括弧

XQuery要素構成子については,「オペランド」を参照してください。

  • XQuery属性構成子 ::= attribute 修飾名

       左波括弧 〔 XQuery式 〕 右波括弧

XQuery属性構成子については,「オペランド」を参照してください。

  • XQueryテキスト構成子 ::= text 左波括弧 〔 XQuery式 〕 右波括弧

XQueryテキスト構成子については,「オペランド」を参照してください。

  • XQueryコメント構成子 ::= comment 左波括弧 〔 XQuery式 〕 右波括弧

XQueryコメント構成子については,「オペランド」を参照してください。

  • XQuery処理命令構成子 ::= processing-instruction 処理命令ターゲット

       左波括弧 〔 XQuery式 〕 右波括弧

XQuery処理命令構成子については,「オペランド」を参照してください。

(d) 使用例

XQuery置換式の入力例を次に示します。

<文脈項目である文書ノード以下のXML要素>
<書籍情報 書籍ID="452469631">
 <タイトル>XML入門教科書</タイトル>
 <著者>中村弘子</著者>
 <著者>日立太郎</著者>
 <価格>2500</価格>
</書籍情報>
<XQuery置換式の例と結果>

項番

結果(下線部が変更箇所)

1

copy $new := .

modify replace value of node $new/書籍情報/著者[.="日立太郎"] with "日立花子"

return $new

<書籍情報 書籍ID="452469631">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立花子</著者>

 <価格>2500</価格>

</書籍情報>

2

copy $new := .

modify replace node $new/書籍情報 with element 書籍情報 {element タイトル{"データベース入門"} , element 著者{"日立太郎"}}

return $new

<書籍情報>

 <タイトル>データベース入門</タイトル>

 <著者>日立太郎</著者>

</書籍情報>

3

copy $new := .

modify replace value of node $new/書籍情報/@書籍ID with "10000"

return $new

<書籍情報 書籍ID="10000">

 <タイトル>XML入門教科書</タイトル>

 <著者>中村弘子</著者>

 <著者>日立太郎</著者>

 <価格>2500</価格>

</書籍情報>

<指定できないXQuery置換式の例>

項番

説明

1

copy $new := .

modify replace node $new/書籍情報/著者 with element 著者 {"日立花子"}

return $new

XQueryターゲット式には単一の要素ノードを指定する必要があります。例の下線部が該当します。

2

copy $new := .

modify ( replace node $new/書籍情報/タイトル with element 書籍名 {"データベース"},

replace node $new/書籍情報/タイトル with element タイトル {"XML"} )

return $new

複数のXQuery置換式に同じXQueryターゲット式は指定できません。例の下線部が該当します。