هل تستخدم CDATA لتخزين التدفقات الثنائية الخام؟
سؤال
بدلا من النفقات العامة مع حفظ الثنائي كـ Base64, ، كنت أتساءل عما إذا كان بإمكانك تخزين التدفقات الثنائية مزدوجة البايت مباشرة في ملفات XML، باستخدام CDATA، أو التعليق عليها، أو شيء من هذا القبيل؟
المحلول
ويمكنك تخزينه كما CDATA، ولكن هناك خطر أن بعض تسلسل بايت وتقييم لXML صحيح أن يغلق الباب CDATA. بعد نظرة سريعة على HTTP: // شبكة الاتصالات العالمية. w3.org/TR/2006/REC-xml-20060816/#sec-cdata-sect ، يبدو أنك يمكن أن يكون أي تسلسل حروف باستثناء "]]>". إلقاء نظرة على ما هو XML صحيح شار أ > أيضا.
نصائح أخرى
والحرف نول ( '\ 0' في C) غير صالح في أي مكان في XML، حتى هروب (& # 0؛).
لا، لا يمكنك استخدام CDATA وحده لإدخال البيانات الثنائية في ملف XML.
في XML1.0 (لأن XML 1.1 أكثر تساهلاً، ولكن ليس فيما يتعلق بأحرف التحكم)، تنطبق القيود التالية على أحرف CDATA:
CData ::= (Char* - (Char* ']]>' Char*))
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
وهذا يعني أن هناك عدة شخصيات غير قانونية، من بينها:
- أحرف تحكم XML غير القانونية من 0x00 إلى 0x20 باستثناء الأسطر الجديدة وأحرف الإرجاع وعلامات التبويب
- تسلسلات UTF-8 غير القانونية مثل 0xFF أو 0b1100000x 0b10xxxxxx غير القانوني
بالإضافة إلى ذلك، في محتوى الكيان القياسي بدون CDATA :
- استخدام "<" و">" غير قانوني
- استخدام "&" مقيد (
é
على ما يرام،&zajdalkdza;
ليس)
لذا فإن CDATA هي مجرد طريقة للسماح بـ "<" و">" و"&"، عن طريق تقييد "]]>" بدلاً من ذلك.إنه لا يحل مشكلة أحرف XML وUnicode وUTF-8 غير القانونية والتي تمثل المشكلة الرئيسية.
حلول:
وXML هو شكل نص عادي - انها لا تستخدم لتخزين البيانات الثنائية. وضع النقط ثنائية في ملفات منفصلة وإضافة عنصر إلى XML الخاصة بك والتي يحيل هذه الملفات. إذا كنت ترغب في تخزين جميع النقط ثنائية في ملف واحد، إضافة سمة تعويض أو شيء من هذا القبيل ...