xmlhack.ru logo
>> статьи на xmlhack.ru

Экранированная разметка: чем же её заменить

Автор: Норман Уолш
Перевод: А.Скробов
Опубликовано на norman.walsh.name (18.09.2003, англ.): http://norman.walsh.name/2003/09/18/unescmarkup
Опубликовано на xmlhack.ru (25.02.2006, рус.): http://xmlhack.ru/texts/06/escaped-markup/solutions.html
В закладки:   Del.icio.us   reddit

(Для предварительного чтения: «Экранированная разметка вредна», «Экранированная разметка: всё-таки она вредна»)

Я уже выразил своё мнение по поводу экранированной разметки на нескольких форумах — теперь, думаю, настало время приостановить критику. Тем, кому я мог что-то доказать, я это доказал; повторение делу не поможет. Но некоторые люди жаловались, что я не предлагаю никаких решений взамен критикуемого. В этот раз я предложу свои решения, и заодно — задачу, или по крайней мере упражнение, которое может вас заинтересовать.

Оптимизм — профессиональная болезнь программиста; тестирование — её лечение.
K. Beck

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

Оказывается, я всё ещё не указал достаточно ясно, какие альтернативы существуют для экранированной разметки. Постараюсь этой заметкой исправить сложившуюся ситуацию.

Вначале — повторение моих тезисов.

Я считаю, что экранированная разметка представляет существенную опасность, и её необходимо запретить в Atom (можете подставить вместо Atom название вашего любимого производного от RSS языка — важно не это), а также во всех остальных спецификациях. Вкратце:

  1. Содержимое, к которому было бы логично предоставить доступ средствам XML, изолируется в закрытой для таких средств области.

  2. Задача, которую экранированная разметка призвана решить, ей решается лишь частично. Вопросы кодировки и другие проблемы интернационализации так и остаются нерешёнными.

  3. Использование экранированной разметки создаёт у наивных пользователей иллюзию того, что это приемлемое решение общей задачи «как засунуть разметку туда, где она запрещена XML-схемой».

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

И замечу, что я резко не согласен с заявлением, что моё мнение по этому поводу оторвано от реальности. Я отчаянно озабочен практическими аспектами проблемы экранированной разметки.

Итак, какие же есть альтернативы?

  1. Ограничиться обычным текстом и не пытаться задавать для него разметку.

    Думаю, этого окажется достаточно для тех приложений, которые используют Atom для публикации обзоров и ссылок, — т.е. для большинства фидов, которые я читаю.

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

  2. Разрешать разметку и требовать её синтаксической корректности.

    Это, пожалуй, самый сложный путь — но ведь не запредельно сложный, правда? Перед тем, как опубликовать в фиде заметку, потребуется пропускать её через некую утилиту, которая бы исправляла синтаксические ошибки. Мне кажется, что такое преобразование будет ненамного сложнее, чем требующееся для корректного экранирования разметки.

  3. Если документ, включаемый в фид, действительно содержит разметку, непредставимую в синтаксически корректном XML (например, объявления DOCTYPE), то остаётся три варианта — задействовать MIME или какой-либо другой способ реализации настоящих вложений; выложить документы где-нибудь в Сети и дать на них ссылки; наконец, закодировать их в base64.

    Некоторые спрашивают, какая же будет выгода от кодирования в base64? А вот какая: у людей не будет искушения создавать вручную документы, закодированные в base64. Они не будет воображать, что слегка экранированная разметка — это универсальный способ поместить разметку в те места, где схема допускает только текст.

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

Мне хочется провести небольшой эксперимент. Вот два документа; ни один из них не является синтаксически корректным XML, но оба отображаются «правильно» в моём браузере (Mozilla Firebird в Linux):

Лично я бы объединил в фиде только заголовки, но мог бы объединить и документы целиком, если это требуется.

Если вам кажется, что экранированная разметка — это решение проблемы, то как выглядел бы ваш фид? Есть ли у вас средства для автоматической генерации такого фида, и что они сделали бы с этими файлами?



Norman Walsh Copyright © 2003-2007 Norman Walsh
Перевод: xmlhack.ru Copyright © 2000-2007 xmlhack.ru