XQuery
زبان پرسوجو روی دادههای XML با XQuery و الگوی FLWOR
XQuery چیست؟
XQuery زبان پرسوجو (Query) برای دادههای XML است — درست مثل SQL برای پایگاههای داده رابطهای. با XQuery میتوانید از اسناد XML و پایگاههای داده XML اطلاعات استخراج کنید.
XQuery بر پایه XPath ساخته شده (درس قبل) و از عبارات مسیر همان استفاده میکند.
مثال: پرسوجوی ساده
doc("books.xml")//book[price<30]/title
این پرسوجو از فایل books.xml همه عناصر title از کتابهایی که قیمتشان کمتر از ۳۰ است را برمیگرداند.
الگوی FLWOR
قلب XQuery الگوی FLWOR است (تلفظ: فلاور). مخفف پنج بند:
| بند | نام کامل | کارکرد |
|---|---|---|
| for | FOR | انتخاب گرهها برای پیمایش (مثل حلقه) |
| let | LET | تعریف متغیر |
| where | WHERE | فیلتر کردن نتایج |
| order by | ORDER BY | مرتبسازی |
| return | RETURN | شکل خروجی |
مثال کامل FLWOR
for $x in doc("books.xml")/bookstore/book
where $x/price > 30
order by $x/title
return $x/title
ترجمه فارسی: «برای هر کتاب ($x) در کتابفروشی، اگر قیمتش بالای ۳۰ بود، بر اساس عنوان مرتب کن و عنوانش را برگردان.»
مقایسه با SQL
-- SQL
SELECT title FROM books
WHERE price > 30
ORDER BY title;
(: XQuery :)
for $x in doc("books.xml")//book
where $x/price > 30
order by $x/title
return $x/title
ساخت خروجی HTML
XQuery میتواند خروجی ساختاریافته بسازد:
<ul>
{
for $x in doc("books.xml")//book
where $x/price > 30
return <li>{data($x/title)}</li>
}
</ul>
خروجی:
<ul>
<li>Learning XML</li>
<li>XPath Advanced</li>
</ul>
شرط if-then-else در XQuery
for $x in doc("books.xml")//book
return if ($x/price > 30)
then <span class="expensive">{data($x/title)}</span>
else <span class="cheap">{data($x/title)}</span>
کجا از XQuery استفاده میشود؟
- پایگاههای داده XML مثل BaseX، eXist-db و MarkLogic
- استخراج و پردازش داده از اسناد XML حجیم
- تبدیل و گزارشگیری از دادههای XML
- پردازش فیدهای RSS و اسناد سازمانی
اگر SQL بلدید، XQuery خیلی برایتان آسان خواهد بود — مفاهیم فیلتر، مرتبسازی و پروجکشن یکساناند؛ فقط سینتکس متفاوت است.
این مبحث بخشی از دوره آموزش کامل XML است.