XQuery - Википедия - XQuery
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Парадигма | декларативный, функциональный, модульный |
---|---|
Разработано | W3C |
Впервые появился | 2007 |
Стабильный выпуск | |
Печатная дисциплина | динамичный или статический,[2][3] сильный |
Операционные системы | Кроссплатформенность |
Расширения имени файла | .xq, .xql, .xqm, .xqy, .xquery |
Интернет сайт | www |
Основной реализации | |
Много | |
Под влиянием | |
XPath, SQL, XSLT | |
|
XQuery (XML-запрос) это запрос и функциональное программирование язык, который запрашивает и преобразует коллекции структурированных и неструктурированные данные, обычно в виде 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: целое число или же xs: строка. Последовательности также могут быть пустыми или состоять только из одного элемента. Не делается различий между отдельным элементом и одноэлементной последовательностью. (...) Последовательности XQuery / XPath отличаются от списков на таких языках, как Лисп и Пролог за счет исключения вложенных последовательностей. Разработчики 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")//ДЕЙСТВОВАТЬ позволять $компьютерные колонки := особые ценности($действовать//ОРАТОР) возвращаться <div><h1>{ нить($действовать/ЗАГЛАВИЕ) }</h1><ul>{ за $оратор в $компьютерные колонки возвращаться <li>{ $оратор }</li> }</ul></div> }</body></html>
Все конструкции XQuery для выполнения вычислений выражения. Нет заявления, даже несмотря на то, что некоторые ключевые слова предполагают поведение, подобное утверждению. Чтобы выполнить функцию, выражение в теле вычисляется и возвращается его значение. Таким образом, чтобы написать функцию, удваивающую входное значение, нужно просто написать:
объявить функция местный: дублер($Икс) { $Икс * 2 }
Чтобы написать полный запрос «Hello World», нужно написать выражение:
"Привет, мир"
Этот стиль распространен в функциональные языки программирования.
Приложения
Ниже приведены несколько примеров использования 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 больше подходит для встраивания в традиционные языки программирования, такие как Ява (видеть XQuery API для Java ) или же C #. При необходимости код XQuery также может быть выражен в синтаксисе XML под названием XQueryX. Представление кода XQuery в XQueryX является довольно подробным и неудобным для людей, но его можно легко обработать с помощью инструментов 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 В настоящее время доступны следующие расширения:
Сторонние расширения
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. Майкл Брандейдж. Эддисон-Уэсли Профессионал, 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 ++ | Нет | Частичное | да | Нет | Нет |
Саксонский ОН | Общественная лицензия Mozilla | Ява | Частичное | Частичное | да | да | Нет |
Саксонский 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
- Галакс - реализация XQuery с открытым исходным кодом.
- Db2 - Реализация XQuery в IBM Db2.
- Сидель - реализация 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 г.). "процитировано Дж. Роби".
- ^ Килпеляйнен, Пекка (2012). «Использование XQuery для решения проблем» (PDF). Программное обеспечение: практика и опыт. 42 (12): 1433–1465. Дои:10.1002 / spe.1140.
- ^ «Получение данных с помощью XQuery». Проверено 18 января, 2016.
- ^ Кей, Майкл (май 2005 г.). «Сравнение XSLT и XQuery».
- ^ Айзенберг, Дж. Дэвид (2005-03-09). «Сравнение XSLT и XQuery».
- ^ Смит, Майкл (23 февраля 2001). "XQuery, XSLT" перекрываются "обсуждаются".
- ^ «Требования XQuery 3.0».
- ^ Удобство использования языков XML-запросов. Йорис Граауманс. Серия диссертаций SIKS № 2005-16, ISBN 90-393-4065-Х
- ^ «Средство обновления 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 ).
- Предыдущая версия на основе статьи на Французский язык Википедия
внешняя ссылка
- XML-запрос W3C (XQuery)
- Руководство по XQuery
- XQuery API для Java (XQJ) Запрос спецификации Java
- hamlet.xml Гамлет в формате XML
- XQuery (презентация - в виде слайдов HTML)
- Список реализаций XQuery с открытым исходным кодом