Оглядываясь назад, основывать XAML на XML - это ошибка или хороший подход?

16

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

Существует две основных альтернативы описанию GUI на языке XML. Один из них - сделать то, что сделал WinForms, и описать это в реальном коде. С этим связано множество проблем, хотя это не совсем бесполезно ( вопрос, чтобы сравнить XAML с этим подходом ). Другой основной альтернативой является разработка совершенно нового синтаксиса, специально разработанного для данной задачи. Это обычно известно как предметно-ориентированный язык .

Итак, оглядываясь назад, и в качестве урока для будущих поколений, было ли хорошей идеей основывать XAML на XML, или это было бы лучше, как специализированный язык для конкретного домена? Если бы мы разрабатывали еще лучшую структуру пользовательского интерфейса, мы должны выбрать XML или пользовательский DSL?

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

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

Но полученный язык может быть неудовлетворительным по-разному. Это довольно многословно. Если вы меняете тип чего-либо, вам нужно изменить это в закрывающем теге. У него очень плохая поддержка комментариев; невозможно закомментировать атрибут. Существуют ограничения на содержание атрибутов с помощью XML. Расширения разметки должны быть построены «поверх» синтаксиса XML, а не глубоко и красиво интегрированы в него. И, мой личный фаворит, если вы устанавливаете что-то с помощью атрибута, вы используете совершенно другой синтаксис, чем если бы вы устанавливали то же самое, что и свойство содержимого.

Также сказано, что, поскольку все знают XML, XAML требует меньше обучения. Строго говоря, это правда, но изучение синтаксиса - крошечная доля времени, затрачиваемого на изучение новой инфраструктуры пользовательского интерфейса; это концепции каркаса, которые делают кривую крутой. Кроме того, особенности языка, основанного на XML, могут фактически добавить в корзину «изучение потребностей».

Эти недостатки перевешиваются простотой разбора? Должна ли следующая классная структура продолжить традицию или потратить время на разработку потрясающего DSL, который не может быть проанализирован существующими инструментами и чей синтаксис должен быть изучен всеми?

PS Не все путают XAML и WPF , но некоторые путают . XAML - это вещь, похожая на XML. WPF - это фреймворк с поддержкой привязок, тем, аппаратного ускорения и множества других интересных вещей.

Роман Старков
источник
3
Да, он может быть проанализирован синтаксическим анализатором XML, но не полностью или не полностью. Например, он использует строковые атрибуты для определения источников данных и сопоставлений свойств.
Конрад Рудольф
5
Что вы предлагаете в качестве альтернативы? Любая дискуссия о пригодности конкретной технологии должна была бы касаться подходящих технологий замены.
Роберт Харви
2
Знаете, XAML не без аналогов. XUL, Glade и QML основаны на одной идее. Я думаю, что вы несправедливо выделяете XAML.
user16764
3
Я думаю, что самое большое преимущество XAML не в том, что он может быть проанализирован парсерами XML. Скорее, XAML похож на XML, и большинство разработчиков уже знают, как работать с XML, и поэтому кривая обучения гораздо менее крутая.
Юозас Контвайнис
2
@JuozasKontvainis Если под «работой» вы подразумеваете «разобрать ее в своих инструментах», тогда да. Если вы имеете в виду «написать пользовательский интерфейс, описанный им», то знакомый синтаксис может выглядеть так, как будто он помогает, но на самом деле вам все равно нужно узнать, что помещать в атрибуты (потому что это не XML), и это, безусловно, сложнее всего. вещь, по моему личному опыту. Изучение нового синтаксиса, особенно если он простой и продуманный, на мой взгляд, тривиально.
Роман Старков

Ответы:

4

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

В аэрокосмической промышленности у нас есть диспетчерские, которые благодаря достижениям компьютерных технологий теперь достаточно гибки. В прошлом все оборудование было нестандартным, уникальным и очень дорогим; сегодня все это работает на недорогих, общедоступных готовых ПК. Это значительно уменьшает блокировку поставщика. Однако виджеты отображения по-прежнему пишутся с использованием ActiveX, потому что так было всегда.

ActiveX требует доступа к инструментам Microsoft, которые, ну, в общем-то, устарели. Таким образом, ВВС и Межведомственная группа приборов создают язык разметки для отображения данных, основанный на XML. Это позволит практикам создавать дисплеи с использованием разметки XML в редакторе по своему выбору. Звучит знакомо?

