CodeZine(コードジン)

特集ページ一覧

XMLデータの操作(前編) ~ XPath、XQuery

Cyber Luxeonで学ぶXMLDB入門 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

XQuery/XPath共通関数・演算子(2/2)

日付/時間 関連関数

 日付、時間関連の関数として、Cyber Luxeonでは、date関数、get-month-from-date関数、get-year-from-date関数をサポートしています。

 検索対象となるサンプルのXMLを以下の図に示します。

サンプルXML
サンプルXML

 サンプルのXMLに対し、以下のdate関数を使用したXQuery文を実行します。

date()関数の実行例
for $p in document("test_xmlstore:/test_dir/players.xml")/players/player
  where contains($p/position/text(),'投手')
  return
       <pitcher>
          <name>{$p/name/text()}</name>
          <current_date>{date()}</current_date>
       </pitcher>

 CyberLuxeonで実行した結果は次のとおりになります。

date関数実行結果
date関数実行結果

 現在日付が、<current_date>要素の値として出力されているのが分かります。

シーケンス操作関数

 シーケンスを操作するための関数として、Cyber Luxeonでは、existsindex-ofremovedeep-equaldistinct-valuesinserなどの関数をサポートしています。以下ではexists関数を使用例として説明します。

exists関数

書式
exists($arg)

 引数が空のシーケンスではない場合、trueを返します。

 検索対象となるサンプルのXMLを以下の図に示します。

サンプルXML
サンプルXML

 サンプルのXMLに対し、以下のexists関数を使用したXQuery文を実行します。name要素が「イチロー」にマッチした場合のみ$name変数にシーケンスが格納されるので、その次の文のexist関数はtrueを返します。

exists()関数の例
for $n in document("test_xmlstore:/test_dir/players.xml")/players/player/name

  let $name := $n/text()[.='イチロー']
  where exists($name)
  return
       <PlayerName>{$name}</PlayerName>

 CyberLuxeonで実行した結果は次のとおりになります。

exists関数実行結果
exists関数実行結果

Cyber Luxeon2.0でサポートされている関数

 最後にCyber Luxeonでサポートされている関数についてまとめました。

アクセッサー関数
関数説明
string($arg)引数で渡されたアイテムの文字列表現を返します。引数が省略された場合は、コンテキストアイテムがデフォルトの引数として扱われます。
数値関数
関数説明
ceiling($arg)$argの小数部分を切り上げて整数を返します。$argが10.5の場合、11を返します。$argが-10.5の場合、-10を返します。
floor($arg)$argの小数部分を切り捨て、小さい方の整数を返します。$argが10.5の場合、10を返します。$argが-10.5の場合、-11を返します。
round($arg)$argの整数の丸め処理を行います。$argが2.5の場合、3を返します。$argが-2.499の場合、-2を返します。
文字列関数
関数説明
starts-with($arg1,$arg2)$arg1$arg2の文字列で始まるか判定します。
ends-with($arg1,$arg2)$arg1$arg2の文字列で終了するか判定します。
日付/時間 関連関数
関数説明
date()現在日付を返します。
get-month-from-date()現在月を返します。
get-year-from-date()現在年を返します。
シーケンス操作関数
関数説明
deep-equal($arg1,$arg2)$arg1$arg2のシーケンスが、要素の階層や、型、値などすべて等しいかを判定します。
distinct-values($arg)$argのシーケンスから重複する値を削除します。
distinct-nodes($arg)$argのシーケンスから重複するノードを削除します。
remove($arg1,$arg2)$arg1から$arg2を削除します。
exists($arg1)$arg1にシーケンスが格納されているか判定します。
index-of($arg1,$arg2)$arg1の文字列上で$arg2が現れる位置を返します。
insert($arg1,$arg2,$arg3)$1の$arg2で指定された位置に、$arg3を挿入します。
sequence-node-equal()$arg1$arg2のシーケンスが、実際に同じノード自体を含んでいるかを判定します(ノード同等性)。
sequence-deep-equal
($arg1,$arg2)
$arg1$arg2のシーケンスの実際の値を検証して等しいかを判定します(値同等性)。
node-equal($arg1,$arg2)$arg1$arg2のノードが同じノードかを判定します(ノード同等性)。
データモデル
 XQuery1.0とXPath 2.0では、XMLデータをテキストとして、そのまま扱うのではなく『XQuery 1.0 and XPath 2.0 Data Model (XDM)』というデータモデルとして扱います。XDMとは、XQuery、XPathなどで扱う値のデータ型をモデルとして定義したものです。例えば、文字列(string)、整数(int)、長精度(double)などです。XPath、XQueryでは、処理の入力と出力はこのXDMとして定義されています。以下の図にXQueryとXDMの関係に関する概念図を示しました。
XQueryとXDM
XQueryとXDM
 XDMの詳細については、W3Cの仕様書『XQuery 1.0 and XPath 2.0 Data Model (XDM)』や参考文献などを参照してください。

まとめ

 本稿では、XMLデータベースの検索用言語の標準であるXQueryとXPathの基本について説明しました。2007年1月22日にはXMLDBのプロフェッショナルを認定するXMLマスターの新資格が発表されるなど、XMLDB関連の動きが、業界全体で活発化してきています。Cyber LuxeonはDeveloper Editionが無償で提供されていますので、本格的なXMLDB時代が到来する前に、XQueryなどXMLDBの機能を実際に試して体感しておくのはいかがでしょうか。次回は、Cyber LuxeonがXMLデータ更新用機能として用意しているXML updategram(XUG)を紹介します。

参考資料

  1. Cyber Luxeon ハンドブック』 サイバーテック社
  2. XMLデータベース入門』 山田祥寛 著、翔泳社、2006年4月
  3. XQuery+XMLデータベース入門』 菅原香代子・米持幸寿 著、日経BP社、2006年11月
  4. @IT 『一気に分かる“XQuery”ハンズオン演習』 米持幸寿 著、2006年7月
  5. IBM developerWork 『実用的なXML:XSLT 2.0とXQueryの比較』 Benoit Marchal 著、2006年4月
  6. IBM developerWork 『XQuery入門』 Howard Katz 著、2006年1月
  7. IBM developerWork 『実用的なXML: XPath 2.0を使い始める』 Benoit Marchal 著、2006年5月


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2007/02/17 11:15 2007年1月23日のXQuery1.0の勧告にあわせて、内容を変更。

バックナンバー

連載:Cyber Luxeonで学ぶXMLDB入門

著者プロフィール

  • WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5