77
J2X1-7497-01Z0(00) 20101Windows/Solaris/Linux Symfoware Server V10.0.0 XQueryリファレンス

XQueryリファレンス - 富士通software.fujitsu.com/jp/manual/manualfiles/M100005/J2X...XQueryを構成する要素がほかの項で説明されている場合、その項番を示します。

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • J2X1-7497-01Z0(00)2010年1月

    Windows/Solaris/Linux

    Symfoware Server V10.0.0

    XQueryリファレンス

  • まえがき

    本書の目的

    本書は、Symfoware Server XQueryリファレンスです。本書は、データベース内のXMLデータを参照するためのプログラムの開発に使用するXQueryの文法について説明しています。

    本書の読者

    本書は、Symfoware Serverのデータベースを処理するアプリケーションを開発する方に読んでいただくように書かれています。本書を読むには、以下に示す知識が必要です。

    ・ Symfoware/RDBのデータベースに関する知識

    ・ Symfoware/RDBを適用する業務に関する知識

    ・ XMLに関する知識

    本書の構成

    本書の構成と内容は以下のとおりです。

    第1章 文法の表記方法と構成要素一覧

    XQuery文法の表記方法を説明しています。また、XQueryおよび要素の一覧表を記載しています。

    第2章 構文規則

    XQueryの言語規則、データ型の規則、式の処理規則について説明しています。

    第3章 プロローグ

    問合せの処理環境を定義するプロローグの文法を説明しています。

    第4章 式

    問合せ本体を表すXQueryの式の文法を説明しています。

    第5章 関数

    式から呼び出される関数の文法を説明しています。

    付録A キーワード一覧

    トークンで説明されているキーワードの一覧を示しています。

    付録B 定量制限

    SymfowareのXQueryに関連する定量制限を示しています。

    付録C rdbunlxコマンドのサポート一覧

    rdbunlxコマンドがサポートしているXQuery式の範囲を説明しています。

    付録D rdbunlxコマンドのXQuery式

    rdbunlxコマンドを使用する際に記述するXQuery式について説明しています。

    平成22年 1月 初版

    - i -

  • 目 次

    第1章 文法の表記方法と構成要素一覧......................................................................................................................................11.1 文法の表記方法..................................................................................................................................................................................11.2 構成要素一覧.....................................................................................................................................................................................2

    第2章 構文規則.........................................................................................................................................................................62.1 言語規則.............................................................................................................................................................................................6

    2.1.1 文字..............................................................................................................................................................................................62.1.2 トークン..........................................................................................................................................................................................72.1.3 空白文字......................................................................................................................................................................................82.1.4 コメント...........................................................................................................................................................................................92.1.5 名前(QName).............................................................................................................................................................................10

    2.2 データ型の規則.................................................................................................................................................................................122.2.1 組込み型一覧............................................................................................................................................................................12

    2.2.1.1 string型................................................................................................................................................................................122.2.1.2 double型...............................................................................................................................................................................122.2.1.3 date型...................................................................................................................................................................................132.2.1.4 time型..................................................................................................................................................................................132.2.1.5 dateTime型..........................................................................................................................................................................142.2.1.6 boolean型.............................................................................................................................................................................142.2.1.7 untypedAtomic型.................................................................................................................................................................14

    2.2.2 組込み型のキャスト....................................................................................................................................................................152.3 式の処理規則....................................................................................................................................................................................15

    2.3.1 文書順........................................................................................................................................................................................152.3.2 原子化........................................................................................................................................................................................162.3.3 有効ブール値.............................................................................................................................................................................172.3.4 動的コンテキスト.........................................................................................................................................................................172.3.5 式の優先順位.............................................................................................................................................................................182.3.6 直列化........................................................................................................................................................................................18

    第3章 プロローグ.....................................................................................................................................................................193.1 バージョン宣言..................................................................................................................................................................................19

    第4章 式..................................................................................................................................................................................204.1 式の概要............................................................................................................................................................................................204.2 基本式...............................................................................................................................................................................................21

    4.2.1 リテラル.......................................................................................................................................................................................234.3 パス式................................................................................................................................................................................................26

    4.3.1 軸ステップ...................................................................................................................................................................................284.3.2 述語............................................................................................................................................................................................30

    4.4 算術式...............................................................................................................................................................................................314.5 比較式...............................................................................................................................................................................................324.6 論理式...............................................................................................................................................................................................364.7 FLWOR式.........................................................................................................................................................................................384.8 条件式...............................................................................................................................................................................................414.9 量化式...............................................................................................................................................................................................41

    第5章 関数.............................................................................................................................................................................. 445.1 コンストラクタ関数..............................................................................................................................................................................445.2 文字列関数.......................................................................................................................................................................................46

    5.2.1 contains.......................................................................................................................................................................................465.2.2 ends-with.....................................................................................................................................................................................475.2.3 lower-case...................................................................................................................................................................................485.2.4 starts-with....................................................................................................................................................................................485.2.5 substring-after.............................................................................................................................................................................495.2.6 substring-before..........................................................................................................................................................................505.2.7 upper-case...................................................................................................................................................................................51

    - ii -

  • 5.3 ブール関数........................................................................................................................................................................................525.3.1 false.............................................................................................................................................................................................525.3.2 true..............................................................................................................................................................................................52

    5.4 日付関数...........................................................................................................................................................................................535.4.1 current-date.................................................................................................................................................................................535.4.2 current-time.................................................................................................................................................................................535.4.3 current-dateTime.........................................................................................................................................................................54

    付録A キーワード一覧.............................................................................................................................................................55

    付録B 定量制限.......................................................................................................................................................................57

    付録C rdbunlxコマンドのサポート一覧......................................................................................................................................58

    付録D rdbunlxコマンドのXQuery式..........................................................................................................................................63D.1 基本的な考え方...............................................................................................................................................................................63D.2 XQuery式..........................................................................................................................................................................................64D.3 パス式...............................................................................................................................................................................................64

    D.3.1 パス............................................................................................................................................................................................64D.3.2 フィルタ......................................................................................................................................................................................66

    D.4 比較式...............................................................................................................................................................................................67D.4.1 比較演算子................................................................................................................................................................................68D.4.2 リテラル.......................................................................................................................................................................................68D.4.3 論理式........................................................................................................................................................................................68D.4.4 評価順序の制御........................................................................................................................................................................69

    D.5 演算子の優先順位...........................................................................................................................................................................69D.6 XQuery式の指定方法......................................................................................................................................................................69

    D.6.1 あるエレメントノードを含むデータを検索する場合..................................................................................................................70D.6.2 あるエレメントノードのテキストノードの値を指定した検索をする場合.....................................................................................71D.6.3 あるエレメントノードの属性の値を指定した検索をする場合...................................................................................................71D.6.4 複数の条件を指定して検索する場合......................................................................................................................................71D.6.5 任意のエレメントノードを指定した検索をする場合..................................................................................................................72D.6.6 あるエレメントノード配下のすべての属性の値を比較する検索をする場合...........................................................................72

    索引........................................................................................................................................................................................73

    - iii -

  • 第1章 文法の表記方法と構成要素一覧本章では、XQueryの文法を解説するときの表記方法と、XQueryを構成する様々な要素とその簡単な機能、および本書での参照先をまとめています。

    1.1 文法の表記方法XQueryの文法規則の説明形式は、原則として次の項目に分けて説明されています。

    ・ 機能

    ・ 記述形式

    ・ 参照項番

    ・ 一般規則

    ・ 使用例

    機能

    XQueryの構成要素が持つ機能を説明します。

    記述形式

    XQueryを構成する各要素の並べ方を示します。

    記述形式で使用している記号の意味を以下に示します。

    - 1 -

  • 構文の構成

    記述形式に対する補助的な説明です。説明している用語は、複数の構文要素をまとめて表現するXQueryの用語です。

    参照項番

    XQueryを構成する要素がほかの項で説明されている場合、その項番を示します。

    一般規則

    要素の文法、注意事項や要素間の意味の相互関係を説明しています。

    使用例

    各要素の具体的な記述例を示しています。ただし、単純な規則しか持たない文に対しては、例を省略していることがあります。

    使用例に用いるXML文書を以下に示します。このXML文書は、スキーマS1に含まれる表COMPANIESの列EMPLOYEESに格納されているものとします。

    Tanaka Tarou

    42

    Tanaka Yoshiko

    Tanaka Ken

    Tanaka Ai

    Kondou Yusuke

    20

    Shinada Megumi

    34

    Shinada Youhei

    Shinada Kaoru

    Shinada Teppei

    Kawada Hiroko

    51

    Kawada Tsuyoshi

    Kawada Saori

    1.2 構成要素一覧各節、各項で説明している内容の検索が便利なようにXQueryの構成要素の一覧を“表1.1 XQuery構成要素の一覧”に示します。簡単な機能とそれを説明している本文の項番号を知ることができます。

    “XQuery構成要素の一覧”の見方は次のとおりです。

    項目:

    XQueryの構成要素を分類した項目名です。

    - 2 -

  • 構成要素:

    XQueryの構成要素名です。

    機能:

    各構成要素の機能を簡単に説明してあります。

    項番:

    対応する要素の説明がある本書中の項番号です。

    表1.1 XQuery構成要素の一覧項目 構成要素 機能 項番

    言語規則 文字 XQueryで使用可能な文字を規定します。 2.1.1 文字

    トークン XQueryを構成する名前、キーワード、記号、各種定数などの最小単位の要素を指定します。

    2.1.2トークン

    空白 明示的にトークンを分離します。 2.1.3 空白文字

    コメント 注釈を指定します。 2.1.4 コメント

    名前 種々の名前を指定します。 2.1.5 名前

    (QName)

    データ型の規則 string型 文字列型を指定します。 2.2.1.1string型

    double型 数値型を指定します。 2.2.1.2double型

    date型 日付型を指定します。 2.2.1.3date型

    time型 時間型を指定します。 2.2.1.4time型

    dateTime型 日時型を指定します。 2.2.1.5dateTime型

    boolean型 ブール型を指定します。 2.2.1.6boolean型

    untypedAtomic型 型付けされていないデータ型を指定します。 2.2.1.7untypedAtomic型

    式の処理規則 文書順 ノード間の順序を指定します。 2.3.1 文書順

    原子化 シーケンスの項目を原子値に変換する規則を指定し

    ます。

    2.3.2 原子化

    有効ブール値 ある値をブール値として処理するときの規則を指定し

    ます。

    2.3.3 有効ブー

    ル値

    - 3 -

  • 項目 構成要素 機能 項番

    動的コンテキスト 式を評価するときに利用可能な情報を指定します。 2.3.4 動的コンテ

    キスト

    式の優先順位 式、および演算子の間の優先順位を指定します。 2.3.5 式の優先

    順位

    直列化 値の出力方法を指定します。 2.3.6 直列化

    プロローグ バージョン宣言 XQueryのバージョンとエンコード方式を宣言します。 3.1 バージョン宣

    式 式 XQueryの問合せ本体である式を指定します。 4.1 式の概要

    基本式 XQueryの基本プリミティブとなる式を指定します。 4.2 基本式

    リテラル 原子値の直接的な構文表現を指定します。 4.2.1 リテラル

    パス式 ノードの位置を指定し、ノードあるいは原子値のシー

    ケンスを取得します。

    4.3 パス式

    軸ステップ 指定したノードを取得します。 4.3.1 軸ステップ

    述語 指定したシーケンスの項目を選別します。 4.3.2 述語

    算術式 数値に対して符号づけします。 4.4 算術式

    比較式 2つの値を比較します。 4.5 比較式

    論理式 論理演算を行います。 4.6 論理式

    FLWOR式 シーケンスの繰り返し、中間結果の変数バインド、複数のXML文書の結合などを行います。

    4.7FLWOR式

    条件式 ある条件に応じて、指定した2つの式のどちらか一方を評価します。

    4.8 条件式

    量化式 あるシーケンスの一部、またはすべての項目が特定の

    条件を満たしているかどうかを評価します。

    4.9 量化式

    関数 コンストラクタ関数 あるデータ型の値を別のデータ型の値に変換します。 5.1 コンストラクタ

    関数

    文字列関数 引数に文字列値を受け取り、その値を処理します。 5.2 文字列関数

    ブール関数 ブール値を取得します。 5.3 ブール関数

    日付関数 日付値を取得します。 5.4 日付関数

    - 4 -

  • 参照

    シーケンス、項目、原子値、ノードの詳細については、“アプリケーション開発ガイド(共通編)”の“XQueryのデータモデル”を参照してください。

    - 5 -

  • 第2章 構文規則XQueryの構文規則は、大きく分けると、言語規則、データ型の規則、式の処理規則の3種類に分類することができます。これらの詳細について以下で説明します。

    2.1 言語規則XQueryの言語を構成する基本的な要素は次の4項目です。

    ・ 文字

    ・ トークン

    ・ 空白文字

    ・ 名前

    これらの要素が組み合わされることで、XQueryの問合せが生成されます。

    2.1.1 文字

    機能

    XQueryで使用可能な文字を規定します。

    記述形式

    一般規則

    ・ XMLデータの文字コード系はUNICODEです。

    ・ 各国語文字を除く各文字は、UNICODEのコードセット0に対応します。これは、ASCIIコードと同じ1バイトコードです。

    数字および英字

    - 数字および英字に指定できる文字を以下に示します。

    要素 指定できる文字

    数字 0 ~ 9

    英大文字 A ~ Z

    英小文字 a ~ z

    特殊文字

    - 特殊文字として指定できる文字を以下に示します。

    , . : ; = * + - / \

    @ ? < > % _ ' " # $

    & ^ ! ( ) [ ] { } |

    - 6 -

  • 各国語文字

    - 各国語文字は、日本語の文字を表します。

    - 各国語文字のコードは、UNICODEでのJIS漢字/非漢字を含む範囲(2バイトまたは3バイト)です。

    使用例

    例1

    数字

    123

    例2

    特殊文字と各国語文字

    "富士通"

    例3

    英大文字、英小文字、特殊文字と数字

    for $X in (1, 2, 3)

    return $X

    2.1.2 トークン

    機能

    XQueryの問合せを構成する最小単位を指定します。

    記述形式

    非区切りトークン

    区切りトークン

    参照項番

    ・ QName → 2.1.5 名前(QName)

    ・ 数値リテラル → 4.2.1 リテラル

    ・ 文字列リテラル → 4.2.1 リテラル

    ・ 既定義エンティティー参照 → 4.2.1 リテラル

    - 7 -

  • 一般規則

    非区切りトークン

    非区切りトークンは、それ単体でトークンを分離することができません。例えば、2つの非区切りトークン同士が隣接して並んでいる場合、その境界を一意に決定することはできません。そのため、2つの非区切りトークンが1つの非区切りトークンと認識されてしまいます。2つの非区切りトークンを分離するためには、2つのトークンの間に区切りトークンまたは空白文字を挿入する必要があります。

    キーワード

    キーワードはすべて小文字です。予約はされていません。つまり、キーワードと同じ文字列のQNameを指定することが可能です。キーワードの種類については“付録A キーワード一覧”を参照してください。

    区切りトークン

    区切りトークンは、それ単体でトークンを分離することができます。例えば、2つの区切りトークン同士、または区切りトークンと非区切りトークンが隣接して並んでいる場合であっても、その境界を一意に決定することができます。

    区切り記号

    区切り記号として指定できる特殊記号を以下に示します。

    = ; , $ ( ) != =

    > @ .. * [ ] . / // "

    ' +

    使用例

    例1:非区切りトークン

    区切り記号“$”の後に、QName“variable_name”を指定する場合

    $variable_name

    キーワード“return”を表す場合

    return

    数値リテラル“40”を表す場合

    40

    例2:区切りトークン

    文字列リテラル“"FUJITSU"”を表す場合

    "FUJITSU"

    既定義エンティティー参照“<”を表す場合

    <

    区切り記号“.”を表す場合

    .

    2.1.3 空白文字

    機能

    明示的にトークンを分離します。また、式の構文には含まれませんが、XQueryの可読性を向上させるためにも使用されます。

    - 8 -

  • 記述形式

    一般規則

    ・ 空白文字は、スペース、タブ、リターン、改行のいずれかで表されます。

    ・ 空白文字は複数連続して存在しても、通常1つの空白文字と同じ意味です。ただし、空白文字が文字列リテラルの中に存在する場合には、空白文字の1つ1つに意味があるため、すべての空白文字が保持されます。

    注意

    静的SQL文では、XMLQUERY関数またはXMLEXISTS述語に指定したXQuery式に、空白文字として改行を指定することはできません。

    使用例

    空白文字で明示的にトークンを分離する必要があるXQueryの例を以下に示します。

    例1

    構文的には“for $x in 10 return$x and $x”と等価であり、正しく評価されるため、return節で2つの“$x”という名前の変数の論理積演算を実行しています。

    for $x in 10 return$x and$x

    例2

    “$xand”が1つのQNameとして認識されているため、構文エラーになります。

    for $x in 10 return$xand $x

    2.1.4 コメント

    機能

    プロローグまたは式の中に指定して、XQueryの問合せに対する注釈を提供します。コメントの内容は、問合せの処理に影響しません。

    記述形式

    一般規則

    ・ コメントは、トークンとトークンの間の任意の場所に指定できます。

    - 9 -

  • ・ コメントは入れ子で指定することができます。入れ子で指定した場合、コメントの記号“(:”と記号“:)”は1対1で対応します。

    使用例

    例1

    10の後ろと$xの後ろにコメントが正しく指定されている場合

    for $x in 10 (: $xに10を代入 :) return $x (: $xを参照 :)

    例2

    コメントが入れ子で正しく指定されている場合

    for $x in 20 (: in 10 (: $xに10を代入 :) :) return $x (: $xを参照 :)

    例3

    記号“(:”と“:)”が1対1に対応していないため、コメントが正しく指定されていない場合

    for $x in 20 (: in 10 (: $xに10を代入 :) return $x (: $xを参照 :)

    2.1.5 名前(QName)

    機能

    種々の名前を指定します。

    記述形式

    QName

    NCName

    - 10 -

  • 構文の構成

    [QName]

    一般規則

    QName

    - XQueryにおける名前は、すべてQNameで記述されます。

    - XQueryで使用される名前の種類を以下に示します。

    - 変数名

    - 関数名

    - エレメントノード名

    - 属性ノード名

    - 関数名に使用されるQNameは、ネームスペースを認識します。ただし、使用できるネームスペースURIとネームスペース接頭辞は、あらかじめXQueryで宣言されたものであり、以下に示す値でそれぞれ固定されています。変更することはできません。また、新しいネームスペースURIや接頭辞を作成することもできません。関数名のデフォルトネームスペースは接頭辞fnで表されるネームスペースに一致します。

    ネームスペース接頭辞 バインドされたネームスペースURI

    xs http://www.w3.org/2001/XMLSchema

    fn http://www.w3.org/2005/xpath-functions

    - エレメントノード名、属性ノード名に使用されるQNameはネームスペースを認識しません。しかし、ネームスペース接頭辞で修飾された名前をもつエレメントノードや属性ノードを、パス式の名前テストで検索することが可能です。名前テストのQNameには、検索したいノードの名前を接頭辞付きで指定することができます。指定した名前に一致するノードが検索結果として得られ

    ます。名前テストの詳細については、“4.3.1 軸ステップ”を参照してください。

    注意

    - ノード名のQNameと名前テストのQNameの比較は、接頭辞とローカル名がそれぞれ一致するかどうかで判断します。接頭辞に対応するネームスペースURIが一致するかどうかは無視します。

    - ネームスペース接頭辞に“xmlns”を指定することはできません。

    - 変数名に使用されるQNameはネームスペースを認識しません。

    - QNameの長さは最大128バイトまで指定できます。ただし、QNameの長さは文字コード系をUNICODEで表現したときの長さで計算されます。

    NCName

    - QNameのネームスペース接頭辞、またはローカル名を表します。

    使用例

    QNameとして、変数名($abc)、エレメントノード名(employees、employee)、属性ノード名(id)を使用する場合

    - 11 -

  • for $abc in /employees/employee[@id>30000]

    return $abc

    2.2 データ型の規則XQueryの原子値には、あらかじめ定義されているデータ型が存在します。この型を組込み原子型と呼びます。組込み原子型はネームスペースhttp://www.w3.org/2001/XMLSchemaに属します。このネームスペースはネームスペース接頭辞xsに関連付けされています。

    2.2.1 組込み型一覧Symfowareでサポートする組込み型の一覧を以下の表に示します。

    表2.1 組込み型一覧

    分類 型名 概要

    文字列 string XQueryで使用可能な任意の文字列を表します。

    数値 double 倍精度の浮動小数点数を表します。

    日付 date 年、月、日で日付を表します。

    時間 time 時、分、秒で時間を表します。

    日時 dateTime 年、月、日、時、分、秒で日時を表します。

    ブール boolean 論理値のtrue、またはfalseを表します。

    型なし untypedAtomic XML-Schemaで型付けされていない値を表します。

    2.2.1.1 string型データ型xs:stringは、文字列を表します。xs:stringの字句形式は、文字列リテラルで表される文字列です。文字列リテラルの詳細については、“4.2.1 リテラル”を参照してください。

    "Book"

    "rain"

    "日本"

    2.2.1.2 double型データ型xs:doubleは、IEEE倍精度64ビット浮動小数点タイプを表します。精度は2進数で52です。xs:doubleの値域は、浮動小数点数で表される数値に、特殊値(正の無限大、負の無限大、正のゼロ、負のゼロ、および非数値)を加えた範囲です。

    xs:doubleの字句形式は、浮動小数点数の字句形式と特殊値の字句形式の両方を含みます。浮動小数点数の字句形式は、数値リテラルで表される文字列、正記号(+)、および負記号(-)で構成されます。数値リテラルで表される数値はすべて10進数でなければなりません。数値リテラルの後部に指定できる記号e(またはE)と数字は、指数を表します。

    以下に浮動小数点数の字句形式の例を示します。

    -1.23

    23.456

    +20

    3.00

    - 12 -

  • 076

    .998

    -3E2

    4.76e-2

    特殊値の字句形式は、それぞれ以下のようになります。

    特殊値 字句形式

    正の無限大 INF

    負の無限大 -INF

    正のゼロ +0

    負のゼロ -0

    非数値 NaN

    注意

    特殊値INF、-INF、およびNaNのリテラルはありません。xs:double型のコンストラクタ関数を使用することで、対応する文字列から値INF、-INF、およびNaNを構成することができます。

    xs:double("INF")

    2.2.1.3 date型データ型xs:dateは、整数値で指定した年、月、日によって指定される日付を表します。xs:dateの字句形式は、yyyy-mm-dd形式の有限長文字列です。

    yyyy:

    4桁の数字列で年を表します。ただし、0000は使用できません。

    mm:

    2桁の数字列で月を表します。有効範囲は01

  • ss:

    2桁の数字列で秒を表します。有効範囲は00

  • xs:untypedAtomic型の値を表すリテラルはありません。xs:untypedAtomice型のコンストラクタ関数を使用することで、対応する文字列からuntypedAtomic型の値を構成することができます。

    xs:untypedAtomic("3b29d")

    2.2.2 組込み型のキャストSymfowareでサポートする組込み型は、別の型にキャストすることが可能です。キャストは、コンストラクタ関数や一部の式の処理によって実行されます。キャストの評価規則の詳細は、“5.1 コンストラクタ関数”に示します。

    どの組込み型がどの組込み型にキャスト可能かを以下の表に示します。表の縦はキャスト元の組込み型を、横はキャスト先の組込み

    型を表しています。表内のセルには、以下の3つの文字のうち、いずれか1つが指定されています。

    Y:

    キャスト可能。

    N:

    キャスト不可能。この組合せでキャストしようとするとエラーが返されます。

    M:

    条件つきでキャスト可能。キャスト元の組込み型の値によっては、キャストできる場合とできない場合があります。

    表2.2 組込み型のキャストキャスト元の組込み

    キャスト先の組込み型

    untypedAtomic

    string double dateTime date time boolean

    untypedAtomic Y Y M M M M M

    string Y Y M M M M M

    double Y Y Y N N N Y

    dateTime Y Y N Y Y Y N

    date Y Y N Y Y N N

    time Y Y N N N Y N

    boolean Y Y Y N N N Y

    2.3 式の処理規則XQueryの式を評価するには、ノードの原子化や有効ブール値の決定など、ある特別な操作が必要となります。本節では、このような式の処理規則について説明します。

    2.3.1 文書順文書順とは、ある問合せの処理中にアクセス可能なすべてのノードの間で定義される順序のことです。この順序は、複数のXML文書間でも適用されます。直感的には、ノード間の順序はXML文書中でノードが出現する順序に一致します。

    文書順は問合せの処理中に変化することはありません。文書順が満たす条件を以下に示します。

    ・ ルートノードは最初に出現します。

    ・ いずれのノードも、その子孫より先に出現します。

    ・ 兄弟間のノードの順序は、兄が弟よりも先に出現します。

    ・ 兄の子孫のノードは、弟よりも先に出現します。

    ・ 属性ノードは、それが関連づけられているエレメントノードの直後に出現します。

    - 15 -

  • ・ 属性ノード間の順序は任意に決定しますが、問合せの処理中に変化しません。

    ・ 異なるXML文書間の順序は任意に決定しますが、問合せの処理中に変化しません。ただし、あるXML文書1のノードがXML文書2のノードよりも先に出現するならば、XML文書1のすべてのノードがXML文書2のどのノードよりも先に出現します。

    2.3.2 原子化原子化とは、シーケンスの項目をすべて原子値に変換する処理です。結果は、原子値のシーケンスを返します。シーケンス内の各項

    目を原子値に変換するときの処理手順を、以下に示します。

    - 16 -

  • 1. その項目が原子値であれば、その項目を返します。

    2. その項目がノードであれば、そのノードのすべての子孫テキストノードを文書順に連結した値を返します。この値のデータ型はxs:untypedAtomic型です。

    原子化は、以下の式において型を処理するために使用されます。

    ・ 算術式

    ・ 比較式

    ・ 関数呼び出し

    ・ コンストラクタ関数

    ノードと原子値を項目にもつシーケンスに原子化を適用した場合の例を以下に示します。

    例1

    以下のシーケンスを原子化すると、その結果のシーケンスは、最初の項目がxs:string型の値t1、次の項目がxs:untypedAtomic型の値20、最後の項目がxs:double型の値123になります。

    ("t1", /employees/employee[2]/age, 123)

    例2

    以下のパス式が返すシーケンスを原子化すると、その結果のシーケンスは、最初の項目がxs:untypedAtomic型の値Tanaka Tarou、次の項目がxs:untypedAtomic型の値Kondou Yusuke、3番目の項目がxs:untypedAtomic型の値Shinada Megumi、最後の項目がxs:untypedAtomic型の値Kawada Hirokoになります。

    /employees/employee/name

    2.3.3 有効ブール値有効ブール値とは、ある値をブール値として処理するとき、暗黙的に計算された結果のブール値です。有効ブール値の計算結果は、

    true、false、またはエラーを返します。

    以下の表に、有効ブール値を求める値の条件と、その値の有効ブール値を示します。

    値の条件 有効ブール値

    空シーケンス false

    最初の項目がノードであるシーケンス true

    xs:boolean型の原子値true true

    xs:boolean型の原子値false false

    xs:string型またはxs:untypedAtomic型の原子値であり、値の長さが0 false

    xs:string型またはxs:untypedAtomic型の原子値であり、値の長さが1以上 true

    数値型(xs:double型)の原子値であり、その値がNaNまたは0 false

    数値型(xs:double型)の原子値であり、その値がNaNと0以外 true

    上記の条件以外 エラー

    値の有効ブール値は以下のような式の型を処理するときに、暗黙的に計算されます。

    ・ 論理式

    ・ 述語

    2.3.4 動的コンテキスト動的コンテキストは、式を評価するときに利用可能な情報です。動的コンテキストの中には、現在時刻やコンテキストアイテムなど、様々

    な情報が含まれています。

    - 17 -

  • コンテキストアイテムは、動的コンテキストの重要な構成要素です。コンテキストアイテムは、シーケンス内の各項目を処理するときに随

    時更新されます。コンテキストアイテムについての説明を以下に示します。

    ・ コンテキストアイテムは、式の評価時において、現在処理しているシーケンスの項目を表します。

    ・ コンテキストアイテムの表す値は原子値またはノードです。

    ・ コンテキストアイテムの初期値は、XMLQUERY関数またはXMLEXISTS述語のPASSING句で設定できます。PASSING句に指定した列に格納されているXMLデータのルートノードがコンテキストアイテムの初期値になります。ただし、PASSING句が省略された場合、またはPASSING句に指定した列の値がNULLの場合、コンテキストアイテムの初期値は設定されません。

    参照

    PASSING句の詳細については、“SQLリファレンス”の“XMLQUERY関数”、または“XMLEXISTS述語”を参照してください。

    ・ コンテキストアイテムは、1つのドット記号で表されるコンテキストアイテム式によって参照されます。

    2.3.5 式の優先順位XQueryの文法では、式および演算子の間に優先順位が規定されています。より低い優先順位を持つ式は、より高い優先順位を持つ式のオペランドにはなりません。ただし、より低い優先順位を持つ式を括弧で囲むことで、より高い優先順位を持つ式のオペランドに使

    用することが可能です。

    XQueryの演算子および式の優先順位を、優先度の高いものから順に以下の表に示します。結合性の欄は、式中で同じ優先度を持つ演算子が適用される順番を表しています。

    式および演算子 結合性

    [ ] 、( ) 左から右

    / 、// 左から右

    - (単項演算子)、+ (単項演算子) 右から左

    eq、ne、lt、le、gt、ge、=、!=、= 左から右

    and 左から右

    or 左から右

    for、some、every、if 左から右

    , (コンマ演算子) 左から右

    2.3.6 直列化直列化とは、XQueryの式の結果であるシーケンスをシリアルなデータに変換する処理のことです。

    ノードおよび原子値を含むシーケンスは、直列化されるとXML表記のデータに変換されます。しかし、変換されたデータが整形式のXML文書表記になっている必要はありません。例えば、XQueryの式の結果が原子値の単一値シーケンス(7など)の場合や、共通の親を持たないエレメントノードのシーケンスである場合、これらを直列化したデータは整形式のXML文書表記にはなりません。

    - 18 -

  • 第3章 プロローグプロローグは、XQueryの問合せの処理環境を定義します。処理環境をデフォルトの定義から変更しない場合、プロローグはXQueryの問合せから省略することができます。

    Symfowareでは、プロローグとしてバージョン宣言をサポートします。

    3.1 バージョン宣言

    機能

    XQueryの問合せに対して、適用可能なXQueryのバージョンと文字列のエンコード方式を識別します。

    記述形式

    構文の構成

    参照項番

    ・ 文字列リテラル → 4.2.1 リテラル

    一般規則

    ・ バージョン番号にはXQueryのバージョンを指定します。

    ・ Symfowareでバージョン番号に指定できる文字列リテラルは“1.0”のみです。これはXQueryバージョン1.0の規則に従って、問合せが処理されることを保障します。バージョン番号に“1.0”以外の文字列リテラルが指定された場合、その問合せはエラーを返します。

    ・ XQueryの問合せにバージョン宣言がない場合、その問合せはXQueryバージョン1.0の規則に従って処理されます。

    ・ Symfowareでエンコード名に指定できる文字列リテラルは“UTF-8”のみです。これはXQueryの問合せがUTF-8でエンコードされることを保障します。エンコード名に“UTF-8”以外の文字列リテラルが指定された場合、その問合せはエラーを返します。

    ・ XQueryの問合せにバージョン宣言のエンコード名が指定されていない場合、その問合せはUTF-8でエンコードされます。

    使用例

    xquery version "1.0" encoding "UTF-8" ;

    このバージョン宣言は、XQueryの問合せがUTF-8でエンコードされ、XQueryバージョン1.0の規則に従って処理されることを保障します。

    - 19 -

  • 第4章 式問合せ本体を表すXQueryの式の文法について説明します。

    4.1 式の概要

    機能

    XQueryの問合せ本体である式を指定します。

    記述形式

    構文の構成

    参照項番

    ・ 基本式 → 4.2 基本式

    ・ パス式 → 4.3 パス式

    - 20 -

  • ・ 算術式 → 4.4 算術式

    ・ 比較式 → 4.5 比較式

    ・ 論理式 → 4.6 論理式

    ・ FLWOR式 → 4.7 FLWOR式

    ・ 条件式 → 4.8 条件式

    ・ 量化式 → 4.9 量化式

    一般規則

    ・ 式は、複数の単式から構成されます。各単式は、コンマ演算子“,”によって区切られます。

    ・ コンマ演算子は、2つのオペランドをつないで1つのシーケンスを作るのに用いられます。

    ・ コンマ演算子は、XQueryにおいて最も優先度の低い演算子です。

    使用例

    この式は、3つの単式がコンマ演算子でつながれて、1つのシーケンスを構成しています。

    "ABCD", -230, /employees//son

    4.2 基本式

    機能

    XQuery言語の基本プリミティブとなる式を指定します。

    記述形式

    - 21 -

  • 構文の構成

    参照項番

    ・ リテラル → 4.2.1 リテラル

    ・ QName → 2.1.5 名前(QName)

    ・ 式 →4.1 式の概要

    ・ 単式 → 4.1 式の概要

    一般規則

    変数参照

    - 変数参照は“$”記号の後に、変数名を表すQNameを続けたものです。

    - 変数はFLWOR式のfor節、または量化式のin節でバインドされます。

    - すべての変数参照は、有効範囲内にある変数に照合されなければなりません。有効範囲内にない変数を参照するとエラーになります。

    - バインド可能な変数の数は最大100個です。

    参考

    変数の有効範囲の詳細については、“4.7 FLWOR式”の一般規則、または“4.9 量化式”の一般規則を参照してください。

    関数呼び出し

    - 関数呼び出しは、関数名を表すQNameの後ろに0個以上の式の括弧付きリストが続くような構成をしています。この括弧付きリストを引数といいます。

    - 関数名を表すQNameのネームスペース接頭辞が省略されている場合、その関数名のネームスペースはデフォルト関数ネームスペースに対応します。デフォルト関数ネームスペースは、ネームスペース接頭辞“fn”で表されるネームスペースに一致します。

    - 関数呼び出しの関数名と引数の数が、定義された関数の名前と引数の数に一致しなければ、エラーが発生します。

    - 関数の呼び出しは次のように評価されます。

    1. 引数の式が評価され、引数値を生成します。

    2. 各引数値に原子化を適用し、原子値のシーケンスを得ます。

    - 22 -

  • 3. 原子値のシーケンスの項目のうち、xs:untypedAtomic型の項目はそれぞれ、期待される原子型へキャストされます。

    上記の処理において、引数値が期待されるデータ型に変換できなかった場合、関数呼び出しは型エラーを返します。

    括弧式

    - 括弧は、複数の演算子を含む式の評価順序を、任意の順序に強制するために使用します。例えば、式(fn:true() or fn:false())and fn:false()を評価するとfalseになります。これは、括弧式(fn:true() or fn:false())が最初に評価され、その結果とfn:false()の論理和が評価されるためです。括弧がなければ、式fn:true() or fn:false() and fn:false()の評価結果はtrueになります。これは、or演算子がand演算子よりも優先度が低いためです。

    - 空の括弧式は、空シーケンスを表します。

    コンテキストアイテム式

    - コンテキストアイテム式は、動的コンテキストの一構成要素であるコンテキストアイテムの値を参照します。

    - コンテキストアイテムは現在処理しているシーケンスの項目を表します。詳細は、“2.3.4 動的コンテキスト”を参照してください。

    - コンテキストアイテムが未定義の場合、コンテキストアイテム式は空シーケンスを返します。

    使用例

    例1

    この式は、for節で変数iに値5をバインドし、return節で変数iを参照しています。

    for $i in 5 return $i

    例2

    この式は、xs:string関数を呼び出して、引数に指定されたxs:double型の値12345をxs:string型の値“12345”にキャストします。

    xs:string(12345)

    例3

    この式は、最初に括弧式(1=3)が評価され、次に括弧式("ai"!="ue")が評価されて、最後に括弧式(1=3)の評価結果と("ai"!="ue")の評価結果の論理和が評価されます。

    (1=3) or ("ai" != "ue")

    例4

    この式は、空シーケンスを返します。

    ( )

    例5

    この式では、述語[. > 3]がシーケンス(1,2,3,4,5)の各項目に対して繰り返し評価されます。このとき、述語内のコンテキストアイテム式は、述語が対象とするシーケンス(1,2,3,4,5)の各項目を表しています。この式の評価結果はシーケンス(4,5)です。

    (1, 2, 3, 4, 5)[. > 3]

    4.2.1 リテラル

    機能

    原子値の直接的な構文表現を指定します。

    記述形式

    - 23 -

  • 文字列リテラル

    数値リテラル

    参照項番

    ・ 文字 → 2.1.1 文字

    ・ 数字 → 2.1.1 文字

    一般規則

    文字列リテラル

    - “&”と“'”を除いた文字文字のうち、特殊記号の“&”と“'”を除いた文字を表現しています。

    - “&”と“"”を除いた文字文字のうち、特殊記号の“&”と“"”を除いた文字を表現しています。

    - 既定義エンティティー参照XQueryの構文上、重要な意味を持ついくつかの文字を、別の文字列で表現しています。文字列リテラルが生成される時、既定義エンティティー参照はそれぞれが表現する文字に置き換えられます。XQueryの既定義エンティティーとそれが表現する文字を以下に示します。

    エンティティー参照 表現される文字

    < <

    > >

    & &

    " "

    ' '

    - 24 -

  • - 引用符(シングルコーテーション、ダブルコーテーション)について

    - 文字列リテラルの両端に指定した文字が“"”のとき、その間の文字として“"”を指定することはできませんが、“'”を指定することはできます。

    - 文字列リテラルの両端に指定した文字が“"”のとき、その間の文字として“"”を利用するために、“"”のエスケープ文字が用意されています。“"”のエスケープ文字は“""”で表されます。

    - 文字列リテラルの両端に指定した文字が“'”のとき、その間の文字として“'”を指定することはできませんが、“"”を指定することはできます。

    - 文字列リテラルの両端に指定した文字が“'”のとき、その間の文字として“'”を利用するために、“'”のエスケープ文字が用意されています。“'”のエスケープ文字は“''”で表されます。

    - 文字列リテラルのデータ型はxs:string型です。

    - 文字列リテラルの長さは最大30,000バイトまで指定できます。ただし、文字列リテラルの長さは文字コード系をUNICODEで表現した時の長さで計算されます。

    - 既定義エンティティー参照および引用符の長さは、文字列リテラルに指定した文字の長さで計算されます。例えば、“<”の長さは4であり、“""”の長さは2になります。

    数値リテラル

    - 数値リテラルは数字、文字e、E、特殊記号“.”、“+”、“-”で構成されます。

    - 数値リテラルは正の数値を表現します。

    - 負の数値は、算術式の単項演算“-”を利用することで表現されます。

    - 数値リテラルのデータ型はxs:double型です。

    - 数値リテラルの長さは最大255バイトまで指定できます。ただし、数値リテラルの長さは文字コード系をUNICODEで表現したときの長さで計算されます。

    - 数値リテラルの構成要素(数字、文字、特殊記号)はすべて、数値リテラルの長さに加算されます。例えば、“12.3E+45”の長さは8になります。

    - 数値リテラルに指定可能な数値範囲は、指数部11ビット、仮数部52ビットの浮動小数点数で表現可能な範囲(約-1.7E+308~+1.7E+308)です。

    使用例

    例1

    この式の評価結果は、xs:string型の値JAPANです。

    "JAPAN"

    例2

    この式の評価結果は、xs:string型の値FIREです。

    'FIRE'

    例3

    この式の評価結果は、xs:string型の値"です。

    """

    例4

    この式の評価結果は、xs:string型の値"です。

    """"

    例5

    この式の評価結果は、xs:string型の値'です。

    - 25 -

  • "'"

    例6

    この式の評価結果は、xs:double型の値100です。

    100

    例7

    この式の評価結果は、xs:double型の値3.14です。

    3.14

    例8

    この式の評価結果は、xs:double型の値0.999です。

    .999

    例9

    この式の評価結果は、xs:double型の値670です。

    6.7e+2

    4.3 パス式

    機能

    ノードの位置を指定し、ノードあるいは原子値のシーケンスを返します。

    記述形式

    - 26 -

  • 構文の構成

    参照項番

    ・ 基本式 → 4.2 基本式

    ・ 軸ステップ → 4.3.1 軸ステップ

    ・ 述語 → 4.3.2 述語

    一般規則

    ステップおよびステップ区切り記号

    - パス式は1つ以上のステップの並びから成り、各ステップは“/”または“//”で区切られます。

    パス式: /employees/employee[@id>030000][@sex="male"]/name

    (1) (2) (3)

    (1)~(3) ステップ

    - パス式は、ステップ、または“/”、または“//”のいずれかで開始されます。

    - パス式がステップで開始される場合、先頭にあるステップは、そのパスの開始点を指定します。

    - パス式の全体が“/”である場合、このパス式は“/.”と同じ結果を返します。

    - パス式が“/”から開始される場合、先頭にある“/”は、そのパスがコンテキストアイテムの値を含むXML木のルートノードから開始されることを意味します。

    - パス式の途中に存在する“/”は、ステップとステップを分離します。

    - パス式が“//”から開始される場合、先頭にある“//”は、そのパスがコンテキストアイテムの値を含むXML木のルートノードと、そのすべての子孫で構成されるノードのシーケンスから開始されることを意味します。

    - パス式の途中に存在する“//”は、そのパスが“//”の左側のステップで表されるノードの子孫と、“//”の右側のステップで表されるノードが一致するようなパスをすべて含んでいることを意味します。

    - コンテキストアイテムの値がノードでない場合、パス式の先頭が“/”または“//”であれば、型エラーが発生します。

    - パス式が“/”または“//”から開始される場合、その評価時にコンテキストアイテムの値を含むXML木のルートノードがドキュメントノードでなければ、エラーが発生します。

    - 27 -

  • - パス式の評価規則を以下に示します。

    - パス式の評価は、各ステップを左から順に評価して行います。

    - パス式がステップで開始されているとき、先頭にあるステップは1度だけ評価されます。

    - パス式の各ステップ(先頭にあるステップは除く)は、前のステップにより生成されたシーケンスの項目をコンテキストアイテムの値とし、各項目に対して1回ずつ繰り返し評価されます。これらの反復評価結果が結合されて、後続のステップのためのシーケンスを形成します。このとき、シーケンス内のノードの重複は除去されます。

    - パス式の途中のステップ(最終ステップ以外のステップ)の結果が原子値を含んでいる場合、型エラーが発生します。

    - パス式の評価結果は、パス式の最終ステップの結果です。

    - パス式の評価結果は原子値のシーケンス、あるいはノードのシーケンスのどちらかです。パス式の評価結果が原子値とノードを少なくとも1つずつ含むようなシーケンスになる場合、型エラーが発生します。

    - パス式に指定可能なステップ数は最大100個です。

    使用例

    例1

    全従業員の名前を検索します。

    /employees/employee/name

    ↓出力結果

    Tanaka Tarou

    Kondou Yusuke

    Shinada Megumi

    Kawada Hiroko

    例2

    全従業員の年齢を検索します。

    /employees//age

    ↓出力結果

    42

    20

    34

    51

    4.3.1 軸ステップ

    機能

    コンテキストアイテムが表すノードから到達可能なノードのシーケンスを返します。

    記述形式

    - 28 -

  • 構文の構成

    参照項番

    ・ QName → 2.1.5 名前(QName)

    一般規則

    ・ コンテキストアイテムの値がノードの場合、軸ステップは0個以上のノードからなるシーケンスを返します。

    ・ コンテキストアイテムの値がノード以外の場合、型エラーが発生します。

    名前テスト

    名前テストは、コンテキストアイテムが表すノードの子ノードの中から名前が一致するノードを検索し、そのシーケンスを文書順で返

    します。ただし名前テストの直前に“@”がある場合、検索するノードは属性ノードのみです。

    名前テストの種類

    - QName

    コンテキストアイテムが表すノードの子ノードの中から名前がQNameに一致するノードを検索する。

    - *

    コンテキストアイテムが表すノードの子ノードの中から任意の名前のノードを検索する。

    種類テスト

    種類テストは、コンテキストアイテムが表すノードの子ノードの中からノードの種類が一致するノードを検索し、そのシーケンスを文

    書順で返します。ただし種類テストの直前に“@”がある場合、検索するノードは属性ノードのみです。

    種類テストの種類

    - text()

    コンテキストアイテムが表すノードの子ノードの中から任意のテキストノードを検索する。

    - attribute()

    コンテキストアイテムが表すノードの子ノードの中から任意の属性ノードを検索する。

    ..

    コンテキストアイテムが表すノードの親ノードを返します。

    使用例

    例1

    この式は、ルートノードの子エレメントノードの名前がemployeesであり、そのノードemployeesの子エレメントノードの名前がemployeeであるような、エレメントノードemployeeのシーケンスを返します。

    /employees/employee

    - 29 -

  • 例2

    この式は、ルートノードの子エレメントノードの名前がemployeesであるとき、そのノードemployeesの子エレメントノードのシーケンスを返します。

    /employees/*

    例3

    この式は、ルートノードの子エレメントノードの名前がemployeesであり、その子エレメントノードの名前がemployeeであり、その子属性ノードの名前がidであるとき、属性ノードidの値が048599に等しいようなエレメントノードemployeeのシーケンスを返します。

    /employees/employee[@id = 048599]

    例4

    この式は、ルートノードの子エレメントノードの名前がemployeesであり、その子エレメントノードの名前がemployeeであり、その任意の子属性ノードの値が“male”に等しいようなエレメントノードemployeeのシーケンスを返します。

    /employees/employee [@attribute() = "male"]

    例5

    この式は、ルートノードの子孫エレメントノードの名前がnameであるとき、そのノードnameの子テキストノードのシーケンスを返します。

    //name/text()

    4.3.2 述語

    機能

    述語の直前に書かれた式を修飾し、修飾された式の評価結果であるシーケンスに対して、その項目の選別を行います。述語の評価

    結果は、選別した結果のシーケンスです。

    記述形式

    構文の構成

    参照項番

    ・ 式 → 4.1 式の概要

    一般規則

    ・ 述語式には、シーケンスの項目を選別するための条件となる式を指定します。

    ・ 述語式は、選別対象のシーケンス内の項目をコンテキストアイテムの値とし、各項目に対して1回ずつ評価されます。

    ・ 複数の述語が隣接している場合、述語は左から右に適用され、それぞれの述語で選別した結果が、次に続く述語の対象シーケンスになります。

    ・ 述語式の評価結果が数値型(double型)の原子値の場合、その原子値が現在処理している項目のシーケンス内での位置と等しければ、その項目は保持されます。等しくなければ、その項目は除外されます。ただし、シーケンスの先頭項目の位置を表す数値は

    1です。

    - 30 -

  • ・ 述語式の評価結果が数値型でない場合、シーケンスの項目は以下のようして選別されます。

    - 述語式の評価結果の有効ブール値が真になるとき、その項目は選別結果のシーケンスに保持されます。

    - 述語式の評価結果の有効ブール値が偽になるとき、その項目は選別結果のシーケンスから除外されます。

    使用例

    例1

    この式は、ルートノードの子エレメントノードemployeesの子である2番目のエレメントノードemployeeのシーケンスを返します。

    /employees/employee[2]

    例2

    この式は、ルートノードの子孫の中から、エレメントノードsonとエレメントノードdaughterを子にもつエレメントノードfamilyのシーケンスを返します。

    //family[son][daughter]

    4.4 算術式

    機能

    算術演算(単項演算)を適用します。

    記述形式

    構文の構成

    参照項番

    ・ 基本式 → 4.2 基本式

    ・ パス式 → 4.3 パス式

    一般規則

    算術演算子の種類とその機能を以下に示します。

    算術演算子 機能

    + オペランドの値を維持する。

    - オペランドの値を反対の符号の値にする。

    - 31 -

  • ・ 算術式の評価は、まずオペランドを評価することから始まります。オペランドの評価手順を以下に示します。

    1. オペランドに原子化が適用されます。

    2. 原子化されたオペランドが空シーケンスであれば、算術式の評価結果は空シーケンスになります。

    3. 原子化されたオペランドが、2個以上の項目を含むシーケンスであれば、型エラーが発生します。

    4. 原子化されたオペランドがxs:untypedAtomic型であれば、xs:double型にキャストされます。キャストに失敗すればエラーが発生します。

    ・ 算術式は、オペランドの評価が終わった後、オペランドの型がxs:double型であれば、指定された算術演算子を各オペランドの評価結果に適用します。このとき、算術式の評価結果は原子値、またはエラーです。

    使用例

    例1

    この式の評価結果は、数値23です。

    +23

    例2

    この式の評価結果は、数値-18です。

    -18

    例3

    この式の評価結果は、数値97です。

    +--97

    4.5 比較式

    機能

    2つの値を比較します。比較には、値比較と汎用比較の2種類があります。

    記述形式

    構文の構成

    参照項番

    ・ 基本式 → 4.2 基本式

    - 32 -

  • ・ パス式 → 4.3 パス式

    ・ 算術式 → 4.4 算術式

    一般規則

    値比較

    - 2つの原子値を比較します。

    - 値比較演算子の種類とその機能を以下に示します。

    値比較演算子 機能

    eq 第1オペランドの値が第2オペランドの値と等しい場合、trueを返します。

    ne 第1オペランドの値が第2オペランドの値と等しくない場合、trueを返します。

    lt 第1オペランドの値が第2オペランドの値より小さい場合、trueを返します。

    le 第1オペランドの値が第2オペランドの値より小さいか等しい場合、trueを返します。

    gt 第1オペランドの値が第2オペランドの値より大きい場合、trueを返します。

    ge 第1オペランドの値が第2オペランドの値より大きいか等しい場合、trueを返します。

    - 値比較の評価は、まずオペランドを評価することから始まります。オペランドの評価手順を以下に示します。

    1. オペランドに原子化が適用されます。

    2. 原子化されたオペランドが空シーケンスであれば、値比較の評価結果は空シーケンスになります。

    3. 原子化されたオペランドが、2個以上の項目を含むシーケンスであれば、型エラーが発生します。

    4. 原子化されたオペランドがxs:untypedAtomic型であれば、xs:string型にキャストされます。

    - オペランドの評価が終わった後、オペランドの評価結果のデータ型が、指定された値比較演算子について正しい組み合わせであれば、その値比較演算子をオペランドの評価結果に適用します。このとき、値比較の評価結果はtrue、またはfalseです。データ型が正しい組み合わせでなければ、値比較はエラーを返します。

    - さまざまな値比較演算子について、正しいオペランドのデータ型の組み合わせを以下の表に示します。

    第1オペランドの型 第2オペランドの型

    数値(xs:double) 数値(xs:double)

    xs:boolean xs:boolean

    xs:string xs:string

    xs:date xs:date

    xs:time xs:time

    xs:dateTime xs:dateTime

    汎用比較

    - 任意の長さの2つのシーケンスを比較します。第1オペランドのシーケンスの少なくとも1つの項目と、第2オペランドのシーケンスの少なくとも1つの項目が、指定された比較条件を満たしているかどうかを判別します。

    - 汎用比較演算子の種類とその機能を以下に示します。

    汎用比較演算子 機能

    =第1オペランドの少なくとも1つの項目の値が、第2オペランドの少なくとも1つの項目の値と等しい場合、trueを返します。

    !=第1オペランドの少なくとも1つの項目の値が、第2オペランドの少なくとも1つの項目の値と等しくない場合、trueを返します。

    - 33 -

  • 汎用比較演算子 機能

    <第1オペランドの少なくとも1つの項目の値が、第2オペランドの少なくとも1つの項目の値より小さい場合、trueを返します。

    第1オペランドの少なくとも1つの項目の値が、第2オペランドの少なくとも1つの項目の値より大きい場合、trueを返します。

    >=第1オペランドの少なくとも1つの項目の値が、第2オペランドの少なくとも1つの項目の値より大きいか等しい場合、trueを返します。

    - 汎用比較の評価手順は以下の通りです。

    1. オペランドに原子化が適用されます。

    2. 原子化されたオペランドが空シーケンスであれば、汎用比較の評価結果はfalseになります。

    3. 原子化された第1オペランドのシーケンスの項目と、第2オペランドのシーケンスの項目をそれぞれ1個ずつ選択します。

    4. 選択した2つの項目に対して、汎用比較演算子を適用します。汎用比較演算子の適用規則は、以下の通りです。

    - 項目の一方のデータ型がxs:untypedAtomic型であり、もう一方のデータ型が数値型(xs:double型)であれば、xs:untypedAtomic型の項目が以下の規則で変換されます。 1. 項目がxs:double型にキャスト可能であれば、xs:double型にキャストされます。 2. 項目がxs:double型にキャストできない場合、項目が表す文字列の中から数値型の書式に一致する文字列が含まれているかを調べます。

    2-1. 数値型の書式に一致する文字列が含まれている場合、最初に一致した部分を抜き出します。抜き出した文字列がxs:double型にキャスト可能であれば、項目がキャストした値に置き換えられます。キャストできない場合、項目は空シーケンスに変換されます。

    2-2. 数値型の書式に一致する文字列が含まれていない場合、項目は空シーケンスに変換されます。

    注意

    ここで述べた数値型の書式とは、数値リテラルの記述形式に負符号をゆるし、整数部にあらわれる“,”(カンマ記号)と指数部表現(E+2など)を無視した形式です。

    項目が表す文字列と、その項目の変換結果の組合せの例を以下の表に示します。

    項目が表す文字列 項目の変換結果

    "-10.23" -10.23

    "INF" INF

    "5.6E+3" 5600

    "\2,980" 2980

    "約2.1E+3" 2.1

    "+30.5-1.3" 30.5

    "合計20万円" 20

    - 項目の一方のデータ型がxs:untypedAtomic型であり、もう一方のデータ型がxs:untypedAtomic型またはxs:string型であれば、xs:untypedAtomic型の項目(あるいは両方の項目)がxs:string型にキャストされます。- 項目の一方のデータ型がxs:untypedAtomic型であり、もう一方のデータ型がxs:string型、xs:untypedAtomic型、数値型(xs:double型)のどの型でもなければ、xs:untypedAtomice型の項目はもう一方の項目の型にキャストされます。- 上記で述べたキャスト処理の後、2つの項目の大小関係を値比較演算子(eq、ne、lt、le、gt、ge)を用いて比較します。使用する値比較演算子は、指定した汎用比較演算子に依存します。この値比較演算子と汎用比較演算子の対応関係を

    以下に示します。

    - 34 -

  • 汎用比較演算子 使用する値比較演算子

    = eq

    != ne

    < lt

    gt

    >= ge

    5. 4の値比較の結果がtrueであれば、汎用比較の評価結果はtrueです。値比較の結果がエラーを返すならば、汎用比較もエラーを返します。値比較の結果がtrueでもエラーでもなければ、2の処理に戻って、第1オペランドのシーケンスと第2オペランドのシーケンスの中から、これまでに試していない項目の組み合わせを選択します。全ての項目の組み合わせで、

    値比較の結果がtrueでもエラーでもなければ、汎用比較の評価結果はfalseです。

    使用例

    例1

    この式は、数値20が数値5よりも大きい値であるため、trueを返します。

    20 gt 5

    例2

    この式は、例1と同じ結果を返します。

    20 > 5

    例3

    この式は、第1オペランドの型がxs:string型であり、第2オペランドの型が数字型(xs:double型)であるため、エラーを返します。

    "23" ge 5

    例4

    この式は、例3と同じ結果を返します。

    "23" >= 5

    例5

    この式は、xs:date型の値1567-05-17がxs:date型の値1192-08-13よりも大きいため、falseを返します。

    xs:date("1567-05-17") lt xs:date("1192-08-13")

    例6

    この式は、例5と同じ結果を返します。

    xs:date("1567-05-17") < xs:date("1192-08-13")

    例7

    この式は、まずパス式/employees/employee[1]/nameによって返されるノードのシーケンスを原子化します。原子化の結果はxs:untypedAtomic型の原子値であるため、xs:string型にキャストされます。キャストされたxs:string方の原子値は、値“Tanaka Tarou”と一致するため、この比較式はtrueを返します。

    /employees/employee[1]/name eq "Tanaka Tarou"

    例8

    この式は、例7と同じ結果を返します。

    /employees/employee[1]/name = "Tanaka Tarou"

    - 35 -

  • 例9

    この式は、第1オペランドの値が空シーケンスであるため、空シーケンスを返します。

    () le 10

    例10

    この式は、第1オペランドの値が空シーケンスであるため、falseを返します。

    ()

  • 記述形式

    構文の構成

    参照項番

    ・ 基本式 → 4.2 基本式

    ・ パス式 → 4.3 パス式

    ・ 算術式 → 4.4 算術式

    ・ 比較式 → 4.5 比較式

    一般規則

    ・ 論理演算子の種類とその機能を以下に示します。

    論理演算子 機能

    and 第1オペランドと第2オペランドがtrueの場合、trueを返します。

    or 第1オペランドと第2オペランドのどちらか一方、または両方がtrueの場合、trueを返します。

    ・ 論理式の評価は、まずオペランドの有効ブール値を決定することから始まります。オペランドの有効ブール値が決まれば、論理式の結果は以下の表に従い、ブール値かエラーを返します。

    表4.1 and演算子の結果 第2オペランドの有効ブール値

    true false エラー

    第1オペランドの有効ブール値

    true true false エラー

    false false false falseまたはエラー(注)

    エラー エラー falseまたはエラー(注)

    エラー

    - 37 -

  • 注) どちらか一方のオペランドがエラーを返すような式であっても、論理式の結果は、エラーを返さずに、ブール値を返す場合があります。これは、オペランドの評価順序が変化する可能性があるためです。

    表4.2 or演算子の結果 第2オペランドの有効ブール値

    true false エラー

    第1オペランドの有効ブール値

    true true true trueまたはエラー(注)

    false true false エラー

    エラー trueまたはエラー(注)

    エラー エラー

    注) どちらか一方のオペランドがエラーを返すような式であっても、論理式の結果は、エラーを返さずに、ブール値を返す場合があります。これは、オペランドの評価順序が変化する可能性があるためです。

    使用例

    例1

    この式は、and演算子の第1オペランド1=1 と、第2オペランド"one" eq "one" の有効ブール値が共にtrueであるため、tureを返します。

    1 = 1 and "one" eq "one"

    例2

    この式は、and演算子の第1オペランド""の有効ブール値がfalseであり、第2オペランド"A"の有効ブール値がtrueであるため、falseを返します。

    "" and "A"

    例3

    この式は、and演算子の第1オペランド(/employees/employee[1]/@id , 5)の有効ブール値がtrueであり、第2オペランド(5 , /employees/employee[2]/@id)の有効ブール値がエラーであるため、エラーを返します。

    (/employees/employee[1]/@id , 5) and (5 , /employees/employee[2]/@id)

    例4

    この式は、or演算子の第1オペランド100の有効ブール値がtrueであり、第2オペランド0の有効ブール値がfalseであるため、tureを返します。

    100 or 0

    例5

    この式は、or演算子の第1オペランド3 > 5と、第2オペランド"two" ne "two"の有効ブール値が共にfalseであるため、falseを返します。

    3 > 5 or "two" ne "two"

    例6

    この式は、or演算子の第1オペランド () の有効ブール値がfalseであり、第2オペランドの有効ブール値がエラーであるため、エラーを返します。

    () or ("A", "B", "C")

    4.7 FLWOR式

    - 38 -

  • 機能

    シーケンスの繰返しや、中間結果を変数にバインドする機能を提供します。また、2つ以上のXML文書を結合して計算し、データを再構成します。

    記述形式

    for節

    構文の構成

    [for節]

    参照項番

    ・ 単式 → 4.1 式の概要

    ・ QName → 2.1.5 名前(QName)

    一般規則

    ・ for節は、指定された式を変数にバインドします。

    ・ return節はFLWOR式の結果を構成します。

    for節

    - for節には1つ以上の変数が含まれます。各変数には式が1つ対応します。変数は、対応する式の値(シーケンス)の各項目を繰返しバインドします。

    - for節の単式にFLWOR式を指定することはできません。

    - for節の目的は、タプルストリームを生成することです。タプルストリームとは、各変数がバインドする値の組合せ(タプル)を、順序付けして集めたコレクションです。

    - 39 -

  • - for節で生成するタプルストリームのイメージをそれぞれ以下に示します。

    このfor節では、$xと$yがそれぞれ3個の項目を繰返しバインドするため、生成されるタプルストリームには9個のタプルが含まれます。

    for $x in (1, 2, 3), $y in (4, 5, 6)

    - for節でバインドされる変数は、変数がバインドされた後に指定されるFLWOR式の部分式中においてのみ有効です。変数がバインドする式の中で、その変数を使用することはできません。

    - for節は、有効範囲内にある変数と同じ名前の変数で異なる式を複数回バインドすることができます。このとき変数参照で参照可能な変数の値は、有効範囲内で最後にバインドした変数の値になります。

    return節

    - for節で生成されたタプルストリームの各タプルに対して、1回ずつreturn節の単式を評価します。

    - return節の単式にFLWOR式を指定することはできません。

    - return節の単式の評価順序は、タプルストリーム中のタプルの順序です。

    - return節の評価結果は、return節の式の評価結果をそれぞれコンマ演算子で連接したシーケンスです。

    使用例

    例1

    この式は、シーケンス(3,6,9)と(2,4)の各項目の組み合わせを返します。この式の評価結果は、シーケンス (3,2,3,4,6,2,6,4,9,2,9,4)です。

    for $x in (3, 6, 9) , $y in (2, 4)

    return ( $x, $y )

    例2

    この式は、全従業員の中から息子がいる従業員を検索し、その従業員と息子の名前を返します。この式の評価結果を以下に示し

    ます。

    for $emp in /employees/employee[family/son]

    return ( $emp/name, $emp/family/son )

    この式の評価結果を以下に示します。

    Tanaka Tarou

    Tanaka Ken

    Shinada Megumi

    - 40 -

  • Shinada Kaoru

    Shinada Teppei

    4.8 条件式

    機能

    テスト式(ifに続く式)の評価結果に応じてthen式(thenに続く式)とelse式(elseに続く式)のどちらか一方を評価します。

    記述形式

    構文の構成

    参照項番

    ・ 式 → 4.1 式の概要

    ・ 単式 → 4.1 式の概要

    一般規則

    ・ 条件式はテスト式の有効ブール値を評価して、その結果がtrueであれば、then式の評価結果を返します。テスト式の有効ブール値がfalseであれば、else式の評価結果を返します。

    ・ 条件式はテスト式の有効ブール値がtrueである場合、else式を評価しません。そのため、else式に動的エラーが発生する式が含まれていても、エラーを起こしません。同様に、テスト式の有効ブール値がfalseである場合、条件式はthen式に動的エラーが発生する式が含まれていても、エラーを起こしません。

    使用例

    例1

    この例は、テスト式 3 < 1 の有効ブール値が false であるため、else式の評価結果である"one"を返します。

    if ( 3 < 1 ) then "three" else "one"

    例2

    この例は、テスト式/employees/employee/familyの有効ブール値がtrueであるため、then式の評価結果であるエレメントノードfamilyのシーケンスを返します。

    if ( /employees/employee/family ) then /employees/employee/family

    else /employees/employee

    4.9 量化式

    機能

    あるシーケンスの一部(some)、またはすべて(every)の項目が、特定の条件を満たす場合、trueを返します。それ以外の場合、falseを返します。

    - 41 -

  • 記述形式

    構文の構成

    参照項番

    ・ QName → 2.1.5 名前(QName)

    ・ 単式 → 4.1 式の概要

    一般規則

    ・ 各in節では、変数に1つの式を対応させます。変数は、対応する式の値(シー