Тема: Как использовать XML-файл в качестве сценария диалога?

Сразу оговорюсь,  книга "САПР на базе AutoCAD" у меня имеется и раздел посвященный XML мне знаком. Но меня интересует несколько иное. Когда разрабатываешь логику диалога, трудно да и не к чему держать в голове все разветвления, связи и т.д и распределять их по коду. Постепенно начинаешь тонуть в этой паутине... Напрашивается идея - создать логический каркас программы и навешивать на него исполнительные процедуры. В языке XML мне понравилась наглядность и простота, его иерархическая структура очень хорошо описывает диалог с его опциями. Написать сценарий диалога на XML - одно удовольствие. Но как связать его с кодом? Я пишу на VB (VBA), и вопрос стоит в первую очередь методичесий (с технической точки зрения, прочесть XML-файл средствами VB не проблема), как организовать, создать интерпретатор сценария?
Возможно, кто-нибудь уже влез в эту тему и может поделиться опытом и соображениями?
Буду благодарен.

Re: Как использовать XML-файл в качестве сценария диалога?

Язык XAML поможет. Это универсальный XML-язык описания форм приложений. Используя единый текстовый код можно создавать формы приложений, не делая для каждой системы программирования свои собственные, ни с кем не совместимые. Примерно так:

<Canvas
    xmlns="http://schemas.microsoft.com/2003/xaml"
    Background="LightCyan"
    Width="100%" Height="100%">
  <Image Source="preved.bmp" Canvas.Left="5" Canvas.Top="5" />
  <Text Canvas.Left="90" Canvas.Top="20" FontSize="36">Превед, падонки!
  </Text>
</Canvas>

Microsoft будет использовать XAML в Longhorn, там появятся особые "Longhorn-приложения", использующие XAML.
Будет ли поддержка в других системах разработки - вряд ли. Хотя хотелось бы. Разве что Microsoft всех проглотит.
А пока разборку XML надо делать самому. То есть читать, получать атрибуты, по их именам и значениям предусматривать какие-то действия.
Определенные возможности дает использование таблиц стилей - XSL. В них можно заложить логику работы

Re: Как использовать XML-файл в качестве сценария диалога?

> ShaggyDoc
Не могу сказать, что разобрался полностью в XML-технологиях и последних разработках в этой области, но впечатление сложилось такое, что разработчики пытаются превратить XML-образные (слово-то какое) языки в код, в еще один язык программирования.
Мое же намерение прямо противоположное - отделить сценарий от кода. В итоге, написал некую условную программку ScriptDialog имитирующую диалог с Пользователем и попытался
отработать на ней интерпретатор сценария. Связь между кодом (на VB) и сценарием построена на том, что контролам размещенным на форме помимо программного имени присваиваются еще и логические имена совпадающие с именами узлов XML-сценария.
Программка выложена для обсуждения здесь:
http://dwg.ru/dnl/1613

Re: Как использовать XML-файл в качестве сценария диалога?

> LeonidSN
У Вас верные впечатления. Да, есть такие попытки. В разных "отраслях".
XML надо применять с умом, используя преимущества, но не забывая об недостатках. Например, преимуществом может быть использование как универсального языка описания дизайна программы. А вот внутреннюю логику работы надо реализовывать не конкретном языке программирования.
В своем примере, насколько я понял, Вы средствами MSXML читаете XML и обрабатываете в своей программе. Так можно, но не рационально. Слишком сложно. Информацию для конкретной программы можно было бы хранить в любом виде, в том числе и в более эффективном двоичном. А вот в XML удобно хранить то, что может быть прочитано в любой программе.
Другое дело, если бы среда программирования сама разбиралась бы с XML. Например, вместо синтаксиса FRM-файла использовался бы XML. И не только в VB, но и во всех средах.
Кстати, уже была противоположная ситуация с командными файлами в DOS. C помощью bat-файлов делали очень многое, особенно когда использовался расширенный командный процессор NDOS. Но bat-файлам не хватало интерфейсных возможностей. Появлялись дополнительные утилиты, наподобие be от Norton. Чтобы делать примитивные меню. Тогда это было по бедности.
XAML (в Longhorn-приложениях), похоже, несет такую же идею, но потому, что "с жиру бесятся". Ресурсов будет тратиться много, толку мало.
Впрочем, последнее - мои измышления. На самом деле MS с корешами только и думают, как бы снизить ресурсопожираемость своих программ. :)

Re: Как использовать XML-файл в качестве сценария диалога?

> ShaggyDoc
Спасибо за внимательный и заинтересованный комментарий. Тем более, что он единственный...
Но, как я понимаю, Вас не привлекает идея отделения логического блока программы (в виде сценария) от исполнительного кода, который в идеале - просто набор библиотечных функций:
А вот внутреннюю логику работы надо реализовывать на конкретном языке программирования.
Мне же она (идея) по-прежнему кажется привлекательной.
А как именно работать с файлом сценария, это вопрос техники, "матчасть нужно учить!" И кстати, непонятно почему ситуация с командными bat-файлами "была противоположной"? Скорее, предшествующей современным скриптам.

Re: Как использовать XML-файл в качестве сценария диалога?

> LeonidSN
А как прописать исполнительный код без привязки к конкретному языку программирования?
Все-таки в XML буква M означает Markup, то есть разметку. На XML можно описать любую структуру и внешний вид. Например, опишем кнопку, а в атрибуте, скажем OnClick что можем написать? Ну, например
OnClick='Call Dispatch("Previous")'
Но это привязка к конкретному языку. Да еще интерпретирующего типа. В программе должна быть процедура с таким именем, и программа должна уметь ее распознать по строке и выполнить.
В XML-меню ruCAD есть атрибут macro, в котором содержится строка LISP-выражения. Но это опять привязка к конкретному языку. Значение атрибута сначала проверяется и обрабатывается моей программой, а в итоге передается на выполнение интерпретатору LISP в AutoCAD. А само по себе исполниться не может.
В XAML, насколько я понимаю, тоже могут быть подобные строки (да хоть целая программа), но это опять привязка к какому-то интерпретатору. Сам интерпретатор будет частью OS. Но был уже такой - command.com. Только он примитивный был.
Давно используется подобное в CMS. Например, в SAPID, в отличие от других, исполнительный код записывается не в PHP, а в XML. И это, вроде бы удобно. Но все равно есть интерпретатор этого диалекта XML, а знать приходится и PHP, и язык SAPID. Вот эту "матчасть" делает один человек уже несколько лет. Хотя, теоретически, мог бы сделать любой. И стать миллиардером.
А с bat ситуация была противоположной потому, что был набор готовых команд OS и любых приложений командной строки, но не было интерфейсных средств для их объединения, за исключением самого примитива. В XML есть описание интерфейса, но нет средств исполнения. Пока.

Re: Как использовать XML-файл в качестве сценария диалога?

Попытался объяснить самому себе, что же я сделал. В итоге получилась небольшая статья, которую выложил здесь:
http://dwg.ru/dnl/1636