Шаблоны
В этой лекции рассказывается о том, как определить контент XUL документа, используя поток RDF данных. Это достигается комбинацией исходных XUL тегов, XUL тегов шаблона и RDF тегов.
Система шаблонов Mozilla - это подмножество XUL тегов. Эти теги используются, чтобы создать документ, содержание которого не определено. Исходный документ служит основой для представления меняющихся со временем данных, либо в результате воздействия пользователя, либо в результате изменения самих исходных данных. Это также основа для создания приложений, чей графический интерфейс зависит от внешней информации. Внешняя информация может быть проста, как файл, или сложна, как база данных, и находиться где угодно в сети. В любом случае, вид такого документа меняется в зависимости от ситуации.
Система шаблонов позволяет создавать многие виды приложений. Когда информация в шаблоне меняется согласно показаниям датчиков, документ ведет себя как телеметрическое приложение, например центр управления сетью или система контроля состояния окружающей среды. Когда информация изменяется конечным пользователем, документ превращается в приложение для работы с данными. В частности, система шаблонов соответствует приложениям для исследования данных, таких как категориальный анализ и анализ бизнес-процессов, системам контент- и документ-менеджмента, визуализации сетевых схем. Ее можно использовать и для обычных систем ввода данных.
При традиционной web-разработке динамически изменяемый документ HTML может быть сконструирован двумя способами. HTML может генерироваться на стороне web-сервера (чем-то вроде CGI-программы), или HTML на стороне клиента может иметь многочисленные скрипты (динамический HTML). В любом случае, мы должны работать с кодом третьего поколения (3GL code), чтобы достигнуть желаемого результата.
Система шаблонов Mozilla не требует 3GL кода и web-сервера. Ей, конечно, необходима Mozilla. Все что нужно сверх этого, - RDF документы и последовательность правил, что делать с этими RDF. Правила выражаются в виде XUL тегов. Платформа Mozilla автоматически наполняет XUL-документ RDF-сообщениями, когда документ загружается. Таким образом, система XUL-шаблонов управляется данными. Некоторые шаблоны требуют полного доступа к системе. Чтобы это было безопасно, приложение должно быть расположено в области chrome, в противном случае о безопасности придется позаботиться специально.
Контент RDF, обрабатываемый шаблоном, может иметь два типа источников. Он может храниться в обычном RDF-документе в виде файла или системы файлов. В этом случае он может быть RDF-сообщениями (т.н. фактами) на любую тему. Пример: приложение NoteTaker, которое мы описываем в этой книге, работает с RDF именно таким образом. Другой способ порождения контента - "на лету", самой платформой Mozilla. В таком случае это RDF-сообщения на темы, связанные с самой платформой. Примером может служить управление окнами платформы. DOM Inspector обрабатывает внутреннюю RDF информацию, чтобы построить дерево, которое мы видим в меню File | Inspect a Window. Это дерево описывает текущие открытые окна.
Понимание системы шаблонов означает понимание системы правил шаблонов. Последовательность правил может быть простой или сложной. В самом простом случае правила лишь подразумеваются и не выражены явно. В сложных случаях правила подобны или запросу к базе данных или оператору switch в языке JavaScript. В обоих случаях приходится использовать специальные переменные шаблонов.
Как и во многих других случаях XUL, система шаблонов начинается с простого и ясного синтаксиса:
<template> <rule> ... </rule> <rule> ... </rule> </template>
Шаблоны так же сложны, как и деревья, и простой базовый синтаксис скоро усложнится, поскольку есть множество подробностей.
Шаблоны не имеют собственного содержания: нет никаких блокоподобных тегов шаблонов. Теги шаблонов больше похожи на макро-инструкции и оператор #ifdef препроцессора языка C. Эти теги всегда используются внутри других XUL тегов; они не могут быть тегами верхнего уровня, наподобие тега <window>.
На схеме в начале этой лекции показана область, затрагиваемая системой шаблонов в платформе. Из нее видно, что шаблоны - маленькая, компактная система, отделенная от остальной платформы Mozilla. Их работа - последний этап в процессе формирования документа при его загрузке. Шаблоны никак не затрагивают систему отображения XUL контента. Поскольку шаблоны работают в паре с RDF, и RDF файлы, и URL/URI имена интенсивно ими используются. Как и для большинства характерных черт платформы, за работу функциональности шаблонов в основном ответственны несколько XPCOM объектов.