Funções do XQuery

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

Funções do XQuery

O XQuery contém mais de 100 funções internas. Essas funções podem ser usadas para valores de string, valores numéricos, comparação de datas e tempos, 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 internas XQuery

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

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

O prefixo padrão do espaço de nomes de 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 nome da função não precisa ser usado com o prefixo quando chamado.

Você pode encontrar o manual completo do XPath em nosso tutorial de XPath:Manual de Referência de Funções XQuery》。

Exemplo de chamada de função

Chamadas de função podem ser usadas juntamente com expressões. Veja os seguintes exemplos:

Exemplo 1: Dentro do elemento

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

Exemplo 2: Dentro do predicado de 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ção de usuário definida no XQuery

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

As funções de usuário personalizadas podem ser definidas dentro da consulta ou em uma biblioteca independente.

Sintaxe

declare function prefixo:nome_da_função($parâmetro AS tipo_de_dados)
  AS tipo_de_dados_de_retorno
{
(: ...código da função... :)
;

Considerações sobre funções de usuário 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

Exemplo de função de usuário declarada em 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)
;
(Exemplos de chamadas de função acima):
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>