XQuery
XQuery — мова запитів, розроблена для обробки даних у форматі XML. XQuery використовує XML як свою модель даних.
XQuery 1.0 була розроблена робочою групою XML Query у складі організації W3C. Ця робота координується іншою робочою групою, що працює над XSLT 2.0. Ці дві групи розділяють відповідальність за XPath 2.0, що входить до складу XQuery 1.0. 3 листопада 2005 року XQuery 1.0 отримала статус W3C Candidate Recommendation, а 23 січня 2007 року XQuery 1.0, одночасно з XSLT 2.0 і XPath 2.0, отримала статус офіційної рекомендації (W3C Recommendation). В наш час[коли?] ведуться роботи з розвитку цього стандарту, з додаванням виразів для вільного пошуку по тексту і для внесення змін в XML документи і бази даних, а також для процедурних операцій.
Властивості
XQuery надає спосіб витягати і маніпулювати даними з XML документів або ж з будь-якого джерела даних, що можуть розглядатися як XML, наприклад, з реляційних баз даних або з документів офісного пакета.
XQuery для адресації потрібних ділянок XML документа використовує синтаксис виразів XPath. Це доповнюється SQL-подібними «FLWOR-виразами» для виконання об'єднань. FLWOR вирази сконструйовані з п'яти речень, за чиєю абревіатурою вони й названі: FOR, LET, WHERE, ORDER BY, RETURN.
Мова також надає синтаксис для конструювання нових XML документів. Там, де імена елементів і атрибутів відомі, можна використовувати XML-подібний синтаксис, в інших випадках вирази посилаються на доступні конструктори динамічних вузлів. Усі ці конструкції визначені як вирази мови, і вони можуть бути довільно вкладеними.
Мова базується на три-структурній моделі інформаційного вмісту XML-документа, що складається з семи видів вузлів: вузли документа, елементи, атрибути, текстові вузли, коментарі, інструкції обробки, і простори імен.
Система типів мови уявляє всі величини як послідовності (одиночна величина розглядається як послідовність з довжиною один). Члени послідовності можуть бути або вузлом, або атомарною величиною. Атомарні величини можуть бути цілим числом, рядком, булевою константою тощо. Повний перелік типів, заснований на примітивних типах, визначених у схемі XML.
XQuery 1.0 не включає можливостей редагування XML-документа і баз даних. У цій версії бракує також можливості повнотекстового пошуку. Обидві ці можливості в активному процесі розробки наступних версій мови.
XQuery є мовою програмування, що може висловлювати довільні перетворення даних XML в XML з такими властивостями:
- Логічна/фізична незалежність даних
- Оголошення
- Вищий рівень
- Уникнення побічних ефектів
- Точно типизована мова
Приклад використання
В цьому прикладі перелічуються всі унікальні персонажі кожного акту Шекспірівської п'єси Гамлет, записаної у вигляді hamlet.xml
<html><head/><body>
{
for $act in doc("hamlet.xml")//ACT
let $speakers := distinct-values($act//SPEAKER)
return
<span>
<h1>{ $act/TITLE/text() }</h1>
<ul>
{
for $speaker in $speakers
return <li>{ $speaker }</li>
}
</ul>
</span>
}
</body></html>
Застосування
Нижче перелічені типові задачі, коли доцільно використовувати XQuery
- Витяг інформації з бази даних для використання у веб-службі
- Генерація підсумкового звіту з даних, що зберігаються в XML документі
- Пошук текстового документу в вебі за запитом, що відповідає вимогам, і видача результату
- Вибір і перетворення XML даних в XHTML для публікації в Мережі
- Витягування даних з бази даних для використання в інтеграції застосувань
- Розщеплення XML документу, що представляє численні транзакції, в множину окремих XML документів
Втілення
- Sedna XML Database, написана на C/C++, високопродуктивний XQuery рушій, спроектований для застосувань сортування, відкритий код.
- VTD-XML — Втілення XPath — відкритий код, пов'язаний з мовами програмування C, C#, і Java
- Saxon XSLT and XQuery Processor — від Michael Kay; є версія з відкритим кодом, підтримує розширення, написані на Java або C#
- Galax — Втілення з відкритим кодом OCaml XQuery, підтримує різні розширення; особливо підходить для академічних застосувань XQuery
- Qexo — відкритий код, написаний на Java з Kawa
- Mark Logic Server
- DataDirect XQuery — високопродуктивний, платформо-незалежний XQuery рушій для більшості реляційних баз даних
- Virtuoso Universal Server — OpenLink Virtuoso
- BEA AquaLogic ALDSP — XQuery для інтеграції даних
- Microsoft SQL Server 2005
- DB2 9
- Qizx — високопродуктивний рушій XQuery для баз даних, є версія з відкритим кодом (Qizx/open, кодова назва XQuest).
- X-Hive/DB's XQuery втілення
- MonetDB/XQuery — Процесор XQuery з відкритим кодом, на верхньому щаблі MonetDB системи реляційних баз даних, з підтримкою для W3C XQuery Update Facility.
- ще багато XQuery втілень (деякі вільні або з відкритим кодом).