==DB2 XQuery==
[[XML][XQuery]]
*DB2 XML DB (pureXML)
===プロローグと照会本体からなる===
*プロローグには、照会処理環境を定義する一連の宣言
<<!-- プロローグ -->>
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 で始まる。
|-
|}
<<blockquote>>SQLは大文字、小文字を区別しないが、XMLは区別する。SQLは通常、自動的に大文字に変換されるが、XMLと混在する場合は明示的に大文字として記述する必要がある。ただし、二重引用符で囲むことで、SQLでも大文字小文字を区別するようにすることもできる。<</blockquote>>
==XQuery および XPath のデータ・モデル==
=====例=====
*36
*<<dog/>>
*(2,3,4)
*(36,<<dog/>>,"cat")
*()
===アトミック値===
*シーケンスのノードは、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 エレメントが含まれる
*XMLネームスペースは、URIによって識別される名前のコレクション
*XQueryのエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される
<<blockquote>>ネームスペース接頭部で修飾された名前が修飾名(QName)<</blockquote>>
===QNameの構成===
*オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成
*照会の処理時に、ネームスペース接頭部にバインドされているURIを解決
<<blockquote>>QName は、W3C勧告 Namespace in XML で定義される構文に準拠<</blockquote>>
====静的に既知のネームスペース====
=====事前宣言されたネームスペース=====
*ネーム・スペース宣言またはデフォルト・ネーム・スペース宣言を使用
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>>
*SQL/XML によって提供
**SQL/XMLの事前宣言されたネーム・スペース
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 個以上の式のリスト(これを引数と呼びます) で構成
=====パス式内のステップとしてフィルター式を使用=====
*指定された book 内で複数の footnote を含むすべての chapter または appendixを戻す
$book/(chapter | appendix)[fn:count(footnote)> > 1]
===軸ステップ===
=====構成=====
*child が軸の名前、para がこの軸上で選択されるエレメント・ノードの名前
child::para
<<blockquote>>この例の軸ステップでは、コンテキスト・ノードの子であるすべての para エレメントを選択<</blockquote>>
===軸===
*XML 文書内を移動する方向を指定する軸ステップの一部