لماذا الشخصيات "السيطرة" غير قانونية في XML 1.0؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

هناك مجموعة متنوعة من الشخصيات غير القابلة للترميز قانونًا في XML 1.0 ، على سبيل المثال U+0007 ('بيل') و U+001B ('هرب'). معظم الشخصيات المثيرة للاهتمام هي شخصيات "تحكم" غير وايتي.

من الواضح من (على سبيل المثال) هذا السؤال وغيرهم أنه مواصفات XML هذه هي المشكلة - ولكن هل يمكن لأي شخص إلقاء الضوء علي لماذا تحظر مواصفات XML هذه الأحرف؟

يبدو أنه كان من الممكن أن يتم تشفيرها في هروب ، على سبيل المثال  و  على التوالي ، ولكن ربما يكون هناك سبب عملي يمنع الشخصيات بدلاً من الالتزام بالهروب؟

اقترح المستجيبون أن هناك بعض الدافع نحو تجنب أحرف التحكم في الإرسال ، ولكن يونيكود يتضمن الكثير آخر شخصيات تشبه السيطرة (ضع في اعتبارك U+200C "عرض الصفر غير نجار"). أدرك أنه قد لا يكون هناك سبب وجيه لهذا السلوك ، لكنني ما زلت أرغب في فهمه بشكل أفضل.

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

هل كانت مفيدة؟

المحلول

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

أنا أكافح من أجل العثور على أي شيء سابق كاتدرا حول هذا من تيم براي وآخرون.

تعديل: بعض نقاش من شواطئ التحكم والاعتراف الغامض لم يكن مهندسًا مفرطًا:

في الساعة 09:27 صباحًا 17/06/00 -0500 ، كتب مارك فولكمان:

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

لست متأكدًا من أننا سنفعل ذلك بنفس الطريقة إذا كنا نفعل ذلك مرة أخرى. لا أرى أنهم يلحقون أي ضرر حقيقي. من الواضح أنه إذا كنت تتحسن من أجل عملية تشغيل عالية المحتوى لغة الترميز (و XML) من المشروع أن تكون مشبوهًا بأشياء مثل الرأسية والمسافة الخلفية وما إلى ذلك ... ولكن كيف يمكن أن تكون متسقة في المغادرة في n و del وهكذا؟ -tim

نصائح أخرى

يبدو أنه كان من الممكن أن يتم تشفيرها في هروب ، على سبيل المثال و

يمكنك القيام بذلك بالضبط في XML 1.1 ، للجميع ما عدا 0.

كان ذلك منذ وقت طويل ، لكن أفضل ما لدي هو أنه ليس لديهم تمثيل رسومي وأيضًا عدم وجود دلالات متفق عليها. اختيار زوجين بشكل عشوائي نرى u+0006 "الاعتراف" أو U+0016 "الخمول المتزامن" ... ماذا يعني هذه؟ يونيكود لا يقول. حتى عندما ادعى الجميع دعم ASCII ، لم يكن هناك قابلية للتشغيل البيني حول هذه القمامة. من المفترض أن تكون XML حول قابلية التشغيل البيني.

كانت التجربة هي أن الأشخاص الذين يرغبون في استخدام هذه الأشياء يريدون حقًا تشويش البيانات الثنائية في عناصر XML الخاصة بهم (والشيء التالي الذي يريدون هو تضمين U+0000 Null) ، والذي كان غير صريح من XML منذ اليوم 1. إذا كنت ترغب في تمثيل الأرقام 0x6 أو 0x16 ، فهناك الكثير من الطرق الجيدة للقيام بما لا يزداد فكرة "الشخصية".

ربما حان الوقت لإعادة الاحتفال ، أيضًا مع عرض في XML 1.1.

ما هي نقاط رمز حرف التحكم الموجودة في Unicode؟

  • U+0000 إلى U+001f, ، ورثت من ASCII.
  • U+007F, ، ورثت من ASCII
  • U+0080 إلى U+009F, ، ورثت من اللاتينية 1
  • نطاقات للأغراض الخاصة المختلفة ، موحدة بشكل صريح ل Unicode ، وغالبًا ما تكون مفيدة خاصة في سياقات غير Markup. هم انهم ناقش هنا كتلة حسب الكتلة ، بما في ذلك أسباب وكيفية استخدامها أو عدم استخدامها في XML وماذا تفعل إذا واجهتها على أي حال.

كيف ينظر XML إلى أحرف التحكم هذه؟

