ایکس کوئری فونکشن

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

ایکس کوئری فونکشن

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 کلید جوہر استعمال کریں
  • فونکشن کا نام پریفیکس کا استعمال کیا جانا چاہئے
  • فونکشن کا معاملات کا نوعیت عام طور پر ایکس ایم ال شیما میں کا معاملات کا نوعیت سے مشابہت رکھتا ہے
  • فونکشن کا بنیادی حصہ کا کسی بھی بلاک کی وجہ سے بلند کیا گیا ہے

ایک جائز معاملہ کا مثال: ایک استعمال کے ذریعہ معلومات فراہم کرنے والی کاربر کی خصوصی فونکشن

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>