افحص XML الخاص بك
وسوم غير متطابقة، وكيانات غير معرَّفة، ونطاقات أسماء معطوبة — تُكتشف ويُحدَّد موضعها بدقة، بواسطة محلل XML المدمج في المتصفح. لا يُخزَّن أي شيء.
- لا يُخزَّن أبدًا
- لا طابور ولا انتظار
- دون تسجيل ودون علامة مائية
الصق XML وسيُفحص أثناء الكتابة.
كيف تعمل الأداة
الصق XML
أو أفلِت الملف. لا يُرسَل أي شيء إلى أي مكان.
اقرأ النتيجة
سليم البنية، مع ملخص لما بداخله. أو السطر والعمود الدقيقان لأول مشكلة.
أصلح وأعد الفحص
عدّل في مكانه؛ وتتحدّث النتيجة أثناء الكتابة.
معياران مختلفان، وأيهما هذا
يحدد XML مستويين من الصحة، ويُخلط بينهما باستمرار. سليم البنية (well-formed) يعني أن المستند يلتزم بقواعد صياغة XML نفسها: عنصر جذر واحد، وكل وسم مُغلق، وتداخل صحيح، وأحرف مسموح بها، وعلامات & وأقواس زاوية مُهرَّبة كما ينبغي، وقيم سمات بين علامات اقتباس، وأسماء سمات غير مكررة داخل العنصر الواحد. أما صالح (valid) فيعني شيئًا أقوى — أن المستند يطابق أيضًا مخططًا معينًا، بالعناصر الصحيحة بالترتيب الصحيح وبأنواع القيم الصحيحة. هذه الصفحة تفحص المستوى الأول. وكل محلل XML يرفض المستند الذي لا يجتازه، لذا فهو الفحص الذي يحدد إن كان الملف قابلًا للقراءة أصلًا.
الأخطاء متوقعة. علامة & غير المُهرَّبة هي الأكثر شيوعًا بفارق كبير — فهي تبدأ مرجع كيان، لذا فإن رابط URL فيه سلسلة استعلام يُلصق مباشرة داخل عنصر يُفسد المستند. وعلامة < المنفردة في النص تفعل الشيء نفسه. ثم تأتي الوسوم غير المتطابقة أو غير المُغلقة، والعناصر المُغلقة بترتيب خاطئ، ووجود عنصرين جذريين، وحرف تحكم شارد لا يسمح به XML إطلاقًا رغم أنه يقبع في الملف دون أن يُرى.
لا يُجلب ملف DTD أو مخطط أبدًا عن قصد، وهذه خاصية أمان لا ميزة ناقصة. يمكن لمستند XML أن يشير إلى كيان خارجي، والمحلل الذي يحلّه سيذهب لجلب ما يشير إليه — ملفًا على القرص، أو عنوانًا على شبكة داخلية. هذه هي ثغرة XML External Entity (XXE)، من أكثر فئات الثغرات استغلالًا على الإطلاق، والدفاع الكامل الوحيد هو عدم حلّ هذه الكيانات. لذا لا يتصل شيء هنا بأي شيء، والثمن أن التحقق وفق مخطط خارج النطاق.
ما تحصل عليه هو السطر والعمود الدقيقان حيث توقف التحليل. وكما في أي محلل، هذا هو الموضع الذي توقف فيه المستند عن أن يكون مفهومًا، لا موضع الخطأ نفسه: فالوسم غير المُغلق يُبلغ عنه عادةً عند وسم الإغلاق غير المتوقع الذي يليه، وأحيانًا بعد مئات الأسطر. الموضع المُبلغ عنه هو نقطة البدء في البحث صعودًا، لا مكان التعديل.
عندما تحتاج إلى شيء آخر
للتحقق وفق مخطط، xmllint هو الأداة المرجعية: xmllint --noout --schema schema.xsd file.xml لـ XSD، و--relaxng لـ RELAX NG، و--noout --valid لـ DTD. وهو يُبلغ عن كل مخالفة بدلًا من التوقف عند الأولى، وهذا ما تريده حين يكون المستند خاطئًا فعلًا لا مجرد معطوب.
في أي شيء يتضمن مُدخلات غير موثوقة، تهم إعدادات المحلل أكثر من أداة التحقق. عطّل حلّ الكيانات الخارجية ومعالجة DTD صراحةً في أي لغة تستخدمها — defusedxml في Python، وLIBXML_NONET في PHP، والمعالجة الآمنة (secure processing) في Java — لأن عدة محللات شائعة لا تزال تحلّ الكيانات افتراضيًا، والإعداد الافتراضي هو حيث تكمن الثغرة.
الأسئلة الشائعة
هل يُخزَّن XML الخاص بي في أي مكان؟
لا. لا يوجد أي اتصال بخادم ولا أي تسجيل، ولا يُخزَّن أي شيء. يمكنك قطع الاتصال بالإنترنت بعد تحميل الصفحة وستستمر في العمل. وهذا أهم هنا مما يبدو: فما يلصقه الناس في أداة تنسيق عبر الإنترنت هو استجابات API وملفات إعدادات وحمولات أخطاء، وهذه تحمل عادةً رموزًا مميزة (tokens) وسجلات عملاء وأسماء خوادم داخلية.
ماذا تعني «سليم البنية»؟
أن المستند يلتزم بقواعد XML نفسها: كل وسم مُغلق، والوسوم متداخلة بالترتيب الصحيح، وعنصر جذر واحد بالضبط، والسمات بين علامات اقتباس، وكل & و< إما مُهرَّبة أو جزء من كيان صالح. وهذا أول سؤالين يمكنك طرحهما عن XML. أما الثاني — هل يطابق المستند مخططًا معينًا — فهو منفصل، ولا تجيب عنه هذه الصفحة.
هل يتحقق وفق مخطط DTD أو XSD؟
لا. يتحقق هذا من أن المستند XML سليم البنية، وهو الخطأ الذي يبحث عنه معظم الناس فعلًا. التحقق وفق مخطط يحتاج إلى ملف المخطط الخاص بك ومحلل قادر على التحقق، ولا يأتي أي متصفح بواحد منهما؛ وادعاء فعل ذلك هنا يعني إما إرسال مستندك إلى خادم أو عدم الفحص بصمت. ويستحق هذا الفرق المعرفة: فقد يكون المستند سليم البنية تمامًا ويظل خاطئًا وفق مخططه.
ما أكثر أخطاء XML شيوعًا؟
علامة & المنفردة هي المعتادة — يجب كتابة & بصيغة & حتى داخل رابط URL، لذا فإن سلسلة استعلام تُلصق مباشرة داخل عنصر تُفسد المستند. وبعدها: وسم مُغلق بترتيب خاطئ، ووجود عنصرين جذريين، وكيان غير معرَّف مثل (يعرّفه HTML ولا يعرّفه XML)، وبادئة نطاق أسماء مستخدمة دون تعريف. ويُبلغ عن كل منها باسمه مع موضعه.
هل HTML هو XML صالح؟
عادةً لا، وهذا أمر طبيعي لا خطأ. يسمح HTML بوسوم غير مُغلقة مثل <br> و<li>، وبسمات دون علامات اقتباس، وبعلامات & منفردة؛ ولا يسمح XML بأي منها. وإذا كنت تحتاج إلى HTML يكون XML صالحًا أيضًا، فهذا هو XHTML، ويجب أن يُغلق كل وسم.
هل هناك حد للحجم؟
الذاكرة المتاحة، لا حد نفرضه نحن. المستندات التي يبلغ حجمها بضعة ميغابايتات تُنسَّق فورًا؛ أما الكبيرة جدًا فيحدّها ما يمكن الاحتفاظ به دفعة واحدة، لا أي شيء من جهتنا.
معلومة مفيدة: فحص سلامة البنية، لا التحقق وفق مخطط. يُفحص توازن الوسوم وصحة التداخل وسلامة الأحرف، وتحصل على السطر والعمود الدقيقين لأول مشكلة. أما التحقق وفق DTD أو XSD فيعني جلبه، وهو طلب شبكي لا تُجريه هذه الصفحة أبدًا عن قصد.
أضِف هذه الأداة إلى موقعك
مجانية لأي مدونة أو صفحة فصل دراسي أو مقالة مساعدة. الصق مقتطفًا واحدًا وسيتمكن زوارك من استخدامها مباشرةً على صفحتك.