XQuery - XQuery
Парадигма | декларативный , функциональный , модульный |
---|---|
Разработано | W3C |
Впервые появился | 2007 г. |
Стабильный выпуск |
3.1
/ 21 марта 2017 г .
|
Печатная дисциплина | динамический или статический, сильный |
Операционные системы | Кроссплатформенность |
Расширения имени файла | .xq, .xql, .xqm, .xqy, .xquery. |
Веб-сайт | www |
Основные реализации | |
Многие | |
Под влиянием | |
XPath , SQL , XSLT | |
|
XQuery ( XML Query ) - это язык запросов и функционального программирования, который запрашивает и преобразует коллекции структурированных и неструктурированных данных , обычно в форме XML , текста и с расширениями для других форматов данных ( JSON , двоичные и т. Д.). Язык разработан XML Query рабочей группы по W3C . Работа тесно координируется с разработкой XSLT Рабочей группой XSL; обе группы разделяют ответственность за XPath , который является подмножеством XQuery.
XQuery 1.0 стал Рекомендацией W3C 23 января 2007 г.
XQuery 3.0 стал рекомендацией W3C 8 апреля 2014 г.
XQuery 3.1 стал рекомендацией W3C 21 марта 2017 г.
«Миссия проекта XML Query - предоставить гибкие средства запросов для извлечения данных из реальных и виртуальных документов во всемирной паутине, таким образом, наконец, обеспечивая необходимое взаимодействие между миром Интернета и миром баз данных. В конечном итоге коллекции XML-файлов будут будут доступны как базы данных ".
Функции
XQuery - это функциональный, ориентированный на выражения язык программирования без побочных эффектов с простой системой типов , резюмированный Килпеляйненом:
Все выражения XQuery работают с последовательностями и оценивают их как последовательности. Последовательности представляют собой упорядоченные списки элементов. Элементы могут быть либо узлами , которые представляют компоненты документов XML, либо атомарными значениями , которые являются экземплярами базовых типов схемы XML, таких как xs: integer или xs: string . Последовательности также могут быть пустыми или состоять только из одного элемента. Не делается различий между одиночным элементом и одноэлементной последовательностью. (...) Последовательности XQuery / XPath отличаются от списков в таких языках, как Lisp и Prolog, тем, что исключают вложенные последовательности. Разработчики XQuery могли счесть вложенные последовательности ненужными для манипулирования содержимым документа. Вложенность или иерархия структур документа вместо этого представлена узлами и их дочерними и родительскими отношениями.
XQuery предоставляет средства для извлечения и обработки данных из XML-документов или любого источника данных, который можно рассматривать как XML, например, реляционных баз данных или офисных документов.
XQuery содержит расширенный синтаксис выражения XPath для обращения к определенным частям XML-документа. Он дополняет это SQL- подобным « выражением FLWOR » для выполнения соединений. Выражение FLWOR состоит из пяти предложений, после которых оно названо: FOR, LET, WHERE, ORDER BY, RETURN.
Язык также предоставляет синтаксис, позволяющий создавать новые XML-документы. Если имена элементов и атрибутов известны заранее, можно использовать синтаксис, подобный XML; в других случаях доступны выражения, называемые конструкторами динамических узлов. Все эти конструкции определены как выражения в языке и могут быть произвольно вложены.
Язык основан на модели данных XQuery и XPath (XDM), которая использует древовидную модель информационного содержимого XML-документа, содержащую семь видов узлов: узлы документа, элементы, атрибуты, текстовые узлы, комментарии, инструкции по обработке. , и пространства имен.
XDM также моделирует все значения как последовательности (одноэлементное значение считается последовательностью длины один). Элементы в последовательности могут быть узлами XML или атомарными значениями. Атомарные значения могут быть целыми числами, строками, логическими значениями и т. Д.: Полный список типов основан на примитивных типах, определенных в схеме XML .
Функции обновления XML-документов или баз данных, а также возможность полнотекстового поиска не являются частью основного языка, но определены в стандартах дополнительных расширений: XQuery Update Facility 1.0 поддерживает функцию обновления, а XQuery и XPath Full Text 1.0 поддерживают полнотекстовый поиск в XML-документах.
В XQuery 3.0 добавлена поддержка полного функционального программирования, в котором функции - это значения, которыми можно управлять (хранятся в переменных, передаются функциям более высокого порядка и вызываются динамически).
Примеры
В приведенном ниже примере кода XQuery перечислены уникальные динамики в каждом акте пьесы Шекспира «Гамлет», закодированные в файле hamlet.xml.
<html><body>
{
for $act in doc("hamlet.xml")//ACT
let $speakers := distinct-values($act//SPEAKER)
return
<div>
<h1>{ string($act/TITLE) }</h1>
<ul>
{
for $speaker in $speakers
return <li>{ $speaker }</li>
}
</ul>
</div>
}
</body></html>
Все конструкции XQuery для выполнения вычислений являются выражениями . Утверждений нет , хотя некоторые ключевые слова предполагают поведение, подобное утверждениям. Чтобы выполнить функцию, выражение в теле вычисляется и возвращается его значение. Таким образом, чтобы написать функцию, удваивающую входное значение, нужно просто написать:
declare function local:doubler($x) { $x * 2 }
Чтобы написать полный запрос «Hello World», нужно написать выражение:
"Hello World"
Этот стиль распространен в языках функционального программирования .
Приложения
Ниже приведены несколько примеров использования XQuery:
- Извлечение информации из базы данных для использования в веб-службе.
- Создание сводных отчетов по данным, хранящимся в базе данных XML.
- Поиск в текстовых документах соответствующей информации и сбор результатов.
- Выбор и преобразование данных XML в XHTML для публикации в Интернете.
- Получение данных из баз данных, которые будут использоваться для интеграции приложения.
- Разделение XML-документа, представляющего несколько транзакций, на несколько XML-документов.
Сравнение XQuery и XSLT
Сфера
Хотя XQuery изначально задумывался как язык запросов для больших коллекций XML-документов, он также может преобразовывать отдельные документы. Таким образом, его возможности частично совпадают с XSLT , который был специально разработан для преобразования входных XML-документов в HTML или другие форматы.
Стандарты XSLT 2.0 и XQuery были разработаны отдельными рабочими группами в W3C , работая вместе, чтобы обеспечить единый подход там, где это необходимо. Они используют одну и ту же модель данных ( XDM ), систему типов и библиотеку функций, и оба включают XPath 2.0 в качестве подъязыка.
Источник
Однако два языка уходят корнями в разные традиции и служат нуждам разных сообществ. XSLT изначально задумывался как язык таблиц стилей, основной целью которого было отображение XML для человека, читающего на экране, в Интернете (как язык веб-шаблонов ) или на бумаге. XQuery изначально задумывался как язык запросов к базе данных в традициях SQL .
Поскольку два языка происходят из разных сообществ, XSLT лучше справляется с описательными документами с более гибкой структурой, а XQuery лучше справляется с обработкой данных (например, при выполнении реляционных соединений).
Версии
XSLT 1.0 появился как Рекомендация в 1999 году, тогда как XQuery 1.0 стал Рекомендацией только в начале 2007 года; в результате XSLT по-прежнему используется гораздо шире. Оба языка обладают одинаковой выразительной силой, хотя XSLT 2.0 имеет много функций, которые отсутствуют в XQuery 1.0, таких как группировка, форматирование чисел и дат и больший контроль над пространствами имен XML. Многие из этих функций были запланированы в XQuery 3.0.
Любое сравнение должно учитывать тот факт, что XSLT 1.0 и XSLT 2.0 - очень разные языки. XSLT 2.0, в частности, испытал сильное влияние XQuery в его переходе к строгой типизации и пониманию схемы.
Сильные и слабые стороны
Исследования юзабилити показали, что XQuery легче изучить, чем XSLT , особенно для пользователей, которые ранее имели опыт работы с такими языками баз данных, как SQL. Это можно отнести к тому факту, что XQuery - это меньший по размеру язык с меньшим количеством концепций для изучения, а также к тому факту, что программы более лаконичны. Верно и то, что XQuery более ортогонален в том смысле, что любое выражение может использоваться в любом синтаксическом контексте. В отличие от этого, XSLT - это двухъязыковая система, в которой выражения XPath могут быть вложены в инструкции XSLT, но не наоборот.
XSLT в настоящее время более эффективен, чем XQuery, для приложений, которые предполагают внесение небольших изменений в документ (например, удаление всех элементов NOTE). Такие приложения обычно обрабатываются в XSLT с использованием шаблона кодирования, который включает в себя шаблон идентификации, который копирует все узлы без изменений, модифицированных с помощью определенных шаблонов, которые изменяют выбранные узлы. XQuery не имеет эквивалента этому шаблону кодирования, хотя в будущих версиях можно будет решать такие проблемы, используя средства обновления на языке, который находится в стадии разработки.
В XQuery 1.0 отсутствовал какой-либо механизм динамического связывания или полиморфизма; это было исправлено с введением функций в качестве первоклассных значений в XQuery 3.0. Отсутствие этой возможности начинает становиться заметным при написании больших приложений или при написании кода, предназначенного для повторного использования в различных средах. XSLT предлагает два дополнительных механизма в этой области: динамическое сопоставление шаблонных правил и возможность переопределения правил с помощью xsl:import
, которые позволяют писать приложения с несколькими уровнями настройки.
Отсутствие этих возможностей в XQuery 1.0 было осознанным дизайнерским решением: из-за этого XQuery очень хорошо поддается статическому анализу, который необходим для достижения уровня оптимизации, необходимого для языков запросов к базам данных. Это также упрощает обнаружение ошибок в коде XQuery во время компиляции.
Тот факт, что XSLT 2.0 использует синтаксис XML, делает его довольно многословным по сравнению с XQuery 1.0. Однако многие крупные приложения используют эту возможность, используя XSLT для динамического чтения, записи или изменения таблиц стилей в рамках конвейера обработки. Использование синтаксиса XML также позволяет использовать инструменты на основе XML для управления кодом XSLT. Напротив, синтаксис XQuery больше подходит для встраивания в традиционные языки программирования, такие как Java (см. XQuery API для Java ) или C # . При необходимости код XQuery также может быть выражен в синтаксисе XML под названием XQueryX. Представление XQueryX кода XQuery довольно подробное и неудобное для людей, но может быть легко обработано с помощью инструментов XML, например преобразовано с помощью таблиц стилей XSLT.
Расширения и будущая работа
Расширения W3C
W3C разработал два основных расширения XQuery:
- XQuery 1.0 и XPath 2.0 полнотекстовый
- Средство обновления XQuery
Оба получили статус рекомендаций как расширения XQuery 1.0, но работа по их продвижению для работы с XQuery 3.0 была прекращена из-за нехватки ресурсов.
Работа над XQuery 3.0 была опубликована в качестве Рекомендации 8 апреля 2014 года, а XQuery 3.1 является Рекомендацией по состоянию на февраль 2017 года.
Расширение сценариев (процедурное) для XQuery было разработано, но так и не было завершено.
Группа сообщества EXPath разрабатывает расширения для XQuery и других связанных стандартов ( XPath , XSLT , XProc и XForms ). В настоящее время доступны следующие расширения:
- Система упаковки
- Файловый модуль
- Двоичный модуль
- Веб-приложения
Сторонние расширения
JSONiq - это расширение XQuery, которое добавляет поддержку извлечения и преобразования данных из документов JSON . JSONiq - это надмножество XQuery 3.0. Он опубликован под лицензией Creative Commons Attribution-ShareAlike 3.0 .
Проект EXQuery разрабатывает стандарты для создания переносимых приложений XQuery. В настоящее время доступны следующие стандарты:
- RESTXQ
дальнейшее чтение
- Запросы XML: XQuery, XPath и SQL / XML в контексте. Джим Мелтон и Стивен Бакстон. Морган Кауфманн, 2006. ISBN 1-55860-711-0 .
- Уолмсли, Присцилла (2007). XQuery, 1-е издание . O'Reilly Media. ISBN 978-0-596-00634-1 .
- Уолмсли, Присцилла (2015). XQuery, 2-е издание . O'Reilly Media. ISBN 978-1-4919-1510-3 .
- XQuery: язык запросов XML. Майкл Брандейдж. Addison-Wesley Professional, 2004. ISBN 0-321-16581-0 .
- XQuery от экспертов: Руководство по языку запросов W3C XML. Говард Кац (ред). Аддисон-Уэсли, 2004. ISBN 0-321-18060-7 .
- Введение в выражение XQuery FLWOR . Д-р Майкл Кей (Комитет W3C XQuery), 2005 г.
Реализации
Имя | Лицензия | Язык | XQuery 3.1 | XQuery 3.0 | XQuery 1.0 | XQuery Обновление 1.0 | Полный текст XQuery 1.0 |
---|---|---|---|---|---|---|---|
BaseX | Лицензия BSD | Ява | да | да | да | да | да |
существовать | LGPL | Ява | Частичное | Частичное | да | Нет | Нет |
MarkLogic | Проприетарный | C ++ | Нет | Частичное | да | Нет | Нет |
Саксонский HE | Общественная лицензия Mozilla | Ява | Частичное | Частичное | да | да | Нет |
Saxon EE | Проприетарный | Ява | да | да | да | да | Нет |
Зорба | Лицензия Apache | C ++ | Нет | да | да | да | да |
Другие реализации включают:
- Oracle XQuery для Hadoop: «Использование Oracle XQuery для Hadoop» . Архивировано из оригинала на 2016-03-04.
- Oracle : процессор XQuery для Java
- Сервер RaptorXML : механизм XSLT и XQuery от Altova
- Sirix : XQuery с расширениями управления версиями
- XQilla : реализация XQilla XQuery
- SPARQL2XQuery : переводчик SPARQL в XQuery
- Galax - реализация XQuery с открытым исходным кодом.
- Db2 - реализация XQuery в IBM Db2.
- Xidel - реализация XQuery 3.0 с открытым исходным кодом
Обзоры
- Результаты XQuery Test Suite : соответствие функциям XQuery 1.0
- EXPath : механизмы XPath / XQuery, включая матрицу функций
- W3C : реализации XQuery
Рекомендации
- Части заимствованы с разрешения из книг «XML Hacks» ( O'Reilly Media ) и «XQuery» ( O'Reilly Media ).
- Предыдущая версия основана на статье во французской Википедии.
Внешние ссылки
- XML-запрос W3C (XQuery)
- Руководство по XQuery
- XQuery API для Java (XQJ) Запрос спецификации Java
- hamlet.xml Гамлет в формате XML
- XQuery (презентация - в виде слайдов HTML)
- Список реализаций XQuery с открытым исходным кодом