Funções XQuery

O XQuery 1.0, XPath 2.0 e XSLT 2.0 compartilham a mesma biblioteca de funções.

Funções XQuery

O XQuery contém mais de 100 funções embutidas. Essas funções podem ser usadas para valores de string, números, comparação de datas e horários, operações de nós e QName, operações de sequência, valores lógicos etc. Você também pode definir suas próprias funções no XQuery.

Funções embutidas XQuery

URI do espaço de nomes das funções XQuery:

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

O prefixo padrão do espaço de nomes da função é fn:.

Dica:As funções são frequentemente chamadas com o prefixo fn:, por exemplo, fn:string(). No entanto, como fn: é o prefixo padrão do espaço de nomes, o prefixo não precisa ser usado na chamada da função.

Você pode encontrar o completo no nosso tutorial de XPath:Manual de referência de funções XQuery embutidas》。

Exemplo de chamada da função

A chamada da função pode ser usada junto com a expressão. Veja os seguintes exemplos:

Exemplo 1: dentro do elemento

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

Exemplo 2: no predicado da expressão de caminho

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

Exemplo 3: dentro da instrução let

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

Funções definidas pelo usuário XQuery

Se não encontrar a função XQuery necessária, você pode escrever sua própria função.

As funções personalizadas podem ser definidas em consultas ou em bibliotecas independentes.

Sintaxe

declare function prefixo:nomeDaFunção($parâmetro AS tipoDeDado)
  AS tipo de dados de retorno
{}}
(: ...código da função... :)
;

Considerações sobre funções personalizadas:

  • Use a palavra-chave declare function
  • O nome da função deve usar prefixo
  • O tipo de dados dos parâmetros geralmente coincide com o tipo de dados definido no XML Schema
  • O corpo da função deve ser envolto por chaves

Um exemplo de função personalizada declarada na consulta:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{}}
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(: Abaixo está o exemplo de chamada da função acima :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>