Функции XQuery

XQuery 1.0, XPath 2.0 и XSLT 2.0 делят одинаковые функции библиотеки.

Функции XQuery

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

Внутренние функции XQuery

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

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

Default prefix для пространства имен функций - fn:.

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

Вы можете найти полное руководство по XPath в нашем курсе по XPath:Референтное руководство по встроенным функциям XQuery》。

Пример вызова функции

Вызов функции можно использовать вместе с выражением. Вот пример:

Пример 1: В элементе

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

Пример 2: В_predicat_expressions_путь_выражения

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>