Java için XQuery API - XQuery API for Java

XQJ
Geliştirici (ler)Java Topluluğu Süreci
Kararlı sürüm
1.0 / 24 Haziran 2009 (2009-06-24)
TürVeri Erişim API'si
İnternet sitesiJSR 225: Java için XQuery API
Java Uygulamalarından XML Veritabanı ile iletişim kurmak için bir XQJ sürücüsünün nasıl kullanıldığına ilişkin genel mimari.

Java için XQuery API (XQJ) ortak olanı ifade eder Java API için W3C XQuery 1.0 spesifikasyonu.

XQJ API, Java programcılarının XQuery karşı XML veri kaynağı (ör. bir XML veritabanı ) azaltırken veya ortadan kaldırırken satıcıya kilitlenme.

XQJ API, Java geliştiricilerine XQuery Veri Modeli için bir arayüz sağlar.[1] Tasarımı benzer JDBC API İstemci / sunucu hissine sahip olan ve bu nedenle Sunucu tabanlı XML Veritabanları ve müşteri tarafında daha az iyi XQuery işlemciler, "bağ "bölümü, tüm API'nin çok küçük bir parçasıdır. XQJ API kullanıcıları, Java değerler XQuery ifadeler, önleme kod yerleştirme saldırıları.[2] Ayrıca birden çok XQuery ifadeler bir parçası olarak çalıştırılabilir atomik işlem.

Tarih ve uygulama

Java için XQuery API, şu tarihte geliştirilmiştir: Java Topluluğu Süreci gibi JSR 225. Bazı büyük teknoloji destekçileri vardı. Oracle,[3][4][5][6] IBM,[5][6] BEA Sistemleri,[7] Software AG,[8] Intel, Nokia ve DataDirect.[4]

Java Spesifikasyonu için XQuery API'sinin 1.0 Sürümü 24 Haziran 2009'da yayınlandı,[9] ile birlikte JavaDocs, bir referans uygulaması ve bir TCK (Teknoloji Uyumluluk Kiti) uygulayıcı satıcıların uyması gereken.

XQJ sınıfları, Java paketi javax.xml.xquery

Örneğin, işlevler, diziler veya haritalar gibi veri modeline yapılan eklemeler için Java bağlamaları sağlayarak XQuery 3.0 veya 3.1 için destek sağlayan bir XQJ sürümünü oluşturmak için (görünür) etkinlik yoktur.

İşlevsellik

XQJ, birden fazla uygulamanın var olmasına ve aynı uygulama tarafından kullanılmasına izin verir.

XQJ bağlantıları oluşturmayı ve yürütmeyi destekler XQuery ifade. İfadeler güncelleniyor olabilir[10] ve tam metin aramalarını içerebilir.[11] XQJ temsil eder XQuery Aşağıdaki sınıflardan birini kullanan ifadeler:

  • XQExpression - ifade her seferinde XQuery işlemcisine gönderilir.
  • XQPreparedExpression - ifade önbelleğe alınır ve yürütme yolu, verimli bir şekilde birden çok kez yürütülmesine izin verecek şekilde önceden belirlenir.

XQuery ifadeler XDM'nin bir sonuç dizisini döndürür[1] XQJ'de gösterilen öğeler XQResultSequence arayüz. Programcı bir XQResultSequence bireysel XDM üzerinden yürümek[1] sonuç dizisindeki öğeler. Sıradaki her öğenin XDM'si vardır[1] düğüm türü gibi onunla ilişkili bilgileri yazın, ör. öğe (), belge düğümü () veya bir XDM atomik türü, örneğin xs: dize, xs: tamsayı veya xs: dateTime. XQJ'deki XDM tipi bilgileri, XQItemType arayüz.

Atomik XQuery öğeler kolayca dönüştürülebilir Java yoluyla ilkeller XQItemAccessor gibi yöntemler getByte () ve getFloat (). Ayrıca XQuery öğeler ve diziler, DOM Düğüm, SAX ContentHandler, StAX XMLStreamReader ve genel GÇ Okuyucu ve InputStream sınıflar.

Örnekler

Temel örnek

Aşağıdaki örnek, bir XML Veritabanı, göndererek XQuery ifade, ardından sonuçları işlemek Java. Tüm sonuçlar işlendikten sonra, kendisiyle ilişkili tüm kaynakları serbest bırakmak için bağlantı kapatılır.

