XQuery API pro Javu - XQuery API for Java
Vývojáři | Proces komunity Java |
---|---|
Stabilní uvolnění | 1.0 / 24. června 2009 |
Typ | Data Access API |
webová stránka | JSR 225: XQuery API pro Javu |

XQuery API pro Javu (XQJ) odkazuje na běžné Java API pro W3C XQuery Specifikace 1.0.
XQJ API umožňuje programátorům Java spouštět XQuery proti XML zdroj dat (např XML databáze ) při snižování nebo vylučování zámek dodavatele.
XQJ API poskytuje vývojářům Java rozhraní s datovým modelem XQuery.[1] Jeho design je podobný JDBC API který má pocit klient / server a jako takový se dobře hodí pro Server-based XML databáze a méně dobře na straně klienta XQuery procesory, i když „spojení "část je velmi malou částí celého API. Uživatelé rozhraní XQJ API se mohou vázat." Jáva hodnoty do XQuery výrazy, prevence útoky s vložením kódu.[2] Také několikanásobné XQuery výrazy lze provádět jako součást atomová transakce.
Historie a implementace
XQuery API pro Javu bylo vyvinuto na Proces komunity Java tak jako JSR 225. To mělo několik velkých technologických podporovatelů, jako je Věštec,[3][4][5][6] IBM,[5][6] Systémy BEA,[7] Software AG,[8] Intel, Nokia a DataDirect.[4]
Verze 1.0 rozhraní XQuery API pro specifikaci Java byla vydána 24. června 2009,[9] spolu s JavaDocs, a referenční implementace a a TCK (Technology Compatibility Kit) kterým musí implementující prodejci vyhovovat.
Třídy XQJ jsou obsaženy v Balíček Java javax.xml.xquery
Neexistuje žádná (viditelná) aktivita k vytvoření verze XQJ, která poskytuje podporu pro XQuery 3.0 nebo 3.1, například poskytováním vazeb Java pro doplňky k datovému modelu, jako jsou funkce, pole nebo mapy.
Funkčnost
XQJ umožňuje existovat více implementací a být používány stejnou aplikací.
Připojení XQJ podporují vytváření a provádění XQuery výrazy. Výrazy se možná aktualizují[10] a může zahrnovat fulltextové vyhledávání.[11] XQJ představuje XQuery výrazy používající jednu z následujících tříd:
XQExpression
- výraz je pokaždé odeslán do procesoru XQuery.XQPreparedExpression
- výraz je uložen do mezipaměti a cesta k provedení je předem určena, což umožňuje jeho efektivní provedení vícekrát.
XQuery výrazy vrací výslednou sekvenci XDM[1] položky, které jsou v XQJ reprezentovány prostřednictvím XQResultSequence
rozhraní. Programátor může použít XQResultSequence
procházet jednotlivé XDM[1] položky ve výsledkové sekvenci. Každá položka v pořadí má XDM[1] informace o typu s ním spojené, například jeho typ uzlu, např. živel()
, document-node ()
nebo atomový typ XDM, jako je xs: řetězec
, xs: integer
nebo xs: dateTime
. Informace o typu XDM v XQJ lze získat prostřednictvím XQItemType
rozhraní.
Atomový XQuery položky lze snadno vrhat Jáva primitivum prostřednictvím XQItemAccessor
metody jako getByte ()
a getFloat ()
. Taky XQuery položky a sekvence lze serializovat na DOM Uzel
, SAXOFON ContentHandler
, StAX XMLStreamReader
a obecný IO Čtenář
a InputStream
třídy.
Příklady
Základní příklad
Následující příklad ukazuje vytvoření připojení k XML databáze, odeslání XQuery výraz, poté zpracování výsledků v Jáva. Jakmile jsou všechny výsledky zpracovány, připojení se uzavře, aby se uvolnily všechny zdroje s ním spojené.
// Vytvořit nové připojení k databázi XMLXQConnection spoj = vendorDataSource.getConnection("myUser", "moje heslo");XQExpression expr = spoj.createExpression(); // Vytvořit opakovaně použitelný objekt XQuery ExpressionXQResultSequence výsledek = expr.executeQuery( "for $ n in fn: collection ('catalog') // item" + "návrat fn: data ($ n / jméno)"); // provede výraz XQuery// Výslednou sekvenci zpracujte iterativnězatímco (výsledek.další()) { // Tisk aktuální položky v pořadí Systém.ven.tisk("Jméno výrobku: " + výsledek.getItemAsString(nula));}// Uvolněte všechny zdroje vytvořené připojenímspoj.zavřít();
Vazba hodnoty na externí proměnnou
Následující příklad ukazuje, jak a Jáva hodnota může být vázána na externí proměnnou v XQuery výraz. Předpokládejme, že spojení spoj
již existuje:
XQExpression expr = spoj.createExpression();// Výraz XQuery, který se má provéstTětiva es = "deklarovat proměnnou $ x jako xs: integer external;" + "for $ n in fn: collection ('catalog') // item" + „kde $ n / cena <= $ x“ + "návrat fn: data ($ n / jméno)";// Vázání hodnoty (21) na externí proměnnou pomocí QName xexpr.bindInt(Nový QName("X"), 21, nula);// Spustí výraz XQueryXQResultSequence výsledek = expr.executeQuery(es);// Výsledek (sekvenci) zpracujte iterativnězatímco (výsledek.další()) { // Zpracovat výsledek ...}
Výchozí mapování datových typů
Mapování mezi Jáva a XQuery datové typy jsou do značné míry flexibilní, nicméně specifikace XQJ 1.0 má výchozí pravidla mapování mapující datové typy, pokud nejsou zadány uživatelem. Tato pravidla mapování mají velkou podobnost s pravidly mapování nalezenými v JAXB.
Následující tabulka ukazuje výchozí pravidla mapování pro vazbu Jáva hodnoty na externí proměnné v XQuery výrazy.
Datový typ Java | Výchozí datové typy XQuery |
---|---|
booleovský | xs: boolean |
byte | xs: byte |
byte[] | xs: hexBinary |
dvojnásobek | xs: double |
plovák | xs: float |
int | xs: int |
dlouho | xs: dlouhý |
krátký | xs: krátké |
Booleovský | xs: boolean |
Byte | xs: byte |
Plovák | xs: float |
Dvojnásobek | xs: double |
Celé číslo | xs: int |
Dlouho | xs: dlouhý |
Krátký | xs: krátké |
Tětiva | xs: řetězec |
BigDecimal | xs: desítkové |
BigInteger | xs: integer |
Doba trvání | xs: dayTimeDuration pokud Doba trvání Stav objektu je xs: dayTimeDuration |
xs: yearMonthDuration pokud Doba trvání Stav objektu je xs: yearMonthDuration | |
xs: trvání pokud Doba trvání Stav objektu je xs: trvání | |
XMLGregorianCalendar | xs: datum pokud XMLGregorianCalendar Stav objektu je xs: datum |
xs: dateTime pokud XMLGregorianCalendar Stav objektu je xs: dateTime | |
xs: gDay pokud XMLGregorianCalendar Stav objektu je xs: gDay | |
xs: gMěsíc pokud XMLGregorianCalendar Stav objektu je xs: gMěsíc | |
xs: gMonthDay pokud XMLGregorianCalendar Stav objektu je xs: gMonthDay | |
xs: gRok pokud XMLGregorianCalendar Stav objektu je xs: gRok | |
xs: gYearMonth pokud XMLGregorianCalendar Stav objektu je xs: gYearMonth | |
xs: čas pokud XMLGregorianCalendar Stav objektu je xs: čas | |
QName | xs: QName |
Dokument | dokument-uzel (prvek (*, xs: bez typu)) |
DocumentFragment | uzel dokumentu (prvek (*, xs: bez typu)) |
Živel | prvek (*, xs: bez typu) |
Attr | atribut (*, xs: untypedAtomic) |
Komentář | komentář() |
Pokyny pro zpracování | instrukce ke zpracování () |
Text | text() |
Známé implementace
Nativní XML databáze
Následuje seznam Nativní XML databáze o kterých je známo, že mají XQuery API pro implementace Java.
Relační databáze
DataDirect poskytnout XQJ adaptéry pro relační databáze překladem XQuery kód do SQL za běhu, pak konverzi Sady výsledků SQL do formátu vhodného pro XQJ k dalšímu zpracování. Následuje několik známých implementací.
Non-databázové implementace
Následuje seznam jiných než databáze XQuery procesory, které poskytují rozhraní XQuery API pro rozhraní Java (obvykle umožňují dotaz na dokumenty analyzované z XML v úložišti souborů a uchovávané v paměti jako DOM nebo podobné stromy).
- Procesor Saxon XSLT a XQuery
- Zorba[18]
- MXQuery
- Procesor Oracle XQuery [19]
Licence
Specifikace je označena jako „Copyright © 2003, 2006 - 2009 Oracle. Všechna práva vyhrazena.“
Specifikace obsahuje dvě samostatné licence: „specifikační licenci“ a „referenční implementační licenci“.
Licence ke specifikaci umožňuje bezplatné kopírování specifikace za předpokladu, že budou zachována upozornění na autorská práva; uděluje také licenci k vytvoření a distribuci implementace specifikace za předpokladu, že plně implementuje celou specifikaci, že nebude upravovat ani rozšiřovat žádná rozhraní a že projde testy kompatibility.
Toto ustanovení vyvolalo určitou polemiku. Zaprvé není všeobecně přijímáno, že implementace zveřejněné specifikace je něco, co vyžaduje licenci (to znamená, že autorský zákon by to v případě neexistence licence zakázal).[20][21] Zadruhé, licence nesplňuje kritéria pro kvalifikaci jako licence open source (viz Definice otevřeného zdroje ), kvůli zákazu provádění rozšíření a úprav. To vedlo některé nadšence otevřeného zdroje k výzvě, zda lze implementace XQJ někdy považovat za skutečně otevřený zdroj.
Licence pro referenční implementaci je poměrně běžná licence typu open source ve stylu BSD.
Reference
- ^ A b C d Datový model XQuery 1.0 a XPath 2.0 (XDM)
- ^ Vazba proměnných Java
- ^ Dotazování na XML: XQuery, XPath a SQL / XML v kontextu - Jim Melton a Stephen Buxton. ISBN 978-1558607118
- ^ A b XQJ - XQuery Java API je dokončeno, Marc Van Cappellen, Zhen Hua Liu, Jim Melton a Maxim Orgiyan Archivováno 28. července 2012 v Wayback Machine
- ^ A b IBM a Oracle Submit XQuery API for Java (XQJ) Java Specification Request.
- ^ A b Časný pohled na rozhraní XQuery API pro Javu (XQJ) - Andrew Eisenberg, IBM a Jim Melton, Oracle Archivováno 28. července 2012 v Wayback Machine
- ^ Procesor BEA Streaming XQuery
- ^ Rozhraní XQJ pro taminskou nativní databázi XML Archivováno 30. května 2013 v Wayback Machine
- ^ JSR-000225 XQuery API pro Javu (konečné vydání)
- ^ Aktualizační zařízení XQuery
- ^ Plný text XQuery
- ^ MarkLogic XQJ API
- ^ eXist XQJ API
- ^ BaseX XQJ API
- ^ Sedna XQJ API
- ^ Podpora Oracle XML DB pro XQJ
- ^ Software AG - Práce s rozhraním CentraSite XQJ
- ^ Zorba 2.5 se dodává s dlouho očekávanou vazbou XQJ, 14. června 2012
- ^ Oracle XML Developer's Kit (XDK) poskytuje samostatný procesor XQuery 1.0 pro použití aplikacemi Java.
- ^ http://rosenlaw.com/wp-content/uploads/Open-Standards.pdf
- ^ http://www.groklaw.net/articlebasic.php?story=20120221094600287