هذا تصنيف مختلف.

  • Tab و Newline (بغض النظر عن اعتماد النظام الأساسي لما هو خط جديد) جيد. الجميع يستخدمها. الجميع يعرف ما يفترض أن يدافعوا عنه. مسموح به في جميع الأشكال المعروفة تقريبًا ، وغالبًا ما تكون حتى بالنسبة للطباعة الجميلة للعلامة نفسها.
  • U+0000 هو الشر. شخصية فارغة؟ المنهي سلسلة؟ الضوضاء الثنائية؟ نقيض لكل من التشغيل البيني والارتياح. ممنوع في جميع الأشكال.
  • هل من شيء آخر؟ نادراً ما يتم استخدامه ، قابلية التشغيل المتداخل الإشكالية ، ولكن هناك طرق للتسامح معهم حتى دون معرفة الكثير عما يفترض أن "يسيطرون".

دعنا الآن نغير انتباهنا إلى هذه الفئة الأخيرة فقط ، رموز التحكم المناسبة. أي أن الملخص التالي لا ينطبق على علامات التبويب والخطوط الجديدة: U+0009, U+000a, U+000D, U+0085, U+2028.

يتيح XML 1.0 جميع النطاقات المذكورة أعلاه من أحرف التحكم ، باستثناء U+0000 إلى U+001f, ، كنص (متضمن مباشرة الأحرف) ، و AS مراجع شخصية رقمية. السماح U+007F إلى U+009F كنت فيما يبدو عن طريق الإغفال وتم تصحيح هذا التناقض في XML 1.1 ، ولكن العكس جولة. حتى أنهم أعطوا مبررات مفصلة داخل المعيار:

أخيرًا ، هناك طلب كبير على تحديد تمثيل قياسي لأحرف Unicode التعسفية في مستندات XML. لذلك ، يسمح XML 1.1 باستخدام مراجع الأحرف لأحرف التحكم #x1 من خلال #x1F ، ومعظمها ممنوع في XML 1.0. ومع ذلك ، لأسباب من المتانة ، لا يمكن استخدام هذه الشخصيات مباشرة في المستندات. من أجل تحسين متانة اكتشاف تشفير الأحرف ، يجب الآن أن تظهر الآن أحرف التحكم #x7F من خلال #x9F ، والتي تم السماح بها بحرية في مستندات XML 1.0 ، الآن فقط كمراجع أحرف. (يتم إعفاء شخصيات الفضاء البيضاء بالطبع.) تعتبر التضحية الطفيفة بالتوافق المتخلف ليست مهمة. نظرًا للمشاكل المحتملة مع واجهات برمجة التطبيقات ، لا يزال #x0 ممنوعًا بشكل مباشر وكمرجع شخصية.

لماذا يتيح Unicode و XML استخدامًا مجانيًا لأحرف التحكم التي تشبه العلامات ، بصرف النظر عن النطاقات القليلة الموروثة؟ يجب أن يستخدم الناس ترميز لهؤلاء.

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

حسنًا ، ما الخطأ في النطاقات الموروثة بعد ذلك ، مقارنة بأحرف التحكم الخاصة بـ Unicode؟

نقص التوحيد. لم يحصل اتحاد Unicode على اختيار الأرقام المخصصة لتلك "الشخصيات" ، أو ما هو عرضها البصري النموذجي أو المعنى. التوافق الكامل للخلف مع ASCII (على مستوى UTF-8 المشفر) ومع مستوى تعيين LATIN-1 (على مستوى تعيين نقطة الكود) الإدراج الخام القسري لنقاط الرمز هذه بغض النظر عن مختلف المعاني المتخصصة والمحملة في كثير من الأحيان في سياقات معالجة النص المختلفة.

انتظر ، هل تقول أن XML لا يُقصد منه أن تكون متوافقة تمامًا مع ASCII ، على عكس UTF-8؟

نعم. هذا صحيح. تحتاج إلى عنصر مستند. لا يمكنك حتى وضعه في الخام < أو &. فلماذا ستحتاج من أي وقت مضى لوضع شخصيات التحكم الخام؟

تم تصميم XML خصيصًا حول Unicode (وتحديدا UTF-8 و UTF-16) و ISO/IEC 10646 ، وكلاهما (أنا لا الى حد كبير إيجابية حول ISO 10646) تحتوي على أحرف التحكم في الإرسال/التدفق والتي تركت من ASCII وأيام المحطات القائمة على الأحرف. على الرغم من أن هذه الأحرف لا تزال لديها استخدامات ، فإنها لا تنتمي إلى تنسيق مثل XML.

بالنسبة إلى هذه الترميزات الجديدة التي تستخدم تلك الرموز لشيء آخر ، يبدو أن مواصفات XML قد تحتاج إلى التكيف.

لماذا تتأكلها مزدوجًا؟ هذا يبدو وكأنه مكان جيد ل & بيل. و & Escape ؛. (غير محدد ، معالجته عن طريق رد الاتصال من المحلل إلى الكود الخاص بك)

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