إمكانية الوصول
طُرح سؤالان في المسألة رقم 232، وتجيب هذه الصفحة عنهما:
- ما خيارات دعم ذوي الإعاقة هنا، وما هي أفضل الممارسات؟
- ما خيارات إلزام الأسئلة والأجوبة الخاصة بالوكيل بنمط أسئلة موجّهة تتبع منطق DMN ويمكنها خدمة عدة أنماط تفاعل؟
وتبين أنهما السؤال نفسه مطروحاً من طرفين مختلفين، ولهذا السبب يشتركان
في صفحة واحدة. المهارة المنفّذة لذلك هي
interaction-modality.
- 1. الإخفاق المعني هنا
- 2. خيارات دعم ذوي الإعاقة — ما هو متاح فعلياً
- 3. إلزام الأسئلة والأجوبة الخاصة بالوكيل بنمط أسئلة موجّهة
- انظر أيضاً
1. الإخفاق المعني هنا
إن وكيلاً يطرح سؤالاً جيداً بصيغة غير قابلة للاستخدام لم يطرح أي شيء على الإطلاق.
شكله المعتاد: مطالبة مفتوحة وطويلة — “أخبرني عن الـ folio الذي يدور في ذهنك، وما هي أنواع المحتوى التي تتوقعها، وكيف تود تنظيمه” — تُرسل إلى شخص تكون الكتابة على لوحة المفاتيح بالنسبة له بطيئة ومؤلمة. يأتي الرد مقتضباً. يفسر الوكيل هذا الاقتضاب على أنه قلة تفاعل، فيطرح سؤالاً مفتوحاً آخر. لا أحد في هذا التبادل ارتكب خطأً واضحاً، ومع ذلك تكون المحادثة قد بدأت في الإخفاق بالفعل.
يمتلك مالك هذا المستودع قدرة محدودة للغاية على استخدام اليدين، لذا فإن الحالة ليست افتراضية هنا. غير أن القاعدة تنطبق بوجه عام دون الإشارة إلى أي شخص:
تكلفة السؤال يدفعها الشخص الذي يجيب عنه. صمّم السؤال بحيث تكون الإجابة الأقل تكلفة ممكنة إجابةً كاملة أيضاً.
تعد الخيارات القابلة للتحديد سؤالاً أفضل من السؤال المفتوح للجميع تقريباً، ولا تكلّف شيئاً للشخص الذي يفضّل الكتابة على أي حال. والتعامل مع ذلك كتيسير استثنائي بدلاً من كونه الوضع الافتراضي هو ما يجعل تطبيقه لا يتم إلا بعد أن يضطر أحدهم إلى طلبه.
2. خيارات دعم ذوي الإعاقة — ما هو متاح فعلياً
أربعة محاور مستقلة. يمكن للشخص أن يقع في أكثر من محور منها، وليس أيٌّ منها تشخيصاً طبياً — بل هي خيارات تتعلق بواجهة الاستخدام.
2.1 محدودية وظائف اليدين / البراعة الحركية
المحور الذي يغيّر سلوك الوكيل إلى أقصى حد، وهو المحور الذي يُختزل في كثير من الأحيان في مقولة “اجعل الأزرار أكبر”.
| ما يجب فعله | السبب |
|---|---|
| كل سؤال عبارة عن تحديد، ومُرقم | الكتابة هي الفعل الأعلى تكلفة |
| أربعة خيارات أو أقل | ما زاد عن ذلك، قسّم السؤال |
| خيار واحد موصى به، يُذكر أولاً ويُشار إليه | يمكن لمن لا يرغب في اتخاذ قرار أن يختار الأمر الأول ويكون قراره صائباً |
| وضّح ما سيحدث إذا لم يقل شيئاً، ثم نفّذ ذلك | يجب ألا يؤدي الصمت إلى تعطيل العمل أبداً |
| تجميع القرارات بحيث تغطي إجابة واحدة عدة قرارات | كل دورة أخذ وردّ تكلّف ضغطات مفاتيح |
| أعلن عن المهام التي تستغرق وقتاً طويلاً؛ ولا تطلب الإذن لتنفيذها | مطالبات التأكيد هي الضريبة الخفية |
| النص الحر متاح دائماً، وغير إلزامي أبداً | قائمة الخيارات حدٌّ أدنى، وليست سقفاً |
في المخرجات المعروضة: معيار النجاح 2.5.8 في WCAG 2.2 حجم الهدف (الحد الأدنى) — 24 × 24 بكسل CSS — و2.5.7 حركات السحب: أي عنصر يمكن سحبه يحتاج إلى بديل لا يتطلب السحب.
2.2 ضعف البصر
خط كبير، وتباين حقيقي، وعدم نقل المعلومات عبر اللون وحده أبداً، وأسطر قصيرة، وجداول ضيقة — فالجدول العريض يتعذر قراءته عند نسبة تكبير 200% وتزداد قراءته سوءاً عبر قارئ الشاشة. كما أن مخططات ASCII لا تصمد في هذه الظروف أيضاً؛ استخدم صورة حقيقية بنص بديل حقيقي.
المعايير: 1.4.4 تغيير حجم النص (200% دون فقدان)، 1.4.3 التباين (الحد الأدنى)، 1.4.1 استخدام اللون، 1.4.10 إعادة التدفق، 2.4.7 وضوح التركيز.
2.3 الصوت / النطق
إجابات يمكن قراءتها بصوت عالٍ بوضوح: لا كتل شفرات برمجية ضمن النثر العادي، ولا جداول، ولا “انظر المخطط أعلاه”، وهجاء المعرّفات حرفاً بحرف عند أول استخدام، وفكرة واحدة في كل جملة، وسؤال واحد في كل مرة. قائمة من أربعة خيارات تعمل جيداً عند نطقها؛ أما جدول من أربعة أعمدة فلا يصلح.
2.4 العبء المعرفي واللغة المبسطة
جمل أقصر، وتوضيح المصطلحات التخصصية عند أول استخدام، وتجنب العبارات المتداخلة، وترتيب متوقع للعمليات. من هنا يأتي في الواقع حد “الخيارات الأربعة” — من إرشادات W3C الخاصة بـ COGA ومعيار WCAG 3.1 — وهو أيضاً ببساطة الوضع الافتراضي الصحيح للقارئ الذي يقرأ بلغة ثانية، وهو ما يمثل غالبية الجمهور في حالة إرشادات منظمة الصحة العالمية SMART.
2.5 أفضل الممارسات، محددة بالاسم لإمكانية التحقق منها
ليست مجرد عبارة “اتبع إرشادات إمكانية الوصول” بل مستندات محددة، حتى يمكن التحقق من أي ادعاء هنا بدلاً من الاكتفاء بالثقة به:
| المعيار | ما يغطيه | سبب انطباقه هنا |
|---|---|---|
| WCAG 2.2 المستوى AA | المخرجات المعروضة — موقع التوثيق، وأداة العرض، وملف PDF المُنشأ | خط الأساس الذي ترجع إليه كافة المعايير الأخرى |
| معايير النجاح الجديدة في WCAG 2.2 — 2.5.7، 2.5.8، 3.3.7 | السحب، وحجم الهدف، والإدخال المكرر | المعيار 3.3.7 هو الذي يغيّر تصميم الوكيل: لا تجعل أحداً يُدخل المعلومات نفسها مرتين |
| W3C COGA | الإعاقات الإدراكية وصعوبات التعلم | §2.4 أعلاه |
| EN 301 549 | المشتريات الحكومية في الاتحاد الأوروبي | يجعل معيار WCAG AA متطلباً قانونياً في السياقات التي تُطبَّق فيها الإرشادات |
| Section 508 | المشتريات الفيدرالية الأمريكية | الأمر نفسه، في الولايات المتحدة |
| ATAG 2.0 | الأدوات التي تنتج المحتوى | المعيار الذي يُغفل عنه عادةً. folio-assistant هو أداة تأليف: الجزء A يتعلق بكون الأداة قابلة للاستخدام، والجزء B يتعلق بمساعدة الأداة للمؤلف على إنتاج مخرجات متوافقة مع إمكانية الوصول |
الجزء B من ATAG يستحق التوقف عنده والتأمل فيه، لأنه الجزء الذي يمكن لمنصة المحتوى تقديمه بشكل فريد: وجود النص البديل، وترتيب العناوين، وترويسات الجداول وتحديد اللغة في ملفات الـ folio المنشورة هي فحوص يمكن لعملية مسح ضمان الجودة (QA sweep) إجراؤها، ولا يمكن لأي قدر من جعل المحرر متاحاً لذوي الإعاقة أن يحل محلها.
2.6 ما تم تنفيذه حتى اليوم
| أين | |
|---|---|
| تفضيلات موجهة للوكيل، محفوظة في المستودع، وتُقرأ عند بدء الجلسة | interaction/interaction.json، وتُوفَّر عبر scripts/session-start-coord-sweep.sh |
| القواعد التي يتبعها الوكيل عند طرح الأسئلة | interaction-modality |
| عناصر تحكم موجهة للقارئ في هذا الموقع | رمز الترس في رأس الشريط الجانبي — نص أكبر، تباين أعلى، خط تحت الروابط، تقليل الحركة |
| مراعاة تقليل الحركة دون الحاجة لطلب ذلك | استعلام الوسائط prefers-reduced-motion، وهو الذي يُعيّن القيمة الافتراضية للوحة |
مخزنا التفضيلات منفصلان عن قصد. ملف interaction/interaction.json
محفوظ في المستودع، وموجّه للوكيل، ويتعلق بالمحادثة. أما عناصر التحكم في الموقع
فهي مخزنة في localStorage لكل قارئ، ولا تغادر المتصفح أبداً، وتتعلق بالقراءة. ولا
ينبغي لقارئ غير المؤلف يختار خطاً كبيراً أن يعيد تكوين الطريقة التي يتحدث
بها الوكيل مع المؤلف دون علمه.
2.7 ما لم يُنجز بعد
مذكور صراحةً بدلاً من الإشارة إليه ضمناً، لأن الادعاء الجزئي لميزة إمكانية وصول أسوأ من غيابها تماماً:
- لا توجد فحوصات للجزء B من ATAG في مسح ضمان الجودة. لا يوجد شيء حتى الآن يتحقق من أن الـ folio المنشور يحتوي على نص بديل، أو ترتيب عناوين صحيح، أو ترويسات للجداول.
- لا يوجد تدقيق لملفات PDF المُنشأة. يمر مسار تصيير المستند عبر weasyprint/prince/wkhtmltopdf، ولم يتم التحقق من مخرجات ملفات PDF الموسومة.
- لم يتم الاختبار باستخدام قارئات الشاشة. بُنيت عناصر التحكم في الموقع وفقاً للمعايير ولكنها لم تُختبر عملياً باستخدام NVDA أو JAWS أو VoiceOver. والبناء وفق المواصفات لا يعني التحقق من صحة الأداء.
- النمط الصوتي موصوف، لكنه غير مُنفَّذ. القواعد مكتوبة ومدونة؛ ولكن لم يتم ربط أي قناة صوتية بعد.
3. إلزام الأسئلة والأجوبة الخاصة بالوكيل بنمط أسئلة موجّهة
السؤال الثاني. الإجابة تكمن في الفصل، وهذا الفصل هو جوهر التصميم بأكمله.
3.1 أمران يبدوان كأمر واحد
ما يجب سؤاله بعد ذلك هو قرار. المدخلات هي الحقائق المعروفة حتى الآن؛
والمخرجات هي معرّف السؤال التالي، أو none عندما تتوفر معرفة كافية. هذا القرار
مكانه في جدول DMN، ويمكن مراجعته من قبل أي شخص يملك العملية، وهو متطابق
لكل مستخدم.
كيفية عرض السؤال هي طريقة التفاعل. قائمة مرقمة في الدردشة؛ بدائل منطوقة، واحداً تلو الآخر، عبر الصوت؛ أزرار اختيار بخط كبير على صفحة ويب. لا يعلم جدول القرارات أي شيء عن كل هذا على الإطلاق.
facts ──▶ [ next-question.dmn ] ──▶ question id ──▶ renderer(profile) ──▶ user
▲ │
└──────────────────── answer recorded as a new fact ─────────────────────┘
منطق واحد، وأربعة أسطح عرض. أضف نمط تفاعل عن طريق إضافة مصيّر (renderer)؛ ولن يتغير مسار المقابلة. غيّر المقابلة عن طريق تعديل جدول؛ ولن يتغير أي مصيّر.
3.2 أربع خصائص يوفّرها هذا النهج
- مجموعة الأسئلة محدودة وقابلة للمراجعة. يمكنك قراءة الجدول ومعرفة كل سؤال يستطيع الوكيل طرحه. أما الوكيل الذي يرتجل فلا يقدّم أي ضمان من هذا القبيل، ولا يمكن مراجعته قبل أن يلتقي بمستخدم.
- العملية تنتهي حتماً. الجدول الذي يمكن أن تكون مخرجاته
noneيمتلك شرط توقف. - يصبح طرح السؤال إلزامياً وليس اختيارياً. هذه هي الحيلة التي
يستخدمها
folio-intent.dmnبالفعل:askهو مخرج من مخرجات الجدول، لذا لا يمكن للوكيل تجاوزه. والوكيل الذي يقرر بنفسه ما إذا كان سيطرح سؤالاً أم لا، سيقرر عدم السؤال تحت أي ضغط يبدو فيه وكأنه يساعد المستخدم. - السؤال الذي تم تخطيه قابل للتدقيق. تُسجَّل الحقائق؛ أعد تشغيل الجدول لترى أي قاعدة تم تفعيلها.
3.3 الخيارات، وتكلفة كل منها
أربع طرق للقيام بذلك، مرتبة تصاعدياً حسب الطموح. ولم يُبنَ منها سوى الخيار الأول فقط.
| الخيار | ماهيته | التكلفة |
|---|---|---|
| أ — قرار لكل بوابة (decision-per-gateway) (مُنفَّذ) | تحمل كل نقطة تفرع غامضة في BPMN السمة cat-harness.processes:decision؛ ويعيد الجدول الفرع المطلوب، بما في ذلك ask | لا توجد آلة حالة للمقابلة — فالـ عملية نفسها هي الحالة. ولا يمكن التعبير عن “اطرح هذه الأسئلة الأربعة بأي ترتيب” |
| ب — مجموعة أسئلة خلف بوابة واحدة | تكرار حلقة next-question.dmn حتى تعيد none؛ وتتراكم الإجابات كحقائق | جدول إضافي واحد ومخزن للحقائق؛ والتكرار يخص العملية نفسها، لذا لا يتم تنفيذ أي شيء جديد |
| ج — نماذج مدفوعة بـ DMN | يعرض الجدول نفسه نموذجاً على الموقع، وليس مجرد تبادل للرسائل في الدردشة | يتطلب مخطط حقائق ومصيراً لكل نمط تفاعل؛ بينما يظل الجدول دون تغيير |
| د — محرك مقابلات DMN/BPMN كامل | عمليات فرعية لكل موضوع، وأحداث حدودية لحالات مثل “لقد غيرت رأيي” | عمل برمجي حقيقي على المحرك، مع ضرورة توسيع المجموعة الفرعية المدعومة من لغة FEEL |
3.4 القيود، موضحة بصراحة
- المجموعة الفرعية المدعومة من FEEL صغيرة. ينفّذ
src/workflow/decision-table.tsعمليات المساواة، والمقارنة، وواحداً من متعدد (one-of). أما النطاقات (ranges)، وnot()، واستدعاءات الدوال، فإنه يتم رفضها بدلاً من تقييمها بشكل خاطئ بصمت — إذ إن جدولاً يعيد إجابة لا تطابق ما هو مكتوب على الصفحة أسوأ من جدول يرمي خطأً. - السؤال المفتوح ليس قراراً. سؤال مثل “عما تدور هذه الورقة البحثية؟” ليس مكانه في جدول، وحشره هناك ينتج عنه مقابلة أسوأ.
- المحادثة ليست معالج خطوات إرشادي (wizard). يجب أن يكون المستخدم قادراً دائماً على قول شيء لم يتوقعه الجدول. وهذا تحديداً هو الغرض من خيار “أخبرني بالمزيد”، وهو ليس مجرد زينة اختيارية.
- الإرشاد لا يعني الاستجواب. أكبر مكسب لإمكانية الوصول متاح هو السؤال الذي لم تضطر إلى طرحه — فكل حقيقة يقرؤها الوكيل من نظام الملفات تعني سؤالاً أقل. وهذا المكسب غير مرئي، ولا يُكافأ عليه، وهو أكبر من أي ورقة أنماط.
انظر أيضاً
- البدء — جدول قرارات النية قيد الاستخدام
- مهارة
interaction-modality - سير عمل النشر — كل عملية في المستودع
- خيارات حالة سير العمل في beans