XQuery API для Java

редактировать

XQJ
Разработчик (и) Процесс сообщества Java
Стабильный выпуск 1.0 / 24 Июнь 2009 г. (24.06.2009)
Тип API доступа к данным
Веб-сайтJSR 225: XQuery API для Java
Общая архитектура использования драйвера XQJ для связи с XML База данных из приложений Java.

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

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

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

Содержание
  • 1 История и реализация
  • 2 Функциональность
  • 3 Примеры
    • 3.1 Базовый пример
    • 3.2 Привязка значения к внешней переменной
  • 4 Отображение типов данных по умолчанию
  • 5 Известные реализации
    • 5.1 Собственные базы данных XML
    • 5.2 Реляционные базы данных
    • 5.3 Реализации без баз данных
  • 6 Лицензия
  • 7 Ссылки
  • 8 Внешние ссылки
История и реализация

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

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

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

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

Функциональные возможности

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

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

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

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

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

Примеры

Базовый пример

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

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

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

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

XQExpression expr = conn.createExpression (); // Выражение XQuery, которое будет выполнено String es = "объявить переменную $ x как xs: integer external;" + "for $ n in fn: collection ('catalog') // item" + "где $ n / price <= $x" + " return fn:data($n/name)"; // Bind a value (21) to an external variable with the QName x expr.bindInt(new QName("x"), 21, null); // Execute the XQuery expression XQResultSequence result = expr.executeQuery(es); // Process the result (sequence) iteratively while (result.next()) { // Process the result... }
Отображение типов данных по умолчанию

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

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

Правила преобразования по умолчанию при сопоставлении из типов данных Java в типы данных XQuery
Тип данных JavaТип (ы) данных XQuery по умолчанию
логическийxs: boolean
bytexs: byte
bytexs: hexBinary
doublexs: double
floatxs: float
intxs: int
longxs: long
shortxs: short
Boolean xs: boolean
Byte xs: byte
Float xs: float
Double xs: double
Integer xs: int
Длинный xs: long
Short xs: short
String xs: string
BigDecimal xs: decimal
BigInteger xs: integer
Duration xs: dayTimeDuration, если DurationСостояние объекта xs: dayTimeDuration
xs: yearMonthDuration, если DurationСостояние объекта xs: yearMonthDuration
xs: duration, если DurationСостояние объекта xs: duration
XMLGregorianCalendar xs: date, если XMLGregorianCalendarСостояние объекта xs: date
xs: dateTime, если состояние объекта XMLGregorianCalendarравно xs: dateTime
xs: gDay, если XMLGregorianCalendarСостояние объекта - xs: gDay
xs: gMonth, если состояние объекта XMLGregorianCalendar- xs: gMonth
xs: gMonthDay, если состояние объекта XMLGregorianCalendarравно xs: gMonthDay
xs: gYear, если состояние объекта XMLGregorianCalendarравно xs: gYear
xs : gYearMonth, если объект XMLGregorianCalendarСостояние ect равно xs: gYearMonth
xs: time, если состояние объекта XMLGregorianCalendarравно xs: time
QName xs: QName
Document document-node (element (*, xs: untyped))
DocumentFragment document-node (element (*, xs: untyped))
Element element (*, xs: нетипизированный)
Attr attribute (*, xs: untypedAtomic)
Комментарий comment ()
ProcessingInstruction processing-command ()
Text text ()
Известные реализации

Собственные базы данных XML

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

Реляционные базы данных

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

Реализации без баз данных

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

Лицензия

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

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

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

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

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

Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-22 06:44:38
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте