JSONiq

JSONiq هي لغة استعلام وبرمجة وظيفية مصممة للاستعلام بشكل تصريحي عن مجموعات البيانات الهرمية وغير المتجانسة وتحويلها بتنسيق JSON و XML ، بالإضافة إلى البيانات النصية غير المهيكلة.

JSONiq هي مواصفة مفتوحة المصدر منشورة بموجب ترخيص Creative Commons Attribution- ShareAlike 3.0. وهي مبنية على لغة XQuery ، وتتشارك معها نفس التعبيرات والعمليات الأساسية على الأنواع الذرية . يتوفر JSONiq بنسختين نحويتين، تدعم كلتاهما JSON وXML بشكل أصلي.

  1. تم توسيع بناء جملة JSONiq (وهي مجموعة فرعية من JSON) بدعم XML من خلال مجموعة فرعية متوافقة من XQuery.
  2. تم توسيع بناء جملة XQuery (دعم XML الأصلي) بدعم JSON من خلال مجموعة فرعية متوافقة (امتداد JSONiq لـ XQuery) من بناء جملة JSONiq المذكور أعلاه.

سمات

يوفر JSONiq بشكل أساسي وسائل لاستخراج البيانات وتحويلها من مستندات JSON أو أي مصدر بيانات يمكن عرضه على أنه JSON (مثل قواعد البيانات العلائقية أو خدمات الويب ).

التعبير الرئيسي لإجراء مثل هذه العمليات هو تعبير FLWOR الشبيه بلغة SQL ، والمستمد من XQuery. يتكون تعبير FLWOR من خمسة بنود، وهي التي سُمّيَ باسمها: FOR، LET، WHERE، ORDER BY، RETURN. كما يدعم أيضًا بنودًا للتجميع والتقسيم إلى نوافذ.

توفر اللغة أيضًا صيغةً لإنشاء مستندات JSON جديدة، حيث تكون أسماء الحقول وقيمها معروفة مسبقًا أو يمكن حسابها ديناميكيًا. لغة JSONiq (وليست امتدادًا لـ XQuery) هي مجموعة شاملة للغة JSON. أي أن كل مستند JSON هو برنامج JSONiq صالح.

بالإضافة إلى ذلك، تدعم اللغة أيضًا صيغة تنقل لاستخراج أسماء الحقول وقيمها من كائنات JSON، وكذلك القيم من مصفوفات JSON. وتتميز هذه الصيغة بالمرونة في حال غياب القيم، أو في حال تباينها، حيث تتجاهل القيم غير المتوقعة دون إظهار أي أخطاء.

تُعرَّف جميع البنى على أنها تعبيرات داخل اللغة ويمكن تداخلها بشكل تعسفي.

لا تتضمن لغة JSONiq ميزات لتحديث مستندات JSON أو XML، كما أنها لا تدعم البحث في النصوص الكاملة، ولا تحتوي على أي عبارات. جميع هذه الميزات قيد التطوير حاليًا لإصدار لاحق من اللغة.

JSONiq هي لغة برمجة تُتيح تحويل البيانات من JSON إلى JSON أو من XML إلى XML. كما تُتيح التحويل بين JSON وXML. وتتميز جميع هذه التحويلات بالخصائص التالية:

  1. استقلالية البيانات المنطقية/المادية
  2. تصريحي
  3. مستوى عالٍ
  4. خالٍ من الآثار الجانبية
  5. مكتوبة ببراعة

نموذج البيانات

تعتمد هذه اللغة على نموذج بيانات JSONiq (JDM)، وهو امتداد لنموذج بيانات XQuery وXPath (XDM). يستخدم JDM نموذجًا شجريًا لمحتوى المعلومات في مستند JSON أو XML. يحتوي على كائنات JSON، ومصفوفات JSON، وجميع أنواع عقد XML، بالإضافة إلى القيم الأساسية مثل الأعداد الصحيحة، والسلاسل النصية، والقيم المنطقية، وكلها مُعرّفة في مخطط XML .

يشكل نموذج بيانات جافا (JDM) أساسًا للغة موجهة نحو المجموعات، حيث أن عناصر هذا النموذج عبارة عن سلاسل (تُعتبر القيمة المفردة سلسلة من عنصر واحد). يمكن أن تكون عناصر السلسلة كائنات JSON، أو مصفوفات JSON، أو عقد XML، أو قيمًا ذرية.

أمثلة

