XQuery ファンクション

XQuery 1.0、XPath 2.0 以及 XSLT 2.0 共享相同的函数库。

XQuery ファンクション

XQuery 包含超过 100 个内建的函数。这些函数可用于字符串值、数值、日期和时间比较、节点和 QName 操作、序列操作、逻辑值等等。您也可以在 XQuery 中定义自己的函数。

XQuery 内建函数

XQuery 函数命名空间的 URI:

http://www.w3.org/2005/02/xpath-functions

函数命名空间的默认前缀是 fn:。

提示:函数通常通过 fn: 前缀进行调用,例如 fn:string()。不过,由于 fn: 是命名空间的默认前缀,所以函数名称在被调用时不必使用前缀。

您可以在我们的 XPath 教程中找到完整的《内建 XQuery 函数参考手册》。

函数调用示例

函数调用可以与表达式一起使用。请看下面的例子:

例1:在元素中

<name>{upper-case($booktitle)}</name>

例2: 在路径表达式的条件中

doc("books.xml")/bookstore/book[substring(title,1,5)='Harry']

例3: 在 let 文件中

let $name := (substring($booktitle,1,4))

XQuery ユーザー定義関数

必要な XQuery 関数が見つからない場合、自分自身の関数を書くことができます。

ユーザー定義関数はクエリ内や独立したライブラリで定義できます。

文法

declare function 接頭辞:関数名($パラメータ AS データ型)
  AS 返却データ型
{
(: ...関数コード... :)
;

ユーザー定義関数に関する注意点:

  • declare function キーワードを使用してください
  • 関数名は接頭辞を使用する必要があります
  • パラメータのデータ型は通常 XML Schema で定義されたデータ型と一致します
  • 関数の本体は括弧で囲まれます

ユーザー定義関数の例:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?
  AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(: 上記の関数を呼び出す例です :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>