Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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», нужно написать выражение:

 "Привет мир"

Этот стиль распространен в языках функционального программирования .

Приложения [ править ]

Ниже приведены несколько примеров использования XQuery:

  1. Извлечение информации из базы данных для использования в веб-службе.
  2. Создание сводных отчетов по данным, хранящимся в базе данных XML.
  3. Поиск в текстовых документах соответствующей информации и сбор результатов.
  4. Выбор и преобразование данных XML в XHTML для публикации в Интернете.
  5. Получение данных из баз данных, которые будут использоваться для интеграции приложения.
  6. Разделение 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. [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 г.

Реализации [ править ]

Другие реализации включают:

  • 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

Ссылки [ править ]

  1. ^ «Рекомендация XQuery 3.1» . 2017-03-21.
  2. ^ «XQuery 3.1: язык запросов XML» . 2017-03-21.
  3. ^ «XQuery и статическая типизация» .
  4. ^ «Временная шкала стандартов XML и семантической сети W3C» (PDF) . 2012-02-04.
  5. ^ «Рекомендация XQuery 3.0» . 2014-04-08.
  6. ^ «Рекомендация XQuery 3.1» . 2017-03-21.
  7. ^ W3C (25 октября 2003 г.). "процитировано Дж . Роби" .
  8. ^ Kilpeläinen, Пекка (2012). «Использование XQuery для решения проблем» (PDF) . Программное обеспечение: практика и опыт . 42 (12): 1433–1465. DOI : 10.1002 / spe.1140 . S2CID 15561027 .  
  9. ^ "Получение данных с помощью XQuery" . Проверено 18 января, 2016.
  10. Кей, Майкл (май 2005 г.). «Сравнение XSLT и XQuery» .
  11. ^ Айзенберг, Дж. Дэвид (2005-03-09). «Сравнение XSLT и XQuery» .
  12. ^ Смит, Майкл (2001-02-23). "XQuery, XSLT" перекрываются "обсуждаются" .
  13. ^ «Требования XQuery 3.0» .
  14. ^ Удобство использования языков запросов XML. Йорис Граауманс. Серия диссертаций SIKS № 2005-16, ISBN 90-393-4065-X 
  15. ^ «Средство обновления XQuery» .
  16. ^ «Синтаксис XML для XQuery (XQueryX)» .
  17. ^ Майкл Кей. «Саксонские дневники: как не складывать константы» .
  18. ^ XQuery и XPath Full Text 1.0
  19. ^ XML-запрос (XQuery) 3.0
  20. ^ Требования к расширению XQuery Scripting Extension 1.0
  21. ^ Расширение сценариев XQuery 1.0
  22. ^ Группа сообщества EXPath
  23. ^ Система упаковки
  24. ^ Файловый модуль
  25. ^ Двоичный модуль
  26. ^ Веб-приложения
  27. ^ «Стандарт для переносимых приложений XQuery» . Проверено 12 декабря 2013 года .
  28. ^ [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 с открытым исходным кодом