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に対し、string関数を用いたXQuery内を実行します。
for $p in document("test_xmlstore:/test_dir/players.xml")/players/player
return
<name>{string($p)}</name>
CyberLuxeonで実行した結果は次のとおりになります。
player要素内のテキスト値が、name要素内に出力されています。
数値関数
数値関数として、CyberLuxeonでは、ceiling関数、floor関数、round関数などをサポートしています。以下ではceiling関数を使用例として説明します。
ceiling関数
ceiling($arg1)
数値$arg1の小数点以下の値を切り上げて返します。
サンプルのXMLは次のようになります。小数点以下の切り上げを確認するため、2番目のplayer要素のbacknumber属性に「51.2」を指定しています。
<?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内を実行します。
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で実行した結果は次のとおりになります。
「51.2」が「52」に切り上げられて出力されているのが確認できます。
文字列関数
文字列用の関数として、Cyber Luxeonでは、starts-with関数、ends-with関数、contains関数などをサポートしています。以下ではstart-with関数を使用例として説明します。
start-with関数
start-with($arg1,$arg2)
$arg1の文字列が$arg2の文字列で始まっていれば、trueを返します。
<?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に対し、以下のstarts-with関数を使用したXQuery文を実行します。
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で実行した結果は次のとおりになります。
name要素のテキスト値が「松」で始まるもののみ抽出されているのが分かります。