// XML veritabanına yeni bir bağlantı oluşturalımXQConnection bağlantı = vendorDataSource.getConnection("myUser", "Şifrem");XQExpression ifade = bağlantı.createExpression(); // Yeniden kullanılabilir bir XQuery Expression nesnesi oluşturunXQResultSequence sonuç = ifade.Sorguyu çalıştır(  "fn'de $ n için: koleksiyon ('katalog') // öğe" +  "return fn: veri ($ n / ad)"); // bir XQuery ifadesi yürütün// Sonuç dizisini yinelemeli olarak işleyinsüre (sonuç.Sonraki()) {    // Sıradaki mevcut öğeyi yazdır    Sistem.dışarı.println("Ürün adı: " + sonuç.getItemAsString(boş));}// Bağlantı tarafından oluşturulan tüm kaynakları serbest bırakınbağlantı.kapat();

Bir değeri harici bir değişkene bağlama

Aşağıdaki örnek, bir Java değer bir harici değişkene bağlanabilir XQuery ifade. bağlantının bağlantı zaten var:

XQExpression ifade = bağlantı.createExpression();// Çalıştırılacak XQuery ifadesiDize es = "$ x değişkenini xs olarak bildir: harici tamsayı;" +            "fn'de $ n için: koleksiyon ('katalog') // öğe" +            "$ n / fiyat <= $ x" +            "return fn: veri ($ n / ad)";// QName x ile bir değeri (21) harici bir değişkene bağlayınifade.bindInt(yeni QName("x"), 21, boş);// XQuery ifadesini yürütünXQResultSequence sonuç = ifade.Sorguyu çalıştır(es);// Sonucu (diziyi) yinelemeli olarak işleyinsüre (sonuç.Sonraki()) {    // Sonucu işleyin ...}

Varsayılan veri türü eşlemesi

Eşleştirme Java ve XQuery veri türleri büyük ölçüde esnektir, ancak XQJ 1.0 belirtimi, kullanıcı tarafından belirtilmediğinde veri türlerini eşleyen varsayılan eşleme kurallarına sahiptir. Bu eşleme kuralları, içinde bulunan eşleme kurallarına büyük benzerlikler taşır. JAXB.

Aşağıdaki tablo, bağlama sırasında varsayılan eşleme kurallarını gösterir. Java dış değişkenlere değerler XQuery ifade.

Java veri türlerinden XQuery veri türlerine eşleme yapılırken varsayılan dönüştürme kuralları
Java Veri TürüVarsayılan XQuery Veri Türleri
Boolexs: boole
baytxs: bayt
bayt[]xs: hexBinary
çiftxs: çift
yüzenxs: float
intxs: int
uzunxs: uzun
kısaxs: kısa
Boolexs: boole
Baytxs: bayt
Yüzerxs: float
Çiftxs: çift
Tamsayıxs: int
Uzunxs: uzun
Kısaxs: kısa
Dizexs: dize
BigDecimalxs: ondalık
BigIntegerxs: tamsayı
Süresixs: dayTimeDuration Eğer Süresi Nesnenin durumu xs: dayTimeDuration
xs: yearMonthDuration Eğer Süresi Nesnenin durumu xs: yearMonthDuration
xs: süre Eğer Süresi Nesnenin durumu xs: süre
XMLGregorianCalendarxs: tarih Eğer XMLGregorianCalendar Nesnenin durumu xs: tarih
xs: dateTime Eğer XMLGregorianCalendar Nesnenin durumu xs: dateTime
xs: gDay Eğer XMLGregorianCalendar Nesnenin durumu xs: gDay
xs: gMonth Eğer XMLGregorianCalendar Nesnenin durumu xs: gMonth
xs: gMonthDay Eğer XMLGregorianCalendar Nesnenin durumu xs: gMonthDay
xs: gYear Eğer XMLGregorianCalendar Nesnenin durumu xs: gYear
xs: gYearMonth Eğer XMLGregorianCalendar Nesnenin durumu xs: gYearMonth
xs: zaman Eğer XMLGregorianCalendar Nesnenin durumu xs: zaman
QNamexs: QName
Belgebelge düğümü (öğe (*, xs: türlenmemiş))
DocumentFragmentbelge düğümü (öğe (*, xs: türlenmemiş))
Elemanöğe (*, xs: türlenmemiş)
Attrözellik (*, xs: untypedAtomic)
Yorum Yapyorum Yap()
İşleme Talimatıişleme talimatı ()
MetinMetin()

Bilinen uygulamalar

Yerel XML veritabanları

Aşağıdakiler listesidir Yerel XML Veritabanları Java uygulamaları için XQuery API'ye sahip olduğu bilinmektedir.

