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

Общая архитектура использования драйвера XQJ для связи с базой данных XML из приложений Java.

XQuery API для Java ( XQJ ) относится к общему API Java для спецификации W3C XQuery 1.0.

XQJ API позволяет программистам Java выполнять XQuery для источника данных XML (например, базы данных XML ), уменьшая или устраняя привязку к поставщику .

XQJ API предоставляет разработчикам Java интерфейс для модели данных XQuery. [1] Его дизайн похож на JDBC API, который работает как клиент / сервер, и поэтому хорошо подходит для серверных баз данных XML и хуже - для процессоров XQuery на стороне клиента , хотя « соединение » очень незначительно. часть всего API. Пользователи XQJ API могут связывать значения Java с выражениями XQuery , предотвращая атаки путем внедрения кода . [2] Кроме того, несколько выражений XQuery могут выполняться как часть атомарной транзакции .

История и реализация [ править ]

XQuery API для Java был разработан Java Community Process как JSR 225 . У него были крупные технологические сторонники, такие как Oracle , [3] [4] [5] [6] IBM , [5] [6] BEA Systems , [7] Software AG , [8] Intel , Nokia и DataDirect . [4]

Версия 1.0 XQuery API для спецификации Java была выпущена 24 июня 2009 г. [9] вместе с JavaDocs , эталонной реализацией и TCK (Technology Compatibility Kit), которым должны соответствовать поставщики, реализующие эту технологию .

Классы XQJ содержатся в пакете Java javax.xml.xquery

Нет (видимых) действий по созданию версии XQJ, которая обеспечивает поддержку XQuery 3.0 или 3.1, например, путем предоставления привязок Java для дополнений к модели данных, таких как функции, массивы или карты.

Функциональность [ править ]

XQJ позволяет существовать нескольким реализациям и использоваться одним и тем же приложением.

Соединения XQJ поддерживают создание и выполнение выражений XQuery . Выражения могут обновляться [10] и включать полнотекстовый поиск. [11] XQJ представляет выражения XQuery с использованием одного из следующих классов:

  • XQExpression - выражение каждый раз отправляется процессору XQuery.
  • XQPreparedExpression - выражение кэшируется, а путь выполнения заранее определен, что позволяет эффективно выполнять его несколько раз.

Выражения XQuery возвращают результирующую последовательность элементов XDM [1] , которые в XQJ представлены через XQResultSequenceинтерфейс. Программист может использовать XQResultSequenceдля обхода отдельных элементов XDM [1] в последовательности результатов. Каждый элемент в последовательности имеет связанную с ним информацию типа XDM [1] , такую ​​как тип его узла, например element(), document-node()или атомарный тип XDM, такой как xs:string, xs:integerили xs:dateTime. Информацию о типе XDM в XQJ можно получить через XQItemTypeинтерфейс.

Атомарные элементы XQuery можно легко преобразовать в примитивы Java с помощью XQItemAccessorтаких методов, как getByte()и getFloat(). Также элементы и последовательности XQuery могут быть сериализованы в DOM Node , SAX ContentHandler , StAX XMLStreamReader и общий ввод-вывод Readerи InputStreamклассы.

Примеры [ править ]

Базовый пример [ править ]

В следующем примере показано создание соединения с базой данных XML , отправка выражения XQuery и последующая обработка результатов в Java . После обработки всех результатов соединение закрывается, чтобы освободить все связанные с ним ресурсы.

// Создание нового подключения к базе данных XML XQConnection  соппы  =  vendorDataSource . getConnection ( "myUser" ,  "myPassword" );XQExpression  expr  =  conn . createExpression ();  // Создание многоразового объекта XQuery ExpressionXQResultSequence  result  =  expr . executeQuery (  "for $ n in fn: collection ('catalog') // item"  +  "return fn: data ($ n / name)" );  // выполняем выражение XQuery// Итеративно обрабатываем результирующую последовательность while  ( result . Next ())  {  // Распечатываем текущий элемент в последовательности  System . из . println ( "Название продукта:"  +  результат . getItemAsString ( null )); }// Освобождаем все ресурсы, созданные соединением conn . закрыть ();

Привязка значения к внешней переменной [ править ]

В следующем примере показано, как значение Java может быть привязано к внешней переменной в выражении XQuery . Предположим, что соединение connуже существует:

XQExpression  expr  =  conn . createExpression ();// Выражение XQuery, которое будет выполнено String  es  =  "объявить переменную $ x как xs: integer external;"  +  "for $ n в fn: collection ('catalog') // item"  +  "где $ n / price <= $ x"  +  "return fn: data ($ n / name)" ;// Связываем значение (21) с внешней переменной с QName x expr . bindInt ( новое  QName ( "x" ),  21 ,  ноль );// Выполнение выражения XQuery XQResultSequence  result  =  expr . executeQuery ( es );// Итеративная обработка результата (последовательности) while  ( result . Next ())  {  // Обработка результата ... }

Сопоставление типов данных по умолчанию [ править ]

Сопоставление между типами данных Java и XQuery в значительной степени гибкое, однако в спецификации XQJ 1.0 есть правила сопоставления по умолчанию, отображающие типы данных, когда они не указаны пользователем. Эти правила отображения во многом похожи на правила отображения в JAXB .

