XQuery Fonksiyonları

XQuery 1.0, XPath 2.0 ve XSLT 2.0 aynı fonksiyon kütüphanesini paylaşır.

XQuery Fonksiyonları

XQuery 100'den fazla içsel fonksiyon içerir. Bu fonksiyonlar, string değerleri, sayısal değerler, tarih ve zaman karşılaştırmaları, düğüm ve QName işlemleri, sıra işlemleri ve mantıksal değerler için kullanılabilir. Ayrıca, XQuery'de kendi fonksiyonlarınızı tanımlayabilirsiniz.

XQuery İçerikli Fonksiyonlar

XQuery Fonksiyon Adlandırma Alanı URI'si:

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

Fonksiyon adlandırma alanının varsayılan öneksi fn:.dır.

İpucu:Fonksiyonlar genellikle fn: öneki ile çağrılır, örneğin fn:string(). Ancak, fn: adlandırma alanının varsayılan öneksi olduğu için, fonksiyon adı çağrılırken önek kullanmak zorunlu değildir.

Tam metni, XPath eğitimimizde bulabilirsiniz:XQuery İçerikli Fonksiyon Referans Kılavuzu》。

Fonksiyon çağrıları örneği

Fonksiyon çağrıları, ifadelerle birlikte kullanılabilir. Aşağıdaki örneklere bakın:

Örnek 1: Eleman içinde

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

Örnek 2: Yol ifadesinin önyargısında

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

Örnek 3: let ifadesinde

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

XQuery kullanıcı tanımlı fonksiyonu

Gerekli XQuery fonksiyonunu bulamıyorsanız, kendi fonksiyonunuzu yazabilirsiniz.

Kullanıcı tanımlı fonksiyonlar sorgularda veya bağımsız kütüphanelerde tanımlanabilir.

Sözdizimi

declare function ön eki:fonksiyon adı($parametre AS veri türü)
  AS geri dönen veri türü
{
(: ...fonksiyon kodu... :)
;

Kullanıcı tanımlı fonksiyonlar hakkında dikkat edilmesi gerekenler:

  • declare function anahtar kelimesini kullanın
  • Fonksiyon adları ön ek kullanmalıdır
  • Parametre veri türleri genellikle XML Şemasında tanımlanan veri türleriyle uyumludur
  • Fonksiyon içeriği parantezler içinde yer almalıdır

Bir kullanıcı tanımlı fonksiyonun tanımlanmış bir örneği:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(: Yukarıdaki fonksiyonu çağıran örnekler aşağıdadır :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>