توابع XQuery

XQuery 1.0، XPath 2.0 و XSLT 2.0 از همان کتابخانه توابع استفاده می‌کنند.

توابع XQuery

XQuery شامل بیش از 100 تابع داخلی است. این توابع می‌توانند برای مقایسه رشته‌ها، اعداد، تاریخ و زمان، عملیات روی گره‌ها و QName، عملیات بر روی توالی‌ها و مقادیر منطقی و غیره استفاده شوند. شما همچنین می‌توانید توابع خود را در XQuery تعریف کنید.

توابع داخلی XQuery

URI فضای نام توابع XQuery:

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

پیشوند پیش‌فرض فضای نام توابع fn: است.

توجه:توابع معمولاً با پیشوند fn: فراخوانی می‌شوند، به عنوان مثال fn:string()، اما چون fn: پیشوند پیش‌فرض فضای نام است، بنابراین نام توابع لزوماً نیازی به پیشوند در هنگام فراخوانی ندارد.

شما می‌توانید کامل‌ترین نسخه از کتاب «دستورالعمل‌های کاربردهای داخلی XQuery》。

مثال فراخوانی تابع

استفاده از فراخوانی‌های تابع با عبارات ممکن است. به مثال زیر نگاه کنید:

مثال 1: در عناصر

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

مثال 2: در شرطگرندهای مسیر

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>