Summary

  • سجّلت RFC 2376 النوعين text/xml وapplication/xml، لكن حذف charset ولّد قاعدتين متعاكستين: ‏US-ASCII للأول حتى مع BOM أو تصريح XML، وفحص كيان XML نفسه للثاني.
  • اسم السجل والترويسة المستلمة والبايتات وقاعدة المفكك والمعنى التطبيقي أدلة منفصلة. وحّدت RFC 7303 المعالجة لاحقاً وأزالت القيمة الافتراضية القديمة.

وثيقة تصف نفسها داخل عقد آخر

صُمم XML لنقل البنية بين آلات وبرامج مختلفة. يستطيع التصريح الداخلي تسمية الترميز، وتساعد علامة ترتيب البايتات على تمييز بعض الصيغ قبل قراءة المحتوى كله.

لكن XML على HTTP أو البريد أو WebDAV لا يصل وحيداً. يحمله غلاف على نمط MIME، ويمكن لحقل Content-Type أن يعلن charset آخر. وهكذا يرى المستقبل أكثر من إجابة محتملة للسؤال نفسه: إلى أي محارف تتحول هذه البايتات؟

صدرت RFC 2376 في يوليو 1998 كوثيقة Informational، لا كمعيار إنترنت. أنشأت text/xml وapplication/xml بدلاً من استعارة أنواع SGML التي لم تكن قدرات معالجاتها ومعاملاتها مطابقة. كان الاسم المشترك تنسيقاً ضرورياً؛ أما المعضلة فكانت ترتيب مصادر السلطة.

خيار العرض غيّر أولوية الدليل

كل كيان XML صالح لـapplication/xml، ويمكن لعميل لا يفهم XML أن يعرض حفظه كملف. أما text/xml فأشار إلى أن عرضه كنص عادي سلوك افتراضي مناسب.

استوردت هذه الراحة قواعد النوع الأعلى text في MIME. إذا حضر charset صريح، منحته RFC 2376 السلطة في النوعين. لم يكن التصريح الداخلي صاحب الكلمة الأخيرة دائماً.

عند غياب المعامل افترق المساران. في application/xml لا يقدم الغلاف معلومة ترميز؛ يستطيع معالج XML قراءة BOM ونمط البايتات الأول والتصريح الداخلي، بينما لا ينبغي لوكيل MIME الجاهل بـXML أن يفترض شيئاً.

أما في text/xml فكان الغياب يعني US-ASCII. ظلت القاعدة سارية عبر HTTP وحتى عندما كان الجسم UTF-8 أو UTF-16 وصرّح بذلك. الفراغ الخارجي لم يحفظ عدم اليقين؛ بل فعّل أمراً موروثاً.

مثال يفرض فشل التصريح الداخلي

عرضت الوثيقة جسماً يبدأ بعلامة UTF-16 ويحتوي encoding="utf-16"، مع ترويسة لا تقول سوى text/xml. ومع ذلك كان الحكم US-ASCII. تصديق ما تقوله الوثيقة عن نفسها يعني مخالفة عقد التسليم.

تستعيد الأدلة وزنها تحت application/xml: يمكن لـBOM تحديد UTF-16، أو يمكن فحص البداية ثم التصريح إذا غابت العلامة. كلمة واحدة في النوع الخارجي غيّرت الدليل المقبول.

امتدت النتيجة إلى التخزين والوسطاء. قد يحوّل وسيط الجسم ويحدث charset الخارجي دون التصريح الداخلي، أو قد يحفظ نظام الجسم ويتخلص من الترويسة التي حكمت تفسيره. فصل البايتات عن سياق التسليم قد يمحو سبب القراءة نفسها.

الوصف الذاتي لا يحدد مرتبته

أقر XML 1.0 بأن البروتوكول الأعلى يجب أن يحدد الأولوية عند وجود معلومة خارجية. ذلك منطقي لأن طبقة النقل قد تحول التمثيل من دون علم الوثيقة.

لكنه أيضاً سؤال سيطرة: أي طبقة تستطيع نقض الأخرى؟ هل الحقل الغائب يعني الجهل أم قيمة افتراضية؟ استعارت RFC 2376 جزءاً من جوابها من تاريخ MIME.

حلّت RFC 3023 محلها عام 2001 وأبقت US-ASCII الافتراضي لـtext/xml. شرحت بصورة أوسع قيمة charset الخارجي عندما تجري الوسائط تحويلاً للترميز. ثم واصلت الممارسة وقواعد الأنواع النصية التطور.

الإصلاح أزال قراراً صامتاً

طلبت RFC 6657 من الأنواع النصية الجديدة تعريف سلوك charset صراحة. وفي 2014 وحّدت RFC 7303 معاملة text/xml وapplication/xml، فلم يعد اختيار فرع text وحده يقرر الترميز.

تبدأ الأولوية الحديثة بـBOM، ثم charset صريح عند غيابها، ثم قواعد XML إذا غاب الاثنان. وظل application/xml موصى به لتجنب التباس التاريخ.

وأضافت لاحقة +xml فصلاً بين الصيغة والغرض. يستطيع نوع تطبيقي محدد إتاحة أدوات XML العامة مع الاحتفاظ باسم يشرح وظيفة الوثيقة. نجاح المحلل في بناء شجرة لا يثبت فهم المفردات أو سلامة تنفيذ الأمر.

السجل ليس إيصال تنفيذ

يربط سجل IANA الحالي application/xml والأنواع القريبة بـRFC 7303. يثبت ذلك تنسيق الاسم، لا الترويسة التي وصلت فعلاً ولا سلامة البايتات ولا قرار المحلل ولا الأثر التطبيقي.

تفصل طبقات الواقع لدى Lu Heng بين النوع المسجل والترويسة الملتقطة والبايتات وBOM والتصريح وناتج الفك والشجرة والعمل. أولوية الكود العامل تتطلب قياس الشيء والمعالج الحقيقيين. أما مبدأ المواصفة الابتدائية الدنيا فيحفظ قيمة RFC 2376: فتحت ممراً مشتركاً مفيداً، ثم أزالت المعايير اللاحقة سلطة خفية داخل قيمة افتراضية، لا التنسيق نفسه.