Я хотел бы задать вопрос о нотации XML и S-выражений (-ish). S-выражения довольно старые; они также очень просты. Мы могли бы рассмотреть две формы, которые одинаковы по значению, разные по синтаксису:
(XML-код взят из польской википедии )
<?xml version="1.0" encoding="UTF-8"?>
<ksiazka-telefoniczna kategoria="bohaterowie książek">
<!-- komentarz -->
<osoba charakter="dobry">
<imie>Ambroży</imie>
<nazwisko>Kleks</nazwisko>
<telefon>123-456-789</telefon>
</osoba>
<osoba charakter="zły">
<imie>Alojzy</imie>
<nazwisko>Bąbel</nazwisko>
<telefon/>
</osoba>
</ksiazka-telefoniczna>
S-Expression (-ish) версия:
(:version "1.0" :encoding "utf-8")
(ksiazka-telefoniczna :category "bohaterowie książek"
; komentarz(a comment)
(osoba :charakter "dobry"
(imie Ambroży)
(nazwisko Kleks)
(telefon 123-456-789))
(osoba :charakter "zły"
(imie Alojzy)
(nazwisko Bąbel)
(telefon)))
Версия S-Expression гораздо более краткая. Мы избегаем избыточности, используя простые обозначения списков, но все же мы можем определить синтаксис для включения вещей, которые мы хотим иметь (например, свойства). Конечно, это всего лишь пример, и фактический стандарт мог бы быть лучше или просто отличаться; тем не менее, это короче и легче разобрать. Почему XML победил?
(para "This is a paragraph " (footnote "(better than the one under there)" "." /footnote) /para)
.Ответы:
Мы знаем, что разработчики XML были знакомы с S-выражениями, поскольку XML основан на SGML, а SGML имеет язык таблиц стилей DSSSL, который использует синтаксис S-выражений (и схему в качестве встроенного языка сценариев).
Тем не менее они выбрали синтаксис, отличный от S-выражений, из-за вариантов использования XML. Первоначально XML был разработан для поддержки как сгенерированных машиной структурированных данных, так и языков разметки, таких как HTML, которые создаются вручную и содержат смешанный контент (текст, смешанный с элементами с метаданными).
избыточность
Текстовые документы с разметкой часто длиннее экрана. Если вы видите a
)
и не видите начала структуры, вы довольно растеряны; Вы не знаете, была ли глава или боковая панель, которая только что закончилась. Избыточность повторения тэга в endtags в XML, как</sidebar>
делает это намного проще для человека-писателя. Это также делает его более надежным: если вы случайно удалили конечный тег, вы часто можете определить, какой конечный тег отсутствует.SGML (предшественник XML) позволял вам опционально сокращать конечный тег до одного символа, но эта функция была исключена из XML для простоты.
Короче говоря, XML более многословен по своему замыслу, потому что он предназначен для поддержки редактируемого человеком документа. Сегодня XML используется для самых разных целей, а также для чисто межмашинной связи, где такая избыточность не требуется.
Смешанный контент
Предлагаемый вами синтаксис не очень хорошо поддерживает смешанный контент. Возьмите этот пример в HTML:
Как бы вы выразили это в своем синтаксисе? Вам понадобится какой-то дополнительный разделитель, чтобы различать атрибуты и текстовое содержимое. Вдруг это уже не так кратко.
Специальные символы
Угловые скобки в обычном тексте встречаются гораздо реже, чем скобки и двоеточие.
Совместимость
HTML был уже чрезвычайно успешным во время разработки XML, и имело смысл выбрать аналогичный синтаксис.
Почему XML победил?
S-выражения никогда не были альтернативой XML. Спецификация XML намного больше, чем угловые скобки; Он определяет синтаксис для элементов и атрибутов и смешанного содержимого, экранирование, кодирование символов, DTD-синтаксис и проверку и так далее. Ничего подобного не существовало для s-выражений. Конечно, вы можете определить аналогичный стандарт, как вы предлагаете здесь, но никто не делал этого в то время. XML получил благословение от W3C и поэтому был принят основными игроками и стал стандартом де-факто для обмена данными.
источник
<PRE>
элемента в HTML. Поэтому я предположил, что цитаты будут необходимы.Лично я думаю, что лучшая часть XML - это четко определенные возможности схемы, а не ее синтаксис. Механизм схемы позволяет пользователям публиковать их формат документа, чтобы поделиться тем, что они считают действительным документом. Есть также автоматизированные валидаторы. Кроме того, типы и схемы, созданные одним пользователем, могут быть расширены другими пользователями.
Насколько я знаю, никто не предпринимал попыток стандартизировать механизм схемы общего назначения для s-выражений, за исключением самого языка LISP (который не используется в примере в OP).
источник
Вот две причины, по которым я бы выбрал XML вместо чего-то «S-expression-ish»:
Четко определенная синтаксическая и семантическая модель
XML - это не просто дерево узлов, а дерево классифицированных узлов, которые имеют разное синтаксическое представление и разное поведение. Например, атрибут с данным именем может появляться только один раз для данного узла, в то время как дочерние узлы могут появляться несколько раз.
Вы можете определить такую модель поверх обобщенных S-выражений. В ваших примерах показана схема категоризации атрибутов и дочерних элементов. Добавьте семантику для текста, комментариев и инструкций по обработке, и вы получите нечто изоморфное XML.
механическая обработка
Из стандартной синтаксической и семантической модели вы можете создавать инструменты - и многие люди имеют. Вы можете найти некоторую форму анализатора / сериализатора XML, XPath и XSLT-процессора для всех распространенных языков / платформ. И вы знаете, что все они будут вести себя одинаково на каждой платформе.
И вот еще несколько вещей для рассмотрения:
В общей схеме XML не так уж многословен
В вашем примере, что вы на самом деле устранили? Пока я читаю, вы:
>
, что обычно отделяет открывающий тег от его дочерних элементов.=
что разделяет имя и значение атрибута на,:
чтобы указать, что дочерний элемент является атрибутом; нет сбережений.Я думаю, что также важно признать, что внутреннее и внешнее представления XML очень разные. Внутренне дерево XML очень компактно. И поскольку различные элементы уже классифицированы, очень эффективно манипулировать. Внешне, да, вы получаете все эти закрывающие теги, но они хорошо сжимаются.
Является ли "многословие" реальной проблемой?
Я думаю, что реальный вопрос не в том, является ли XML «многословным», а в том, является ли он более выразительным, чем это необходимо для конкретной цели. Несколько примеров:
источник