Éducation, société et technologie

مدقق XML المدمج

الأربعاء 30 كانون الثاني (يناير) 2008 بقلم André Vincent

مدقق XML المدمج

منذ ان طرح تجمع النسيج العالمي (w3c) مبادرة الموصلية على النسيج (Web Accessibility Initiative)، تلاقت مسألتي تدقيق XML وموصلية المعاقين بصرياً الى النسيج. واهتم SPIP باكراً بمشاكل الموصلية خاصة منذ الاصدار 1.5 الذي ظهر عام 2002. في المقابل، تجاهل طويلاً مسألة XML لندرة الصفحات المتوافقة مع المقياس: فكثرة صفحات HTML التي لا تخضع لمقياس XHTML دفعت ببرامج التصفح الى التزود بأدواتها الخاصة للتحليل مما تسبب بتأخر انطلاق اللغات المعتمدة على XML مثل SVG و XQuery.

الا ان تقارب مسألتي الموصلية وتدقيق XML من جهة، وادخال لغة SVG في العديد من برامج التصفح، من جهة اخرى دفعا SPIP، في اصداره 1.8.1 الى توفير واجهة مزودة بأدوات تدقيق مثل Tidy ومدقق تجمع النسيج الرسمي. ولكن هذه الادوات تعاني، كما توضحه الصفحات الاولى في مواقعها، من محدودية ملحوظة كما انها تختلف بين بعضها في محتوى رسائل الخطأ التي تصدرها. هذا فضلاً عن انها تعصى على التثبيت من قبل المستخدم العادي [1]. ولا ننسى ان هذه الادوات لا تعمل مع التقنيات الجديدة مثل آجاكس التي تعدل محتوى صفحة النسيج بالتدريج. والاخطر من ذلك ان تعريفات انواع المستندات (Document Type Definition) التي اصدرها تجمع النسيج تعاني من المحدودية ايضاً بما فيها مقياس DTD XHTML 1.0 المعروفة بالمتشددة (strict): فمع ان التوصيات الرسمية تمنع تداخل علامات a او label او form فإن المقياس يعتبر ان تركيبات مثل <label for='x'><label... او <form action='.'><div><form... مثلاً هي سليمة [2].

امام هذا الوضع جاء SPIP ليبتكر حلاً جذرياً بتوفيره مدقق موسع مدمج واختياري يعتمد على محلل Simple Analyzer for XML الذي يأتي مع لغة PHP. هذا التعدد في المواهب يفتح آفاق واسعة ليس لمسؤولي المواقع فحسب بل لمصممي الرسوم ومطوري الملحقات.

 التدقيق لمسؤولي المواقع

في ملف mes_options.php يضع مسؤول الموقع الامر $xhtml = 'sax'; مما يؤدي الى اعادة انتاج علامات HTML في الصفحة النموذجية بحيث يحتوي كل سطر علامة فاتحة واحدة وصفة واحدة كحد اقصى مع ازاحة الهامش الايسر بدرجة تناسب عدد العلامات المفتوحة التي لم تقفل بعد. في حال يتضح ان الصحة غير سليمة يتم تجاهل هذه التعديلات وارسال المحتوى الاصلي الى برنامج التصفح. وفي الحالتين، يتم وضع الصفحة في الذاكرة المخبأة بعد تدخل المدقق الذي يكتفي هنا بتصميم الصفحة فقط.

لا بد من بعض التوضيحات في ما يتعلق بمعالجة الصفات. يتم دائماً احاطة قيمها بعلامة حذف (single quote) الا اذا كانت هذه العلامة موجودة في القيمة وعندها يتم استخدام علامتي الاقتباس (واذا كانت القيمة تحتوي ايضاً على العلامتين ستكتبان &quot;). وبسبب خطأ في SAX يتم تحويل كائنات XML الى طقم الاحرف المستخدم في الصفحة باستثناء &amp; &lt; &gt; و &quot; التي يعالجها SAX بشكل صحيح (لأنها ضرورية جداً). ويتم استنتاج لائحة الكائنات وقيمها من علامة DOCTYPE الموجودة في اعلى الصفحة النموذجية. افتراضياً يأخذ SPIP مجموعة محددة مسبقاً تعادل تعريف المستندات اللاتيني رقم 1 (latin1 DTD) مضاف اليه &euro; و &oelig; و &OElig; المعرّفين في تعريف مستندات الحروف الخاصة.

 التدقيق للرسامين

يتوافر المدقق لمصممي الصفحات النموذجية من خلال احد ازرار الادارة المتاحة لمدراء الموقع فقط والذي ظهر في الاصدار 1.8 من SPIP. ومن بين هذه الازرار هناك زر اسمه تحليل XML يطلق طلب تدقيق الصفحة بشكل صريح. واول من يتكفل التدقيق هو SAX الذي (حتى في غياب علامة DOCTYPE) يعثر على:

  • التداخل غير الصحيح بين العلامات الفاتحة والعلامات الغالقة
  • الصفات التي ليس لها قيمة
  • الصفات التي لا تملك اغلاق
  • الصفات التي ليس بينها مسافات
  • كائنات XML التي تحتوي على اخطاء كتابة (مثلاً كتابة & بدلاً من &)

