الخلاصة
- لم تطبّق RFC 3076 الصيغة المعيارية على ملف لم يُمس؛ إذ حوّل معالج XML تدفق البايتات أولاً إلى مجموعة عقد XPath بعد عمليات التطبيع والتوسيع.
- أثبت تطابق البايتات الناتجة تمثيلاً قابلاً للتكرار ضمن نموذج وخيار تعليقات وخوارزمية محددة، لكنه لم يُعد بناء الأصل ولم يحفظ وحده سياق DTD أو URI الأساسي أو دلالة التطبيق.
بدأ الاستقرار في منتصف السلسلة
في مارس/آذار 2001 عالجت RFC 3076 وتوصية W3C المسماة Canonical XML Version 1.0 مشكلة عملية. فقد سمح XML بأشكال مادية مختلفة لمعلومات تعدّها تطبيقات كثيرة متكافئة: ترتيب السمات، وترميز المحارف، والصيغة المختصرة للعنصر الفارغ، والمرجع إلى محرف أو كيان بدلاً من كتابة محتواه. احتاجت التواقيع والمقارنات إلى تمثيل واحد يمكن إعادة إنتاجه.
حددت الطريقة مخرجات UTF-8، وحذفت إعلان XML وإعلان نوع المستند، وحوّلت العنصر الفارغ إلى وسمَي بداية ونهاية، وثبّتت علامات اقتباس السمات، وأزالت إعلانات نطاقات الأسماء الزائدة، ورتبت النطاقات والسمات. وكان إدراج التعليقات خياراً صريحاً. فإذا مرت صيغة معيارية سليمة البنية بالطريقة نفسها مرة أخرى لم تتغير.
لكن المدخل الرسمي كان مجموعة عقد XPath. وعندما يصل تدفق بايتات، يجب أولاً أن يبني منه معالج XML ذلك النموذج. أي أن الموحّد يرى المستند بعد التحليل.
كان المحلّل قد صنع الكائن بالفعل
وحّد المعالج فواصل الأسطر وقيم السمات، واستبدل مقاطع CDATA بمحتواها، وحل مراجع المحارف والكيانات القابلة للتحليل، وقد يضيف سمات افتراضية أعلنها DTD. تحولت نطاقات الأسماء إلى عقد، وتحولت المحارف المتتابعة إلى عقد نصية.
لذلك أمكن لمصدرين مختلفين أن يتلاقيا بصورة صحيحة. فالمحرف المكتوب مباشرة ومرجعه الرقمي، والكيان الداخلي ونص إحلاله، و<e/> و<e></e> قد تنتج كلها النموذج نفسه. كان هذا التقارب هو الفائدة المطلوبة.
لكنه جعل الرجوع إلى كتابة المصدر مستحيلاً. اختفى الترميز الأصلي في UTF-8، وحُذفت تصريحات XML وDTD، وذابت حدود الكيانات وCDATA، وحل الترتيب المحدد محل ترتيب السمات الأصلي. أجابت الصيغة عن كيفية تسلسل نموذج العقد، لا عن البايتات والموارد والسياسات التي كوّنته.
ولهذا ينبغي أن يبدأ السجل قبلها: تجزئة البايتات الواصلة وURI الاسترجاع ووقته، والترميز المعلن، وهوية المحلّل وإعداداته، ونمط التحقق، وسياسة المجموعات الخارجية والكيانات، والبايتات الفعلية لكل تبعية، وURI الأساسي، والسمات الافتراضية المضافة. لا تستخرج هذه الوقائع من التجزئة النهائية.
قد تثبت البايتات بينما يتغير السلوك
ذكرت RFC معلومات لا يحملها نموذج XPath: URI الأساسي، وبخاصة لمحتوى جاء من كيان خارجي قابل للتحليل؛ والـnotations والكيانات الخارجية غير المحللة؛ وأنواع السمات المعلنة في DTD.
قد يحتوي كيان خارجي على URI نسبي. وعندما يُدخل المحلّل نصه في المستند المضيف، يمكن أن يُحل ذلك المرجع انطلاقاً من مكان آخر إذا ضاع السياق الأصلي. تبقى البايتات المعيارية مستقرة، لكن المورد الذي يفتحه التطبيق يتغير. لذلك أوصت RFC باستخدام xml:base الملائم أو تحويل URI النسبي إلى مطلق قبل العملية.
ويخلق DTD فرقاً آخر. فقد تظهر السمة الافتراضية في العقدة والمخرجات، بينما يُحذف الإعلان الذي أدخلها. كما لا ترافق الملفَ قيودُ الأنواع مثل ID وIDREF والتعداد وNOTATION. يستطيع محلّل لاحق قراءة القيمة، لكنه لا يستعيد بالضرورة عقدها النوعي.
وقد تربط الـnotations والكيانات غير المحللة بيانات خارجية بالتطبيق. لم يحفظ النموذج كل هذه الروابط. وصف الحالات بأنها نادرة لا يلغيها حين يعتمد النظام عليها.
لم تكن مجموعة العقد شجرة فرعية مكتملة تلقائياً
في المستند الجزئي، يقدّم XPath عقداً منفردة. اختيار عنصر لا يعني اختيار سماته ونصه وكل ذريته. لا تُطبع عقدة مستبعدة لأن أباها موجود. ومع ذلك قد يمنح سلف محذوف سياق نطاق أسماء أو سمة XML قابلة للوراثة.
حمّلت RFC منشئ المجموعة مسؤولية حفظ ما يلزم لدلالة الأعضاء. وقد لا تكون مخرجات المجموعة الجزئية XML سليم البنية أصلاً. لا تمنح كلمة «معياري» إثباتاً على الاكتمال أو الاستقلال.
وهذا سؤال يسبق RFC 3075. فهناك يدور البحث حول المراجع والتحويلات التي يغطيها التوقيع. أما هنا فالسؤال: أي كائن سلّمه المحلّل قبل إصدار البايتات؟ لا يصلح التوقيع الصحيح نسب تحليل لم تُحفظ.
لم تعنِ الصيغة المعيارية كل تكافؤ ممكن
لم تجعل RFC الصيغة اختبار «إذا وفقط إذا» لكل معنى. قد يهمل تطبيق مسافات معينة، أو يعد black وrgb(0,0,0) لوناً واحداً، وقد تضيف مواصفات أخرى قواعد تكافؤ. لذا يمكن لصيغتين مختلفتين أن تتساويا في سياق تطبيق.
ولم تُجرَ تسوية عامة لنموذج محارف Unicode. احتُفظ ببادئات نطاقات الأسماء لأن تغييرها قد يكسر XPath أو قيمة شبيهة بـQName داخل نص أو سمة. كان العقد مقارنة محدودة قابلة للتنفيذ، لا محركاً شاملاً للمعنى.
أعادت المراجعات اللاحقة إبراز السياق
وثقت مذكرة W3C عام 2006 أن C14N 1.0 قد تنسخ xml:base نسبياً إلى عقدة مختارة من دون تركيب مسار الأسلاف، فتغير URI الفعلي. كما بيّن ظهور xml:id أن المعرّف لا ينبغي أن يُورّث كسمة عادية في نطاق XML.
صححت Canonical XML 1.1 هذين الأمرين عام 2008: لم تورّث xml:id، وعالجت مسار xml:base بصورة خاصة. هذا دليل على تطور المواصفة، لا على فشل كل تنفيذ سابق. وعالجت Exclusive XML Canonicalization سياق نطاقات الأسماء عند نقل جزء، بينما أدخلت RFC 3275 C14N 1.0 في بيئة XML Signature. لم تجعل أي منها النتيجة دليلاً على المصدر أو التفويض.
ما الذي يجب حفظه
يجب حفظ البايتات الأصلية ومصدرها وترميزها وتجزئتها؛ المحلّل وإعداداته؛ التحقق؛ DTD والكتالوجات والكيانات المستخدمة؛ URI الأساسي؛ السمات الافتراضية؛ اختيار XPath ونتيجته؛ خيار التعليقات؛ الطريقة والإصدار؛ ثم المخرجات. وبعدها تُحفظ نتيجة المقارنة أو التوقيع، وقاعدة الدلالة في التطبيق، والقرار، والأثر المرصود.
تصلح أفكار Lu Heng اللاحقة عن أولوية الكود العامل وطبقات الواقع كعدسة معلنة. إعادة إنتاج البايتات أقوى من ترديد اسم، لكن إيصال التنفيذ لا يملك تاريخ المصدر أو السلطة أو النتيجة.
المصادر
- سجل RFC 3076 لدى RFC Editor
- RFC 3076: Canonical XML Version 1.0
- سجل RFC 3076 لدى IETF Datatracker
- توصية W3C Canonical XML Version 1.0
- XPath Version 1.0
- XML 1.0
- Known Issues with Canonical XML 1.0
- Canonical XML Version 1.1
- Exclusive XML Canonicalization Version 1.0
- RFC 3275: XML-Signature Syntax and Processing
- Lu Heng، “Running-Code Primacy”
- Lu Heng، “On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile”
إحاطة الأعضاء
سياق أعمق للملف الشخصي
سجّل الدخول بمستوى العضوية المناسب لفتح الإحاطة الكاملة وملاحظات المصادر.
للدائرة الاستراتيجية فقط
الدائرة الاستراتيجية
مفتوح لجميع القراء. افتح إحاطات الملف الشخصي بعد الانضمام وتسجيل الدخول.
انضم إلى الدائرة الاستراتيجيةلأعضاء تحالف القيادات فقط
تحالف القيادات
لأصحاب الأصول الفكرية المؤهلين وللإدارة؛ سجّل الدخول للوصول إلى إحاطات التحالف.
انضم إلى تحالف القيادات
