Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны ) ( Узнайте, как и когда удалить этот шаблон сообщения )
|
Парадигма | декларативный , функциональный , модульный |
---|---|
Разработано | W3C |
Впервые появился | 2007 г. |
Стабильный выпуск | |
Печатная дисциплина | динамический или статический, [2] [3] сильный |
Операционные системы | Кроссплатформенность |
Расширения имени файла | .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 г. [4]
XQuery 3.0 стал Рекомендацией W3C 8 апреля 2014 г. [5]
XQuery 3.1 стал Рекомендацией W3C 21 марта 2017 г. [6]
«Миссия проекта XML Query - предоставить гибкие средства запросов для извлечения данных из реальных и виртуальных документов во всемирной паутине, таким образом, наконец, обеспечивая необходимое взаимодействие между миром Интернета и миром баз данных. В конечном итоге, коллекции файлов XML будут доступ как к базам данных ". [7]
Особенности [ править ]
XQuery - это функциональный, ориентированный на выражения язык программирования без побочных эффектов с простой системой типов , резюмированный Килпеляйненом: [8]
Все выражения XQuery работают с последовательностями и оценивают их как последовательности. Последовательности представляют собой упорядоченные списки элементов. Элементы могут быть либо узлами , которые представляют компоненты документов XML, либо атомарными значениями , которые являются экземплярами базовых типов схемы XML, таких как xs: integer или xs: string . Последовательности также могут быть пустыми или состоять только из одного элемента. Не делается различий между отдельным элементом и одноэлементной последовательностью. (...) Последовательности XQuery / XPath отличаются от списков в таких языках, как Lisp и Prologза счет исключения вложенных последовательностей. Разработчики XQuery могли счесть вложенные последовательности ненужными для манипулирования содержимым документа. Вложенность или иерархия структур документа вместо этого представлена узлами и их дочерними и родительскими отношениями.
XQuery предоставляет средства для извлечения и обработки данных из XML-документов или любого источника данных, который можно рассматривать как XML, например, реляционных баз данных [9] или офисных документов.
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> { За $ акта в доке ( "hamlet.xml" ) // ACT пусть $ громкоговорителей : = отчетливого-значение ( $ акт // SPEAKER ) возвращение <div> <h1> { строка ( $ act / TITLE ) } </h1> <ul> { для $ Speaker в $ Speaker возвращается <li> { $ динамик } </li> } </ul> </div> } </body> </html>
Все конструкции XQuery для выполнения вычислений являются выражениями . Утверждений нет , хотя некоторые ключевые слова предполагают поведение, подобное утверждениям. Чтобы выполнить функцию, выражение в теле вычисляется и возвращается его значение. Таким образом, чтобы написать функцию, удваивающую входное значение, нужно просто написать:
объявить функцию local: doubler ( $ x ) { $ x * 2 }
Чтобы написать полный запрос «Hello World», нужно написать выражение:
"Привет мир"
Этот стиль распространен в языках функционального программирования .
Приложения [ править ]
В этом разделе не процитировать любые источники . Май 2020 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
Ниже приведены несколько примеров использования XQuery:
- Извлечение информации из базы данных для использования в веб-службе.
- Создание сводных отчетов по данным, хранящимся в базе данных XML.
- Поиск в текстовых документах соответствующей информации и сбор результатов.
- Выбор и преобразование данных XML в XHTML для публикации в Интернете.
- Получение данных из баз данных, которые будут использоваться для интеграции приложения.
- Разделение XML-документа, представляющего несколько транзакций, на несколько XML-документов.
Сравнение XQuery и XSLT [ править ]
Этот раздел требует дополнительных ссылок для проверки . Май 2020 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
Сфера [ править ]
Хотя 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. [10] [11] [12] Многие из этих функций были запланированы в XQuery 3.0. [13]
Любое сравнение должно учитывать тот факт, что XSLT 1.0 и XSLT 2.0 - очень разные языки. XSLT 2.0, в частности, испытал сильное влияние XQuery в его переходе к строгой типизации и пониманию схемы.
Сильные и слабые стороны [ править ]
Исследования юзабилити показали, что XQuery легче изучить, чем XSLT , особенно для пользователей, которые ранее имели опыт работы с такими языками баз данных, как SQL. [14] Это можно отнести к тому факту, что XQuery - это меньший по размеру язык с меньшим количеством концепций для изучения, а также к тому факту, что программы более краткие. Верно и то, что XQuery более ортогонален в том смысле, что любое выражение может использоваться в любом синтаксическом контексте. В отличие от этого, XSLT - это двухъязыковая система, в которой выражения XPath могут быть вложены в инструкции XSLT, но не наоборот.
XSLT в настоящее время более эффективен, чем XQuery, для приложений, предполагающих внесение небольших изменений в документ (например, удаление всех элементов NOTE). Такие приложения обычно обрабатываются в XSLT с использованием шаблона кодирования, который включает в себя шаблон идентификации, который копирует все узлы без изменений, модифицированных с помощью определенных шаблонов, которые изменяют выбранные узлы. XQuery не имеет эквивалента этому шаблону кодирования, хотя в будущих версиях можно будет решать такие проблемы, используя средства обновления на языке, который находится в стадии разработки. [15]
В 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. [16] [17]
Расширения и будущая работа [ править ]
Расширения W3C [ править ]
W3C разработал два основных расширения XQuery:
- XQuery 1.0 и XPath 2.0 полнотекстовый [18]
- Средство обновления XQuery
Оба получили статус рекомендаций как расширения XQuery 1.0, но работа по их продвижению для работы с XQuery 3.0 была прекращена из-за нехватки ресурсов.
Работа над XQuery 3.0 была опубликована как Рекомендация 8 апреля 2014 года [19], а XQuery 3.1 является Рекомендацией по состоянию на февраль 2017 года.
Расширение сценариев (процедурное) для XQuery было разработано, но так и не было завершено. [20] [21]
Группа сообщества EXPath [22] разрабатывает расширения для XQuery и других родственных стандартов ( XPath , XSLT , XProc и XForms ). В настоящее время доступны следующие расширения:
- Система упаковки [23]
- Файловый модуль [24]
- Двоичный модуль [25]
- Веб-приложения [26]
Сторонние расширения [ править ]
JSONiq - это расширение XQuery, которое добавляет поддержку извлечения и преобразования данных из документов JSON . JSONiq - это надмножество XQuery 3.0. Он опубликован под лицензией Creative Commons Attribution-ShareAlike 3.0 .
Проект EXQuery [27] разрабатывает стандарты создания переносимых приложений XQuery. В настоящее время доступны следующие стандарты:
- RESTXQ [28]
Дальнейшее чтение [ править ]
- Запросы 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
Ссылки [ править ]
- ^ «Рекомендация XQuery 3.1» . 2017-03-21.
- ^ «XQuery 3.1: язык запросов XML» . 2017-03-21.
- ^ «XQuery и статическая типизация» .
- ^ «Временная шкала стандартов XML и семантической сети W3C» (PDF) . 2012-02-04.
- ^ «Рекомендация XQuery 3.0» . 2014-04-08.
- ^ «Рекомендация XQuery 3.1» . 2017-03-21.
- ^ W3C (25 октября 2003 г.). "процитировано Дж . Роби" .
- ^ Kilpeläinen, Пекка (2012). «Использование XQuery для решения проблем» (PDF) . Программное обеспечение: практика и опыт . 42 (12): 1433–1465. DOI : 10.1002 / spe.1140 . S2CID 15561027 .
- ^ "Получение данных с помощью XQuery" . Проверено 18 января, 2016.
- ↑ Кей, Майкл (май 2005 г.). «Сравнение XSLT и XQuery» .
- ^ Айзенберг, Дж. Дэвид (2005-03-09). «Сравнение XSLT и XQuery» .
- ^ Смит, Майкл (2001-02-23). "XQuery, XSLT" перекрываются "обсуждаются" .
- ^ «Требования XQuery 3.0» .
- ^ Удобство использования языков запросов XML. Йорис Граауманс. Серия диссертаций SIKS № 2005-16, ISBN 90-393-4065-X
- ^ «Средство обновления XQuery» .
- ^ «Синтаксис XML для XQuery (XQueryX)» .
- ^ Майкл Кей. «Саксонские дневники: как не складывать константы» .
- ^ XQuery и XPath Full Text 1.0
- ^ XML-запрос (XQuery) 3.0
- ^ Требования к расширению XQuery Scripting Extension 1.0
- ^ Расширение сценариев XQuery 1.0
- ^ Группа сообщества EXPath
- ^ Система упаковки
- ^ Файловый модуль
- ^ Двоичный модуль
- ^ Веб-приложения
- ^ «Стандарт для переносимых приложений XQuery» . Проверено 12 декабря 2013 года .
- ^ [1]
- Части заимствованы с разрешения из книг «XML Hacks» ( O'Reilly Media ) и «XQuery» ( O'Reilly Media ).
- Предыдущая версия основана на статье во французской Википедии.
Внешние ссылки [ править ]
В Викиучебнике есть книга по теме: XQuery. |
- XML-запрос W3C (XQuery)
- Руководство по XQuery
- XQuery API для Java (XQJ) Запрос спецификации Java
- hamlet.xml Гамлет в формате XML
- XQuery (презентация - в виде слайдов HTML)
- Список реализаций XQuery с открытым исходным кодом