السلام عليكم ورحمة الله، نشرت سابقا منشورا تحدثت فيه عن توحيد معايير البيانات القرآنية، وعرضت نموذجا ناجحا وهو معيار USX ومكتبة الإنجيل الرقمية DBL.
وهذه المقالة تكمل رحلة بدأت من quran-meta، ثم اختلاف المصطلحات وحصرها، ووصلت إلى السؤال عن الشكل الأنسب لحفظ البيانات ونقلها.
التحدي في هيكلة البيانات القرآنية هو كثرة العلاقات المتداخلة. فهناك اختلاف طرق العد والصفحات بين المصاحف. لذلك فإن بناء قاعدة بيانات SQL بالشكل المعتاد، بحيث ترتبط الآية بصفحة واحدة عن طريق foreign key، لا يناسب طبيعة البيانات.
الحل المقترح من المجتمع
الفكرة ببساطة: نحفظ النص مرة واحدة، ثم نصف طرق تقسيمه عن طريق ranges من غير أن ننسخه كل مرة.
في quran-meta لكل آية رقم ثابت يسمى AyahId. أما QUSX فيطبق الفكرة على الكلمات: يعطي كل كلمة رقما، ثم يسجل أين تبدأ وتنتهي الآية أو الصفحة أو السطر أو الجزء. هذه العلامات تسمى milestones.
مثلا: إذا كانت صفحة ما تبدأ عند الكلمة 20 وتنتهي عند الكلمة 120، يكفي حفظ هذين الرقمين. تبقى الكلمات نفسها كما هي، ويمكن أن تتقاطع الصفحة مع الآية أو الجزء من غير مشكلة.
وهذا مثال مبسط من QUSX:
<qusx version="0.1"
surah="1"
name="Al-Fatihah"
nameArabic="الفاتحة"
ayahCount="7"
tradition="hafs-kufi">
<page number="1" sid="page:1"/>
<line number="2" sid="page:1:line:2"/>
<ayah number="1" tradition="hafs-kufi" sid="1:1:hafs-kufi"/>
<word id="1" position="1">بِسْمِ</word>
<word id="2" position="2">ٱللَّهِ</word>
<word id="3" position="3">ٱلرَّحْمَـٰنِ</word>
<word id="4" position="4">ٱلرَّحِيمِ</word>
<ayah eid="1:1:hafs-kufi"/>
<line eid="page:1:line:2"/>
<page eid="page:1"/>
</qusx>
sid تعني بداية النطاق، وeid تعني نهايته. وبينهما توجد الكلمات التابعة للآية أو الصفحة أو السطر.

التفاصيل في مقالة QUSX: تطبيق فكرة milestone على البيانات القرآنية.
وقد ساهم أخونا ماجد بتحويل الفكرة إلى مشروعين عمليين:
- اQUSX: ينشئ ملفات XML تحتوي الكلمات وحدود الآيات والصفحات وغيرها.
- اqusx-json: يقرأ هذه الملفات ويحولها إلى JSON.
وطُبّقت الفكرة على المصحف كاملا برواية حفص على عدة طبعات، وبنيت عليها:
- قارئ
- تجربة متابعة
- للبيانات الصوتية
إذن الفكرة تعمل عمليا، لكنها ما زالت مسودة للنقاش وليست معيارا معتمدا.
شرح بسيط للحل المقترح
XML وJSON ليست بدائل، بل لكل واحدة دور:
- اXML للأرشفة والحفظ: النسخة الأساسية التي نراجعها ونتحقق منها.
- اJSON للتطبيقات: نسخة سهلة يقرأها الموقع أو تطبيق الجوال.
سؤالنا إلى مهندسي البرمجيات ذوي الخبرة
ما رأيكم في حفظ البيانات القرآنية على شكل XML؟ يمكن رؤية مثال مبسط هنا.
الهدف هو بناء أرشيف موحد للبيانات القرآنية. يبقى XML هو المصدر الأساسي، ثم يستهلك كل تطبيق البيانات عن طريق JSON أو REST API.
هل ترون أن هذا الفصل بين الحفظ والنقل والبحث مناسب؟ وهل توجد حالات لا تغطيها علامات البداية والنهاية، خصوصا مع اختلاف الروايات والرسم وطرق العد والطبعات؟