Подтвердить что ты не робот

Почему "контрольные" символы незаконны в XML 1.0?

Существует множество символов, которые не кодируются на языке XML 1.0, например. U+0007 ('bell') и U+001B ('escape'). Большинство из них - это символы без символов пробела.

Из (eg) > этого вопроса ясно видно, что он спецификация XML, что вопрос - но кто-нибудь может рассказать мне, почему спецификация XML запрещает эти символы?

Похоже, что потребовалось, чтобы они были закодированы в экранах, например. как  и  соответственно, но, возможно, существует практическая причина, по которой символы были запрещены, а не требовались для того, чтобы сбежать?

Ответчики предположили, что есть некоторая мотивация для избежания символов управления передачей, но Unicode включает в себя многие другие управляющие символы (рассмотрите U+200C "zero join non joiner" ). Я признаю, что для такого поведения не может быть веской причины, но я все равно хотел бы его лучше понять.

Это особенно неприятно, потому что, когда эти значения символов появляются в других форматах данных encodings, я заканчиваю "двойным экранированием" новых XML-документов, которые должны кодировать это.

4b9b3361

Ответ 1

Я понимаю, что этот диапазон запрещен на том основании, что язык разметки не должен иметь никакой необходимости поддерживать символы передачи и управления потоком и в том числе и создавать проблемы для любых редакторов и парсеров в двоичном преобразовании.

Я изо всех сил пытаюсь найти что-нибудь из ex cathedra от Tim Bray и др., хотя.

edit: some обсуждение контрольных символов и смутное признание было не слишком переработанным:

В 09:27 17/06/00 -0500 Марк Фолькманн написал:

Я никогда не видел обсуждения причины, по которой большинство ASCII-элементов управления   символы, такие как фид формы, не допускаются в документах XML. Можно   кто-нибудь скажет мне причину этого решения или назовет меня спецификацией. что   объясняет, что?

Я не уверен, что мы сделаем это так же, если мы снова это сделаем. я не вижу, что они действительно навредят. Ясно, что если вы оптимизируете для высокоинтегрируемого языка разметки контента (и XML - это) это законно быть подозрительным к вещам, таким как вертикальная вкладка и backspace и т.д.... но тогда как это можно оставить в \n и DEL и так далее? -Tim

Ответ 2

Это было давно, но мое лучшее воспоминание состояло в том, что у них нет графического представления, а также нет согласованной семантики. Выбирая пару в случайном порядке, мы видим U + 0006 "Подтверждение" или U + 0016 "Синхронный холостой ход"... что это значит? Unicode не говорит. Даже когда все заявляли о поддержке ASCII, не было никакой совместимости вокруг этого мусора. Предполагается, что XML связан с совместимостью.

Опыт заключается в том, что люди, которые хотят использовать эти вещи, действительно хотят забивать двоичные данные в своих XML-элементах (и следующее, что они хотят, это включить U + 0000 NULL), который был явно нецелевым XML с первого дня. Если вы хотите представить числа 0x6 или 0x16, есть много хороших способов сделать то, что не мутирует понятие "символ".

Ответ 3

It seems like it could have been required that they be encoded in escapes, e.g. as  and 

Вы можете сделать именно это в XML 1.1, для всех, кроме\0.

Ответ 4

Вероятно, время для повторного анализа, также с учетом XML 1.1.

Какие контрольные точки кода символов существуют в Юникоде?

  • U+0000 to U+001f, унаследованный от ASCII.
  • U+007F, унаследованный от ASCII
  • U+0080 to U+009F, унаследованный от Latin-1
  • различные диапазоны специального назначения, стандартизованные явно для Unicode, и в основном полезны, особенно в контекстах без разметки. Они обсуждаются здесь по блокам, включая причины, почему и как их использовать, или не использовать их в XML, и что делать, если вы все равно столкнетесь с ними.

Как XML просматривает эти управляющие символы?

