Fungsi XQuery

XQuery 1.0, XPath 2.0, dan XSLT 2.0 berbagi pustaka fungsi yang sama.

Fungsi XQuery

XQuery memiliki lebih dari 100 fungsi bawaan. Fungsi ini dapat digunakan untuk nilai string, angka, tanggal dan waktu, perbandingan antara node dan QName, operasi sequence, nilai logika, dan lainnya. Anda juga dapat mendefinisikan fungsi sendiri di XQuery.

Fungsi bawaan XQuery

URI namespace fungsi XQuery:

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

Prefiks namespace standar untuk fungsi adalah fn:.

Petunjuk:Fungsi sering dipanggil melalui prefiks fn: seperti fn:string(). Namun, karena fn: adalah prefiks namespace standar, nama fungsi tidak harus digunakan saat dipanggil.

Anda dapat menemukan referensi lengkap dalam pelatihan XPath kami《Referensi referensi fungsi XQuery bawaan》。

Contoh pemanggilan fungsi

Pemanggilan fungsi dapat digunakan bersamaan dengan ekspresi. Lihat contoh di bawah ini:

Contoh 1: Dalam elemen

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

Contoh 2: Dalam predikat ekspresi jalur

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

Contoh 3: Dalam pernyataan let

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

Fungsi pengguna XQuery

Jika fungsi XQuery yang diperlukan tidak ditemukan, Anda dapat menulis fungsi sendiri.

Fungsi yang dideklarasikan pengguna dapat didefinisikan dalam kueri atau dalam pustaka yang terpisah.

Sintaks

declare function prefiks:nama_fungsi($parameter AS tipe_data)
  AS tipe data yang kembalikan
{}}
(: ...kode fungsi... :)
;

Perhatian tentang fungsi yang dideklarasikan pengguna:

  • Gunakan kata kunci declare function
  • Nama fungsi harus menggunakan prefiks
  • Tipe data parameter biasanya sama dengan tipe data yang didefinisikan di XML Schema
  • Teks fungsi harus diselengkapkan dengan tanda kurung kurawal

Sebuah contoh fungsi yang dideklarasikan pengguna:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{}}
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(: Berikut adalah contoh pemanggilan fungsi di atas :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>