rdbunlxコマンドでは、XQueryリファレンスで述べている式の一部をサポートしています。rdbunlxコマンドがサポートしている式の範囲を、以下に説明します。
rdbunlxコマンドでは、検索条件をXQuery式で指定します。プロローグの指定はできません。XQuery式の最上位にはパス式を指定します。ただし、最上位に指定するパス式には、以下の条件があります。
先頭の区切り記号は“/”である
“/”の後は“*”またはQNameである
指定できるステップの数は1つである
ステップの後には述語の指定がある
rdbunlxコマンドの検索では、XMLデータ全体を取り出します。
パス式に記述できる形式について以下に示します。
式 | 分類 | 大項目 | 中項目 | 小項目 | rdbunlxのサポート |
---|---|---|---|---|---|
パス式 | “/” | - | - | ○ | |
“//” | - | - | ○(注4) | ||
基本式 | - | コンテキストアイテム式 | ○ | ||
- | その他 | × | |||
軸ステップ | 軸 | @ | ○(注3) | ||
名前テスト | QName | ○ | |||
* | ○(注4) | ||||
種類テスト | text() | ○ | |||
attribute() | × | ||||
.. | - | × | |||
述語 | 基本式 | コンテキストアイテム式 | ○ | ||
括弧式 | ○ | ||||
その他 | × | ||||
パス式 | - | ○ (注5) | |||
比較式 | - | ○ | |||
算術式 | - | × | |||
論理式 | - | ○ |
パス式の述語内に記述できる形式について、以下に示します。
形式 | 大項目 | 中項目 | 小項目 | rdbunlxのサポート |
---|---|---|---|---|
述語 | 第一オペランド | 基本式(括弧式) | ○ | |
基本式(コンテキストアイテム式) | ○ | |||
基本式(その他) | × | |||
パス式 | ○ | |||
算術式 | × | |||
比較式 | ○ | |||
比較演算子 | and | ○ | ||
or | ○ | |||
第二オペランド | 基本式(括弧式) | ○ | ||
基本式(コンテキストアイテム式) | ○ | |||
基本式(その他) | × | |||
パス式 | ○ | |||
算術式 | × | |||
比較式 | ○ | |||
第一オペランド | 基本式(コンテキストアイテム式) | ○ | ||
基本式(その他) | × | |||
パス式 | ○ | |||
算術式 | × | |||
比較演算子 | 値比較演算子 | × | ||
汎用比較演算子 | ○ | |||
第二オペランド | 基本式(文字列リテラル) | ○ | ||
基本式(数値リテラル) | ○ | |||
基本式(その他) | × | |||
パス式 | × | |||
算術式 | ○ | |||
- | - | × | ||
- | - | ○ | ||
- | リテラル | ○ | ||
変数参照 | × | |||
関数呼び出し | × | |||
括弧式 | ○ | |||
コンテキストアイテム式 | ○ | |||
- | - | × | ||
- | - | × | ||
- | - | × |
○:サポートする
×:サポートしない
注1)パス式の初めには“//”は記述できません。
述語の前には、“/”から始めて、最上位のエレメントノードを指定してください。以下に例を示します。
エラーとなる例
//A[B/text()]
/A/B[C/text()]
エラーとならない例
/A[B/C/text()]
注2)最上位に指定するパス式のステップに“*”を指定した場合、その述語で指定するパス式には、要素ノードまたは属性ノードを表す“QName”を1度は指定してください。以下に例を示します。
エラーとなる例
/*[*/*/text()="ABC"]
/*[*/@*="abc"]
エラーとならない例
/*[*/C/text()="ABC"]
/*[*/C/@*="abc"]
注3)軸ステップの軸に“@”を指定する場合、その後には“QName”または“*”を指定してください。以下に例を示します。
/A[B/@id = 10]
/A[B/@* = "ABC"]
注4)軸ステップの名前テストの“*”はステップ区切り文字“//”と続けて指定することができません。
以下の例はエラーになります。
/A[B//*/text()]
注5)以下に示す検索式を指定すると、XQueryでは、ルートノードの子エレメントAの子である2番目のエレメントノードBを返します。しかし、rdbunlxコマンドでは、このような検索をすることができません。
/A[B[2]]
注6)述語は、“/”または“//”から始めることができません。
以下に例を示します。
エラーとなる例
/A[/B/text()]
/A[//B/text()]
エラーとならない例
/A[B/text()]
注7)述語の直後にステップを指定することはできませんが、以下のように2項論理演算子“and”を使用して記述することで、同じ意味を持つ表記方法となります。
/A[B[@id="B"]/C/text() > 100] ↓同じ意味 /A[B[@id="B" and C/text() > 100]]
注8)述語の直後に述語を続けて指定することはできませんが、以下のように2項演算子“and”を使用して記述することで、同じ意味を持つ表記方法となります。
/A[B/text="abc"][C/text()="def"] ↓同じ意味 /A[B/text="abc" and C/text()="def"]
/A[B/text="abc"][C/text()="def" or D/text()="ghi"] ↓同じ意味 /A[B/text="abc" and ( C/text()="def"or D/text()="ghi")]
注9)比較式の汎用比較演算子に、“<”、“<=”、“>”、“>=”を指定した場合、第一オペランドに指定するパス式の最終ステップには“//text()”、“*/text()”、“@*”は指定できません。以下の例はエラーとなります。
/A[B/*/text() > "2008年3月16日"]
/A[B//text() <= "2008年3月16日"]
/A[B/@* >= "2008年3月16日"]
注10)比較式の第二オペランドに数値リテラルを指定する場合、第一オペランドに指定するパス式の最終ステップに“//text()”、“*/text()”、“@*”は指定できません。以下の例はエラーとなります。
/A[B//text() = 10 ]
/A[B/*/text() = 10]
/A[B/@* = 10]
注11)比較式の第一オペランドに指定するパス式の最終ステップには、種類テストの“text()”または軸“@”と名前テスト“QName”か“*”を組み合わせて指定してください。
/A[B/text() = 10 ]
/A[B/@id = 10 ]
/A[B/@*="ABC"]
注12)第一オペランドに指定するパス式または、基本式が示すシーケンスの項目が複数存在し、比較演算子が“!=”でない場合、パス式または、基本式が示すシーケンスの項目のうち1つでも比較式の条件を満たす項目が存在すれば、比較式の結果は真となります。比較演算子が“!=”の場合は、シーケンスのすべての項目が比較式の条件を満たすと、結果が真となります。
注13) XMLデータ中に実体参照として記述された文字を検索するためには、文字列リテラルにおいてもその文字を実体参照として記述します。
注14)比較式の第二オペランドに指定する数値リテラルには指数部表現の指定はできません。以下の例はエラーとなります。
/A[B/text()=6.7e+2]
注15)算術式は、パス式の述語に比較式を指定した場合、比較式における第二オペランドに指定することができます。“-”の後に数値リテラルを指定することができます。
/A[B/text() = -10]