توابع 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: پیشوند پیش‌فرض نام‌فضاست، نیازی به استفاده از پیشوند در هنگام فراخوانی نیست.توجه:

می‌توانید کاملترین کتابخانه توابع XPath را در آموزش‌های ما پیدا کنید:دستورالعمل توابع داخلی 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 تعریف شده‌اند، همخوانی دارد
  • متن تابع باید توسط براکت‌های flower bracket محصور شود

یک مثال از تابع کاربر تعریف شده در جستجو:

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>