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

MyMemoWiki

「DB2 XQuery」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==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]]データ==
 
=====柔軟=====
 
=====柔軟=====
*XMLデータは柔軟で、予測不能で、散在しており、自己記述的
+
*[[XML]]データは柔軟で、予測不能で、散在しており、自己記述的
=====XQueryを使うしかない局面=====
+
=====[[XQuery]]を使うしかない局面=====
*階層のどのレベルにあるか不明なオブジェクトのXMLを検索
+
*階層のどのレベルにあるか不明なオブジェクトの[[XML]]を検索
 
*データにタイして構造変換を実行
 
*データにタイして構造変換を実行
 
*タイプが混合した結果を戻す
 
*タイプが混合した結果を戻す
*既存のXMLを更新
+
*既存の[[XML]]を更新
 
==照会のコンポーネント==
 
==照会のコンポーネント==
 
===プロローグと照会本体からなる===
 
===プロローグと照会本体からなる===
 
*プロローグには、照会処理環境を定義する一連の宣言
 
*プロローグには、照会処理環境を定義する一連の宣言
  <!-- プロローグ -->
+
  &lt;!-- プロローグ --&gt;
 
  xquery version "1.0";
 
  xquery version "1.0";
 
  declare default element namespace "http://posample.org";
 
  declare default element namespace "http://posample.org";
  <!-- 照会本体 -->
+
  &lt;!-- 照会本体 --&gt;
  <price_list>{for $prod in db2-fn:xmlcolumn("PRODUCT.DESCRIPTION")/product/description
+
  &lt;price_list&gt;{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 <product>{$prod/name, $prod/price}</product>}
+
   return &lt;product&gt;{$prod/name, $prod/price}&lt;/product&gt;}
  </price_list>
+
  &lt;/price_list&gt;
==XQuery と SQL/XML==
+
==[[XQuery]] と SQL/XML==
*XQuery を直接呼び出す照会は、キーワード XQUERY で始まる。
+
*[[XQuery]] を直接呼び出す照会は、キーワード XQUERY で始まる。
*SQL/XMLでは、以下の関数と述部を指定してSQLからXQueryを呼び出す
+
*SQL/XMLでは、以下の関数と述部を指定してSQLから[[XQuery]]を呼び出す
 
