Знакомство с разметкой LXP
Хотя LXP решает задачи, традиционно относящиеся к области программирования, при проектировании LXP авторы стремились к тому, чтобы эти задачи решались без изменения общего синтаксиса, используемого при разметке HTML (или XHTML). На сервере документ LXP выглядит как обычный файл HTML с некоторыми незнакомыми тегами.
Рассмотрим пример простого документа LXP:
<lхр> <dock type="1nit"> <include src="parts/init.lxp" /> </dock> <include src="parts/head.html" /> <hl>Welcome</hl> <hr width="400"> <if Ixp.authenticated-'t'> Welcome to my webpage. <putcookie name="user" /> </if> <else> <strong>Please login.</strong> <include src="parts/login.lxp" /> </else> include src="Darts/foot.html" /> </lxp>
Теги LXP
Теги (формально называемые элементами) определяются как последовательность символов, начинающаяся с символа < и заканчивающаяся символом >. Теги всегда начинаются с имени, определяющего смысл тега. Кроме того, в них могут присутствовать атрибуты, разделенные пробелами. Атрибуты всегда определяются в формате:
имя=значение
Где имя – имя атрибута, уникальное для данного тега, а значение – некоторое произвольное значение, присвоенное этому атрибуту.
Теги LXP соответствуют общей структуре тегов любого языка разметки. Пара тегов определяет регион (пли блок), который начинается открывающим тегом (например, <tag>) и завершается парным закрывающим тегом с префиксом / (например, </tag>).
Модуль лексического разбора LXP не требует обязательного включения завершающих символов / в теги с пустыми блоками, хотя в некоторых случаях отсутствие этого символа приводит к непредсказуемым последствиям. Например, при вложении тегов <include> с опущенным завершающим символом / могут возникнуть проблемы с принятием решений. Дело в том, что тег <include> может быть как тегом с пустым блоком (при включении внешнего документа), так и открывающим тегом, для которого должен существовать закрывающий тег (как при непосредственном включении запросов SQL).
Примечание
Привыкните к тому, чтобы включать завершающий символ / в теги с пустым блоком. В HTML некоторые теги формально не требуют завершителя (например, используется тег <br> вместо принятого в XHTML тега <br />). Тем не менее с ростом популярности XHTML и XML требования к размеченным документам становятся более жесткими.
Открывающие теги, как и теги с пустым блоком, обладают именами и содержат атрибуты. Если имя описывает общий смысл тега, то атрибуты обычно определяют детали выполняемой операции, а их смысл зависит от конкретного тега. Закрывающий тег должен состоять из одного имени, указанного после начального символа / (например, </tag>).
В тегах LXP и именах атрибутов регистр символов обычно не учитывается, хотя в некоторых случаях имя атрибута напрямую соответствует имени переменной (как в теге <if>). В этом случае регистр символов может оказаться существенным в зависимости от написания имен переменных. В приведенных ниже примерах используются символы нижнего регистра, что отчасти связано с влиянием стандарта XHTML (согласно которому имена элементов и атрибуты записываются в нижнем регистре).
В листинге 13.6 приведен простой блок разметки LXP с одним открывающим тегом, одним закрывающим тегом и двумя тегами с пустым блоком.
Листинг 13.6. Простой блок разметки LXP.
<lхр> <setvar example="test" /> <putvar name="example" /> <lхр>
LXP ориентируется на простоту и удобство интеграции при разработке приложений, и этот базовый структурный аспект LXP дает хороший пример такого подхода.
Блоки LXP
Вероятно, самым важным тегом LXP является тег <lхр>, открывающий блок LXP. Как и тег <script> или короткий тег РНР, он указывает модулю LXP на начало данных LXP.
Однако в отличие от РНР в процессе обработки блока LXP модуль просто игнорирует любые теги, которые он не опознает как теги LXP. Тег <lхр> просто активизирует возможность использования тегов LXP в заданном блоке, но при этом вы по-прежнему можете работать с обычными тегами HTML (хотя теги LXP могут управлять включением кода HTML в выходной ноток).
Как нетрудно догадаться, тег </lхр> закрывает блок LXP и запрещает использование тегов LXP до следующего открывающего тега <lхр>.
Примечание
Обработка тегов LXP не включается в документах LXP автоматически. Документ выводится быстрее, если блоки LXP будут ограничены теми областями, в которых используются возможности LXP, поскольку обработка блока LXP с динамическим содержимым занимает больше времени, чем обработка простого кода HTML.