هل تستخدم CDATA لتخزين التدفقات الثنائية الخام؟

StackOverflow https://stackoverflow.com/questions/502857

  •  20-08-2019
  •  | 
  •  

سؤال

بدلا من النفقات العامة مع حفظ الثنائي كـ 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 :

  • استخدام "<" و">" غير قانوني
  • استخدام "&" مقيد (&eacute; على ما يرام، &zajdalkdza; ليس)

لذا فإن CDATA هي مجرد طريقة للسماح بـ "<" و">" و"&"، عن طريق تقييد "]]>" بدلاً من ذلك.إنه لا يحل مشكلة أحرف XML وUnicode وUTF-8 غير القانونية والتي تمثل المشكلة الرئيسية.

حلول:

  1. يستخدم قاعدة64 بنفقات عامة تبلغ 33% ولكن مع دعم كبير لجميع لغات البرمجة وحقيقة أنها معيار
  2. يستخدم BaseXML مع تطبيقات لا تزال محدودة ولكن 20٪ من النفقات العامة فقط
  3. لا تقم بتشفير البيانات الثنائية داخل XML إن أمكن، بل قم بنقلها بشكل منفصل

وXML هو شكل نص عادي - انها لا تستخدم لتخزين البيانات الثنائية. وضع النقط ثنائية في ملفات منفصلة وإضافة عنصر إلى XML الخاصة بك والتي يحيل هذه الملفات. إذا كنت ترغب في تخزين جميع النقط ثنائية في ملف واحد، إضافة سمة تعويض أو شيء من هذا القبيل ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top