| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
312 バイト追加 、 2020年2月16日 (日) 04:24
編集の要約なし
==[[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 のマニュアル] からのメモ
*World Wide Web Consortium (W3C) によって設計された機能プログラミング言語によって設計された機能プログラミング[[言語]]==XMLデータ[[XML]]データ==
=====柔軟=====
*XMLデータは柔軟で、予測不能で、散在しており、自己記述的[[XML]]データは柔軟で、予測不能で、散在しており、自己記述的=====XQueryを使うしかない局面[[XQuery]]を使うしかない局面=====*階層のどのレベルにあるか不明なオブジェクトのXMLを検索階層のどのレベルにあるか不明なオブジェクトの[[XML]]を検索
*データにタイして構造変換を実行
*タイプが混合した結果を戻す
*既存のXMLを更新既存の[[XML]]を更新
==照会のコンポーネント==
===プロローグと照会本体からなる===
declare default element namespace "http://posample.org";
<!-- 照会本体 -->
<price_list>{for $prod in db2-fn:xmlcolumn("PRODUCTP[[R]]ODUCT.DESCRIPTIONDESC[[R]]IPTION")/product/description
order by xs:decimal($prod/price) descending
return <product>{$prod/name, $prod/price}</product>}
</price_list>
==[[XQuery ]] と SQL/XML==*[[XQuery ]] を直接呼び出す照会は、キーワード XQUERY で始まる。*SQL/XMLでは、以下の関数と述部を指定してSQLからXQueryを呼び出すXMLでは、以下の関数と述部を指定してSQLから[[XQuery]]を呼び出す
{|class="wikitable"
!キーワード/関数/述部
|-
|XQUERY
|XQueryが使用されることを示し、大[[XQuery]]が使用されることを示し、大/小文字を区別する規則をサーバーに指示
|-
|XMLQUERY
|引数としてXQuery式を使用し、XMLシーケンスを戻す関数引数として[[XQuery]]式を使用し、XMLシーケンスを戻す関数
|-
|XMLTABLE
|XQuery式を使用してXMLデータからSQLの表を生成関数[[XQuery]]式を使用してXMLデータからSQLの表を生成関数
|-
|XMLEXISTS
|XQuery式が1つ以上の項目のシーケンスを戻すか判別する述部[[XQuery]]式が1つ以上の項目のシーケンスを戻すか判別する述部
|-
|}
==[[XQuery ]] 関数を使用したDB2データの検索==*[[XQuery ]] では以下のいずれかの関数でDB2からXMLデータを取得できる
{|class="wikitable"
|-
|db2-fn:xmlcolumn
|XML列を識別するリテラル引数を使用[[XML]]列を識別するリテラル引数を使用
|db2-fn:xmlcolumn('BUSINESS.ORDERS.PURCHASE_ORDER')/shipping_address/city
|-
|db2-fn:sqlquery
|fullselectを表す引数を使用。SQLの機能を使用できる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でも大文字小文字を区別するようにすることもできる。SQLは大文字、小文字を区別しないが、[[XML]]は区別する。SQLは通常、自動的に大文字に変換されるが、[[XML]]と混在する場合は明示的に大文字として記述する必要がある。ただし、二重引用符で囲むことで、SQLでも大文字小文字を区別するようにすることもできる。</blockquote>
==[[XQuery ]] および XPath のデータ・モデル==
===XDM===
*[[XQuery 式は、XQuery ]] 式は、[[XQuery]] およぼ XPath のデータモデル XDM のインスタンスに対して作動し、XDMのインスタンスを戻す。
*XDMはアトミック値およびノードのシーケンスで説明される
===シーケンスおよび項目===
===ノード階層===
*シーケンスのノードは、1つ以上の階層を形成する。
*DB2は、文書、エレメント、属性、テキスト、処理命令、コメント [[DB2]]は、文書、エレメント、属性、テキスト、処理命令、コメント ノードをサポート
<products>
<product pid="10">
|}
===DB2がサポートする6つのノード種類[[DB2]]がサポートする6つのノード種類===
{|class="wikitable"
|-
|文章ノード
|XML文章をカプセル化[[XML]]文章をカプセル化
|-
|エレメントノード
|XMLエレメントをカプセル化[[XML]]エレメントをカプセル化
|-
|属性ノード
|XML属性を意味する[[XML]]属性を意味する
|-
|テキストノード
|XMLの文字内容をカプセル化[[XML]]の文字内容をカプセル化
|-
|処理命令ノード
|XML処理命令をカプセル化[[XML]]処理命令をカプセル化
|-
|コメントノード
|XMLコメントをカプセル化[[XML]]コメントをカプセル化
|-
|}
===XDMのシリアライゼーション===
*XQuery式の結果はXDMのインスタンスだが、シリアライゼーションを行い、XML表記に変換可能[[XQuery]]式の結果はXDMのインスタンスだが、シリアライゼーションを行い、XML表記に変換可能*XMLSERIALIZE関数でも実行できる[[XML]]SERIALIZE関数でも実行できる
==XMLネームスペースと [[XML]]ネームスペースと QName==*XMLネームスペースは、命令の衝突を回避[[XML]]ネームスペースは、命令の衝突を回避*XMLネームスペースは、URIによって識別される名前のコレクション[[XML]]ネームスペースは、URIによって識別される名前のコレクション*XQueryのエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される[[XQuery]]のエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される
<blockquote>ネームスペース接頭部で修飾された名前が修飾名(QName)</blockquote>
===QNameの構成===
*オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成
*照会の処理時に、ネームスペース接頭部にバインドされているURIを解決照会の処理時に、ネームスペース接頭部にバインドされているU[[R]]Iを解決<blockquote>QName は、W3C勧告 Namespace in [[XML ]] で定義される構文に準拠</blockquote>
====静的に既知のネームスペース====
=====事前宣言されたネームスペース=====
{|class="wikitable"
!接頭部
![[XML]]
|-
|xml
|http://www.w3.org/[[XML]]/1998/namespace
|-
|xs
|http://www.w3.org/2001/XMLSchema[[XML]]Schema
|-
|xsi
|http://www.w3.org/2001/XMLSchema[[XML]]Schema-instance
|-
|fn
*ネーム・スペース宣言またはデフォルト・ネーム・スペース宣言を使用
declare namespace ns1 = "http://mycompany.com";
<blockquote>接頭部 ns1 が URI U[[R]]I http://mycompany.com と関連付けられる</blockquote>
*エレメント・コンストラクターのネーム・スペース宣言属性によって宣言
<ns2:price xmlns:ns2="http://mycompany.com">14.99</ns2:price>
<blockquote>エレメントの有効範囲内で接頭部 ns2 を URI U[[R]]I http://mycompany.com にバインド</blockquote>*SQL/[[XML ]] によって提供**SQL/XMLの事前宣言されたネーム・スペース[[XML]]の事前宣言されたネーム・スペース**SQL/[[XML ]] コンストラクターおよびその他の SQL/[[XML ]] 式で宣言されるネーム・スペース
==タイプ・システム==
*[[XQuery ]] は強く型付けされた言語*[[XQuery のタイプ・システムには、XMLスキーマの組み込みタイプおよび、XQueryの事前定義タイプが含まれる]] のタイプ・システムには、XMLスキーマの組み込みタイプおよび、[[XQuery]]の事前定義タイプが含まれる*XML スキーマの組み込みタイプは、http://www.w3.org/2001/XMLScheme XML[[Scheme]] にあり、接頭部 xs を持つ
**xs:integer、xs:string など
*[[XQuery ]] 事前定義タイプは、http://www.w3.org/2005/xpath-datatypes にあり、接頭部 xdt を持つ
**xdt:untypedAtomic、xdt:yearMonthDuration など
===タイプ階層===
|-
|バージョン宣言
|[[XQuery ]] の構文およびセマンティクスのバージョン
|xquery version "1.0";
|-
|-
|デフォルトの関数ネーム・スペース宣言
|関数呼び出しの接頭部が付かない関数に使用されるネーム・スペース URI U[[R]]I を指定
|declare default function namespace "http://www.ibm.com/xmlns/prod/db2/functions";
|-
|空の順序宣言
|FLWOR FLWO[[R]] 式の order by 節が処理されるときの空のシーケンスまたは NaNの最大最小としての解釈
|declare default order empty greatest;
|-
*変数参照は、ドル記号 ($) が先頭に付加された NCName
====変数を有効範囲内に追加====
*ホスト言語環境、SQL/XML、XMLQUERY [[XML]]、[[XML]]QUERY 関数、 XMLTABLE [[XML]]TABLE 関数、または XMLEXISTS [[XML]]EXISTS 述部によって有効範囲内変数に追加*[[XQuery ]] 式によって変数を値にバインド**変数をバインドできる式は、FLWOR 変数をバインドできる式は、FLWO[[R]] 式および量化式
**関数呼び出しも、関数本体を実行する前に、関数の仮パラメーターに値をバインド
**バインドされた式全体を通して有効範囲内
=====例=====
*FLWOR FLWO[[R]] 式が、変数 $seq をシーケンス (10, 20, 30) にバインド
let $seq := (10, 20, 30)
return $seq[2];
===関数呼び出し===
*QName と、その後に続く括弧で囲んだ 0 個以上の式のリスト(これを引数と呼びます) で構成
**組み込み [[XQuery ]] 関数、 DB2 固有の関数の呼び出しをサポート
====例====
=====ストリング引数を使用した関数呼び出し=====
fn:max((1, 2, 3))
===パス式===
*[[XML ]] ツリー内のノードを識別*[[XPath ]] 2.0 の構文に基づく
*パス式は、スラッシュ (/) またはダブルスラッシュ (//) 文字で区切られた 1 つ以上のステップで構成
====構文====
|-
|axis
|[[XML ]] 文書またはフラグメントの移動方向。child、descendant、attribute、self、descendant-or-self、parent などをサポート
|-
|node-test
|-
|フォワード・ステップ
|コンテキスト・ノードから開始し、文書の順序で XMLツリーを移動[[XML]]ツリーを移動
|-
|リバース・ステップ
|コンテキスト・ノードから開始し、文書の順序の逆で [[XML ]] ツリーを移動
|-
|}
<blockquote>この例の軸ステップでは、コンテキスト・ノードの子であるすべての para エレメントを選択</blockquote>
===軸===
*[[XML ]] 文書内を移動する方向を指定する軸ステップの一部
*軸は、フォワード軸またはリバース軸のいずれかに分類
====[[DB2 XQuery ]] でサポートされる軸====
{|class="wikitable"
!軸
*QName またはワイルドカードで構成
*軸ステップで名前テストが指定されると、ステップは、QName またはワイルドカードに一致する指定された軸上のノードを選択
====DB2 [[XQuery ]] でサポートされる名前テスト====
{|class="wikitable"
!テスト
===種類テスト===
*種類テストに一致する指定された軸上のノードのみを選択
==== DB2 [[XQuery ]] でサポートされる種類テスト====
{|class="wikitable"
!テスト

案内メニュー