「DB2 XQuery」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「==DB2 XQuery== [XML][XQuery] *DB2 XML DB (pureXML) *[http://www-05.ibm.com/e-business/linkweb/puc/jsp/index.jsp?country=760&language=JPN IBM のマニュアル]…」) |
|||
(同じ利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
− | ==DB2 XQuery== | + | ==[[DB2 XQuery]]== |
− | [XML][XQuery] | + | [[XML]] | [[XQuery]] | |
*DB2 XML DB (pureXML) | *DB2 XML DB (pureXML) | ||
*[http://www-05.ibm.com/e-business/linkweb/puc/jsp/index.jsp?country=760&language=JPN IBM のマニュアル] からのメモ | *[http://www-05.ibm.com/e-business/linkweb/puc/jsp/index.jsp?country=760&language=JPN IBM のマニュアル] からのメモ | ||
− | *World Wide Web Consortium (W3C) | + | *World Wide Web Consortium (W3C) によって設計された機能プログラミング[[言語]] |
− | == | + | ==[[XML]]データ== |
=====柔軟===== | =====柔軟===== | ||
− | * | + | *[[XML]]データは柔軟で、予測不能で、散在しており、自己記述的 |
− | ===== | + | =====[[XQuery]]を使うしかない局面===== |
− | * | + | *階層のどのレベルにあるか不明なオブジェクトの[[XML]]を検索 |
*データにタイして構造変換を実行 | *データにタイして構造変換を実行 | ||
*タイプが混合した結果を戻す | *タイプが混合した結果を戻す | ||
− | * | + | *既存の[[XML]]を更新 |
==照会のコンポーネント== | ==照会のコンポーネント== | ||
===プロローグと照会本体からなる=== | ===プロローグと照会本体からなる=== | ||
*プロローグには、照会処理環境を定義する一連の宣言 | *プロローグには、照会処理環境を定義する一連の宣言 | ||
− | + | <!-- プロローグ --> | |
xquery version "1.0"; | xquery version "1.0"; | ||
declare default element namespace "http://posample.org"; | declare default element namespace "http://posample.org"; | ||
− | + | <!-- 照会本体 --> | |
− | + | <price_list>{for $prod in db2-fn:xmlcolumn("P[[R]]ODUCT.DESC[[R]]IPTION")/product/description | |
order by xs:decimal($prod/price) descending | order by xs:decimal($prod/price) descending | ||
− | return | + | return <product>{$prod/name, $prod/price}</product>} |
− | + | </price_list> | |
− | ==XQuery と SQL/XML== | + | ==[[XQuery]] と SQL/XML== |
− | *XQuery を直接呼び出す照会は、キーワード XQUERY で始まる。 | + | *[[XQuery]] を直接呼び出す照会は、キーワード XQUERY で始まる。 |
− | *SQL/ | + | *SQL/XMLでは、以下の関数と述部を指定してSQLから[[XQuery]]を呼び出す |
{|class="wikitable" | {|class="wikitable" | ||
!キーワード/関数/述部 | !キーワード/関数/述部 | ||
33行目: | 33行目: | ||
|- | |- | ||
|XQUERY | |XQUERY | ||
− | | | + | |[[XQuery]]が使用されることを示し、大/小文字を区別する規則をサーバーに指示 |
|- | |- | ||
|XMLQUERY | |XMLQUERY | ||
− | | | + | |引数として[[XQuery]]式を使用し、XMLシーケンスを戻す関数 |
|- | |- | ||
|XMLTABLE | |XMLTABLE | ||
− | | | + | |[[XQuery]]式を使用してXMLデータからSQLの表を生成関数 |
|- | |- | ||
|XMLEXISTS | |XMLEXISTS | ||
− | | | + | |[[XQuery]]式が1つ以上の項目のシーケンスを戻すか判別する述部 |
|- | |- | ||
|} | |} | ||
− | ==XQuery 関数を使用したDB2データの検索== | + | ==[[XQuery]] 関数を使用したDB2データの検索== |
− | *XQuery では以下のいずれかの関数でDB2からXMLデータを取得できる | + | *[[XQuery]] では以下のいずれかの関数でDB2からXMLデータを取得できる |
{|class="wikitable" | {|class="wikitable" | ||
55行目: | 55行目: | ||
|- | |- | ||
|db2-fn:xmlcolumn | |db2-fn:xmlcolumn | ||
− | | | + | |[[XML]]列を識別するリテラル引数を使用 |
|db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city | |db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city | ||
|- | |- | ||
|db2-fn:sqlquery | |db2-fn:sqlquery | ||
− | | | + | |fullselectを表す引数を使用。[[SQL]]の機能を使用できる |
|db2-fn:sqlquery("SELECT purchase_order FROM business.orders WHERE ship_date = '2005-06-15' ")/shipping_address/city | |db2-fn:sqlquery("SELECT purchase_order FROM business.orders WHERE ship_date = '2005-06-15' ")/shipping_address/city | ||
|- | |- | ||
|} | |} | ||
− | + | <blockquote>SQLは大文字、小文字を区別しないが、[[XML]]は区別する。SQLは通常、自動的に大文字に変換されるが、[[XML]]と混在する場合は明示的に大文字として記述する必要がある。ただし、二重引用符で囲むことで、SQLでも大文字小文字を区別するようにすることもできる。</blockquote> | |
− | ==XQuery および XPath のデータ・モデル== | + | ==[[XQuery]] および XPath のデータ・モデル== |
===XDM=== | ===XDM=== | ||
− | *XQuery | + | *[[XQuery]] 式は、[[XQuery]] およぼ XPath のデータモデル XDM のインスタンスに対して作動し、XDMのインスタンスを戻す。 |
*XDMはアトミック値およびノードのシーケンスで説明される | *XDMはアトミック値およびノードのシーケンスで説明される | ||
===シーケンスおよび項目=== | ===シーケンスおよび項目=== | ||
80行目: | 80行目: | ||
=====例===== | =====例===== | ||
*36 | *36 | ||
− | * | + | *<dog/> |
*(2,3,4) | *(2,3,4) | ||
− | *(36, | + | *(36,<dog/>,"cat") |
*() | *() | ||
===アトミック値=== | ===アトミック値=== | ||
89行目: | 89行目: | ||
===ノード階層=== | ===ノード階層=== | ||
*シーケンスのノードは、1つ以上の階層を形成する。 | *シーケンスのノードは、1つ以上の階層を形成する。 | ||
− | * | + | *[[DB2]]は、文書、エレメント、属性、テキスト、処理命令、コメント ノードをサポート |
− | + | <products> | |
− | + | <product pid="10"> | |
− | + | <description> | |
− | + | <name>Fleece jacket</name> | |
− | + | <price>19.99</price> | |
− | + | </description> | |
− | + | </product> | |
− | + | <product pid="11"> | |
− | + | <description> | |
− | + | <name>Nylon pants</name> | |
− | + | <price>9.99</price> | |
− | + | </description> | |
− | + | </product> | |
− | + | </products> | |
*products というルートエレメントが含まれる | *products というルートエレメントが含まれる | ||
*ルートエレメントに product エレメントが含まれる | *ルートエレメントに product エレメントが含まれる | ||
144行目: | 144行目: | ||
|} | |} | ||
− | === | + | ===[[DB2]]がサポートする6つのノード種類=== |
{|class="wikitable" | {|class="wikitable" | ||
151行目: | 151行目: | ||
|- | |- | ||
|文章ノード | |文章ノード | ||
− | | | + | |[[XML]]文章をカプセル化 |
|- | |- | ||
|エレメントノード | |エレメントノード | ||
− | | | + | |[[XML]]エレメントをカプセル化 |
|- | |- | ||
|属性ノード | |属性ノード | ||
− | | | + | |[[XML]]属性を意味する |
|- | |- | ||
|テキストノード | |テキストノード | ||
− | | | + | |[[XML]]の文字内容をカプセル化 |
|- | |- | ||
|処理命令ノード | |処理命令ノード | ||
− | | | + | |[[XML]]処理命令をカプセル化 |
|- | |- | ||
|コメントノード | |コメントノード | ||
− | | | + | |[[XML]]コメントをカプセル化 |
|- | |- | ||
|} | |} | ||
===XDMのシリアライゼーション=== | ===XDMのシリアライゼーション=== | ||
− | * | + | *[[XQuery]]式の結果はXDMのインスタンスだが、シリアライゼーションを行い、XML表記に変換可能 |
− | * | + | *[[XML]]SERIALIZE関数でも実行できる |
− | == | + | ==[[XML]]ネームスペースと QName== |
− | * | + | *[[XML]]ネームスペースは、命令の衝突を回避 |
− | * | + | *[[XML]]ネームスペースは、URIによって識別される名前のコレクション |
− | * | + | *[[XQuery]]のエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される |
− | + | <blockquote>ネームスペース接頭部で修飾された名前が修飾名(QName)</blockquote> | |
===QNameの構成=== | ===QNameの構成=== | ||
*オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成 | *オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成 | ||
− | * | + | *照会の処理時に、ネームスペース接頭部にバインドされているU[[R]]Iを解決 |
− | + | <blockquote>QName は、W3C勧告 Namespace in [[XML]] で定義される構文に準拠</blockquote> | |
====静的に既知のネームスペース==== | ====静的に既知のネームスペース==== | ||
=====事前宣言されたネームスペース===== | =====事前宣言されたネームスペース===== | ||
{|class="wikitable" | {|class="wikitable" | ||
!接頭部 | !接頭部 | ||
− | !XML | + | ![[XML]] |
|- | |- | ||
|xml | |xml | ||
− | |http://www.w3.org/XML/1998/namespace | + | |http://www.w3.org/[[XML]]/1998/namespace |
|- | |- | ||
|xs | |xs | ||
− | |http://www.w3.org/2001/ | + | |http://www.w3.org/2001/[[XML]]Schema |
|- | |- | ||
|xsi | |xsi | ||
− | |http://www.w3.org/2001/ | + | |http://www.w3.org/2001/[[XML]]Schema-instance |
|- | |- | ||
|fn | |fn | ||
211行目: | 211行目: | ||
*ネーム・スペース宣言またはデフォルト・ネーム・スペース宣言を使用 | *ネーム・スペース宣言またはデフォルト・ネーム・スペース宣言を使用 | ||
declare namespace ns1 = "http://mycompany.com"; | declare namespace ns1 = "http://mycompany.com"; | ||
− | + | <blockquote>接頭部 ns1 が U[[R]]I http://mycompany.com と関連付けられる</blockquote> | |
*エレメント・コンストラクターのネーム・スペース宣言属性によって宣言 | *エレメント・コンストラクターのネーム・スペース宣言属性によって宣言 | ||
− | + | <ns2:price xmlns:ns2="http://mycompany.com">14.99</ns2:price> | |
− | + | <blockquote>エレメントの有効範囲内で接頭部 ns2 を U[[R]]I http://mycompany.com にバインド</blockquote> | |
− | *SQL/XML によって提供 | + | *SQL/[[XML]] によって提供 |
− | **SQL/ | + | **SQL/[[XML]]の事前宣言されたネーム・スペース |
− | **SQL/XML コンストラクターおよびその他の SQL/XML 式で宣言されるネーム・スペース | + | **SQL/[[XML]] コンストラクターおよびその他の SQL/[[XML]] 式で宣言されるネーム・スペース |
==タイプ・システム== | ==タイプ・システム== | ||
− | *XQuery は強く型付けされた言語 | + | *[[XQuery]] は強く型付けされた言語 |
− | *XQuery | + | *[[XQuery]] のタイプ・システムには、XMLスキーマの組み込みタイプおよび、[[XQuery]]の事前定義タイプが含まれる |
− | *XML スキーマの組み込みタイプは、http://www.w3.org/2001/ | + | *XML スキーマの組み込みタイプは、http://www.w3.org/2001/XML[[Scheme]] にあり、接頭部 xs を持つ |
**xs:integer、xs:string など | **xs:integer、xs:string など | ||
− | *XQuery 事前定義タイプは、http://www.w3.org/2005/xpath-datatypes にあり、接頭部 xdt を持つ | + | *[[XQuery]] 事前定義タイプは、http://www.w3.org/2005/xpath-datatypes にあり、接頭部 xdt を持つ |
**xdt:untypedAtomic、xdt:yearMonthDuration など | **xdt:untypedAtomic、xdt:yearMonthDuration など | ||
===タイプ階層=== | ===タイプ階層=== | ||
240行目: | 240行目: | ||
|- | |- | ||
|バージョン宣言 | |バージョン宣言 | ||
− | |XQuery の構文およびセマンティクスのバージョン | + | |[[XQuery]] の構文およびセマンティクスのバージョン |
|xquery version "1.0"; | |xquery version "1.0"; | ||
|- | |- | ||
260行目: | 260行目: | ||
|- | |- | ||
|デフォルトの関数ネーム・スペース宣言 | |デフォルトの関数ネーム・スペース宣言 | ||
− | |関数呼び出しの接頭部が付かない関数に使用されるネーム・スペース | + | |関数呼び出しの接頭部が付かない関数に使用されるネーム・スペース U[[R]]I を指定 |
|declare default function namespace "http://www.ibm.com/xmlns/prod/db2/functions"; | |declare default function namespace "http://www.ibm.com/xmlns/prod/db2/functions"; | ||
|- | |- | ||
|空の順序宣言 | |空の順序宣言 | ||
− | | | + | |FLWO[[R]] 式の order by 節が処理されるときの空のシーケンスまたは NaNの最大最小としての解釈 |
|declare default order empty greatest; | |declare default order empty greatest; | ||
|- | |- | ||
318行目: | 318行目: | ||
*変数参照は、ドル記号 ($) が先頭に付加された NCName | *変数参照は、ドル記号 ($) が先頭に付加された NCName | ||
====変数を有効範囲内に追加==== | ====変数を有効範囲内に追加==== | ||
− | *ホスト言語環境、SQL/ | + | *ホスト言語環境、SQL/[[XML]]、[[XML]]QUERY 関数、 [[XML]]TABLE 関数、または [[XML]]EXISTS 述部によって有効範囲内変数に追加 |
− | *XQuery 式によって変数を値にバインド | + | *[[XQuery]] 式によって変数を値にバインド |
− | ** | + | **変数をバインドできる式は、FLWO[[R]] 式および量化式 |
**関数呼び出しも、関数本体を実行する前に、関数の仮パラメーターに値をバインド | **関数呼び出しも、関数本体を実行する前に、関数の仮パラメーターに値をバインド | ||
**バインドされた式全体を通して有効範囲内 | **バインドされた式全体を通して有効範囲内 | ||
=====例===== | =====例===== | ||
− | * | + | *FLWO[[R]] 式が、変数 $seq をシーケンス (10, 20, 30) にバインド |
let $seq := (10, 20, 30) | let $seq := (10, 20, 30) | ||
return $seq[2]; | return $seq[2]; | ||
− | + | <blockquote>戻り値は 20</blockquote> | |
===コンテキスト・アイテム式=== | ===コンテキスト・アイテム式=== | ||
*1 個のピリオド文字 (.) から構成 | *1 個のピリオド文字 (.) から構成 | ||
335行目: | 335行目: | ||
*範囲式 1 to 100 で戻されるシーケンスのすべての項目に係数演算子を呼び出すコンテキスト・アイテム式 | *範囲式 1 to 100 で戻されるシーケンスのすべての項目に係数演算子を呼び出すコンテキスト・アイテム式 | ||
(1 to 100)[. mod 5 eq 0] | (1 to 100)[. mod 5 eq 0] | ||
− | + | <blockquote>1 から 100 までの数字で、5 で均等に割り切れる整数のシーケンス</blockquote> | |
===関数呼び出し=== | ===関数呼び出し=== | ||
*QName と、その後に続く括弧で囲んだ 0 個以上の式のリスト(これを引数と呼びます) で構成 | *QName と、その後に続く括弧で囲んだ 0 個以上の式のリスト(これを引数と呼びます) で構成 | ||
− | **組み込み XQuery 関数、 DB2 固有の関数の呼び出しをサポート | + | **組み込み [[XQuery]] 関数、 DB2 固有の関数の呼び出しをサポート |
====例==== | ====例==== | ||
=====ストリング引数を使用した関数呼び出し===== | =====ストリング引数を使用した関数呼び出し===== | ||
347行目: | 347行目: | ||
fn:max((1, 2, 3)) | fn:max((1, 2, 3)) | ||
===パス式=== | ===パス式=== | ||
− | *XML ツリー内のノードを識別 | + | *[[XML]] ツリー内のノードを識別 |
− | *XPath 2.0 の構文に基づく | + | *[[XPath]] 2.0 の構文に基づく |
*パス式は、スラッシュ (/) またはダブルスラッシュ (//) 文字で区切られた 1 つ以上のステップで構成 | *パス式は、スラッシュ (/) またはダブルスラッシュ (//) 文字で区切られた 1 つ以上のステップで構成 | ||
====構文==== | ====構文==== | ||
376行目: | 376行目: | ||
|- | |- | ||
|axis | |axis | ||
− | |XML 文書またはフラグメントの移動方向。child、descendant、attribute、self、descendant-or-self、parent などをサポート | + | |[[XML]] 文書またはフラグメントの移動方向。child、descendant、attribute、self、descendant-or-self、parent などをサポート |
|- | |- | ||
|node-test | |node-test | ||
394行目: | 394行目: | ||
=====パス式内のステップとしてフィルター式を使用===== | =====パス式内のステップとしてフィルター式を使用===== | ||
*指定された book 内で複数の footnote を含むすべての chapter または appendixを戻す | *指定された book 内で複数の footnote を含むすべての chapter または appendixを戻す | ||
− | $book/(chapter | appendix)[fn:count(footnote) | + | $book/(chapter | appendix)[fn:count(footnote)> 1] |
===軸ステップ=== | ===軸ステップ=== | ||
=====構成===== | =====構成===== | ||
408行目: | 408行目: | ||
|- | |- | ||
|フォワード・ステップ | |フォワード・ステップ | ||
− | |コンテキスト・ノードから開始し、文書の順序で | + | |コンテキスト・ノードから開始し、文書の順序で [[XML]]ツリーを移動 |
|- | |- | ||
|リバース・ステップ | |リバース・ステップ | ||
− | |コンテキスト・ノードから開始し、文書の順序の逆で XML ツリーを移動 | + | |コンテキスト・ノードから開始し、文書の順序の逆で [[XML]] ツリーを移動 |
|- | |- | ||
|} | |} | ||
417行目: | 417行目: | ||
*child が軸の名前、para がこの軸上で選択されるエレメント・ノードの名前 | *child が軸の名前、para がこの軸上で選択されるエレメント・ノードの名前 | ||
child::para | child::para | ||
− | + | <blockquote>この例の軸ステップでは、コンテキスト・ノードの子であるすべての para エレメントを選択</blockquote> | |
===軸=== | ===軸=== | ||
− | *XML 文書内を移動する方向を指定する軸ステップの一部 | + | *[[XML]] 文書内を移動する方向を指定する軸ステップの一部 |
*軸は、フォワード軸またはリバース軸のいずれかに分類 | *軸は、フォワード軸またはリバース軸のいずれかに分類 | ||
− | ====DB2 XQuery でサポートされる軸==== | + | ====[[DB2 XQuery]] でサポートされる軸==== |
{|class="wikitable" | {|class="wikitable" | ||
!軸 | !軸 | ||
459行目: | 459行目: | ||
*QName またはワイルドカードで構成 | *QName またはワイルドカードで構成 | ||
*軸ステップで名前テストが指定されると、ステップは、QName またはワイルドカードに一致する指定された軸上のノードを選択 | *軸ステップで名前テストが指定されると、ステップは、QName またはワイルドカードに一致する指定された軸上のノードを選択 | ||
− | ====DB2 XQuery でサポートされる名前テスト==== | + | ====DB2 [[XQuery]] でサポートされる名前テスト==== |
{|class="wikitable" | {|class="wikitable" | ||
!テスト | !テスト | ||
489行目: | 489行目: | ||
===種類テスト=== | ===種類テスト=== | ||
*種類テストに一致する指定された軸上のノードのみを選択 | *種類テストに一致する指定された軸上のノードのみを選択 | ||
− | ==== DB2 XQuery でサポートされる種類テスト==== | + | ==== DB2 [[XQuery]] でサポートされる種類テスト==== |
{|class="wikitable" | {|class="wikitable" | ||
!テスト | !テスト |
2020年2月16日 (日) 04:24時点における最新版
目次
DB2 XQuery
- DB2 XML DB (pureXML)
- IBM のマニュアル からのメモ
- World Wide Web Consortium (W3C) によって設計された機能プログラミング言語
XMLデータ
柔軟
- XMLデータは柔軟で、予測不能で、散在しており、自己記述的
XQueryを使うしかない局面
照会のコンポーネント
プロローグと照会本体からなる
- プロローグには、照会処理環境を定義する一連の宣言
<!-- プロローグ --> xquery version "1.0"; declare default element namespace "http://posample.org"; <!-- 照会本体 --> <price_list>{for $prod in db2-fn:xmlcolumn("PRODUCT.DESCRIPTION")/product/description order by xs:decimal($prod/price) descending return <product>{$prod/name, $prod/price}</product>} </price_list>
XQuery と SQL/XML
キーワード/関数/述部 | 内容 |
---|---|
XQUERY | XQueryが使用されることを示し、大/小文字を区別する規則をサーバーに指示 |
XMLQUERY | 引数としてXQuery式を使用し、XMLシーケンスを戻す関数 |
XMLTABLE | XQuery式を使用してXMLデータからSQLの表を生成関数 |
XMLEXISTS | XQuery式が1つ以上の項目のシーケンスを戻すか判別する述部 |
XQuery 関数を使用したDB2データの検索
- XQuery では以下のいずれかの関数でDB2からXMLデータを取得できる
関数 | 概要 | 例 |
---|---|---|
db2-fn:xmlcolumn | XML列を識別するリテラル引数を使用 | db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city |
db2-fn:sqlquery | fullselectを表す引数を使用。SQLの機能を使用できる | db2-fn:sqlquery("SELECT purchase_order FROM business.orders WHERE ship_date = '2005-06-15' ")/shipping_address/city |
<blockquote>SQLは大文字、小文字を区別しないが、XMLは区別する。SQLは通常、自動的に大文字に変換されるが、XMLと混在する場合は明示的に大文字として記述する必要がある。ただし、二重引用符で囲むことで、SQLでも大文字小文字を区別するようにすることもできる。</blockquote>
XQuery および XPath のデータ・モデル
XDM
シーケンスおよび項目
- シーケンスとは 0個以上の項目の順序づけられたコレクション
- 項目はアトミック値またはノード
シーケンスの記法
- 各項目はカンマで区切る
- 全体は括弧で囲む
- 空の括弧は、空のシーケンス
- 単独の項目は、一つの項目を含むシーケンスと等価
- ネストできない
例
- 36
- <dog/>
- (2,3,4)
- (36,<dog/>,"cat")
- ()
アトミック値
- 組み込みアトミックデータ・タイプの1つのインスタンス
- ストリング、整数、10進数、日付などこれ以上分割できない
ノード階層
- シーケンスのノードは、1つ以上の階層を形成する。
- DB2は、文書、エレメント、属性、テキスト、処理命令、コメント ノードをサポート
<products> <product pid="10"> <description> <name>Fleece jacket</name> <price>19.99</price> </description> </product> <product pid="11"> <description> <name>Nylon pants</name> <price>9.99</price> </description> </product> </products>
- products というルートエレメントが含まれる
- ルートエレメントに product エレメントが含まれる
- product エレメントには、pid という属性と、description という子エレメントを持つ
ノードのプロパティ
- 各ノードは以下の1つ以上のプロパティを持つことができる
プロパティ | 内容 |
---|---|
node-name | QName として表現されるノードの名前 |
parent | 現行ノードの親ノード |
type-name | ノードの動的タイプ |
children | 現行ノードの子であるノードのシーケンス |
attributes | 現行ノードに属する属性ノードのセット |
string-value | ノードから抽出可能なストリング値 |
typead-value | ノードから抽出可能な0個以上のアトミック値のシーケンス |
in-scope namespaces | ノードに関連づけられた範囲のネーム・スペース |
content | ノードの内容 |
DB2がサポートする6つのノード種類
ノード種類 | 内容 |
---|---|
文章ノード | XML文章をカプセル化 |
エレメントノード | XMLエレメントをカプセル化 |
属性ノード | XML属性を意味する |
テキストノード | XMLの文字内容をカプセル化 |
処理命令ノード | XML処理命令をカプセル化 |
コメントノード | XMLコメントをカプセル化 |
XDMのシリアライゼーション
XMLネームスペースと QName
<blockquote>ネームスペース接頭部で修飾された名前が修飾名(QName)</blockquote>
QNameの構成
- オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成
- 照会の処理時に、ネームスペース接頭部にバインドされているURIを解決
<blockquote>QName は、W3C勧告 Namespace in XML で定義される構文に準拠</blockquote>
静的に既知のネームスペース
事前宣言されたネームスペース
接頭部 | XML |
---|---|
xml | http://www.w3.org/XML/1998/namespace |
xs | http://www.w3.org/2001/XMLSchema |
xsi | http://www.w3.org/2001/XMLSchema-instance |
fn | http://www.w3.org/2005/xpath-functions |
xdt | http://www.w3.org/2005/xpath-datatypes |
db2-fn | http://www.ibm.com/xmlns/prod/db2/functions |
静的に既知のネームスペースセットを提供
- ネーム・スペース宣言またはデフォルト・ネーム・スペース宣言を使用
declare namespace ns1 = "http://mycompany.com";
<blockquote>接頭部 ns1 が URI http://mycompany.com と関連付けられる</blockquote>
- エレメント・コンストラクターのネーム・スペース宣言属性によって宣言
<ns2:price xmlns:ns2="http://mycompany.com">14.99</ns2:price>
<blockquote>エレメントの有効範囲内で接頭部 ns2 を URI http://mycompany.com にバインド</blockquote>
タイプ・システム
- XQuery は強く型付けされた言語
- XQuery のタイプ・システムには、XMLスキーマの組み込みタイプおよび、XQueryの事前定義タイプが含まれる
- XML スキーマの組み込みタイプは、http://www.w3.org/2001/XMLScheme にあり、接頭部 xs を持つ
- xs:integer、xs:string など
- XQuery 事前定義タイプは、http://www.w3.org/2005/xpath-datatypes にあり、接頭部 xdt を持つ
- xdt:untypedAtomic、xdt:yearMonthDuration など
タイプ階層
- すべてのアトミック・タイプは、データ・タイプ xdt:anyAtomicType から派生
プロローグ
- 照会の処理環境を定義する一連の宣言
宣言
宣言 | 内容 | 例 |
---|---|---|
バージョン宣言 | XQuery の構文およびセマンティクスのバージョン | xquery version "1.0"; |
境界スペース宣言 | エレメント・コンストラクターによる境界空白の処理方法 | declare boundary-space preserve; |
構成宣言 | 構成モードを設定 | declare construction strip; |
Copy-namespaces 宣言 | ネーム・スペースのバインディングを制御 | declare copy-namespaces preserve,inherit; |
デフォルトのエレメント/タイプのネーム・スペース宣言 | 接頭部なしの QNamesに使用するネーム・スペースを指定 | declare default element namespace "http://posample.org"; |
デフォルトの関数ネーム・スペース宣言 | 関数呼び出しの接頭部が付かない関数に使用されるネーム・スペース URI を指定 | declare default function namespace "http://www.ibm.com/xmlns/prod/db2/functions"; |
空の順序宣言 | FLWOR 式の order by 節が処理されるときの空のシーケンスまたは NaNの最大最小としての解釈 | declare default order empty greatest; |
順序付けモード宣言 | 照会の順序付けモード | declare ordering unordered; |
ネーム・スペース宣言 | ネーム・スペース接頭部を宣言 | declare namespace ns1 = "http://posample.org"; |
式
- 照会の基本的なビルディング・ブロック
- 単独で使用することも、他の式と組み合わせて複合照会を形成することも可能
- いくつかの操作は、式の処理によく含められる。
- 更新式は変換式の modify 節内でのみ使用できる
動的コンテキストおよびフォーカス
フォーカスの構成要素 | 内容 |
---|---|
コンテキスト・アイテム | 現在処理中のアトミック値またはノード。ドット"."でアイテムを検索可能 |
コンテキストの位置 | コンテキスト・アイテムの位置。fn:position() 関数によって検索可 |
コンテキスト・サイズ | アイテム数。fn:last()関数によって検索可 |
基本式
リテラル
- アトミック値の直接構文表記
リテラル | タイプ | 内容 |
---|---|---|
数値 | xs:integer、xs:decimal、xs:double | 数値、 e または E 、小数点からなる |
ストリング | xs:string | 単一引用符 (')または二重引用符(")に囲まれたアトミック値。単一引用符で区切られたストリング・リテラル内に単一引用符を含めるには、2 つの連続する単一引用符を指定 |
変数参照
- 変数参照は、ドル記号 ($) が先頭に付加された NCName
変数を有効範囲内に追加
- ホスト言語環境、SQL/XML、XMLQUERY 関数、 XMLTABLE 関数、または XMLEXISTS 述部によって有効範囲内変数に追加
- XQuery 式によって変数を値にバインド
- 変数をバインドできる式は、FLWOR 式および量化式
- 関数呼び出しも、関数本体を実行する前に、関数の仮パラメーターに値をバインド
- バインドされた式全体を通して有効範囲内
例
- FLWOR 式が、変数 $seq をシーケンス (10, 20, 30) にバインド
let $seq := (10, 20, 30) return $seq[2];
<blockquote>戻り値は 20</blockquote>
コンテキスト・アイテム式
- 1 個のピリオド文字 (.) から構成
- 現在処理中の項目 (コンテキスト・アイテム) に評価
例
- 範囲式 1 to 100 で戻されるシーケンスのすべての項目に係数演算子を呼び出すコンテキスト・アイテム式
(1 to 100)[. mod 5 eq 0]
<blockquote>1 から 100 までの数字で、5 で均等に割り切れる整数のシーケンス</blockquote>
関数呼び出し
- QName と、その後に続く括弧で囲んだ 0 個以上の式のリスト(これを引数と呼びます) で構成
- 組み込み XQuery 関数、 DB2 固有の関数の呼び出しをサポート
例
ストリング引数を使用した関数呼び出し
- 引数を取り、すべての文字が大文字である xs:string タイプの値を戻
fn:upper-case($ns1_customerinfo/ns1:addr/@country)
シーケンス引数を使用した関数呼び出し
- 単一引数として、シーケンス (1, 2, 3) を取ります
fn:max((1, 2, 3))
パス式
構文
- 各ステップは、軸ステップまたはフィルター式のいずれか
パス式 | 内容 |
---|---|
軸ステップ | 指定された軸によってコンテキスト・ノードから到達できるノードのシーケンスを戻す |
フィルター式 | 基本式と、それに続く 0 個以上の述部で構成 |
記号 | 説明 |
---|---|
/ | パスが、コンテキスト・ノードを含むツリーのルート・ノードから開始されることを示す。パス式内のスラッシュ文字は、ステップを分離 |
// | パスが、コンテキスト・ノードを含むツリーのルート・ノードと、そのルート・ノードのすべての子孫で構成される初期ノード・シーケンスから開始されることを示す。ステップ間のダブルスラッシュ文字は、省略構文参照 |
axis | XML 文書またはフラグメントの移動方向。child、descendant、attribute、self、descendant-or-self、parent などをサポート |
node-test | 軸ステップによって選択される各ノードについて true でなければならない条件 |
PrimaryExpression | 基本式 |
PredicateExpression | シーケンスの項目が保持されているか、廃棄されているかを判別する式 |
例
2つの述部を含む軸ステップ
- secretary 子エレメントおよび assistant 子エレメントの両方を持つ、コンテキスト・ノードの子であるすべての employee を選択
child::employee[secretary][assistant]
パス式内のステップとしてフィルター式を使用
- 指定された book 内で複数の footnote を含むすべての chapter または appendixを戻す
$book/(chapter | appendix)[fn:count(footnote)> 1]
軸ステップ
構成
- 軸、ノード・テスト、述部の 3 つの部分から構成
- オプションの軸 は、移動の方向を指定
- ノード・テストは、ノードの選択に使用する基準を指定
- 軸ステップの結果は、常にゼロ以上のノードのシーケンス
フォワード・ステップとリバース・ステップ
- 軸ステップは、フォワード・ステップまたはリバース・ステップに分けられる
ステップ | 内容 |
---|---|
フォワード・ステップ | コンテキスト・ノードから開始し、文書の順序で XMLツリーを移動 |
リバース・ステップ | コンテキスト・ノードから開始し、文書の順序の逆で XML ツリーを移動 |
例
- child が軸の名前、para がこの軸上で選択されるエレメント・ノードの名前
child::para
<blockquote>この例の軸ステップでは、コンテキスト・ノードの子であるすべての para エレメントを選択</blockquote>
軸
- XML 文書内を移動する方向を指定する軸ステップの一部
- 軸は、フォワード軸またはリバース軸のいずれかに分類
DB2 XQuery でサポートされる軸
軸 | 方向 | 説明 |
---|---|---|
child | 順 | コンテキスト・ノードの子 |
descendant | 順 | コンテキスト・ノードの子孫 |
属性 | 順方 | コンテキスト・ノードの属性 |
self | 順 | コンテキスト・ノードのみ |
descendant-or-self | 順 | コンテキスト・ノードおよびコンテキスト・ノードの子孫 |
parent | 逆 | コンテキスト・ノードの親 |
ノード・テスト
- 軸ステップにより選択される各ノードについて true でなければならない条件
- 名前テストまたは種類テスト
名前テスト
- QName またはワイルドカードで構成
- 軸ステップで名前テストが指定されると、ステップは、QName またはワイルドカードに一致する指定された軸上のノードを選択
DB2 XQuery でサポートされる名前テスト
テスト | 説明 | 例 | 例の説明 |
---|---|---|---|
QName | QNameに等しい(指定された軸上の)任意のノードに一致 | child::para | 名前テスト para は、子軸上のすべての paraエレメントを選択 |
* | 指定された軸上のすべてのノードに一致 | child::* | 子軸上のすべてのエレメントに一致 |
NCName:* | QName の接頭部部分を表す NCNameを指定 | child::ns1:* | 接頭部 ns1 にバインドされているネーム・スペースに関連付けられた子軸上のすべてのエレメントに一致 |
*:NCName | QName のローカル部分を表すNCNameを指定 | child::*:customerinfo | エレメント名に関連付けられたネーム・スペースには関係なく、ローカル名 customerinfo を持つ、子軸上のすべてのエレメントに一致 |
種類テスト
- 種類テストに一致する指定された軸上のノードのみを選択
DB2 XQuery でサポートされる種類テスト
テスト | 説明 | 例 | 例説明 |
---|---|---|---|
node() | 指定された軸上の任意のノード | child::node() | 子軸上の任意のノードを選択 |
text() | 指定された軸上の任意のテキスト・ノードに一致 | child::text() | 子軸上の任意のテキスト・ノードを選択 |
comment() | 指定された軸上の任意のコメント・ノードに一致 | child::comment() | 子軸上の任意のコメント・ノードを選択 |
processing-instruction() | 指定された軸上の任意の処理命令ノードに一致 | child::processing-instruction() | 子軸上の任意の処理命令ノードを選択 |
element() または element(*) | 指定された軸上の任意のエレメント・ノードに一致し | child::element() | 子軸上の任意のエレメント・ノードを選択 |
attribute() または attribute(*) | 指定された軸上の任意の属性ノードに一致 | child::attribute() | 子軸上の任意の属性ノードを選択 |
document-node() | 指定された軸上の任意の文書ノードに一致 | self::document-node() | コンテキスト・ノードである文書ノードを選択 |
パス式の省略構文
省略構文 | 説明 | 省略例 | 元構文 |
---|---|---|---|
軸の指定なし | ノード・テストとして軸ステップがattribute() を指定したとき以外は、child::の省略形。軸ステップが属性テストを指定するときは、省略される軸は、attribute:: の省略形です。 | section/para | child::section/child::para |
@ | attribute:: の省略形 | section/@id | child::section/attribute::id |
// | パス式の先頭にあるとき以外は、/descendant-or-self::node()/ の省略形 | div1//para | child::div1/descendant-or-self::node() /child::para |
.. | parent::node() の省略形 | ../title | parent::node()/child::title |
© 2006 矢木浩人