يقوم نموذج كود JSONiq أدناه بحساب رمز المنطقة وعدد جميع الأشخاص الذين تزيد أعمارهم عن 20 عامًا من مجموعة من كائنات JSON person (انظر مقالة JSON للحصول على مثال لكائن).

for $ p in collection ( "persons" ) where $ p.age gt 20 let $ home := $ p.phoneNumber [][ $$ . type eq "home" ] . number group by $ area := substring-before ( $ home , " " ) return { "area code" : $ area , "count" : count ( $ p ) } }

جميع بنيات JSONiq هي تعبيرات ويمكن أيضًا تضمينها في جسم الدالة.

declare function local:adults () { for $ p in collection ( "persons" ) where $ p.age gt 20 return $ p };

يقوم الاستعلام التالي بتحويل أجزاء من كل كائن شخص إلى عنصر XML باستخدام بناء جملة XQuery (امتداد JSONiq لـ XQuery).

for $ p in collection ( "persons" ) return <person> <firstName> { $ p ( "firstName" )} </firstName> <lastName> { $ p ( "lastName" )} </lastName> <age> { $ p ( "age" )} </age> </person>

التطبيقات

فيما يلي بعض الأمثلة على كيفية ومكان استخدام JSONiq:

  1. استخراج المعلومات من قاعدة البيانات لاستخدامها في خدمة ويب.
  2. إنشاء تقارير موجزة عن البيانات المخزنة في مخزن مستندات JSON.
  3. اختيار بيانات JSON وتحويلها إلى XHTML لنشرها على الويب.
  4. ربط البيانات من مصادر وتنسيقات مختلفة (مثل مخزن مستندات JSON، وقاعدة بيانات XML، وقاعدة البيانات العلائقية، وخدمة الويب) وتقديمها في خدمة الويب.
  5. تحويل مجموعات من كائنات JSON إلى مخطط مختلف.

مقارنة بين النكهة النحوية

يوجد نوعان من صيغ JSONiq، يمكن للمستخدمين استخدامهما سواء كانوا يركزون على JSON أو XML. تستخدم كلتا الصيغتين نفس نموذج البيانات، وهما متشابهتان للغاية باستثناء بعض الاختلافات البسيطة.

صيغة JSONiq

تُعدّ صيغة JSONiq النقية مجموعةً فرعيةً من JSON. وهي ليست، بالمعنى الدقيق، مجموعةً فرعيةً من XQuery على الرغم من توافر جميع تعبيراتها ودلالاتها. فيما يلي جوانب من صيغة JSONiq لا تتوافق مع XQuery:

  1. ممنوع استخدام الأسماء التي تحتوي على نقاط.
  2. لا، بالنسبة لعنصر السياق ($$ يجب استخدام بدلاً من ذلك).
  3. لا يُسمح باستخدام القيم الحرفية بين علامتي اقتباس مفردتين.
  4. JSON، الهروب باستخدام الشرطة المائلة العكسية في السلاسل النصية الحرفية .
  5. لا يُسمح بخطوة محورية في بداية تعبير المسار النسبي.

صيغة XQuery مع امتداد JSONiq

تُعدّ إضافة JSONiq إلى XQuery مجموعةً فرعيةً من XQuery، ولكنها ليست مجموعةً فرعيةً من JSON. وهي متوافقة تمامًا مع توصيات XQuery 3.0. لا تدعم صيغة XQuery الجوانب التالية من JSONiq.

  1. لا يوجد بحث عن الكائنات باستخدام النقطة ($object(“key”) بدلاً من ذلك).
  2. لا يوجد مبلغ مالي ($$) لعنصر السياق.
  3. XML، الهروب من الأحرف النصية باستخدام علامة العطف (&).
  4. يجب وضع مفاتيح الكائنات بين علامتي اقتباس
  5. لا توجد قيم حرفية صحيحة/خاطئة/فارغة
  6. يجب أن تُسبق الأنواع الذرية المضمنة بـ xs:.
  7. يجب أن تتبع الأنواع غير الذرية بأقواس.
  8. يجب كتابة الدالة empty-sequence() على هذا النحو.
  9. لا يوجد بحث في المصفوفة ولا يوجد فك تغليف للمصفوفة [].

للمزيد من القراءة

  • JSONiq - لغة SQL لـ NoSQL. جيسلان فورني. منصة النشر المستقلة CreateSpace. رقم ISBN 1489530371.

التطبيقات

انظر أيضاً

مراجع