İlişkisel veritabanları

DataDirect XQJ sağlayın adaptörler için ilişkisel veritabanları, çevirerek XQuery kodlamak SQL anında, sonra dönüştürme SQL sonuç kümeleri XQJ'nin daha fazla işlemesi için uygun bir formatta. Aşağıda bilinen birkaç uygulama yer almaktadır.

Veritabanı dışı uygulamalar

Aşağıdaki veritabanı olmayanların bir listesidir XQuery Java arabirimi için bir XQuery API sağlayan işlemciler (tipik olarak dosya deposunda XML'den ayrıştırılan ve DOM veya benzer ağaçlar olarak bellekte tutulan belgelere karşı sorguya izin verir).

Lisans

Spesifikasyon "Copyright © 2003, 2006 - 2009 Oracle. Tüm hakları saklıdır."

Spesifikasyon iki ayrı lisans içerir: "spesifikasyon lisansı" ve "referans uygulama lisansı".

Spesifikasyon lisansı, telif hakkı bildirimlerinin saklanması şartıyla spesifikasyonun ücretsiz kopyalanmasına izin verir; aynı zamanda, tüm spesifikasyonu tam olarak uygulaması, herhangi bir arayüzü değiştirmemesi veya genişletmemesi ve uyumluluk testlerini geçmesi koşuluyla, spesifikasyonun bir uygulamasını oluşturmak ve dağıtmak için bir lisans verir.

Bu hüküm bazı tartışmalara neden oldu. İlk olarak, yayınlanmış bir şartnamenin uygulanmasının bir lisans gerektiren bir şey olduğu evrensel olarak kabul edilmemiştir (diğer bir deyişle, telif hakkı yasası, bir lisans yoksa buna izin vermeyecektir).[20][21] İkinci olarak, lisans bir açık kaynak lisansı olma kriterlerini karşılamamaktadır ( Açık Kaynak Tanımı ), uzantı ve değişiklik yapma yasağı nedeniyle. Bu, bazı açık kaynak meraklılarının XQJ uygulamalarının gerçekten açık kaynak olarak kabul edilip edilemeyeceğini sorgulamasına neden oldu.

Referans uygulama lisansı, oldukça geleneksel bir BSD tarzı açık kaynak lisanstır.

Referanslar

  1. ^ a b c d XQuery 1.0 ve XPath 2.0 Veri Modeli (XDM)
  2. ^ Java Değişkenlerini Bağlama
  3. ^ XML sorgulama: Bağlam içinde XQuery, XPath ve SQL / XML - Jim Melton ve Stephen Buxton. ISBN  978-1558607118
  4. ^ a b XQJ - XQuery Java API Tamamlandı, Marc Van Cappellen, Zhen Hua Liu, Jim Melton ve Maxim Orgiyan Arşivlendi 28 Temmuz 2012 Wayback Makinesi
  5. ^ a b IBM ve Oracle, Java için XQuery API (XQJ) Java Spesifikasyon İsteği Gönderin.
  6. ^ a b Java için XQuery API'sine (XQJ) Erken Bir Bakış - Andrew Eisenberg, IBM ve Jim Melton, Oracle Arşivlendi 28 Temmuz 2012 Wayback Makinesi
  7. ^ BEA Streaming XQuery İşlemcisi
  8. ^ Tamino Yerel XML Veritabanı için XQJ Arayüzü Arşivlendi 30 Mayıs 2013 Wayback Makinesi
  9. ^ JSR-000225 XQuery API for Java (Son Sürüm)
  10. ^ XQuery Güncelleme Olanağı
  11. ^ XQuery Tam Metin
  12. ^ MarkLogic XQJ API'si
  13. ^ eXist XQJ API
  14. ^ BaseX XQJ API
  15. ^ Sedna XQJ API
  16. ^ XQJ için Oracle XML DB Desteği
  17. ^ Software AG - CentraSite XQJ Arayüzü ile Çalışma
  18. ^ Zorba 2.5, uzun zamandır beklenen XQJ bağına sahip gemiler, 14 Haziran 2012
  19. ^ Oracle XML Developer's Kit (XDK), Java uygulamaları tarafından kullanılmak üzere bağımsız bir XQuery 1.0 işlemci sağlar.
  20. ^ http://rosenlaw.com/wp-content/uploads/Open-Standards.pdf
  21. ^ http://www.groklaw.net/articlebasic.php?story=20120221094600287

Dış bağlantılar