XQuery
XQuery ( استعلام XML ) هي لغة استعلام ولغة برمجة وظيفية مصممة للاستعلام عن مجموعات البيانات المهيكلة وغير المهيكلة وتحويلها ، وخاصةً تلك التي تكون بصيغة XML . كما أنها تدعم البيانات النصية، ومن خلال امتدادات خاصة بالتنفيذ، تدعم أيضًا تنسيقات أخرى مثل البيانات الثنائية والعلائقية .
طُوِّرت لغة XQuery بواسطة فريق عمل XML Query التابع لاتحاد شبكة الويب العالمية (W3C) ، وأصبحت النسخة 1.0 توصيةً من W3C في يناير 2007. ويتم تنسيق تطوير XQuery بشكل وثيق مع تطوير XSLT بواسطة فريق عمل XSL. ويتولى الفريقان معًا صيانة XPath ، وهو مكون مشترك بين XQuery وXSLT. تُوسِّع XQuery لغة XPath بميزات مثل تعابير FLWOR (For, Let, Where, Order by, Return)، مما يجعلها مشابهةً دلاليًا للغة SQL ولكنها مُحسَّنة للبيانات الهرمية بدلًا من البيانات العلائقية .
أضافت XQuery 3.1، التي نُشرت في مارس 2017، دعمًا لـ JSON وقدمت الخرائط والمصفوفات ووظائف إضافية من الدرجة العليا ، مما أدى إلى توسيع قدرات اللغة بشكل كبير لمعالجة البيانات الحديثة .
يتم تنفيذ XQuery بواسطة العديد من أنظمة قواعد البيانات وقواعد بيانات XML ومعالجات XML، بما في ذلك BaseX و eXist و MarkLogic و Saxon و Berkeley DB XML ، مما يجعلها تقنية أساسية لمعالجة بيانات XML في تطبيقات برامج المؤسسات .
سمات
تتمثل مهمة XQuery في:
"توفير إمكانيات استعلام مرنة لاستخراج البيانات من المستندات الحقيقية والافتراضية على شبكة الإنترنت العالمية، وبالتالي توفير التفاعل المطلوب بين عالم الويب وعالم قواعد البيانات. وفي نهاية المطاف، سيتم الوصول إلى مجموعات ملفات XML كما لو كانت قواعد بيانات." [ 4 ]
إنها لغة برمجة وظيفية وخالية من الآثار الجانبية وموجهة نحو التعبيرات مع نظام أنواع بسيط ، وقد لخصها كيلبيلينين على النحو التالي: [ 5 ]
تعمل جميع تعابير XQuery على التسلسلات، وتُقيّم إلى تسلسلات. التسلسلات عبارة عن قوائم مُرتبة من العناصر. يمكن أن تكون العناصر إما عُقدًا ، التي تُمثل مكونات مستندات XML، أو قيمًا ذرية ، وهي حالات من أنواع XML Schema الأساسية مثل xs:integer أو xs:string . يمكن أن تكون التسلسلات فارغة، أو تتكون من عنصر واحد فقط. لا يوجد تمييز بين عنصر واحد وتسلسل أحادي. (...) تختلف تسلسلات XQuery/XPath عن القوائم في لغات مثل Lisp و Prolog باستبعاد التسلسلات المتداخلة. ربما اعتبر مصممو XQuery التسلسلات المتداخلة غير ضرورية لمعالجة محتويات المستند. يتم تمثيل التداخل، أو التسلسل الهرمي لهياكل المستند، بدلاً من ذلك بواسطة العُقد وعلاقاتها بين الأصل والفرع.
يوفر XQuery الوسائل اللازمة لاستخراج البيانات ومعالجتها من مستندات XML أو أي مصدر بيانات يمكن عرضه على أنه XML، مثل قواعد البيانات العلائقية [ 6 ] أو مستندات المكتب.
تحتوي لغة XQuery على مجموعة موسعة من صيغة تعبيرات XPath لمعالجة أجزاء محددة من مستند XML. وتُكمّل هذه الصيغة بتعبير FLWOR شبيه بلغة SQL لإجراء عمليات الربط. يتكون تعبير FLWOR من خمسة بنود، سُمّي تيمّنًا بها: FOR، LET، WHERE، ORDER BY، RETURN.
توفر اللغة أيضًا بنية تسمح بإنشاء مستندات XML جديدة. عندما تكون أسماء العناصر والخصائص معروفة مسبقًا، يمكن استخدام بنية مشابهة لـ XML؛ وفي حالات أخرى، تتوفر تعابير تُعرف باسم مُنشئات العقد الديناميكية. تُعرَّف جميع هذه البنى كتعابير داخل اللغة، ويمكن تداخلها بشكل تعسفي.
تعتمد اللغة على نموذج بيانات XQuery و XPath (XDM) الذي يستخدم نموذجًا ذا بنية شجرية لمحتوى المعلومات في مستند XML، ويحتوي على سبعة أنواع من العقد: عقد المستند، والعناصر، والسمات، وعقد النص، والتعليقات، وتعليمات المعالجة، ومساحات الأسماء.
يُصمّم XDM جميع القيم على شكل سلاسل (تُعتبر القيمة المفردة سلسلةً طولها واحد). يمكن أن تكون عناصر السلسلة إما عُقد XML أو قيمًا ذرية. قد تكون القيم الذرية أعدادًا صحيحة، أو سلاسل نصية، أو قيمًا منطقية، وما إلى ذلك: تستند القائمة الكاملة للأنواع إلى الأنواع الأولية المُعرّفة في مخطط XML .
ميزات تحديث مستندات XML أو قواعد البيانات، وإمكانية البحث في النص الكامل ، ليست جزءًا من اللغة الأساسية، ولكنها محددة في معايير الامتدادات الإضافية: يدعم XQuery Update Facility 1.0 ميزة التحديث ويدعم XQuery و XPath Full Text 1.0 البحث في النص الكامل في مستندات XML.
يضيف XQuery 3.0 دعمًا للبرمجة الوظيفية الكاملة، حيث أن الدوال هي قيم يمكن معالجتها (مخزنة في متغيرات، وتمريرها إلى دوال من الدرجة العليا، واستدعائها ديناميكيًا).
أمثلة
يعرض نموذج كود XQuery أدناه قائمة بالمتحدثين الفريدين في كل فصل من مسرحية هاملت لشكسبير، والمُشفّرة في ملف 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>جميع بنيات XQuery لإجراء العمليات الحسابية هي تعابير . لا توجد عبارات ، على الرغم من أن بعض الكلمات المفتاحية قد توحي بسلوكيات مشابهة للعبارات. لتنفيذ دالة، يتم تقييم التعبير الموجود داخل جسم الدالة وإرجاع قيمته. وبالتالي، لكتابة دالة لمضاعفة قيمة مُدخلة، يُكتب ببساطة:
declare function local:doubler ( $ x ) { $ x * 2 }لكتابة استعلام كامل يقول "Hello World"، يكتب المرء التعبير التالي:
"مرحبا بالعالم"هذا الأسلوب شائع في لغات البرمجة الوظيفية .
التطبيقات
فيما يلي بعض الأمثلة على كيفية استخدام XQuery:
- استخراج المعلومات من قاعدة بيانات لاستخدامها في خدمة ويب. [ 7 ]
- إنشاء تقارير موجزة عن البيانات المخزنة في قاعدة بيانات XML. [ 7 ]
- البحث في الوثائق النصية على الإنترنت عن المعلومات ذات الصلة وتجميع النتائج. [ 8 ]
- اختيار بيانات XML وتحويلها إلى XHTML لنشرها على الويب. [ 7 ]
- استخراج البيانات من قواعد البيانات لاستخدامها في تكامل التطبيق. [ 7 ]
- تقسيم مستند XML يمثل معاملات متعددة إلى مستندات XML متعددة. [ 8 ]
مقارنة بين XQuery و XSLT
نِطَاق
على الرغم من أن لغة XQuery صُممت في البداية كلغة استعلام لمجموعات كبيرة من مستندات XML، إلا أنها قادرة أيضاً على تحويل المستندات الفردية. ولذلك، تتداخل قدراتها مع XSLT ، التي صُممت خصيصاً للسماح بتحويل مستندات XML المدخلة إلى HTML أو تنسيقات أخرى.
تم تطوير معايير XSLT 2.0 وXQuery من قبل مجموعات عمل منفصلة داخل اتحاد شبكة الويب العالمية (W3C) ، حيث تعاونت هذه المجموعات لضمان اتباع نهج مشترك عند الاقتضاء. وتشترك هذه المعايير في نفس نموذج البيانات ( XDM ) ونظام الأنواع ومكتبة الدوال، كما تتضمن كل منها XPath 2.0 كلغة فرعية.
أصل
مع ذلك، فإن اللغتين متجذرتان في تقاليد مختلفة وتخدمان احتياجات مجتمعات مختلفة. صُممت XSLT في الأساس كلغة أنماط، وكان هدفها الرئيسي عرض XML للقارئ البشري على الشاشة، أو على الويب ( كـلغة قوالب الويب )، أو على الورق. أما XQuery فقد صُممت في الأساس كلغة استعلام عن قواعد البيانات على غرار SQL .
نظرًا لأن اللغتين تنشآن في مجتمعات مختلفة، فإن XSLT أقوى في التعامل مع المستندات السردية ذات البنية الأكثر مرونة، بينما XQuery أقوى في معالجة البيانات (على سبيل المثال، عند إجراء عمليات الربط العلائقي).
الإصدارات
ظهرت XSLT 1.0 كتوصية في عام 1999، بينما لم تُعتمد XQuery 1.0 إلا في أوائل عام 2007؛ ونتيجةً لذلك، لا تزال XSLT أكثر استخدامًا على نطاق واسع. تتمتع اللغتان بقدرات تعبيرية متقاربة، إلا أن XSLT 2.0 تتضمن العديد من الميزات غير الموجودة في XQuery 1.0، مثل التجميع، وتنسيق الأرقام والتواريخ، وتحكم أكبر في مساحات أسماء XML. [ 9 ] [ 10 ] [ 11 ] وقد خُطط لإضافة العديد من هذه الميزات إلى XQuery 3.0. [ 12 ]
يجب أن تأخذ أي مقارنة في الاعتبار إصدار XSLT. فـ XSLT 1.0 و XSLT 2.0 لغتان مختلفتان تمامًا. وقد تأثرت XSLT 2.0 بشكل خاص بـ XQuery في توجهها نحو الكتابة القوية والوعي بالمخططات.
نقاط القوة والضعف
أظهرت دراسات سهولة الاستخدام أن XQuery أسهل في التعلم من XSLT ، خاصةً للمستخدمين ذوي الخبرة السابقة في لغات قواعد البيانات مثل SQL. [ 13 ] يُعزى ذلك إلى أن XQuery لغة أصغر حجمًا تحتوي على مفاهيم أقل، وإلى أن برامجها أكثر إيجازًا. كما أن XQuery أكثر استقلالية، حيث يمكن استخدام أي تعبير في أي سياق نحوي. في المقابل، XSLT نظام ثنائي اللغة، حيث يمكن تضمين تعبيرات XPath في تعليمات XSLT، ولكن ليس العكس.
تُعدّ XSLT حاليًا أقوى من XQuery في التطبيقات التي تتضمن إجراء تغييرات طفيفة على المستند (على سبيل المثال، حذف جميع عناصر NOTE). تُعالج هذه التطبيقات عادةً في XSLT باستخدام نمط برمجي يتضمن قالبًا أساسيًا ينسخ جميع العُقد دون تغيير، ويتم تعديله بواسطة قوالب مُحددة تُعدّل عُقدًا مُختارة. لا يوجد في XQuery ما يُعادل هذا النمط البرمجي، مع أنه في الإصدارات المستقبلية، سيكون من الممكن معالجة هذه المشكلات باستخدام أدوات التحديث في اللغة قيد التطوير. [ 14 ]
كان الإصدار 1.0 من XQuery يفتقر إلى أي آلية للربط الديناميكي أو تعدد الأشكال؛ وقد تم تدارك هذا النقص بإضافة الدوال كقيم من الدرجة الأولى في الإصدار 3.0 من XQuery. ويبرز غياب هذه الإمكانية عند كتابة تطبيقات كبيرة، أو عند كتابة كود مصمم لإعادة الاستخدام في بيئات مختلفة. يوفر XSLT آليتين متكاملتين في هذا المجال: المطابقة الديناميكية لقواعد القوالب، وإمكانية تجاوز القواعد باستخدام خاصية `_____________ ، مما يتيح كتابة تطبيقات ذات طبقات تخصيص متعددة.xsl:import
كان غياب هذه الميزات من XQuery 1.0 قرارًا تصميميًا مقصودًا، إذ ترتب عليه سهولة تحليل XQuery الثابت، وهو أمرٌ ضروري لتحقيق مستوى التحسين المطلوب في لغات استعلام قواعد البيانات. كما يُسهّل ذلك اكتشاف الأخطاء في كود XQuery أثناء الترجمة.
إن استخدام XSLT 2.0 لبنية XML يجعله مطولًا نسبيًا مقارنةً بـ XQuery 1.0. مع ذلك، تستفيد العديد من التطبيقات الكبيرة من هذه الميزة باستخدام XSLT لقراءة وكتابة وتعديل أنماط CSS ديناميكيًا كجزء من مسار المعالجة. كما يتيح استخدام بنية XML استخدام أدوات XML لإدارة كود XSLT. في المقابل، تُعد بنية XQuery أكثر ملاءمةً للتضمين في لغات البرمجة التقليدية مثل Java (انظر XQuery API for Java ) أو C# . عند الضرورة، يمكن أيضًا التعبير عن كود XQuery ببنية XML تُسمى XQueryX. على الرغم من أن تمثيل XQueryX لكود XQuery مطول وغير مريح للقراءة البشرية، إلا أنه يمكن معالجته بسهولة باستخدام أدوات XML، على سبيل المثال، تحويله باستخدام أنماط XSLT. [ 15 ] [ 16 ]
الإصدارات والإضافات
الإصدارات
- أصبحت XQuery 1.0 توصية من W3C في 23 يناير 2007. [ 17 ]
- أصبحت XQuery 3.0 توصية من W3C في 8 أبريل 2014. [ 18 ]
- أصبحت XQuery 3.1 توصية من W3C في 21 مارس 2017. [ 19 ]
امتدادات W3C
قام اتحاد شبكة الويب العالمية ( W3C) بتطوير امتدادين رئيسيين لـ XQuery:
- XQuery 1.0 و XPath 2.0 Full-Text، [ 20 ] الذي يوسع XQuery بإمكانيات البحث في النصوص الكاملة
- ميزة تحديث XQuery ، التي تُمكّن من تعديل البيانات في XQuery
أصبح كلاهما توصيات W3C كامتدادات لـ XQuery 1.0. تم التخلي عن الجهود المبذولة لتكييفهما مع XQuery 3.0 بسبب قيود الموارد.
تم اقتراح إضافة برمجية (إجرائية) لـ XQuery ولكنها لم تُستكمل. [ 21 ] [ 22 ]
تقوم مجموعة مجتمع EXPath [ 23 ] بتطوير إضافات لـ XQuery والمعايير ذات الصلة ( XPath و XSLT و XProc و XForms ). الإضافات التالية متاحة:
إضافات من جهات خارجية
JSONiq هي إضافة لـ XQuery تُتيح استخراج البيانات وتحويلها من مستندات JSON . وهي نسخة مُطوّرة من XQuery 3.0، ومنشورة بموجب ترخيص Creative Commons Attribution-ShareAlike 3.0 .
XQuery 3.1 في الواقع يلغي JSONiq لأنه أضاف دعمًا كاملاً لـ JSON.
يُعنى مشروع EXQuery [ 28 ] بتطوير معايير إنشاء تطبيقات XQuery قابلة للنقل. المعايير التالية متاحة حاليًا:
- RESTXQ [ 29 ]
للمزيد من القراءة
- الاستعلام عن XML: XQuery وXPath وSQL/XML في سياقها. جيم ميلتون وستيفن باكستون. مورغان كوفمان، 2006. ISBN 1-55860-711-0.
- والمسلي، بريسيلا (2007). إكس كويري، الطبعة الأولى . دار نشر أورايلي ميديا. رقم ISBN 978-0-596-00634-1.
- والمسلي، بريسيلا (2015). إكس كويري، الطبعة الثانية . دار نشر أورايلي ميديا. رقم ISBN 978-1-4919-1510-3.
- إكس كويري: لغة استعلام XML. مايكل بروندج. أديسون-ويسلي بروفيشنال، 2004. ISBN 0-321-16581-0.
- XQuery من الخبراء: دليل إلى لغة استعلام XML الخاصة بـ W3C. هوارد كاتز (محرر). أديسون-ويسلي، 2004. ISBN 0-321-18060-7.
- مقدمة إلى تعبير FLWOR في XQuery . د. مايكل كاي (لجنة XQuery التابعة لاتحاد شبكة الويب العالمية)، 2005.
التطبيقات
| اسم | رخصة | لغة | XQuery 3.1 | XQuery 3.0 | XQuery 1.0 | تحديث XQuery 1.0 | XQuery Full Text 1.0 |
|---|---|---|---|---|---|---|---|
| BaseX | رخصة BSD | جافا | نعم | نعم | نعم | نعم | نعم |
| يخرج | إل جي بي إل | جافا | جزئي | جزئي | نعم | لا | لا |
| مارك لوجيك | ملكية خاصة | لغة سي++ | لا | جزئي | نعم | لا | لا |
| ساكسون HE | رخصة موزيلا العامة | جافا | جزئي | جزئي | نعم | نعم | لا |
| ساكسون إي إي | ملكية خاصة | جافا | نعم | نعم | نعم | نعم | لا |
| زيدل | رخصة GPLv3+ | فري باسكال | نعم | نعم | نعم | لا | لا |
| زوربا | رخصة أباتشي | لغة سي++ | لا | نعم | نعم | نعم | نعم |
انظر أيضاً
مراجع
- ↑ "توصية XQuery 3.1" . 2017-03-21.
- ↑ "XQuery 3.1: لغة استعلام XML" . 2017-03-21.
- ↑ "XQuery والكتابة الثابتة" . 3 أبريل 2023.
- ↑ W3C (2003-10-25). "استشهد به ج. روبي" .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ كيلبيلينين، بيكا (2012). "استخدام XQuery لحل المشكلات" (ملف PDF) . البرمجيات: الممارسة والخبرة . 42 (12): 1433-1465 . doi : 10.1002/spe.1140 . S2CID 15561027. مؤرشف من الأصل (ملف PDF) بتاريخ 4 مارس 2016. تم الاطلاع عليه بتاريخ 29 أغسطس 2015 .
- ↑ "استرجاع البيانات باستخدام XQuery" . تم الاطلاع عليه بتاريخ 18 يناير 2016.
- 1 2 3 4 "دليل XQuery" . www.w3schools.com . تم الاطلاع عليه بتاريخ 2025-11-06 .
- 1 2 "XQuery و XPath Full Text 3.0" . www.w3.org . تم الاطلاع عليه بتاريخ 2025-11-06 .
- ↑ كاي، مايكل (مايو 2005). "مقارنة XSLT وXQuery" . مؤرشف من الأصل بتاريخ 27-06-2018 . تم الاطلاع عليه بتاريخ 15-06-2016 .
- ↑ أيزنبرغ، ج. ديفيد (2005-03-09). "مقارنة XSLT و XQuery" .
- ↑ سميث، مايكل (23 فبراير 2001). "نقاش حول "تداخل" XQuery وXSLT" . مؤرشف من الأصل في 16 يونيو 2006. تم الاطلاع عليه في 19 يونيو 2006 .
- ↑ "متطلبات XQuery 3.0" .
- ↑ سهولة استخدام لغات استعلام XML. جوريس غراومانز. سلسلة أطروحات SIKS رقم 2005-16، ISBN 90-393-4065-X
- ↑ "مرفق تحديث XQuery" .
- ↑ "صيغة XML لـ XQuery (XQueryX)" .
- ↑ مايكل كاي. "مذكرات ساكسون: كيف لا تطوي الثوابت" .
- ↑ "الجدول الزمني لمعايير W3C الخاصة بـ XML والويب الدلالي" (ملف PDF) . 4 فبراير 2012. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 26 أكتوبر 2019. تم الاطلاع عليه بتاريخ 4 فبراير 2012 .
- ↑ "توصية XQuery 3.0" . 2014-04-08.
- ↑ "توصية XQuery 3.1" . 2017-03-21.
- ↑ XQuery و XPath النص الكامل 1.0
- ↑ متطلبات إضافة XQuery Scripting Extension 1.0
- ↑ إضافة البرمجة النصية XQuery 1.0
- ↑ مجموعة مجتمع إكس باث
- ↑ نظام التغليف
- ↑ وحدة الملفات
- ↑ وحدة ثنائية
- ↑ تطبيقات الويب
- ↑ "معيار لتطبيقات XQuery المحمولة" . تم الاطلاع عليه بتاريخ 12 ديسمبر 2013 .
- ↑ "RESTXQ 1.0: RESTful Annotations for XQuery" .
- تم اقتباس أجزاء بإذن من كتابي "XML Hacks" ( دار نشر O'Reilly Media ) و "XQuery" ( دار نشر O'Reilly Media ).
- النسخة السابقة مستندة إلى مقال في ويكيبيديا الفرنسية
روابط خارجية
- لغات البرمجة من الجيل الرابع
- اللغات الوظيفية
- لغات الاستعلام
- معايير اتحاد شبكة الويب العالمية
- الوصول إلى بيانات XML