عندما يعثر علي اول خطأ، يقوم يحاول SPIP العثور على الصفحة النموذجية التي جاء منها الخطأ (هناك عدة صفحات في حال تم ادراج صفحات داخل اخرى) وفي اي سطر ويعرض روابط نحو الملفات المصدر (لا نحصل دائماً على نتائج كاملة ويجب حساب هامش للخطأ).

اذا كان هذا التحليل الاول سليماً، يذهب الاصدار الجديد من SPIP ابعد من ذلك ويأخذ في الاعتبار علامة DOCTYPE في الصفحة. وقد تكون هذه العلامة من نوع PUBLIC او SYSTEM. في الحالة الاولى يتم وضع تعريف نوع المستند (DTD) في الذاكرة المخبأة لتسريع التحاليل اللاحقة. ويمكن لكل تعريف مستند ان يحوي تعريفات اخرى يتم تحميلها ايضاً. ومن اجل تجنب تكرار حسابات المعالجة مع الحفاظ على نظام ادراج تعريفات انواع المستندات الشرطي، يخزن SPIP ايضاً في الذاكرة المخبأة بنية بيانات محددة يستنتجها من من قراءته لكل تعريفات العناصر والصفات والكائنات الناتجة عن علامة DOCTYPE المحددة. وبالاعتماد على هذه البنية يقوم SPIP بتدقيق الصفحة والتصديق عليها. بمعنى آخر يتأكد من ان:

  • كل اسماء الصفات المستخدمة في اي علامة مقبولة من تعريف نوع المستند
  • كل الصفات الاجبارية في اي علامة موجودة فعلاً
  • كل قيم الصفات متوافقة مع التحديد الموجود في تعريف نوع المستند
  • كل الصفات من نوع ID تملك قيم مكونة من احرف وارقام ونقتطين والرموز الاخرى المسموح بها
  • كل الصفات من نوع IDREF وIDREFS تدل الى صفات ID موجودة فعلاً في الصفحة
  • كل كائنات XML المستخدمة معرفة فعلاً في تعريف نوع المستند
  • كل اسماء العلامات المستخدمة معرفة فعلاً في تعريف نوع المستند
  • كل علامة غير فارغة مسموح لها ان تكون كذلك في تعريف نوع المستند (مثلاً يتم التوقف عند علامة img غير فارغة)
  • كل علامة فارغة مسموح لها ان تكون كذلك في تعريف نوع المستند (مثلاً يتم التوقف عند علامة tr فارغة)
  • كل علامة مستخدة تكون بنت علامة تقبل بهذه العلاقة حسب تعريف نوع المستند
  • كل علامة مفترض بها ان تظهر قبل احدى اخواتها تظهر كذلك فعلاً (مثلاً head قبل body)
  • كل علامة مفترض بها ان تظهر عدداً محدداً من المرات تظهر كذلك فعلاً (مثلاً title مرة واحدة في head)

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

 التدقيق للمطورين

هناك صفحات محصورة مشاهدتها بزوار محددين. تحتاج هذه الصفحات بالاخص الى مدقق مدمج لفحصها لأن ادوات التدقيق الخارجية لا تتمكن من الوصول اليها. في ما يتعلق بالمقاطع البرمجية القياسية او تلك التي تأتي من ملحقات او من مجال SPIP الخاص، يتم تطبيق مدقق XML بوضع $GLOBALS['transformer_xml'] = 'valider_xml'; في ملف mes_options.php. وتم تصميم مجالSPIP 1.9.2 الخاص ليتوافق مع مقياس XHTML 1.0 بفضل هذا الاسلوب. وعندما نعطي 'indenter_xml' قيمة هذا المتغير الشامل، يتم ادخال ازاحة اوامر HTML اذا كانت متوافقة مع XML دون محاولة تدقيقها.

يمكن كذلك، باستخدام الفأرة، تشغيل تحليل XML لنتيجة سكريبت آجاكس تم تفعيله في المجال الخاص. وبما ان هذا السكريبت لا ينشئ صفحة HTML كاملة ولكن جزء من صفحة، سيقوم المدقق المدمج بإنشاء صفحة باستخدام علامة DOCTYPE الجارية وترويسة تقتصر على علامة Title وعلامة Body تحتوي الجزء الذي أنشأه آجاكس. عندها تفتح نافذة جديدة تحتوي نتيجة التحليل كما يحصل لصفحة عادية بينما تتلقى الصفحة الاصلية نتيجة سكريبت اجاكس كالمعتاد. بسبب توصية لتجمع النسيج العالمي تتعلق بنموذج الحدث وهي غير مستعملة [3]، تشغيل المدقق لا يأتي من نقر زر محدد في الفأرة ولكن من نقرة مع ضغط احد مفتاحي alt او meta.

