SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Cyber Luxeonで学ぶXMLDB入門

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

Cyber Luxeonで学ぶXMLDB入門 第2回


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要素のテキスト値が「松」で始まるもののみ抽出されているのが分かります。

次のページ
XQuery/XPath共通関数・演算子(2/2)

修正履歴

この記事は参考になりましたか?

Cyber Luxeonで学ぶXMLDB入門連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/922 2007/06/13 10:07

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー