XQuery Функции


XQuery 1.0, XPath 2.0 и XSLT 2.0 используют одну и ту же библиотеку функций.


XQuery: функции

XQuery содержит более 100 встроенных функций. Эти функции можно использовать для строковых значений, числовых значений, сравнения даты и времени, операций с узлами и QName, операций с последовательностями, логических значений и т. д. Вы также можете определять собственные функции в XQuery.


Встроенные функции XQuery

URI пространства имен функций XQuery:

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

Префикс пространства имен функций по умолчанию — fn:.

Совет:Функции часто вызываются с префиксом fn:, например fn:string(). Однако, поскольку fn: является префиксом пространства имен по умолчанию, имя функции не обязано использовать префикс при вызове.

Вы можете найти полноесправочное руководство по встроенным функциям 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 prefix:function-name($ПараметрыASТип данных)
AS Тип возвращаемых данных
{
 ...Код функции...
}

Примечания о пользовательских функциях:

  • Используйте ключевое слово declare function
  • Имя функции должно использовать префикс
  • Типы данных параметров обычно соответствуют типам данных, определённым в XML Schema.
  • Тело функции должно быть заключено в фигурные скобки.

Пример пользовательской функции, объявленной в запросе:

declare function local:minPrice($p as xs:decimal?,$d as xs:decimal?)
AS xs:decimal?
{
let $disc := ($p * $d) div 100
return ($p - $disc)
}

Ниже приведён пример вызова функции выше:

<minPrice>{local:minPrice($book/price,$book/discount)}</minPrice>
Другие расширения