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 است (تلفظ: فلاور). مخفف پنج بند:

بندنام کاملکارکرد
forFORانتخاب گره‌ها برای پیمایش (مثل حلقه)
letLETتعریف متغیر
whereWHEREفیلتر کردن نتایج
order byORDER BYمرتب‌سازی
returnRETURNشکل خروجی

مثال کامل 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 استفاده می‌شود؟

اگر SQL بلدید، XQuery خیلی برایتان آسان خواهد بود — مفاهیم فیلتر، مرتب‌سازی و پروجکشن یکسان‌اند؛ فقط سینتکس متفاوت است.

این مبحث بخشی از دوره آموزش کامل XML است.

ابزارهای مرتبط