منسّق ومدقق XML أونلاين
نسّق أو تحقق من صحة أو صغّر أكواد XML فوراً — النتيجة تظهر لحظياً أثناء الكتابة.
مستندك يبقى على جهازك
لا شيء لحذفه لاحقاً
آمنة للمستندات المنظَّمة
تعمل في كل متصفح حديث
كيف تعمل
- 1
ألصق XML
ملفَّ إعدادات، أو استجابة واجهة برمجية، أو فاتورة، أو تغذية، أو تصديراً تحتاج قراءته.
- 2
نسِّق أو صغّر
أزِحه لتقرأه، أو جرّده ثانيةً — والتنبيهات معروضة في الحالتين.
- 3
انسخ الناتج
خُذه إلى محرّر، أو تذكرة، أو تجهيزة اختبار، أو مستندٍ أنت مرسله.
لماذا تستخدم هذه الأداة
تُخبَر حين يغيّر التنسيق البيانات
إزاحة عنصرٍ يحمل نصّاً تغيّر ذلك النصّ، وتُنبَّه قبل وقوع ذلك لا بعده.
بادئات النطاقات محفوظة
تبقى البادئات كما كُتبت، فتظلّ تعابير XPath وأوراق الأنماط التي تشير إليها عاملة.
الكيانات الخارجية لا تُحَلّ أبداً
لا يُقرأ ملف ولا يُجلَب رابط، وهذه أهمّ خاصّية يلزم أن تتحلّى بها أداة XML.
قنابل التوسّع مرفوضة
يُكشَف مستندٌ صغير يتمدّد إلى غيغابايتات ويُرفض بدل أن يُجمّد التبويب.
الإعلان والترميز محفوظان
يبقى إعلان XML وسمة ترميزه وأيّ علامة ترتيب بايتات كما هي عبر الرحلة كاملةً.
لا شيء يفارق المتصفح
الفواتير وحمولات SOAP وتأكيدات الهوية تُعالَج في هذه الصفحة ولا تُرفَع إلى أي مكان.
إزاحة XML ليست تجميلاً — المسافة داخل عنصرٍ بيانات
هذه هي الحقيقة التي تفصل تنسيق XML عن تنسيق JSON، وكلّ مفاجآت الموضوع تقريباً تتفرّع عنها. في JSON تقع المسافة بين الرموز خارج نموذج البيانات كلياً: أعِد تنسيق مستند تجد كل قيمة يقرأها محلِّلك مطابقة. أما XML فلا ضمانة فيها من هذا النوع. محتوى العنصر عقدةٌ نصّية، والمسافة جزء من تلك العقدة ما لم يقل شيءٌ صراحةً خلاف ذلك. حوِّل `<name>علي</name>` إلى صيغة مُزاحة والنصّ في سطره فلن يعود العنصر يحتوي «علي» — بل يحتوي سطراً جديداً ومسافتين و«علي» وسطراً آخر ومسافات. ومعظم كود التطبيقات يُخفي هذا بالاقتطاع عند الخروج، وهذا بالضبط سبب مروره دون انتباه حتى يصير مهمّاً: قيمةٌ تُقارَن بقاعدة بيانات، أو مجموع تحقّق، أو توقيع. صحيحٌ أن مواصفة XML تتيح `xml:space="preserve"` للتصريح بأن المسافة ذات دلالة، وأن مخطَّطاً قد يُعلِن عنصراً غير حسّاس للمسافات، لكن منسِّقاً ينظر إلى المستند وحده لا يعرف أياً منهما. عليه أن يُنبِّه بدل أن يفترض، وهذا ما تفعله هذه الأداة.
إعادة تنسيق مستندٍ موقَّع تُبطل التوقيع، وذلك بحكم التصميم
تصير النتيجة السابقة ملموسةً لحظة توقيع مستند. تواقيع XML الرقمية لا توقّع الملف — بل توقّع صيغةً قانونية من شجرة المستند، تُنتجها خطوة تسوية معرَّفة في مواصفة Canonical XML. تُثبِّت تلك الخطوة ترتيب السمات وإعلانات النطاقات وبعض المسافات، حتى يُنتِج مستندان يعنيان الشيء نفسه البصمة نفسها. وما لا تفعله هو التسامح مع مسافةٍ أضفتها داخل محتوى عنصر، لأنها في نظر النموذج ليست تنسيقاً بل تغييراً في البيانات. فالفاتورة الموقَّعة أو تأكيد SAML أو رسالة SOAP التي جُمِّلت لم تعد صحيحة، والفشل تامّ: لا يُبلِّغ التحقّق عن فرقٍ يسير، بل يُبلِّغ أن التوقيع لا يطابق. والقاعدة التي تُؤخَذ من هذا أن المستند الموقَّع أثرٌ ثنائيّ يرتدي ثوب نصّ. اقرأه منسَّقاً إن شئت، لكن أرسِل البايتات التي وصلتك.
بادئة النطاق ليست الاسم — العنوان هو الاسم
النطاقات هي الموضع الذي يُفاجئ فيه تصميم XML القادمين من JSON أكثر من غيره، وهي الموضع الذي يُحدث فيه منسِّقٌ متهاون ضرراً حقيقياً. البادئة مثل `soap:` أو `ns2:` اختصارٌ محلّي لا معنى له بذاته؛ والذي يُعرِّف العنصر هو العنوان الذي رُبطت به تلك البادئة. مستندان يستخدمان `a:Body` و`env:Body` متطابقان إن كانت البادئتان مربوطتين بعنوان النطاق نفسه، ومستندان يستخدمان كلاهما `ns:Item` لا صلة بينهما إن اختلف العنوانان. ولهذا فأداةٌ تُعيد — خدمةً منها — تسمية البادئات إلى شيء أرتب تُنتج مستنداً مكافئاً تقنياً ومعطوباً عملياً: فكل تعبير XPath وكل قالب XSLT وكل مُحدِّد مكتوب يدوياً في قاعدة كودك يشير إلى البادئة لا إلى العنوان، لأن هذا ما يكتبه الناس. وتضيف النطاقات الافتراضية فخّاً ثانياً، إذ يقع عنصرٌ بلا بادئة داخل `xmlns="…"` في ذلك النطاق، بينما تقع سمةٌ بلا بادئة خارج أي نطاق البتّة. هذه الأداة لا تغيّر بادئةً ولا تُزحزح إعلاناً.
توسّع الكيانات هو سبب وجوب إخبار محلِّل XML بما لا يفعله
تتيح XML للمستند أن يعرّف كياناته الخاصّة، وتتيح لكيانٍ أن يشير إلى آخر. وهذه الخاصّية وحدها أنتجت أشهر هجمات تعطيل الخدمة في تاريخ الصيغة: عرِّف كياناً بعشر نسخ من كيان آخر، وعشِّش ذلك عشر طبقات، فيتمدّد مستندٌ من بضع مئات البايتات إلى مليار محرف. وله اسم — هجوم «الضحكات المليار» — ويعمل على أي محلِّل يوسّع الكيانات بلا ميزانية. والمشكلة الأحدّ هي الكيانات الخارجية، التي تتيح لمستندٍ أن يُعلِن أن قيمة كيانٍ ينبغي أن تُقرأ من موضعٍ ما: فـ`SYSTEM "file:///etc/passwd"` تقرأ ملفاً محلياً، وعنوان `http://` يحوّل المحلِّل إلى عميل طلبات يمدّ يده طائعاً إلى شبكة خاصّة نيابةً عن مهاجم. هذا هو XXE، وقد استُخدم سنواتٍ لسرقة بيانات اعتماد من خوادم إنتاج. والدفاع ليس تحليلاً ذكياً بل رفضاً: معالِج مستندات لا يحلّ كياناً خارجياً أبداً لا يمكن حمله على جلب أي شيء. وهذه الأداة لا تحلّ شيئاً منها، وتضع سقفاً للتوسّع، ولهذا فالمستند العدائي هنا يُرفَض ولا أكثر.
أسماء العناصر العربية جائزة، وقلّة من الأدوات تتوقّعها
ثمّة تفصيلٌ يخصّ العربية وينسى معظم الناس أنه صحيح: أسماء عناصر XML وسماتها ليست محصورة في ASCII. تعرّف المواصفة الاسم بمصطلحات فئات يونيكود، فـ`<فاتورة رقم="١٢٣">` مستند XML سليم البنية تماماً، ولا شيء في المعيار يمنعه. وقد استعمل ذلك عملياً في مخطَّطات حكومية عربية وفي أنظمة داخلية آثرت أن يقرأها موظّفو الأعمال. والمشقّة أن الجواز شيء والدعم شيء آخر: كثير من المولِّدات تشتقّ أسماء أصناف من أسماء العناصر فتنكسر عند حرفٍ غير لاتيني، وبعض أدوات ربط XML القديمة تفترض ASCII في مطابقة الأسماء، ومحرّرات لا تُظهر الاسم العربي في وسم الفتح والإغلاق بالاتجاه نفسه فيصعب التدقيق البصري. وثمّة فخّ ثالث ألطف: الأرقام العربية الهندية `٠١٢٣` ليست أرقاماً في نحو XML — فاسمٌ يبدأ بها غير صحيح، وقيمةٌ مكتوبة بها لن يقرأها مخطَّطٌ يتوقّع `xs:integer`. هذه الأداة تتعامل مع الأسماء العربية كما تتعامل مع غيرها: تقرؤها وتحفظها ولا تُعيد كتابتها.
ما الذي يوجد فعلاً داخل XML الذي يحتاج الناس تنسيقه
يجدر تسمية المستندات، لأن القائمة تفسّر الحذر. XML هي حيث تعيش الأجزاء المنظَّمة من عالم البرمجيات: فواتير إلكترونية تُرفَع إلى هيئة ضرائب، وحمولات SOAP تتنقّل بين مصارف، وتأكيدات SAML هي حرفياً هوية شخصٍ في الطريق، وسجلات صحية، ومرافعات قضائية، وتصديرات رواتب، وتغذيات منتجات بأسعار لم تُعلَن. وحين يمدّ أحدهم يده إلى منسِّق فذلك غالباً لأن أحد تلك المستندات أخفق ويحتاج قراءته — ومعنى ذلك أن المثال في حافظته حقيقيّ، بالرقم الضريبي للعميل وبموضوع التأكيد كاملَين. ولصقه في منسِّق مستضاف يرفع ذلك بالضبط، وتأكيد SAML على وجه الخصوص بيان حامل صالح ما دام غير منتهٍ. هذه الصفحة تحلّل المستند وتطبعه في JavaScript ولا تُصدر طلباً أثناء ذلك؛ ولوحة الشبكة في أدوات المطوّر لديك ستُظهر الشيء نفسه.
أخطاء شائعة يجب تجنّبها
- افتراض أن تنسيق XML آمن كما هو تنسيق JSON. المسافة داخل عنصرٍ جزء من عقدته النصّية، فإزاحة مستندٍ تغيّر القيم التي يقرؤها محلِّلٌ لاحقاً.
- تجميل مستندٍ موقَّع. التواقيع تغطّي صيغةً قانونية من الشجرة، والمسافة المضافة داخل محتوى عنصر تغييرٌ في البيانات — فيفشل التحقّق فشلاً تامّاً.
- ترك أداةٍ تُعيد تسمية بادئات النطاقات. العنوان هو الهوية، لكن كل XPath وXSLT في قاعدة كودك يشير إلى البادئة، فمستندٌ مكافئ تقنياً ينكسر عملياً.
- بدء اسم عنصر برقم عربي هندي مثل `١`. الأرقام الهندية ليست أرقاماً في نحو XML، والاسم غير صحيح وإن بدا سليماً على الشاشة.
- تحليل XML غير موثوق مع تمكين الكيانات الخارجية. `SYSTEM "file:///…"` تقرأ ملفات محلية وعنوان http يجعل المحلِّل يجلب نيابةً عن مهاجم — هذا هو XXE.
كيف تُقارن
| الجانب | هذه الأداة | منسِّقات عبر الويب | ملحق محرّر |
|---|---|---|---|
| إرسال المستند إلى خادم | أبداً | غالباً نعم | لا |
| تُنبّه حين تغيّر الإزاحة البيانات | نعم | لا | نادراً |
| تحلّ الكيانات الخارجية | أبداً | أحياناً | قابل للضبط |
| تحفظ بادئات النطاقات | دائماً | غالباً | غالباً |
| تحفظ الإعلان وعلامة ترتيب البايتات | نعم | متغيّر | غالباً |
| السعر | مجاناً | مجاني / خطط مدفوعة | مجاناً |
المزايا
تنسيق وتصغير
الاتجاهان معاً، وعرض الإزاحة بيدك، والجدولات متاحة حيث يقتضيها مشروع.
فحص سلامة البنية
تُبلَّغ الوسوم غير المتوازنة وعلامات العطف الشاردة والأسماء غير الصحيحة بسطرها وعمودها.
تنبيهات أمان المسافات
تُبرَز العناصر ذات المحتوى المختلط أو النصّ ذي الدلالة قبل أن تعيد الإزاحة كتابتها.
ترتيب السمات كما هو
تبقى السمات بترتيب المستند، لأن بعض المستهلكين وبعض التواقيع تعتمد عليه.
CDATA والتعليقات محفوظة
تُبقى الأقسام حرفياً، ومنها المحتوى الذي كان سيحتاج حمايةً لولا ذلك.
يستوعب المستندات الكبيرة
يُنسَّق تصديرٌ بحجم عدّة ميغابايتات دون رفع ودون سقف حجم.
لا شيء لتثبيته
لا أداة بناء ولا بيئة تشغيل ولا تبعيات — تعمل في صفحة الويب.
جاهزة للعربية وRTL
الواجهة كاملة بثماني لغات، ومنها العربية من اليمين إلى اليسار.
آمنة بالأصل
تُقدَّم عبر HTTPS، بلا تتبّع للمحتوى وبلا رفع إلى طرف ثالث.
من يستخدمها
مطوّرو التكامل
قراءة استجابة SOAP وصلت في سطر واحد غير مكسور.
فرق المالية والفوترة
فحص فاتورة إلكترونية رفضتها هيئة الضرائب.
مديرو الأنظمة
ترتيب ملف إعدادات قبل إيداعه في نظام إدارة النسخ.
من يطارد عطلاً في واجهة برمجية
العثور على علامة العطف الوحيدة غير المحميّة التي أفشلت تحليل مستند.
الأسئلة الشائعة
لا. كل شيء يعمل محلياً في متصفحك — نصّك لا يُرفع أو يُخزَّن أو يُشارَك أبداً.
نعم — مجاني تماماً، بلا حساب وبلا حدود.