Это другая классификация.

  • Вкладка и новая строка (независимо от зависимости платформы от новой строки). Все используют их. Все знают, на что они должны стоять. Разрешено практически во всех известных формах, часто даже для довольно печатной печати самой разметки.
  • U+0000 - зло. Нулевой символ? Строковый терминатор? Двоичный шум? Противоположность как функциональной совместимости, так и разметки. Запрещено во всех формах.
  • Что-нибудь еще? Недостаточно используемая, проблемная интероперабельность, но есть способы терпеть их, даже не зная о том, что они должны "контролировать".

Теперь переключим наше внимание только на эту последнюю категорию, собственно на управляющие коды. То есть нижеследующая сводка НЕ ​​применяется к вкладкам и новым строкам: U+0009, U+000a, U+000D, U+0085, U+2028.

XML 1.0 позволяет использовать все вышеперечисленные диапазоны управляющих символов, кроме U+0000 to U+001f, как текст (непосредственно включенные символы), и даже те (кроме зла U+0000) разрешены как числовые символьные ссылки. Разрешить U+007F to U+009F было явно бездействием, и эта несогласованность была исправлена ​​в XML 1.1, но наоборот. Они даже дали подробное объяснение внутри стандарта:

Наконец, существует значительный спрос на определение стандартного представления произвольных символов Юникода в документах XML. Поэтому XML 1.1 позволяет использовать ссылки на символы управления С# x1 по # x1F, большинство из которых запрещено в XML 1.0. Однако из соображений надежности эти символы по-прежнему не могут использоваться непосредственно в документах. Чтобы повысить надежность обнаружения кодировки символов, дополнительные управляющие символы # x7F по # x9F, которые были свободно разрешены в документах XML 1.0, теперь также должны отображаться только как ссылки на символы. (Простые символы, конечно, освобождаются.) Небольшая жертва обратной совместимости считается незначительной. Из-за потенциальных проблем с API, # x0 по-прежнему запрещено как напрямую, так и как ссылка на символ.

Почему Unicode и XML разрешают бесплатное использование символов, похожих на разметку, кроме нескольких "унаследованных" диапазонов? Люди должны использовать разметку для них.

Юникод также используется в контекстах без разметки, и это все еще эволюционирующий набор символов. Было бы слишком сложно реализовать соответствующий XML-процессор, если набор неконтролируемых символов был движущейся целью.

ОК, что не так с унаследованными диапазонами, по сравнению с характерными символами управления Unicode?

Отсутствие стандартизации. Консорциум Unicode действительно не мог выбрать, какие номера присваиваются этим "символам", или какова их типичная визуальная презентация или значение. Полная обратная совместимость с ASCII (на кодированном уровне UTF-8) и с латинским-1 (на уровне назначения кодовой точки) принудительно включала эти кодовые точки независимо от различных специализированных и перегруженных значений, часто привязанных к ним в различных контекстах обработки текста.

Подождите, вы говорите, что XML не должен полностью быть обратно совместимым с ASCII, в отличие от UTF-8?

Да. Это правильно. Вам нужен элемент документа. Вы даже не можете добавить raw < или &. Итак, зачем вам когда-либо понадобиться вводить необработанные контрольные символы?

Ответ 5

XML был разработан специально для Unicode (в частности, UTF-8 и UTF-16) и ISO/IEC 10646, оба из которых (я не совсем уверен в ISO 10646) содержат символы управления передачей/потоком, которые были оставлены от ASCII и дней терминалов на основе символов. Хотя эти символы по-прежнему используются, они не принадлежат к формату, например XML.

Что касается этих новых кодировок, которые используют эти коды для чего-то еще, ну, похоже, что спецификация XML может понадобиться адаптировать.

Ответ 6

Почему вы их дважды избегаете? Это кажется хорошим местом для & bell; и & избежать;. (Undefined, обрабатывается обратным вызовом от анализатора к вашему коду)