Никто не утверждает, что XML не лишен недостатков. Но это лучшее, что доступно для того, что было разработано, пока не появится что-то лучшее.

Смотрите также,
почему XML не сосет

Роберт Харви
источник
3
Согласитесь ли вы, что такие же рассуждения одинаково хорошо применимы и к таким вещам, как, например, описания грамматики YACC, TeX, регулярные выражения, Verilog и, возможно, даже LISP? Мы разработали специальный синтаксис для каждого из них. Они выиграют так же, как вы перечислите в первом абзаце. Тогда не следует ли, что использование XML для них было бы правильным, потому что XML отвечает тем целям, которые вы упомянули?
Роман Старков
Только XML широко признан как универсальный метастандарт данных, из которого вы можете создать столько индивидуальных стандартов данных, сколько пожелаете. Чтобы не запачкать воду, я убрал первый абзац.
Роберт Харви
S-выражения никогда не воспринимались как стандарт метаданных, возможно, потому, что никому не нравятся все эти глупые скобки. Повсеместность является неотъемлемым фактором здесь; все эти альтернативные синтаксисы, которые вы упомянули, могут быть представлены в XML, если вы так склонны.
Роберт Харви
2
Все они также могут быть представлены в YAML и JSON (и наоборот).
Тимви
2
Одна большая проблема, которую я вижу в этом аргументе, заключается в том, что XAML на самом деле не является данными. Конечно, это можно рассматривать как просто объектный граф, но такое мышление, вероятно, является причиной того, что многим людям это не нравится, и почему у него такая кривая обучения. «Эй, давайте пойдем, создадим граф объектов, я имею в виду пользовательский интерфейс». Я понятия не имею, как это можно сделать лучше, но я уверен, что это может быть.
Earlz
2

Ваши возражения против XML не имеют ничего общего с использованием его в качестве языка описания GUI; все они жалуются на работу с синтаксисом XML, который в равной степени применим к любой форме XML.

Похоже, вы просто не любите XML.

Вы правы, это не может быть оптимальным выбором для редактирования вручную, но для языка описания GUI я бы сделал несколько контраргументов:

  1. (ИМХО) GUI являются графическими и должны быть выложены графически. Формат файла на самом деле не так важен, потому что вы действительно не должны редактировать его вручную. (Основанный на тексте хорошо для контроля исходного кода, но многословие не проблема.)

  2. Помимо того, что синтаксический анализатор доступен, XML также легко проверить: вы можете написать DTD или XML-схему, а затем использовать универсальные инструменты, чтобы сообщить вам, является ли ваш файл легальным. Это будет очень полезно для языка описания GUI. Делать то же самое в JSON или YAML не так просто.

  3. Если вы действительно недовольны написанием XAML напрямую, ничто не мешает вам разработать новый формат и затем скомпилировать его в XAML. Например, вы можете придумать прямое отображение из JSON в XAML, чтобы у вас был более легкий синтаксис JSON (и возможность комментировать атрибуты), а затем сгенерировать XAML при создании приложения. Люди редко пишут HTML напрямую, но HTML по-прежнему отличный формат.

benzado
источник
1
Мне нравится XML; Я просто не люблю писать это вручную. 1. Да, они должны, но, увы, реальность такова, что Visual Studio не может это осуществить. 3. Это ортогонально обсуждению того, был ли XAML задним числом плохой идеей. Да, можно, но зачем это нужно, если XAML не был плохим выбором?
Роман Старков
1
Моя точка зрения заключается в том, что вы судите об этом полностью против критериев написания; Ваши проблемы должны быть сбалансированы с проверкой и интерпретацией этого тоже. DSL, который лучше написать, почти наверняка будет сложнее разобрать. Но промежуточный этап компиляции может дать вам лучшее из обоих миров.
Бензадо
0

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

XML трудно читать. Например, откройте эту ссылку и нажмите «Образец», чтобы сравнить XML и YAML бок о бок. Последнее явно намного более читабельно для человека.

Если вы хотите использовать XML для описания GUI, то вам лучше быть уверенным, что вы предоставили достаточно инструментов, чтобы людям не пришлось смотреть на XML.

Очевидно, что XPF потерпел неудачу в этом отношении.

Джон Хенкель
источник