توابع (XQuery Functions)
اینجا درباره «توابع (Functions)» در XQuery حرف می زنیم. این توابع همراه XPath کار می کنند. «کتابخانه توابع (Functions Library)» مجموعه ای از ابزارهای آماده است؛ مثل ابزارهای ماشین حساب گوشی.
کتابخانه مشترک توابع
XQuery 1.0 با XPath 2.0 هم مدل است. پس توابع و عملگرهایشان یکی است. بنابراین، بسیاری از نیازها با همان توابع استاندارد حل می شود.
انواع داده (Data Types)
انواع داده XQuery مطابق XML Schema (XSD) است. بنابراین رشته، عدد، تاریخ و… طبق XSD تفسیر می شوند. این سازگاری، تبادل داده را ساده می کند.
نمونه های فراخوانی تابع
تابع می تواند هرجا بیاید؛ داخل عنصر، در شرط مسیر، یا داخل let.
1) داخل یک عنصر
<name>{upper-case($booktitle)}</name>
2) در شرطِ مسیر (Predicate)
doc("books.xml")/bookstore/book[substring(title, 1, 5) = 'Harry']
3) داخل let برای نگه داری مقدار
let $name := substring($booktitle, 1, 4)
توابع کاربرساخت (User-Defined)
اگر تابع آماده نداریم، خودمان می نویسیم. با declare function تعریف می شود. نام تابع باید پیشوند داشته باشد؛ مثلاً local:.
ساختار تعریف تابع
declare function prefix:function_name($parameter as datatype)
as returnDatatype
{
(: function code here :)
};
مثال: محاسبه کمترین قیمت با تخفیف
declare function local:minPrice($p as xs:decimal?, $d as xs:decimal?)
as xs:decimal?
{
let $disc := ($p * $d) div 100
return ($p - $disc)
};
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>
گام های عملی سریع
- یک تابع با
declare functionبساز. - نوع پارامترها را از XSD انتخاب کن.
- با
letمحاسبه میانی انجام بده. - خروجی را در عنصر XML برگردان.
نکته: برای متن خالص از data() کمک بگیر. برچسب حذف می شود.
مطالب مرتبط: انتخاب (XQuery Select) · سینتکس (XQuery Syntax) · اصطلاحات (XQuery Terms).
جمع بندی سریع
- کتابخانه توابع با XPath مشترک است.
- انواع داده طبق XSD است.
- توابع همه جا قابل استفاده اند.
- تابع خودت را با پیشوند بساز.
- با let محاسبه را ساده کن.