XQuery - XQuery

XQuery
Парадигма декларативный , функциональный , модульный
Разработано W3C
Впервые появился 2007 г.
Стабильный выпуск
3.1 / 21 марта 2017 г . ; 4 года назад  ( 2017-03-21 )
Печатная дисциплина динамический или статический, сильный
Операционные системы Кроссплатформенность
Расширения имени файла .xq, .xql, .xqm, .xqy, .xquery.
Веб-сайт www .w3 .org / XML / Query /
Основные реализации
Многие
Под влиянием
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:

  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. Многие из этих функций были запланированы в 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, но работа по их продвижению для работы с 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
Имя Лицензия Язык 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 ++ Нет да да да да

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

Обзоры

Рекомендации

Внешние ссылки