В следующей таблице показаны правила сопоставления по умолчанию для привязки значений Java к внешним переменным в выражениях XQuery .

Известные реализации [ править ]

Собственные базы данных XML [ править ]

Ниже приводится список собственных баз данных XML, которые, как известно, имеют XQuery API для реализации Java.

  • MarkLogic [12]
  • eXist [13]
  • BaseX [14]
  • Седна [15]
  • Oracle XDB [16]
  • Тамино [17]
  • TigerLogic

Реляционные базы данных [ править ]

DataDirect предоставляет адаптеры XQJ для реляционных баз данных , переводя код XQuery в SQL на лету, а затем преобразовывая наборы результатов SQL в формат, подходящий для дальнейшей обработки XQJ. Ниже приводится пара известных реализаций.

  • Oracle DB (не XDB)
  • IBM DB2
  • Microsoft SQL Server
  • Sybase ASE
  • Informix
  • MySQL
  • PostgreSQL

Реализации вне базы данных [ править ]

Ниже приведен список процессоров XQuery, не относящихся к базе данных , которые предоставляют XQuery API для интерфейса Java (обычно разрешающие запросы к документам, анализируемым из XML в хранилище файлов и хранящимся в памяти как DOM или подобные деревья).

  • Saxon XSLT и процессор XQuery
  • Зорба [18]
  • MXQuery
  • Процессор Oracle XQuery [19]

Лицензия [ править ]

Спецификация помечена как «Авторское право © Oracle 2003, 2006 - 2009. Все права защищены».

Спецификация содержит две отдельные лицензии: «лицензию на спецификацию» и «лицензию на эталонную реализацию».

Лицензия на спецификацию позволяет свободное копирование спецификации при условии сохранения уведомлений об авторских правах; он также предоставляет лицензию на создание и распространение реализации спецификации при условии, что она полностью реализует всю спецификацию, не изменяет и не расширяет какие-либо интерфейсы и что она проходит тесты на совместимость.

Это положение вызвало определенные споры. Во-первых, не все признают, что для реализации опубликованной спецификации требуется лицензия (то есть закон об авторском праве запрещает это при отсутствии лицензии). [20] [21] Во-вторых, лицензия не соответствует критериям для квалификации как лицензия с открытым исходным кодом (см. Определение открытого исходного кода ) из-за запрета на создание расширений и модификаций. Это заставило некоторых энтузиастов открытого исходного кода усомниться в том, можно ли когда-либо считать реализации XQJ действительно открытыми.

Лицензия на эталонную реализацию представляет собой довольно обычную лицензию с открытым исходным кодом в стиле BSD.

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

  1. ^ a b c d Модель данных XQuery 1.0 и XPath 2.0 (XDM)
  2. ^ Привязка переменных Java
  3. ^ Запросы XML: XQuery, XPath и SQL / XML в контексте - Джим Мелтон и Стивен Бакстон. ISBN  978-1558607118
  4. ^ a b XQJ - XQuery Java API завершен, Марк Ван Каппеллен, Чжэнь Хуа Лю, Джим Мелтон и Максим Оргиян. Архивировано 28 июля 2012 г. на Wayback Machine.
  5. ^ a b IBM и Oracle отправляют запрос спецификации Java XQuery API для Java (XQJ).
  6. ^ a b Ранний взгляд на XQuery API для Java (XQJ) - Эндрю Эйзенберг, IBM и Джим Мелтон, Oracle. Архивировано 28 июля 2012 г. на Wayback Machine.
  7. ^ Процессор BEA Streaming XQuery
  8. ^ Интерфейс XQJ для базы данных Tamino Native XML. Архивировано 30 мая 2013 г. на Wayback Machine.
  9. ^ JSR-000225 API XQuery для Java (окончательный выпуск)
  10. ^ Средство обновления XQuery
  11. ^ XQuery Полный текст
  12. ^ MarkLogic XQJ API
  13. ^ eXist XQJ API
  14. ^ BaseX XQJ API
  15. ^ Sedna XQJ API
  16. ^ Поддержка Oracle XML DB для XQJ
  17. ^ Software AG - Работа с интерфейсом CentraSite XQJ
  18. ^ Зорба 2.5 поставляется с долгожданным XQJ связывания, 14 июня 2012 года
  19. ^ Oracle XML Developer's Kit (XDK) предоставляет автономный процессор XQuery 1.0 для использования приложениями Java.
  20. ^ http://rosenlaw.com/wp-content/uploads/Open-Standards.pdf
  21. ^ http://www.groklaw.net/articlebasic.php?story=20120221094600287

Внешние ссылки [ править ]

  • Документация Javadoc для XQJ
  • XQJ Учебник
  • Наводя мосты от Java к XQuery, Чарльз Фостер. XML Прага 2012 ( презентация Prezi )
  • Интеграция XQuery с Java, Ханс-Юрген Реннау. Balisage 2010
  • Формы Orbeon с использованием XQJ
  • Spring Integration Поддержка XQuery
  • XQS: XQuery для Scala (находится поверх XQJ)
  • Плагин поддержки IntelliJ XQuery