Однако на начальном этапе разработки базы данных еще не существовало утвержденных
стандартов XSL и XSLT и поддерживающих их программных средств. Поэтому пришлось
выполнить самостоятельную разработку [3], не претендующую на универсализм,
обладающую ограниченными возможностями, но сохраняющую наглядность шаблона.
Впоследствии, при появлении утвержденного стандарта оказалось, что относительно
легко можно построить XSL-шаблон, обеспечивающий несложные преобразования,
необходимые для нашего проекта, и более того, можно сделать его достаточно
наглядным. К сожалению, однако, универсальные XSLT-процессоры пока еще работают
слишком медленно. Поэтому и сейчас перевод нашего проекта на технологию XML,
несмотря на ее привлекательность, по-видимому, нецелесообразен.
Шаблон документа и способы взаимодействия его со скриптом должны быть
организованы так, чтобы, с одной стороны, шаблон наиболее полно представлял HTML-
дизайн с минимумом вычислительных элементов, но, с другой стороны, сохранялась
возможность генерации произвольного текста. Такую возможность, вообще говоря,
обеспечивает разделение специальных тегов шаблона на три сорта: "автоматические",
"полуавтоматические" и "вычислительные" с применением обработчиков событий -
описанных в скрипте процедур с согласованным интерфейсом. Данные, определяющие
содержание документа, присваиваются скриптом именованным переменным. Значения
переменных, используемых в специальных тегах шаблона, при генерации подставляются в
замещающий текст. Влияние скрипта на генерацию ограничивается назначением
обработчиков событий и присваиванием значений переменным.
Текст, заменяющий автоматический тег, генерируется автоматически и полностью
определяется содержимым тега и значениями переменных. Текст, заменяющий
полуавтоматический тег, генерируется полуавтоматически, т. е. определяется не только
содержимым тега, значениями переменных, но также результатами обработки событий.
Обработчики событий при полуавтоматической генерации ничего не генерируют, но
выработанные ими результаты влияют на процесс генерации заранее согласованным
образом. Для генерации же текста, заменяющего вычислительный тег, вызывается
вычислитель - обработчик события вычисления, которому и передается содержимое тега.
Вообще говоря, вычислитель может генерировать совершенно произвольный текст.
Определим минимально необходимую для решения стоящих перед нами задач
функциональность языка шаблонов, принимая во внимание то, что основным источником
данных при публикации БД являются наборы данных.
В языке должны быть возможность подстановки значений переменных в шаблоне строки
(что сближает язык шаблонов с макроязыком), условная генерация (в зависимости от
значений переменных) и возможность вложения одного шаблона документа в другой.
Параметры запроса могут считаться предопределенными переменными. Роль переменных
могут играть и поля текущей записи набора данных БД.
Часто бывает необходимо получить последовательность генерируемых по одному и тому
же шаблону текстов, лишь изменяя значения используемых в шаблоне переменных. Такую
циклическую генерацию можно выполнять полуавтоматически, поручив управление