واجهة برمجة تطبيقات XQuery للغة Java

يشير XQuery API for Java ( XQJ ) إلى واجهة برمجة تطبيقات Java الشائعة لمواصفات W3C XQuery 1.0.
تتيح واجهة برمجة التطبيقات XQJ لمبرمجي Java تنفيذ XQuery على مصدر بيانات XML (مثل قاعدة بيانات XML ) مع تقليل أو إزالة احتكار البائع .
توفر واجهة برمجة تطبيقات XQJ لمطوري جافا واجهةً لنموذج بيانات XQuery. [ 1 ] تصميمها مشابه لواجهة برمجة تطبيقات JDBC التي تتميز بطابع العميل/الخادم، ولذلك فهي مناسبة لقواعد بيانات XML المستندة إلى الخادم ، وأقل ملاءمةً لمعالجات XQuery من جانب العميل ، على الرغم من أن جزء " الاتصال " يُعدّ جزءًا صغيرًا جدًا من واجهة برمجة التطبيقات بأكملها. يمكن لمستخدمي واجهة برمجة تطبيقات XQJ ربط قيم جافا بتعبيرات XQuery ، مما يمنع هجمات حقن التعليمات البرمجية . [ 2 ] كما يمكن تنفيذ تعبيرات XQuery متعددة كجزء من معاملة ذرية .
التاريخ والتنفيذ
طُوِّرت واجهة برمجة تطبيقات XQuery للغة جافا في إطار عملية مجتمع جافا تحت مسمى JSR 225. وقد حظيت بدعم من كبرى شركات التكنولوجيا مثل أوراكل [ 3 ] [ 4 ] [ 5 ] [ 6 ]، وآي بي إم [ 5 ] [ 6 ] ، وبي إي إيه سيستمز [ 7 ] ، وسوفتوير إيه جي [ 8 ] ، وإنتل ، ونوكيا ، وداتا دايركت [ 4 ] .
تم إصدار الإصدار 1.0 من مواصفات XQuery API لـ Java في 24 يونيو 2009، [ 9 ] جنبًا إلى جنب مع JavaDocs ، وهو تطبيق مرجعي ومجموعة أدوات توافق التكنولوجيا (TCK) التي يجب على البائعين المنفذين الالتزام بها.
توجد فئات XQJ في حزمة Javajavax.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 وتسلسلاتها إلى DOMNode و SAXContentHandler و StAX وفئات الإدخال / XMLStreamReaderالإخراج العامة .ReaderInputStream
أمثلة
مثال أساسي
يوضح المثال التالي كيفية إنشاء اتصال بقاعدة بيانات XML ، وإرسال تعبير XQuery ، ثم معالجة النتائج في Java . بعد معالجة جميع النتائج، يتم إغلاق الاتصال لتحرير جميع الموارد المرتبطة به.
// إنشاء اتصال جديد بقاعدة بيانات XML XQConnection conn = vendorDataSource.getConnection ( " myUser" , "myPassword" );XQExpression expr = conn.createExpression ( ); // إنشاء كائن تعبير XQuery قابل لإعادة الاستخدامXQResultSequence result = expr.executeQuery ( "for $n in fn:collection('catalog')//item " + " return fn:data($n/name)" ) ; // تنفيذ تعبير XQuery// معالجة سلسلة النتائج بشكل تكراري while ( result . next ()) { // طباعة العنصر الحالي في السلسلة System . out . println ( "اسم المنتج: " + result . getItemAsString ( null )); }// تحرير جميع الموارد التي تم إنشاؤها بواسطة الاتصال conn.close ( );ربط قيمة بمتغير خارجي
يوضح المثال التالي كيفية ربط قيمة Java بمتغير خارجي في تعبير XQuery . افترض أن الاتصال connموجود بالفعل:
XQExpression expr = conn.createExpression ( ) ;// تعبير XQuery المراد تنفيذه 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)" ;// ربط قيمة (21) بمتغير خارجي باستخدام QName x expr . bindInt ( new QName ( "x" ), 21 , null );// تنفيذ تعبير XQuery XQResultSequence result = expr . executeQuery ( es );// معالجة النتيجة (التسلسل) بشكل تكراري while ( result . next ()) { // معالجة النتيجة ... }تعيين أنواع البيانات الافتراضية
تتميز عملية الربط بين أنواع البيانات في Java و XQuery بمرونة كبيرة، إلا أن مواصفات XQJ 1.0 تتضمن قواعد ربط افتراضية لأنواع البيانات عندما لا يحددها المستخدم. وتتشابه هذه القواعد إلى حد كبير مع قواعد الربط الموجودة في JAXB .
يوضح الجدول التالي قواعد الربط الافتراضية عند ربط قيم Java بالمتغيرات الخارجية في تعبيرات XQuery .
| نوع بيانات جافا | أنواع بيانات 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 |
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كانت حالة الكائن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 لتطبيقات Java.
قواعد البيانات العلائقية
توفر DataDirect محولات XQJ لقواعد البيانات العلائقية ، وذلك بترجمة كود XQuery إلى SQL مباشرةً، ثم تحويل نتائج SQL إلى تنسيق مناسب لمعالجتها بواسطة XQJ. فيما يلي بعض التطبيقات المعروفة.
- قاعدة بيانات أوراكل (ليست قاعدة بيانات XDB)
- IBM Db2
- خادم مايكروسوفت SQL
- Sybase ASE
- إنفورميكس
- MySQL
- PostgreSQL
تطبيقات غير قواعد البيانات
فيما يلي قائمة بمعالجات XQuery غير التابعة لقواعد البيانات والتي توفر واجهة برمجة تطبيقات XQuery لـ Java (والتي تسمح عادةً بالاستعلام عن المستندات التي تم تحليلها من XML في مخزن الملفات، والمخزنة في الذاكرة كـ DOM أو أشجار مماثلة).
- معالج Saxon XSLT و XQuery
- زوربا [ 18 ]
- MXQuery
- معالج أوراكل XQuery [ 19 ]
رخصة
تم وضع علامة على المواصفات على النحو التالي: "حقوق الطبع والنشر © 2003، 2006 - 2009 أوراكل. جميع الحقوق محفوظة."
تحتوي المواصفات على ترخيصين منفصلين: "ترخيص المواصفات" و "ترخيص التنفيذ المرجعي".
يسمح ترخيص المواصفات بنسخ المواصفات مجانًا بشرط الاحتفاظ بإشعارات حقوق النشر؛ كما يمنح ترخيصًا لإنشاء وتوزيع تطبيق للمواصفات بشرط أن ينفذ المواصفات بالكامل، وألا يقوم بتعديل أو توسيع أي واجهات، وأن يجتاز اختبارات التوافق.
أثار هذا البند بعض الجدل. أولًا، ليس من المُسلّم به عالميًا أن تطبيق مواصفات منشورة يستلزم ترخيصًا (أي أن قانون حقوق النشر يمنع ذلك في حال عدم وجود ترخيص). [ 20 ] [ 21 ] ثانيًا، لا يستوفي الترخيص معايير التأهل كترخيص مفتوح المصدر (انظر تعريف المصادر المفتوحة )، نظرًا لحظر إجراء أي إضافات أو تعديلات. وقد دفع هذا بعض المتحمسين للمصادر المفتوحة إلى التساؤل عما إذا كان من الممكن اعتبار تطبيقات XQJ مفتوحة المصدر حقًا.
إن ترخيص التطبيق المرجعي هو ترخيص مفتوح المصدر تقليدي إلى حد ما على غرار نظام BSD.
مراجع
- 1 2 3 4 نموذج بيانات XQuery 1.0 و XPath 2.0 (XDM)
- ↑ ربط متغيرات جافا
- ↑ الاستعلام عن XML: XQuery وXPath وSQL/XML في السياق - جيم ميلتون وستيفن باكستون. ISBN 978-1558607118
- ١ ٢ XQJ - تم الانتهاء من واجهة برمجة تطبيقات XQuery Java، مارك فان كابيلين، زين هوا ليو، جيم ميلتون، وماكسيم أورجيان. مؤرشف في ٢٨ يوليو ٢٠١٢ على موقع Wayback Machine.
- 1 2 قدمت شركتا IBM وOracle طلب مواصفات Java لواجهة برمجة تطبيقات XQuery لـ Java (XQJ).
- ١ ٢ نظرة مبكرة على واجهة برمجة تطبيقات XQuery للغة Java (XQJ) - أندرو أيزنبرغ، IBM وجيم ميلتون، أوراكل. مؤرشف في ٢٨ يوليو ٢٠١٢ على موقع Wayback Machine.
- ↑ معالج XQuery للبث المباشر من BEA
- ↑ واجهة XQJ لقاعدة بيانات Tamino Native XML مؤرشفة في 30 مايو 2013 على Wayback Machine
- ↑ JSR-000225 واجهة برمجة تطبيقات XQuery للغة Java (الإصدار النهائي)
- ↑ مرفق تحديث XQuery
- ↑ استعلام النص الكامل XQuery
- ↑ واجهة برمجة تطبيقات MarkLogic XQJ
- ↑ واجهة برمجة تطبيقات eXist XQJ
- ↑ واجهة برمجة تطبيقات BaseX XQJ
- ↑ واجهة برمجة تطبيقات Sedna XQJ
- ↑ دعم قاعدة بيانات أوراكل XML لـ XQJ
- ↑ شركة سوفتوير إيه جي - العمل مع واجهة سنترا سايت إكس كيو جيه
- ↑ زوربا 2.5 تصدر مع ربط XQJ الذي طال انتظاره، 14 يونيو 2012
- ↑ توفر مجموعة أدوات تطوير XML من أوراكل (XDK) معالج XQuery 1.0 مستقل للاستخدام بواسطة تطبيقات Java.
- ↑ "المعايير المفتوحة" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 4 مارس 2016. تم الاطلاع عليه بتاريخ 7 سبتمبر 2023 .
- ↑ "Groklaw - Oracle v. Google - فهم قضية حقوق النشر المتعلقة بمواصفات واجهة برمجة التطبيقات" . www.groklaw.net . مؤرشف من الأصل بتاريخ 5 مايو 2012.
روابط خارجية
- جافادوك لـ XQJ
- برنامج تعليمي لـ XQJ
- بناء جسور من جافا إلى إكس كويري، تشارلز فوستر. مؤتمر XML براغ 2012 ( عرض تقديمي على بريزي )
- تكامل جافا مع XQuery، هانز يورغن رينو. باليساج 2010
- نماذج أوربيون باستخدام XQJ، مؤرشفة بتاريخ 22 نوفمبر 2012 في أرشيف الإنترنت (Wayback Machine).
- دعم Spring Integration XQuery
- XQS: XQuery for Scala (يعتمد على XQJ)
- إضافة دعم IntelliJ XQuery
- واجهات برمجة تطبيقات جافا
- طلبات مواصفات جافا
- الوصول إلى بيانات XML
- واجهة برمجة تطبيقات جافا لـ XML
- واجهات برمجة تطبيقات قواعد البيانات
