هل سبق لك بناء تطبيق يتعامل مع البيانات القرآنية واحترت في اختيار التنسيق أو الصيغة المناسبة التي ستستخدمها لتمثيل هذه البيانات لا سيما إن كانت البيانات الخاصة بتطبيقك تتضمن وجود هرمية أو علاقات معقدة بين الآيات والسور، عندها ستحتاج إلى تمثيل دقيق للنصوص والتفاسير والمعلومات المصاحبة واختيار الصيغة الأنسب لتمثيلها، فهذا سينعكس إيجابًا على تحسين أداء تطبيقك، وسهولة صيانته، وقابلية توسعه مستقبلًا.
أشهر طرق تمثيل البيانات
سأقارن في هذا الموضوع بين أربع طرق شائعة تستخدم لتمثيل البيانات، مع توضيح خصائص كل طريقة وحالات استخدامها الشائعة وأركز بشكل خاص على أمثلة استخدامها في تمثيل البيانات القرآنية، إلى جانب تحليل مزايا وعيوب كل طريقة:
- JSON
- XML
- CSV
- YAML
طريقة JSON
كلمة جيسون JSON هي اختصار لعبارة JavaScript Object Notation، وهي طريقة لتمثيل البيانات بشكل نصّي Text منظم بحيث يسهل قراءتها من قبل البشر واستخدامها من قبل البرامج.
ويمكن عدها المعيار الأشهر لتمثيل وتبادل البيانات على الويب بين الخوادم Servers والتطبيقات أو المتصفحات Clients بسبب بساطتها وقربها من بناء كائنات JavaScript.
تمثل البيانات في جيسون بشكل أزواج مكون من مفتاح و قيمة key-value pairs حيث يكون المفتاح سلسلة نصية دائمًا string توضع بين علامتي اقتباس " " أما القيمة فقد تكون نص أو رقم أو قيمة منطقية أو قائمة أو كائن آخر مكون من مجموعة من أزواج مفتاح وقيمة.
يوضح المثال التالي طريقة تمثيل سورة الفاتحة بصيغة JSON، حيث يحتوي على معلومات أساسية عن السورة مثل رقمها، اسمها، نوعها (مكيّة أو مدنيّة) وعدد آياتها بالإضافة إلى قائمة الآيات التي تتضمن نص الآية باللغة العربية ونصها بالحروف الإنجليزية لمساعدة غير الناطقين بالعربية على قراءتها:
{
"id": 1,
"name": "الفاتحة",
"transliteration": "Al-Fatihah",
"type": "meccan",
"total_verses": 7,
"verses": [
{
"id": 1,
"text": "بِسۡمِ ٱللَّهِ ٱلرَّحۡمَٰنِ ٱلرَّحِيمِ",
"transliteration": "Bismi Allahi alrrahmani alrraheemi"
},
{
"id": 2,
"text": "ٱلۡحَمۡدُ لِلَّهِ رَبِّ ٱلۡعَٰلَمِينَ",
"transliteration": "Alhamdu lillahi rabbi alAAalameena"
},
{
"id": 3,
"text": "ٱلرَّحۡمَٰنِ ٱلرَّحِيمِ",
"transliteration": "Alrrahmani alrraheemi"
}
,
...
]
}
كما توفر الكثير من المصادر أمثلة متنوعة على تمثيل البيانات القرآنية بصيغة JSON لتتيح للمطورين والباحثين الوصول إلى السور والآيات والتفاسير لإنشاء تطبيقاتهم بسرعة أو إجراء التحليلات النصية بسهولة.
على سبيل المثال ستجد في مجمع الملك فهد لطباعة القرآن الكريم ملف بصيغة JSON لعرض الآيات بالرسم العثماني على الأجهزة الذكية، كذلك ستجد في مشروع Quranic Ayahs with Tafseer JSON Dataset مجموعة بيانات تحتوي على آيات القرآن الكريم مع تفسيرها بصيغة JSON.
مميزات JSON
تعد صيغة JSON الصيغة الأساسية لتبادل البيانات في تطبيقات الويب الحديثة والأنظمة التي تعتمد على RESTful APIs لكونها صغيرة الحجم وسهلة القراءة والكتابة ويمكن معالجتها بسهولة وسرعة برمجيًا فهي مدمجة بشكل مباشر في لغة جافا سكريبت، كما توفر معظم لغات البرمجة الأخرى مكتبات مدمجة أو طرق مباشرة للتعامل معها وتحويلها مباشرة لكائنات Objects جاهزة للاستخدام داخل التطبيقات دون الحاجة لإجراء تحويلات معقدة.
محدوديات JSON
تمتلك صيغة JSON بعض القيود فهي لا تفرض قواعد صارمة لتنسيق البيانات كما هو الحال في XML التي تمكّنك من تحديد مخطط يفرض على كل عنصر نوعه وطوله وترابطه مع عناصر أخرى، فإذا حاولت إضافة بيانات خارج هذا المخطط سيعدّها النظام خاطئة، كما أنها لا توفر طريقة لكتابة التعليقات داخل الملفات وبالتالي لا يمكن للمطورين كتابة تفسيرات مباشرة للحقول أو القيم المستخدمة، وبالعموم تعد JSON طريقة ممتازة لتخزين البيانات البسيطة أو متوسطة التعقيد لكنها ليست الحل الأمثل للبيانات التي تحتاج لتمثيل علاقات معقدة ومتشابكة.
طريقة XML
كلمة XML هي اختصار لعبارة eXtensible Markup Language، ظهرت في أواخر التسعينات كمعيار لتمثيل البيانات المهيكلة بطريقة يمكن قراءتها آليًا وبشريًا. تعتمد هذه الطريقة على الوسوم tags لتحديد عناصر البيانات وبنيتها.
تختلف XML عن JSON في طريقة تمثيل البيانات، فهي تعتمد على البنية الشجرية أو الهرمية، حيث تُنظَّم البيانات ضمن عناصر Elements يمكن أن تحتوي على عناصر فرعية أخرى أو نصوص وصفية. كما يمكن لكل عنصر أن يحمل خاصيات أو سمات Attributes وهي خصائص إضافية توضح معلومات عن العنصر نفسه بدون أن تكون جزءًا من محتواه النصي.
يوضح المثال التالي من Tanzil طريقة لتوصيف سور القرآن الكريم بصيغة XML يتضمن معلومات هيكلية وتنظيمية للسور والأجزاء والأحزاب والصفحات والسجدات وغيرها، مع سمات تفصيلية لكل عنصر.
<quran type="metadata" version="1.0" copyright="(C) 2008-2009 Tanzil.info" license="cc-by">
<suras alias="chapters">
<sura index="1" ayas="7" start="0" name="الفاتحة" tname="Al-Faatiha" ename="The Opening" type="Meccan" order="5" rukus="1"/>
...
</suras>
<juzs alias="parts">
<juz index="1" sura="1" aya="1"/>
...
</juzs>
<hizbs alias="groups">
<quarter index="1" sura="1" aya="1"/>
...
</hizbs>
<manzils alias="stations">
<manzil index="1" sura="1" aya="1"/>
...
</manzils>
<rukus alias="sections">
<ruku index="1" sura="1" aya="1"/>
...
</rukus>
<pages>
<page index="1" sura="1" aya="1"/>
...
</pages>
<sajdas>
<sajda index="1" sura="7" aya="206" type="recommended"/>
...
</sajdas>
</quran>
كما توفر العديد من المصادر بيانات قرآنية بصيغة XML مثل منصة EveryAyah التي توفر النص القرآني بالعربية مع ترجمته للفرنسية والإنجليزية.
مميزات صيغة XML
تتميز XML بالمرونة والقدرة على تمثيل البيانات في هيكل هرمي واضح، مما يسهّل فهم العلاقات بين العناصر المختلفة. كما تدعم التحقق من صحة البيانات باستخدام مخططات معيارية مثل XSD وDTD، وتوفر دعمًا لترميز Unicode، مما يجعلها مناسبة لتبادل البيانات بين أنظمة متعددة ومتنوعة بغض النظر عن لغة البرمجة أو منصة التشغيل.
عيوب صيغة XML
تميل ملفات XML إلى أن تكون كبيرة الحجم ومفصلة أكثر مقارنةً بتنسيق JSON مما قد يؤثر على سرعة نقلها ومعالجتها. كما أن البنية الهرمية المعقدة تجعل التعامل معها أبطأ خصوصًا عند معالجة بيانات ضخمة أو تنفيذ استعلامات معقدة. كذلك يعتبر التعامل البرمجي معها أكثر تعقيدًا من JSON إذ يحتاج أحيانًا لاستخدام أدوات أو مكتبات مخصصة من أجل تحليل البيانات parsing وفهم البنية الداخلية للملف.
طريقة CSV
صيغة CSV هي اختصار لعبارة Comma-Separated Values وهي تنسيق شائع لتخزين البيانات في شكل جدولي باستخدام نص عادي حيث يتم تمثيل كل صف من البيانات بسطر واحد، ويتم فصل القيم داخل كل صف بفواصل عادية , أو منقوطة ; أحيانًا.
يوضح المثال التالي استخدام صيغة CSV لتمثيل البيانات القرآنية التالية (رقم السورة,اسم السورة,رقم الآية,نص الآية):
رقم السورة,اسم السورة,رقم الآية,نص الآية
1,الفاتحة,1,بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ
1,الفاتحة,2,الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ
...
2,البقرة,255,اللَّهُ لَا إِلٰهَ إِلَّا هُوَ الْحَيُّ الْقَيُّومُ
توفر عدة مصادر البيانات القرآنية بهذه الصيغة مثل منصة Mendeley Data التي تتضمن مجموعة بيانات قرآنية Quran Dataset تحتوي ملفات CSV متنوعة مثل فهرس السور، وملف لربط الصفحات بعدد الآيات فيها، وملف للنص العثماني للقرآن الكريم، إلى جانب ملفات لتمثيل جذور الكلمات وتمثيل القرآن سطرًا بسطر.. وغيرها من الملفات العديدة التي قد يحتاجها المطور ضمن التطبيقات المختلفة.
مميزات CSV
تتميز صيغة CSV بكونها بسيطة وسهلة الاستخدام ويمكن فتحها وتحريرها بأي محرر نصوص أو برنامج جداول بيانات مثل Excel و Google Sheets. كما أنها متوافقة مع معظم التطبيقات والأدوات البرمجية مما يجعل تبادل البيانات بين الأنظمة سهلاً ومرنًا. وبفضل صغر حجمها، يسهل نقلها وتخزينها، ويمكن تحويلها بسهولة إلى تنسيقات أخرى مثل JSON أو XML للاستخدام في سياقات مختلفة.
عيوب CSV
لا تدعم ملفات CSV البيانات المعقدة أو التنسيقات المتقدمة، ولا يمكنها احتواء أكثر من جدول واحد في الملف. كما أن التعامل مع الملفات الكبيرة قد يكون بطيئًا، واحتمال حدوث أخطاء في التنسيق وارد، كما أنها لا تدعم العلاقات بين الجداول، مما يصعّب تمثيل الروابط بين الآيات والسور أو بين النصوص والتفاسير.
طريقة YAML
YAML هي اختصار لعبارة YAML Ain't Markup Language وهي صيغة تمثيل بيانات مصممة لتكون واضحة وسهلة القراءة بشريًا حيث تعتمد YAML على المسافات البادئة indentation لتحديد البنية وتنظيم أزواج المفتاح والقيمة بدل استخدام الوسوم أو الأقواس لكون أقرب إلى الكتابة اليدوية ما يجعلها مناسبة لملفات التهيئة Configuration files وهي أقل ملاءمة لتخزين البيانات المعقدة أو الكبيرة التي تحتاج إلى ضمانات صارمة على البنية.
تستخدم صيغة YAML في العديد من تطبيقات القرآن الكريم، خاصة في ملفات تهيئة وإعدادات المشروع، مثل الإصدارات والمكتبات المستخدمة فهذا يسهل إدارة التبعيات وتحديث الإعدادات بشكل مركزي. لنفترض مثلًا أن لدي تطبيق باسم QuranReader، مهمته قراءة القرآن مع عرض الترجمة وتشغيل الصوت. يمكنني تخزين إعدادات التطبيق المختلفة (مثل اسم التطبيق، الإصدار، اللغة، شكل العرض، حجم الخط، عرض الترجمة، اسم القارئ الافتراضي، مستوى الصوت ..) في ملف YAML على النحو التالي:
app_name: QuranReader # اسم التطبيق
version: 1.0 # رقم إصدار التطبيق
language: ar # اللغة الافتراضية
theme: light # ثيم التطبيق (فاتح أو داكن)
display: # إعدادات العرض
font_size: 14 # حجم الخط
show_translation: true # هل نعرض الترجمة أم لا
audio: # إعدادات الصوت
reciter: "Mishary Rashid" # اسم القارئ الافتراضي
volume: 70 # مستوى الصوت
مميزات YAML
تُعد YAML صيغة ممتازة للبيانات التي يمكن للبشر قراءتها وفهمها بسهولة لكونها تعتمد المسافات البادئة وتدعم كتابة التعليقات التوضيحية داخل الملفات، كما أنها تسمح بإنشاء قوائم ومفاتيح متداخلة وتتيح تعريف قيمة مرة واحدة ثم إعادة استخدامها في أماكن أخرى داخل نفس الملف بدلاً من كتابتها عدة مرات.
عيوب YAML
رغم سهولة قراءة YAML وتعديلها، إلا أنها حساسة للمسافات البادئة، ولا توفر تحققًا ذاتيًا من صحة البيانات، وقد تؤدي المراجع والإشارات المضمنة لأخطاء أو تأثير على الأداء خاصة في الملفات الكبيرة والمعقدة. لذلك يُنصح باستخدامها لملفات التهيئة والإعدادات.
الخاتمة
هذه أبرز طرق تمثيل البيانات القرآنية التي توفر حلولًا متنوعة لمختلف حالات الاستخدام: سواء لتمثيل البيانات البسيطة أو المعقدة أو الجدولية، أو ملفات التهيئة. تذكّر أن اختيار الصيغة الأنسب يعتمد على نوع البيانات، وتعقيد العلاقات بينها، وعلى طبيعة تطبيقك والوظائف التي يوفرها.
ما رأيك؟ هل تفضل استخدام JSON لسهولة التعامل، أم XML للبيانات المعقدة؟ وهل جربت أي صيغ أخرى؟ شاركنا تجربتك في التعليقات لنستفيد من خبرات بعضنا البعض.
تنويه
ذكرت الأمثلة والمصادر في هذا المقال لأغراض توضيحية فقط لتسهيل فهم بنية وصيغ تمثيل البيانات القرآنية، وليس بغرض التوصية بأي مصدر محدد. تقع مسؤولية التحقق من صحة البيانات وسلامتها على عاتق المطوّر أو الباحث قبل اعتمادها في أي تطبيقات أو دراسات.