Jump to content

API XQuery для Java

(Перенаправлено с XQJ )

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

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

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

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

История и реализация

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

API XQuery для Java был разработан в рамках процесса сообщества Java как JSR 225 . У него было несколько крупных сторонников технологий, таких как Oracle . [ 3 ] [ 4 ] [ 5 ] [ 6 ] ИБМ , [ 5 ] [ 6 ] БЕА Системс , [ 7 ] Программное обеспечение АГ , [ 8 ] Intel , Nokia и DataDirect . [ 4 ]

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

Классы 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 интерфейс.

Элементы Atomic XQuery можно легко преобразовать в Java с помощью примитивы XQItemAccessor такие методы, как getByte() и getFloat(). Также элементы и последовательности XQuery можно сериализовать в DOM. Node, ПРАВИЛЬНЫЙ ContentHandler, СтаКС XMLStreamReader и общий ввод-вывод Reader и InputStream занятия.

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

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

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

// Create a new connection to an XML database
XQConnection conn = vendorDataSource.getConnection("myUser", "myPassword");

XQExpression expr = conn.createExpression(); // Create a reusable XQuery Expression object

XQResultSequence result = expr.executeQuery(
  "for $n in fn:collection('catalog')//item " +
  "return fn:data($n/name)"); // execute an XQuery expression

// Process the result sequence iteratively
while (result.next()) {
    // Print the current item in the sequence
    System.out.println("Product name: " + result.getItemAsString(null));
}

// Free all resources created by the connection
conn.close();

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

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

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

XQExpression expr = conn.createExpression();

// The XQuery expression to be executed
String es = "declare variable $x as xs:integer external;" +
            " for $n in fn:collection('catalog')//item" +
            " where $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 по умолчанию
boolean xs:boolean
byte xs:byte
byte[] xs:hexBinary
double xs:double
float xs:float
int xs:int
long xs:long
short xs:short
Boolean xs:boolean
Byte xs:byte
Float xs:float
Double xs:double
Integer xs:int
Long xs:long
Short xs:short
String xs:string
BigDecimal xs:decimal
BigInteger xs:integer
Duratio 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 Состояние объекта 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:untyped)
Attr attribute(*, xs:untypedAtomic)
Comment comment()
ProcessingInstruction processing-instruction()
Text text()

Известные реализации

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

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

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

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

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

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

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

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

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

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

Лицензия

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

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

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

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

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

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

  1. ^ Перейти обратно: а б с д Модель данных XQuery 1.0 и XPath 2.0 (XDM)
  2. ^ Привязка переменных Java
  3. ^ Запросы XML: XQuery, XPath и SQL/XML в контексте - Джим Мелтон и Стивен Бакстон. ISBN   978-1558607118
  4. ^ Перейти обратно: а б XQJ — XQuery Java API завершен, Марк Ван Каппеллен, Чжэнь Хуа Лю, Джим Мелтон и Максим Оргиян. Архивировано 28 июля 2012 г. на Wayback Machine.
  5. ^ Перейти обратно: а б IBM и Oracle отправляют запрос на спецификацию Java XQuery API для Java (XQJ).
  6. ^ Перейти обратно: а б Ранний взгляд на XQuery API для Java (XQJ) — Эндрю Айзенберг, IBM и Джим Мелтон, Oracle. Архивировано 28 июля 2012 г. на Wayback Machine.
  7. ^ Процессор BEA Streaming XQuery
  8. ^ Интерфейс XQJ для собственной XML-базы данных Tamino. Архивировано 30 мая 2013 г. на Wayback Machine.
  9. ^ JSR-000225 API XQuery для Java (окончательная версия)
  10. ^ Средство обновления XQuery
  11. ^ Полный текст XQuery
  12. ^ API MarkLogic XQJ
  13. ^ eXist XQJ API
  14. ^ API BaseX XQJ
  15. ^ API Седны XQJ
  16. ^ Поддержка Oracle XML DB для XQJ
  17. ^ Software AG - Работа с интерфейсом CentraSite XQJ
  18. ^ Zorba 2.5 поставляется с долгожданной привязкой XQJ, 14 июня 2012 г.
  19. ^ Комплект разработчика Oracle XML (XDK) предоставляет автономный процессор XQuery 1.0 для использования приложениями Java.
  20. ^ «Открытые стандарты» (PDF) . Проверено 7 сентября 2023 г.
  21. ^ «Groklaw — Oracle против Google — понимание проблемы авторских прав со спецификациями API» . www.groklaw.net . Архивировано из оригинала 5 мая 2012 года.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a603135f007b843556f1f24656b412fb__1694094180
URL1:https://arc.ask3.ru/arc/aa/a6/fb/a603135f007b843556f1f24656b412fb.html
Заголовок, (Title) документа по адресу, URL1:
XQuery API for Java - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)