CodeZine(コードジン)

特集ページ一覧

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

Cyber Luxeonで学ぶXMLDB入門 第2回

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

目次

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

 XQuery 1.0/XPath 2.0で使用する関数は、XQuery 1.0 and XPath 2.0 Functions and Operatorsとして、共通で仕様が定義されています。ここでは、Cyber Luxonがサポートしている関数を中心に紹介します。

アクセッサー関数

 アクセッサー関数はXQuery 1.0 and XPath 2.0 Data Modelに定義されたアクセッサーからデータを取得するための関数です。アクセッサーは、データモデルのすべての種類のノードに定義されています。データモデルに定義されているアクセッサーについては、XQuery 1.0 and XPath 2.0 Data Modelの「Accessors」を参照してください。

 Cyber Luxeonでは、アクセッサー関数として、string関数をサポートしています。以下にstring関数について説明します。

string関数

書式
string($arg1)

 $arg1の文字列表現を返します。

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

サンプルXML
サンプルXML

 上記のXMLに対し、string関数を用いたXQuery内を実行します。

string関数の実行例
for $p in document("test_xmlstore:/test_dir/players.xml")/players/player
  return
      <name>{string($p)}</name>

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

string関数実行結果
string関数実行結果

 player要素内のテキスト値が、name要素内に出力されています。

数値関数

 数値関数として、CyberLuxeonでは、ceiling関数、floor関数、round関数などをサポートしています。以下ではceiling関数を使用例として説明します。

ceiling関数

書式
ceiling($arg1)

 数値$arg1の小数点以下の値を切り上げて返します。

 サンプルのXMLは次のようになります。小数点以下の切り上げを確認するため、2番目のplayer要素のbacknumber属性に「51.2」を指定しています。

入力XML
<?xml version="1.0" encoding="UTF-8"?>
<players>
    <player backnumber="11">
       <position>投手</position>
       <name>野茂英雄</name>
    </player>
    <player backnumber="51.2">
       <position>外野手</position>
       <name>イチロー</name>
    </player>
</players>

 上記のXMLに対し、ceiling関数を用いたXQuery内を実行します。

ceiling関数の実行例
for $p in document("test_xmlstore:/test_dir/players.xml")/players/player
  where starts-with($p/name/text(),'イチ')
  return
      <name>{ceiling($p/@backnumber)}</name>

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

ceiling関数実行結果
ceiling関数実行結果

 「51.2」が「52」に切り上げられて出力されているのが確認できます。

文字列関数

 文字列用の関数として、Cyber Luxeonでは、starts-with関数、ends-with関数、contains関数などをサポートしています。以下ではstart-with関数を使用例として説明します。

start-with関数

書式
start-with($arg1,$arg2)

 $arg1の文字列が$arg2の文字列で始まっていれば、trueを返します。

入力XML
<?xml version="1.0" encoding="UTF-8"?>
<players>
    <player backnumber="11">
       <position>投手</position>
       <name>野茂英雄</name>
    </player>
    <player backnumber="51">
       <position>外野手</position>
       <name>イチロー</name>
    </player>
</players>

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

サンプルXML
サンプルXML

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

starts-with関数の実行例
for $p in document("test_xmlstore:/test_dir/players.xml")/players/player
  where starts-with($p/name/text(),'松')
  return
      <name>{$p/name/text()}</name>

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

starts-with関数実行結果
starts-with関数実行結果

 name要素のテキスト値が「松」で始まるもののみ抽出されているのが分かります。


  • 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