{|class="wikitable"
 
{|class="wikitable"
 
!キーワード/関数/述部
 
!キーワード/関数/述部
33行目: 33行目:
 
|-
 
|-
 
|XQUERY
 
|XQUERY
|XQueryが使用されることを示し、大/小文字を区別する規則をサーバーに指示
+
|[[XQuery]]が使用されることを示し、大/小文字を区別する規則をサーバーに指示
 
|-
 
|-
 
|XMLQUERY
 
|XMLQUERY
|引数としてXQuery式を使用し、XMLシーケンスを戻す関数
+
|引数として[[XQuery]]式を使用し、XMLシーケンスを戻す関数
 
|-
 
|-
 
|XMLTABLE
 
|XMLTABLE
|XQuery式を使用してXMLデータからSQLの表を生成関数
+
|[[XQuery]]式を使用してXMLデータからSQLの表を生成関数
 
|-
 
|-
 
|XMLEXISTS
 
|XMLEXISTS
|XQuery式が1つ以上の項目のシーケンスを戻すか判別する述部
+
|[[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列を識別するリテラル引数を使用
+
|[[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の機能を使用できる
+
|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>
+
&lt;blockquote&gt;SQLは大文字、小文字を区別しないが、[[XML]]は区別する。SQLは通常、自動的に大文字に変換されるが、[[XML]]と混在する場合は明示的に大文字として記述する必要がある。ただし、二重引用符で囲むことで、SQLでも大文字小文字を区別するようにすることもできる。&lt;/blockquote&gt;
  
==XQuery および XPath のデータ・モデル==
+
==[[XQuery]] および XPath のデータ・モデル==
 
===XDM===
 
===XDM===
*XQuery 式は、XQuery およぼ XPath のデータモデル XDM のインスタンスに対して作動し、XDMのインスタンスを戻す。
+
*[[XQuery]] 式は、[[XQuery]] およぼ XPath のデータモデル XDM のインスタンスに対して作動し、XDMのインスタンスを戻す。
 
*XDMはアトミック値およびノードのシーケンスで説明される
 
*XDMはアトミック値およびノードのシーケンスで説明される
 
===シーケンスおよび項目===
 
===シーケンスおよび項目===
80行目: 80行目:
 
=====例=====
 
=====例=====
 
*36
 
*36
*<dog/>
+
*&lt;dog/&gt;
 
*(2,3,4)
 
*(2,3,4)
*(36,<dog/>,"cat")
+
*(36,&lt;dog/&gt;,"cat")
 
*()
 
*()
 
===アトミック値===
 
===アトミック値===
89行目: 89行目:
 
===ノード階層===
 
===ノード階層===
 
*シーケンスのノードは、1つ以上の階層を形成する。
 
*シーケンスのノードは、1つ以上の階層を形成する。
*DB2は、文書、エレメント、属性、テキスト、処理命令、コメント ノードをサポート
+
*[[DB2]]は、文書、エレメント、属性、テキスト、処理命令、コメント ノードをサポート
  <products>
+
  &lt;products&gt;
   <product pid="10">
+
   &lt;product pid="10"&gt;
     <description>
+
     &lt;description&gt;
     <name>Fleece jacket</name>
+
     &lt;name&gt;Fleece jacket&lt;/name&gt;
     <price>19.99</price>
+
     &lt;price&gt;19.99&lt;/price&gt;
     </description>
+
     &lt;/description&gt;
   </product>
+
   &lt;/product&gt;
   <product pid="11">
+
   &lt;product pid="11"&gt;
     <description>
+
     &lt;description&gt;
       <name>Nylon pants</name>
+
       &lt;name&gt;Nylon pants&lt;/name&gt;
       <price>9.99</price>
+
       &lt;price&gt;9.99&lt;/price&gt;
     </description>
+
     &lt;/description&gt;
   </product>
+
   &lt;/product&gt;
  </products>
+
  &lt;/products&gt;
 
*products というルートエレメントが含まれる
 
*products というルートエレメントが含まれる
 
*ルートエレメントに product エレメントが含まれる
 
*ルートエレメントに product エレメントが含まれる
144行目: 144行目:
 
|}
 
|}
  
===DB2がサポートする6つのノード種類===
+
===[[DB2]]がサポートする6つのノード種類===
  
 
{|class="wikitable"
 
{|class="wikitable"
151行目: 151行目:
 
|-
 
|-
 
|文章ノード
 
|文章ノード
|XML文章をカプセル化
+
|[[XML]]文章をカプセル化
 
|-
 
|-
 
|エレメントノード
 
|エレメントノード
|XMLエレメントをカプセル化
+
|[[XML]]エレメントをカプセル化
 
|-
 
|-
 
|属性ノード
 
|属性ノード
|XML属性を意味する
+
|[[XML]]属性を意味する
 
|-
 
|-
 
|テキストノード
 
|テキストノード
|XMLの文字内容をカプセル化
+
|[[XML]]の文字内容をカプセル化
 
|-
 
|-
 
|処理命令ノード
 
|処理命令ノード
|XML処理命令をカプセル化
+
|[[XML]]処理命令をカプセル化
 
|-
 
|-
 
|コメントノード
 
|コメントノード
|XMLコメントをカプセル化
+
|[[XML]]コメントをカプセル化
 
|-
 
|-
 
|}
 
|}
  
 
===XDMのシリアライゼーション===
 
===XDMのシリアライゼーション===
*XQuery式の結果はXDMのインスタンスだが、シリアライゼーションを行い、XML表記に変換可能
+
*[[XQuery]]式の結果はXDMのインスタンスだが、シリアライゼーションを行い、XML表記に変換可能
*XMLSERIALIZE関数でも実行できる
+
*[[XML]]SERIALIZE関数でも実行できる
  
==XMLネームスペースと QName==
+
==[[XML]]ネームスペースと QName==
*XMLネームスペースは、命令の衝突を回避
+
*[[XML]]ネームスペースは、命令の衝突を回避
*XMLネームスペースは、URIによって識別される名前のコレクション
+
*[[XML]]ネームスペースは、URIによって識別される名前のコレクション
*XQueryのエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される
+
*[[XQuery]]のエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される
<blockquote>ネームスペース接頭部で修飾された名前が修飾名(QName)</blockquote>
+
&lt;blockquote&gt;ネームスペース接頭部で修飾された名前が修飾名(QName)&lt;/blockquote&gt;
 
===QNameの構成===
 
===QNameの構成===
 
*オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成
 
*オプションのネームスペース接頭部+ローカル名 (:で区切る)で構成
*照会の処理時に、ネームスペース接頭部にバインドされているURIを解決
+
*照会の処理時に、ネームスペース接頭部にバインドされているU[[R]]Iを解決
<blockquote>QName は、W3C勧告 Namespace in XML で定義される構文に準拠</blockquote>
+
&lt;blockquote&gt;QName は、W3C勧告 Namespace in [[XML]] で定義される構文に準拠&lt;/blockquote&gt;
 
====静的に既知のネームスペース====
 
====静的に既知のネームスペース====
 
=====事前宣言されたネームスペース=====
 
=====事前宣言されたネームスペース=====
 
{|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/XMLSchema
+
|http://www.w3.org/2001/[[XML]]Schema
 
|-
 
|-
 
|xsi
 
|xsi
|http://www.w3.org/2001/XMLSchema-instance
+
|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  が URI http://mycompany.com  と関連付けられる</blockquote>
+
&lt;blockquote&gt;接頭部 ns1  が U[[R]]I http://mycompany.com  と関連付けられる&lt;/blockquote&gt;
 
*エレメント・コンストラクターのネーム・スペース宣言属性によって宣言
 
*エレメント・コンストラクターのネーム・スペース宣言属性によって宣言
  <ns2:price xmlns:ns2="http://mycompany.com">14.99</ns2:price>
+
  &lt;ns2:price xmlns:ns2="http://mycompany.com"&gt;14.99&lt;/ns2:price&gt;
<blockquote>エレメントの有効範囲内で接頭部 ns2  を URI http://mycompany.com  にバインド</blockquote>
+
&lt;blockquote&gt;エレメントの有効範囲内で接頭部 ns2  を U[[R]]I http://mycompany.com  にバインド&lt;/blockquote&gt;
*SQL/XML  によって提供
+
*SQL/[[XML]] によって提供
**SQL/XMLの事前宣言されたネーム・スペース
+
**SQL/[[XML]]の事前宣言されたネーム・スペース
**SQL/XML  コンストラクターおよびその他の SQL/XML  式で宣言されるネーム・スペース
+
**SQL/[[XML]] コンストラクターおよびその他の SQL/[[XML]] 式で宣言されるネーム・スペース
  
 
==タイプ・システム==
 
==タイプ・システム==
*XQuery は強く型付けされた言語
+
*[[XQuery]] は強く型付けされた言語
*XQuery のタイプ・システムには、XMLスキーマの組み込みタイプおよび、XQueryの事前定義タイプが含まれる
+
*[[XQuery]] のタイプ・システムには、XMLスキーマの組み込みタイプおよび、[[XQuery]]の事前定義タイプが含まれる
*XML スキーマの組み込みタイプは、http://www.w3.org/2001/XMLScheme にあり、接頭部 xs を持つ
+
*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行目:
 
|-
 
|-
 
|デフォルトの関数ネーム・スペース宣言
 
|デフォルトの関数ネーム・スペース宣言
|関数呼び出しの接頭部が付かない関数に使用されるネーム・スペース URI を指定
+
|関数呼び出しの接頭部が付かない関数に使用されるネーム・スペース 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";
 
|-
 
|-
 
|空の順序宣言
 
|空の順序宣言
|FLWOR 式の order by 節が処理されるときの空のシーケンスまたは NaNの最大最小としての解釈
+
|FLWO[[R]] 式の order by 節が処理されるときの空のシーケンスまたは NaNの最大最小としての解釈
 
|declare default order empty greatest;
 
|declare default order empty greatest;
 
|-
 
|-
318行目: 318行目:
 
*変数参照は、ドル記号 ($)  が先頭に付加された NCName
 
*変数参照は、ドル記号 ($)  が先頭に付加された NCName
 
====変数を有効範囲内に追加====
 
====変数を有効範囲内に追加====
*ホスト言語環境、SQL/XML、XMLQUERY 関数、 XMLTABLE 関数、または XMLEXISTS 述部によって有効範囲内変数に追加
+
*ホスト言語環境、SQL/[[XML]]、[[XML]]QUERY 関数、 [[XML]]TABLE 関数、または [[XML]]EXISTS 述部によって有効範囲内変数に追加
*XQuery  式によって変数を値にバインド
+
*[[XQuery]] 式によって変数を値にバインド
**変数をバインドできる式は、FLWOR 式および量化式
+
**変数をバインドできる式は、FLWO[[R]] 式および量化式
 
**関数呼び出しも、関数本体を実行する前に、関数の仮パラメーターに値をバインド
 
**関数呼び出しも、関数本体を実行する前に、関数の仮パラメーターに値をバインド
 
**バインドされた式全体を通して有効範囲内
 
**バインドされた式全体を通して有効範囲内
  
 
=====例=====
 
=====例=====
*FLWOR 式が、変数 $seq をシーケンス (10,  20,  30)  にバインド
+
*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>
+
&lt;blockquote&gt;戻り値は 20&lt;/blockquote&gt;
 
===コンテキスト・アイテム式===
 
===コンテキスト・アイテム式===
 
*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>
+
&lt;blockquote&gt;1  から 100  までの数字で、5  で均等に割り切れる整数のシーケンス&lt;/blockquote&gt;
 
===関数呼び出し===
 
===関数呼び出し===
 
*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)> 1]
+
  $book/(chapter | appendix)[fn:count(footnote)&gt; 1]
 
===軸ステップ===
 
===軸ステップ===
 
=====構成=====
 
=====構成=====
408行目: 408行目:
 
|-
 
|-
 
|フォワード・ステップ
 
|フォワード・ステップ
|コンテキスト・ノードから開始し、文書の順序で XMLツリーを移動
+
|コンテキスト・ノードから開始し、文書の順序で [[XML]]ツリーを移動
 
|-
 
|-
 
|リバース・ステップ
 
|リバース・ステップ
|コンテキスト・ノードから開始し、文書の順序の逆で XML  ツリーを移動
+
|コンテキスト・ノードから開始し、文書の順序の逆で [[XML]] ツリーを移動
 
|-
 
|-
 
|}
 
|}
417行目: 417行目:
 
*child が軸の名前、para がこの軸上で選択されるエレメント・ノードの名前
 
*child が軸の名前、para がこの軸上で選択されるエレメント・ノードの名前
 
  child::para
 
  child::para
<blockquote>この例の軸ステップでは、コンテキスト・ノードの子であるすべての para エレメントを選択</blockquote>
+
&lt;blockquote&gt;この例の軸ステップでは、コンテキスト・ノードの子であるすべての para エレメントを選択&lt;/blockquote&gt;
 
===軸===
 
===軸===
*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

XML | XQuery |

  • DB2 XML DB (pureXML)

XMLデータ

柔軟
  • XMLデータは柔軟で、予測不能で、散在しており、自己記述的
XQueryを使うしかない局面
  • 階層のどのレベルにあるか不明なオブジェクトのXMLを検索
  • データにタイして構造変換を実行
  • タイプが混合した結果を戻す
  • 既存のXMLを更新

照会のコンポーネント

プロローグと照会本体からなる

  • プロローグには、照会処理環境を定義する一連の宣言
<!-- プロローグ -->
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 で始まる。
  • SQL/XMLでは、以下の関数と述部を指定してSQLからXQueryを呼び出す
キーワード/関数/述部 内容
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

  • XQuery 式は、XQuery およぼ XPath のデータモデル XDM のインスタンスに対して作動し、XDMのインスタンスを戻す。
  • 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のシリアライゼーション

  • XQuery式の結果はXDMのインスタンスだが、シリアライゼーションを行い、XML表記に変換可能
  • XMLSERIALIZE関数でも実行できる

XMLネームスペースと QName

  • XMLネームスペースは、命令の衝突を回避
  • XMLネームスペースは、URIによって識別される名前のコレクション
  • XQueryのエレメント、属性、データタイプ、関数に使用される名前の修飾方法が提供される

<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>

  • SQL/XML によって提供
    • SQL/XMLの事前宣言されたネーム・スペース
    • SQL/XML コンストラクターおよびその他の SQL/XML 式で宣言されるネーム・スペース

タイプ・システム

  • 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 から派生

テンプレート:Ref xdt hierarchy.jpg

プロローグ

  • 照会の処理環境を定義する一連の宣言

宣言

宣言 内容
バージョン宣言 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/XMLXMLQUERY 関数、 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))

パス式

  • XML ツリー内のノードを識別
  • XPath 2.0 の構文に基づく
  • パス式は、スラッシュ (/) またはダブルスラッシュ (//) 文字で区切られた 1 つ以上のステップで構成

構文

  • 各ステップは、軸ステップまたはフィルター式のいずれか
パス式 内容
軸ステップ 指定された軸によってコンテキスト・ノードから到達できるノードのシーケンスを戻す
フィルター式 基本式と、それに続く 0 個以上の述部で構成

0337 xpath expression.jpg

記号 説明
/ パスが、コンテキスト・ノードを含むツリーのルート・ノードから開始されることを示す。パス式内のスラッシュ文字は、ステップを分離
// パスが、コンテキスト・ノードを含むツリーのルート・ノードと、そのルート・ノードのすべての子孫で構成される初期ノード・シーケンスから開始されることを示す。ステップ間のダブルスラッシュ文字は、省略構文参照
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