يصمم “ثواب” بطريقة modular تسمح باستبدال أجزاء منه عند الحاجة.
حيث أننا نريد أن نترك للمحرر تعريف وسوم جديدة للنص بحسب نوع المحتوي كأن يحدد أن جزء كذا وكذا من النص هو تعريف بالراوي ..إلخ فإن نموذج البيانات يجب أن يكون مرن جدا وغير محدود. كذلك يجب أن يكون سريعا وقابلا للتبادل وأن يسمح بالتحرير التزايدي والجزئي
وقد وقع الاختيار على sqlite3 وتم عمل نموذج البيانات
كان علينا الاختيار بين
للتفصيل انظر هيئة الملفات ونموذج البيانات
إن أقوى محرك بحث متوفر لدينا هو lucene وله العديد من المزايا الفائقة منها
وعيوبه أنه يحتاج JRE وإن كان يعمل نظريا دونها عبر GCJ (كما في pylucene) حيث أن كل التنفيذات له بلغات غير جافا مهملة التطوير ولا ترقى لمستواه
من الأمثلة على محاولات تنفيذه بلغات أخرى (بايثون مثلا)
للمزيد انظر
من الصعب العثور على بديل لمحرك lucene إلا أن أهم البدائل هو xapian المكتوب على سي++ ويمكن ربطه على عدة لغات مثل بايثون (اسم الحزمة في أعجوبة لينكس هو xapian-bindings-python)
أهم مزاياه هي أننا إن استخدمناه لا نعود مرتبطين بلغة جافا.
لكن هذا لا يعني أنه هذا هو السبب الوحيد للتفكير به كبديل انظر صفحة مزاياه للتفصيل.
هناك بديل آخر اسمه Whoosh مكتوب على بايثون pure python
يؤجل إلى حينه