من جهة اخرى، يمكن تطبيق مدقق SPIP على اي صفحة موجودة على النسيج. فأي موقع SPIP تم تثبيته على النسيج بالعنوان: http://u يحتوي صفحة http://uecrire/valider_xml التي يمكن لمسؤول الموقع ان يحملها لتدقيق صفحات من خارج الموقع. ولكن لا يطبق هذا المدقق الا على مستندات XML وفي غياب علامة DOCTYPE يتم اعتماد النوع DTD XHTML1.0 transitionnal.

كما يتضح مما سبق، يمكن تطبيق المدقق على اي علامة DOCTYPE بما في ذلك تلك التي تتعلق بتعريفات النوع DTD الموجودة في الموقع. ويتطلب جعل صفحات نسيج تتمتع بالموصلية تصرف صارم في استخدام الصفات والعلامات. بالتالي يمكن بسهولة تصميم اداة تدقيق الموصلية بكتابة تعريفات انواع مستندات اقل تساهلية من XHTML 1.0 المتشدد. واول ما يمكن القيام به هو استبدال #IMPLIED بـ #REQUIRED في الصفات التي لا غنى عنها. اما علامات input وselect وtextarea و button، فليس من الصعب اجبارها على ان تكون بنات علامة label فقط. كما ان المدقق يقبل اي نمط (بمعنى PCRE) كنوع صفة مما يسمح له بتدقيق اي ظهور لهذه الصفة في الصفحة المدققة.

اخيراً يمكن تحديد قواعد تدقيق شخصية مرتبطة بصفة ما. ويتم تشغيل الانواع الاعتيادية ID وIDREF وIDREFS بواسطة دالات validerAttribut_ID و validerAttribut_IDREF و validerAttribut_IDREFS. فيكفي ادخال انواع جديدة S1 ... Sn في تعريف نوع المستند DTD وتعريف الدالات المرتبطة بها في ملف mes_options لإنشاء ادوات شخصية. ولدى انتهاء التحليل يتم نداء الدالة المضافة inc_valider_passe2 لتنفيذ التدقيقات التراجعية (هنا يتم التأكد من ان صفات IDREF تتعلق بصفات موجودة فعلاً). لا تزال هذه الواجهة خشنة بعض الشيء ولا بد من تحسينها بعد فترة اختبارية. ولكنها تتيح من الآن وبسرعة وضع اعدادات موصلية جديدة.

[1يأتي مدقق تجمع النسيج على شكل ملف مضغوط بحجم ميغابايت واحد ويحتوي اساساً على سكريبت CGI بلغة Perl مما يفرض على جهاز الخدمة التزود بعدة وحدات من هذه اللغة اضافة الى واجهة تعاملها مع صفحات النسيج. من جهة اخرى لا يقوم هذا البرنامج بتنفيذ تحليل التركيب اللغوي والتدقيق بحد ذاته بل يوكل هذه المهمة الى برنامج onsgmls مكتوب بلغة ++C، يعني يجب تصنيفه بعد تحميل المصادر من مشروع OpenSP والبالغة ميغابايت واحد ايضاً (الا ان بعض انظمة التشغيل توفر البرنامج المصنّف وحجمه 128 كيلوبايت). كل ذلك لا شك يفسر قلة الطلب على تثبيت هذا الحل للتدقيق مما يعني ان العدد القليل المثبت يرزح تحت ضغط استخدام كبير.

[2هذا النقص مبرر في مقطع من توصية XHTML تقول: The HTML 4 Strict DTD forbids the nesting of an ’a’ element within another ’a’ element to any descendant depth. It is not possible to spell out such prohibitions in XML.. ولا يدعم هذا الادعاء اي دليل او مرجع علمي. فالقواعد التي تحكم تحليل التركيب اللغوي الآلي تم وضعها في الخمسينات من القرن الماضي وتناقض هذا الادعاء!.

[3مع ان نظام التشغيل الاكثر استخداماً في العالم خضعة استثنائياً لدروس نظام يونيكس وخاصة وحدة X-Window وذلك بتعريف زر فأرة بواسطة قناع من البتات، طلع تجمع النسيج العالمي بتوصية غير متوافقة ومركبة بشكل رديء لا يتبعها اي من برامج التصفح المعروفة.


الصفحة الأساسية | الاتصال | خريطة الموقع | | إحصاءات الموقع | الزوار : 2219 / 1767516

متابعة نشاط الموقع ar  متابعة نشاط الموقع ما هو SPIP؟   ?    |    titre sites syndiques OPML   ?

موقع صمم بنظام SPIP 3.0.8 + AHUNTSIC

Creative Commons License

الزوار المتصلون حالياً: 6