إكسكويري
Paradigm | declarative, functional, modular |
---|---|
Designed by | W3C |
First appeared | 2007 |
الإصدار المستقر | 3.1
/ 21 مارس 2017 |
Typing discipline | dynamic or static,[2][3] strong |
OS | Cross-platform |
Filename extensions | .xq, .xql, .xqm, .xqy, .xquery |
Website | www |
Major implementations | |
Many | |
Influenced by | |
XPath, SQL, XSLT | |
|
إكسكويري XQuery (XML Query) هي لغة استعلام و برمجة وظيفية تستعلم وتقوم بتحويل مجموعات من البيانات غير المنظمة و المنظمة، عادةً في شكل XML، نص ومع امتدادات لتنسيقات البيانات الأخرى (JSON، الثنائية، إلخ.). تم تطوير اللغة بواسطة استعلام XML مجموعة العمل الخاص بـ W3C. يتم تنسيق العمل بشكل وثيق مع تطوير XSLT بواسطة مجموعة عمل XSL؛ تشترك المجموعتان في المسؤولية عن إكسپاث، وهي مجموعة فرعية من إكسكويري.
أصبحت إكسكويري 1.0 توصية W3C في 23 يناير 2007.[4]
أصبحت إكسكويري 3.0 توصية W3C في 8 أبريل 2014.[5]
أصبحت إكسكويري 3.1 توصية W3C في 21 مارس 2017.[6]
"تتمثل مهمة مشروع XML كويري في توفير تسهيلات استعلام مرنة لاستخراج البيانات من المستندات الحقيقية والظاهرية على شبكة الوب العالمية، وبالتالي توفير التفاعل المطلوب في النهاية بين عالم الوب وعالم قاعدة البيانات. في النهاية، ستعمل مجموعات ملفات XML يمكن الوصول إليها مثل قواعد البيانات."[7]
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
الميزات
إكسكويري هي لغة برمجة وظيفية، خالية من الآثار الجانبية، وهي لغة برمجة موجهة للتعبير بنظام كتابة بسيط، قام بتلخيصها و تجميعها كيلپلينن:[8]
تعمل جميع تعبيرات إكسكويري على التسلسلات، وتقوم بالتقييم حسب التسلسلات. التسلسلات هي قوائم مرتبة من عناصر. يمكن أن تكون العناصر إما عُقد، والتي تمثل مكونات مستندات XML، أو قيماً الذرية، وهي أمثلة لأنواع قاعدة مخطط XML مثل xs:integer أو xs:string. يمكن أيضاً أن تكون التسلسلات فارغة، أو تتكون من عنصر واحد فقط. لا يوجد تمييز بين عنصر واحد وتسلسل مفرد. (...) تختلف تسلسلات إكسكويري / إكسپاث عن القوائم في لغات مثل ليسپ و پرولوگ عن طريق استبعاد التسلسلات المتداخلة. ربما اعتبر مصممو إكسكويري التسلسلات المتداخلة غير ضرورية لمعالجة محتويات المستند. بدلاً من ذلك، يتم تمثيل تداخل، أو التسلسل الهرمي لهياكل المستندات بواسطة العقد والعلاقات التابعة لها
توفر إكسكويري الوسائل لاستخراج البيانات ومعالجتها من مستندات XML أو أي مصدر بيانات يمكن عرضه على أنه XML، مثل قاعدة البيانات الترابطية[9] أو مستندات مكتبية.
تحتوي إكسكويري على مجموعة شاملة من بناء جملة تعبير إكسپاث لعنونة أجزاء معينة من مستند XML. وهو يكمل هذا بتعبير SQL - مثل "FLWOR" لتنفيذ الوصلات. يتم إنشاء تعبير FLWOR من الجمل الخمس التي سُميت بعدها: FOR، LET، WHERE، ORDER BY، RETURN.
توفر اللغة أيضاً بناء جملة تسمح ببناء مستندات XML جديدة. عندما تكون أسماء العناصر والسمات معروفة مسبقاً، يمكن استخدام صيغة تشبه XML؛ في حالات أخرى، تتوفر التعبيرات التي يشار إليها باسم منشئي العقدة الديناميكية. يتم تعريف كل هذه التركيبات على أنها تعبيرات داخل اللغة، ويمكن أن تتداخل بشكل عشوائي.
تعتمد اللغة على نموذج بيانات إكسكويري و إكسپاث (XDM) الذي يستخدم نموذجاً منظماً على شكل شجرة لمحتوى المعلومات لمستند XML، يحتوي على سبعة أنواع من العقد: عقد المستند، والعناصر، والسمات، والعقد النصية، التعليقات وتعليمات المعالجة ومساحات الأسماء.
تصمم XDM أيضاً جميع القيم كتسلسلات (تعتبر القيمة المفردة سلسلة من الطول واحد). يمكن أن تكون العناصر في تسلسل إما عقد XML أو قيماً ذرية. قد تكون القيم الذرية أعداداً صحيحة وسلاسل وبيانات منطقية وما إلى ذلك: تستند القائمة الكاملة للأنواع إلى الأنواع الأولية المحددة في مخطط XML.
ميزات تحديث مستندات XML أو قواعد البيانات، وإمكانية البحث عن النص الكامل، ليست جزءًا من اللغة الأساسية، ولكنها محددة في معايير الإضافات الإضافية: يدعم تسهيل تحديث إكسكويري 1.0 ميزة التحديث ويدعم نص إكسپاث الكامل 1.0 البحث عن النص الكامل في مستندات XML.
تضيف إكسكويري 3.0 دعماً للبرمجة الوظيفية الكاملة، حيث تكون الوظائف عبارة عن قيم يمكن معالجتها (تخزينها في متغيرات، وتمريرها إلى وظائف ذات ترتيب أعلى، واستدعاؤها ديناميكياً).
أمثلة
يسرد نموذج رمز إكسكويري أدناه المتحدثين الفريدين في كل عمل من مسرحية هاملت لشكسپير، المشفرة في hamlet.xml
<html><body>
{
for $act in doc("hamlet.xml")//ACT
let $speakers := distinct-values($act//SPEAKER)
return
<div>
<h1>{ string($act/TITLE) }</h1>
<ul>
{
for $speaker in $speakers
return <li>{ $speaker }</li>
}
</ul>
</div>
}
</body></html>
جميع بنى إكسكويري لإجراء العمليات الحسابية هي تعبيرات. لا توجد عبارات، على الرغم من أن بعض الكلمات الرئيسية تبدو وكأنها تشير إلى سلوكيات شبيهة بالعبارات. لتنفيذ دالة، يتم تقييم التعبير داخل الهيكل البرمجي وإرجاع قيمته. وبالتالي لكتابة دالة لمضاعفة قيمة الإدخال، يكتب المبرمج ببساطة:
declare function local:doubler($x) { $x * 2 }
لكتابة استعلام كامل يقول "Hello World"، يكتب المبرمج التعبير:
"Hello World"
هذا النمط شائع في لغات البرمجة الوظيفية.
التطبيقات
فيما يلي بعض الأمثلة عن كيفية استخدام إكسكويري:
- استخراج معلومات من قاعدة بيانات لاستخدامها في خدمة الوب.
- إنشاء موجزات التقارير عن البيانات المخزنة في قاعدة بيانات XML.
- البحث في المستندات النصية على الويب للحصول على المعلومات ذات الصلة وتجميع النتائج.
- تحديد وتحويل بيانات XML إلى XHTML لنشرها على الوب.
- سحب البيانات من قواعد البيانات لاستخدامها في تكامل التطبيق.
- تقسيم مستند XML الذي يمثل معاملات متعددة في مستندات XML متعددة.
مقارنة بين إكسكويري و XSLT
هذا section يحتاج المزيد من الأسانيد للتحقق. (May 2020) (Learn how and when to remove this template message) |
المجال
على الرغم من تصميم إكسكويري في البداية كلغة استعلام لمجموعات كبيرة من مستندات XML، إلا أنها قادرة أيضاً على تحويل المستندات الفردية. على هذا النحو، تتداخل قدراته مع XSLT، والذي تم تصميمه صراحة للسماح بتحويل مستندات XML المدخلة إلى HTML أو تنسيقات أخرى.
تم تطوير معايير XSLT 2.0 و إكسكويري من قبل مجموعات عمل منفصلة داخل W3C، والعمل معاً لضمان اتباع نهج مشترك عند اللزوم. تتشارك في نفس نموذج البيانات ( XDM) ونظام الكتابة ومكتبة الوظائف، وكلاهما يتضمن إكسپاث 2.0 كلغة فرعية.
الأصل
ومع ذلك، فإن اللغتين متجذرتان في تقاليد مختلفة وتخدم احتياجات المجتمعات المختلفة. تم تصميم XSLT في المقام الأول كلغة نمطية كان هدفها الأساسي تقديم XML للقارئ المستخدم على الشاشة، على الوب (مثل لغة قالب الوب)، أو على الورق. تم تصميم إكسكويري في المقام الأول على أنها لغة استعلام قواعد البيانات في تقليد SQL.
نظراً لأن اللغتين نشأت في مجموعات مختلفة، فإن XSLT أقوى [حسب من؟] في تعامله مع المستندات السردية ببنية أكثر مرونة، في حين أن إكسكويري أقوى في معالجة البيانات (على سبيل المثال، عند إجراء الصلات الترابطية).
الإصدارات
ظهرت XSLT 1.0 كتوصية في عام 1999، بينما أصبحت إكسكويري 1.0 توصية في أوائل عام 2007 فقط؛ نتيجة لذلك، لا تزال XSLT مستخدمةً على نطاق واسع. تتمتع كلتا اللغتين بقدرة تعبيرية متشابهة، على الرغم من أن XSLT 2.0 بها العديد من الميزات المفقودة من إكسكويري 1.0، مثل التجميع وتنسيق الأرقام والتاريخ والتحكم بشكل أكبر في فراغات الأسماء XML.[10][11][12] تم التخطيط للعديد من هذه الميزات لـ إكسكويري 3.0..[13]
يجب أن تأخذ أي مقارنة في الحسبان حقيقة أن XSLT 1.0 و XSLT 2.0 لغتان مختلفتان تماماً. XSLT 2.0، على وجه الخصوص، تأثر بشدة بـ إكسكويري في انتقالها إلى الكتابة القوية والوعي بالنظام.
نقاط القوة والضعف
أظهرت دراسات قابلية الاستخدام أن تعلم إكسكويري أسهل في التعلم من XSLT، خاصة للمستخدمين الذين لديهم خبرة سابقة في لغات قاعدة البيانات مثل إس كيو إل.[14] يمكن أن يُعزى ذلك إلى حقيقة أن إكسكويري هي لغة أصغر ذات مفاهيم أقل للتعلم، وإلى حقيقة أن البرامج أكثر إيجازاً. من الصحيح أيضاً أن إكسكويري متعامد بشكل أكبر، حيث يمكن استخدام أي تعبير في أي سياق نحوي. على النقيض من ذلك، فإن XSLT هو نظام ثنائي اللغة يمكن فيه دمج تعبيرات إكسپاث في تعليمات XSLT ولكن ليس العكس.
XSLT أقوى حالياً من إكسكويري للتطبيقات التي تتضمن إجراء تغييرات صغيرة على مستند (على سبيل المثال، حذف جميع عناصر الملاحظة). يتم التعامل مع مثل هذه التطبيقات بشكل عام في XSLT باستخدام نمط ترميز يتضمن قالب هوية ينسخ جميع العقد دون تغيير، ويتم تعديله بواسطة قوالب معينة تقوم بتعديل العقد المحددة. لا يوجد لدى إكسكويري ما يعادل نمط الترميز هذا، على الرغم من أنه في الإصدارات المستقبلية سيكون من الممكن معالجة مثل هذه المشكلات باستخدام تسهيلات التحديث في اللغة والتي هي قيد التطوير.[15]
تفتقر إكسكويري 1.0 إلى أي نوع من آلية الربط الديناميكي أو تعدد الأشكال؛ تمت معالجة ذلك من خلال إدخال الوظائف كقيم من الدرجة الأولى في إكسكويري 3.0. يبدأ غياب هذه الإمكانية في الظهور عند كتابة تطبيقات كبيرة، أو عند كتابة تعليمات برمجية مصممة لتكون قابلة لإعادة الاستخدام في بيئات مختلفة.[بحاجة لمصدر] توفر XSLT آليتين تكميليتين في هذا المجال: مطابقة قواعد النموذج، والقدرة على تجاوز القواعد باستخدام xsl:import
، مما يجعل من الممكن كتابة تطبيقات ذات طبقات تخصيص متعددة.
كان عدم وجود هذه التسهيلات من إكسكويري 1.0 قراراً تصميمياً متعمداً: فقد أدى إلى قابلية إكسكويري للتحليل الثابت، وهو أمر ضروري لتحقيق مستوى التحسين المطلوب في لغات استعلام قاعدة البيانات. هذا أيضاً يجعل من السهل اكتشاف الأخطاء في تعليمات إكسكويري البرمجية في وقت الترجمة.
حقيقة أن XSLT 2.0 تستخدم بناء الجملة XML يجعلها مطولة بالمقارنة مع إكسكويري 1.0. ومع ذلك، تستفيد العديد من التطبيقات الكبيرة من هذه الإمكانية باستخدام XSLT لقراءة ملفات الأنماط أو كتابتها أو تعديلها ديناميكياً كجزء من توصيلات قنوات المعالجة. يتيح استخدام بناء جملة XML أيضاً استخدام الأدوات المستندة إلى XML لإدارة تعليمات XSLT البرمجية. على النقيض من ذلك، يعتبر بناء جملة إكسكويري أكثر ملاءمة للتضمين في لغات البرمجة التقليدية مثل جاڤا (انظر واجهة برمجة تطبيقات إكسكويري لجاڤا) أو سي شارپ. إذا لزم الأمر، يمكن أيضاً التعبير عن تعليمات إكسكويري البرمجية في صيغة XML تسمى إكسكويري إكس. تمثيل إكسكويري إكس لرمز إكسكويري مطول إلى حد ما وغير مناسب للمستخدمين، ولكن يمكن معالجته بسهولة باستخدام أدوات XML، على سبيل المثال تحويله باستخدام ملفات أنماط XSLT.[16][17]
الملحقات والعمل المستقبلي
ملحقات W3C
تم تطوير امتدادين رئيسيين لـ إكسكويري بواسطة W3C:
- إكسكويري 1.0 و إكسپاث 2.0 نص-كامل[18]
- وسيلة تحديث إكسكويري
وصل كلاهما إلى حالة التوصية كملحقات لـ إكسكويري 1.0، ولكن تم التخلي عن العمل على المضي قدماً للعمل مع إكسكويري 3.0 بسبب نقص المصادر.
تم نشر العمل على إكسكويري 3.0 كتوصية في 8 أبريل 2014،[19] و إكسكويري 3.1 هي توصية اعتباراً من فبراير 2017.
تم تصميم ملحق البرمجة النصية (الإجرائية) لـ إكسكويري، ولكنه لم يكتمل أبداً.[20][21]
تطور مجموعة وحدة EXPath[22] تطوير ملحقات لـ إكسكويري والمعايير الأخرى المرتبطة (إكسپاث و XSLT و XProc و XForms). الملحقات التالية متاحة حالياً:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ملحقات الطرف الثالث
JSONiq هو امتداد لـ إكسكويري يضيف دعماً لاستخراج البيانات وتحويلها من مستندات JSON. JSONiq هي مجموعة شاملة من إكسكويري 3.0. تم نشره بموجب ترخيص نسبة-مشاركة بالمثل مشتركة إبداعية 3.0.
يطور مشروع The EXQuery[27]معايير حول إنشاء تطبيقات إكسكويري المحمولة. المعايير التالية متوفرة حالياً:
- RESTXQ[28]
للاستزادة
- Querying XML: XQuery, XPath, and SQL/XML in context. Jim Melton and Stephen Buxton. Morgan Kaufmann, 2006. ISBN 1-55860-711-0.
- Walmsley, Priscilla (2007). XQuery, 1st Edition. O'Reilly Media. ISBN 978-0-596-00634-1.
- Walmsley, Priscilla (2015). XQuery, 2nd Edition. O'Reilly Media. ISBN 978-1-4919-1510-3.
- XQuery: The XML Query Language. Michael Brundage. Addison-Wesley Professional, 2004. ISBN 0-321-16581-0.
- XQuery from the Experts: A Guide to the W3C XML Query Language. Howard Katz (ed). Addison-Wesley, 2004. ISBN 0-321-18060-7.
- An Introduction to the XQuery FLWOR Expression. Dr. Michael Kay (W3C XQuery Committee), 2005.
تطبيقات
الاسم | الترخيص | اللغة | إكسكويري 3.1 | إكسكويري 3.0 | إكسكويري 1.0 | تحديث إكسكويري 1.0 | إكسكويري نص كامل 1.0 |
---|---|---|---|---|---|---|---|
BaseX | BSD license | Java | نعم | نعم | نعم | نعم | نعم |
eXist | LGPL | Java | جزئي | جزئي | نعم | لا | لا |
MarkLogic | Proprietary | C++ | لا | جزئي | نعم | لا | لا |
Saxon HE | Mozilla Public License | Java | جزئي | جزئي | نعم | نعم | لا |
Saxon EE | Proprietary | Java | نعم | نعم | نعم | نعم | لا |
Zorba | Apache License | C++ | لا | نعم | نعم | نعم | نعم |
تشمل التطبيقات الأخرى:
- إكسكويري أوراكل لـ هادوپ: "Using Oracle XQuery for Hadoop". Archived from the original on 2016-03-04.
- Oracle: XQuery Processor for Java
- RaptorXML Server: Altova's XSLT and XQuery engine
- Sirix: XQuery with versioning extensions
- XQilla: XQilla XQuery implementation
- SPARQL2XQuery: SPARQL to XQuery translator
- Galax – an open source XQuery implementation.
- Db2 – XQuery implementation in IBM Db2.
- Xidel – open-source XQuery 3.0 implementation
الدراسات الاستقصائية
- XQuery Test Suite Results: Compliance with XQuery 1.0 features
- EXPath: XPath/XQuery engines, including a feature matrix
- W3C: XQuery implementations
المراجع
- ^ "XQuery 3.1 Recommendation". 2017-03-21.
- ^ "XQuery 3.1: An XML Query Language". 2017-03-21.
- ^ "XQuery and Static Typing".
- ^ "XML and Semantic Web W3C Standards Timeline" (PDF). 2012-02-04.
- ^ "XQuery 3.0 Recommendation". 2014-04-08.
- ^ "XQuery 3.1 Recommendation". 2017-03-21.
- ^ W3C (2003-10-25). "cited by J.Robie".
{{cite web}}
: CS1 maint: numeric names: authors list (link) - ^ Kilpeläinen, Pekka (2012). "Using XQuery for problem solving" (PDF). Software: Practice and Experience. 42 (12): 1433–1465. doi:10.1002/spe.1140. S2CID 15561027.
- ^ "Data retrieval with XQuery". Retrieved on 18 January 2016.
- ^ Kay, Michael (May 2005). "Comparing XSLT and XQuery".
- ^ Eisenberg, J. David (2005-03-09). "Comparing XSLT and XQuery".
- ^ Smith, Michael (2001-02-23). "XQuery, XSLT "overlap" debated".
- ^ "XQuery 3.0 requirements".
- ^ Usability of XML Query Languages. Joris Graaumans. SIKS Dissertation Series No 2005-16, ISBN 90-393-4065-X
- ^ "XQuery Update Facility".
- ^ "XML Syntax for XQuery (XQueryX)".
- ^ Michael Kay. "Saxon diaries: How not to fold constants".
- ^ XQuery and XPath Full Text 1.0
- ^ XML Query (XQuery) 3.0
- ^ XQuery Scripting Extension 1.0 Requirements
- ^ XQuery 1.0 Scripting Extension
- ^ EXPath Community Group
- ^ Packaging System
- ^ File Module
- ^ Binary Module
- ^ Web Applications
- ^ "Standard for portable XQuery applications". Retrieved 12 December 2013.
- ^ [1]
- Portions borrowed with permission from the books "XML Hacks" (O'Reilly Media) and "XQuery" (O'Reilly Media).
- Previous version based on an article at the French language Wikipedia
وصلات خارجية
- W3C XML Query (XQuery)
- XQuery tutorial
- XQuery API for Java (XQJ) Java Specification Request
- hamlet.xml Hamlet in XML Format
- XQuery (presentation - as HTML slides)
- List of open-source XQuery implementations
- CS1 maint: numeric names: authors list
- Short description matches Wikidata
- المقالات needing additional references from May 2020
- كل المقالات needing additional references
- Articles needing additional references from May 2020
- All articles needing additional references
- All articles with specifically marked weasel-worded phrases
- Articles with specifically marked weasel-worded phrases from May 2015
- Articles with unsourced statements from May 2015
- Articles with hatnote templates targeting a nonexistent page
- لغات برمجة الجيل الرابع
- لغات وظيفية
- لغات الاستعلام
- معايير جمعية شبكة الوب العالمية
- الوصول إلى بيانات XML