Иллюстрированный самоучитель по PostgreSQL

Лексический разбор тегов

Подстановка сущностей

LXP автоматически преобразует все опознанные сущности в значениях атрибутов тегов LXP в их символьные прототипы. В LXP версии 0.8 распознавались пять стандартных сущностей XML:

  • амперсанд (&);
  • знак "меньше" (<);
  • знак "больше" (>);
  • апостроф (');
  • кавычка (").

Подстановка сущностей иногда бывает очень полезной – если апострофы и кавычки должны входить в значения атрибутов тегов LXP, вставить их без использования сущностей не удастся. Разработчики LXP рассматривали возможность поддержки экранирующих префиксов \ (как обычно делается в других языках программирования), но непосредственная работа с сущностями лучше соответствует стилю разметки и поднимает язык на более высокий уровень.

В листинге 13.11 приведен пример подстановки сущности в теге LXP<include>.

Листинг 13.11. Подстановка сущности.

<lхр>
<setvar field="field_two" />
<include sql="SELECT field_one. Ifield FROM &quot:CAPITALIZED_TABLE&quot;"
method="SQL">
<strong>Column One:</strong> <field name="field_one" /><br>
<strong>Column Two:</strong> <field name="field_two" /><br>
</include>
</lxp>

В листинге 13.11 сущности используются в запросе SQL для того, чтобы указать в кавычках символы кавычек (). Это часто бывает необходимо для того, чтобы в PostgreSQL учитывался регистр символов, поскольку в противном случае идентификаторы автоматически преобразуются к нижнему регистру.

В процессе разбора комбинация Squot: заменяется своим символьным прототипом, в результате чего будет выполнен следующий запрос:

SELECT field_one .field_two FROM "CAPITALIZEDJABLE"

Смысл блока LXP, приведенного в этом примере, описан в подразделе "Включение данных SQL" раздела "Включение данных".

Тег <varparser>

В LXP предусмотрен простой механизм поиска и замены значений переменных, для этой цели используется тег <varparser>. Тег получает два атрибута, find и replасе. Он открывает блок, в котором все подставляемые значения переменных проходят фильтрацию но заданному правилу.

Тег <varparser> чаще всего используется для удаления или экранирования нежелательных символов. Например, при подготовке команды SQL все апострофы (') обычно экранируются символом \, поскольку в PostgrcSQL апостроф задействуется в качестве ограничителя строковых констант. В листинге 13.12 продемонстрировано экранирование апострофов в переменной с именем txt.

Листинг 13.12. Использование тега <varparser> при подготовке команды SQL.

<lхр>
<varparser find=…. .replace="\'">
<include sql="SELECT * FROM table WHERE txtfield = '$txt'">
<field /><br />
</include>
</varparser>
</lxp>

В листинге 13.12 тег <varparser find=…. .replace="\' "> приказывает LXP заменять апострофы экранированной последовательностью \' во всех подставляемых значениях переменных.

Обратите внимание: поиск с заменой производится только в подставляемых значениях. По этой причине литералы-апострофы в атрибуте sql тега <include> остаются без изменений; модификация относится только к значениям, подставляемым в этот атрибут (то есть значению переменной txt в листинге 13.12).

Завершающий тег </varparser> возвращает LXP к обычному режиму подстановки переменных.

Примечание
Вложение тегов <varparser> позволяет установить несколько одновременных правил поиска с заменой
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.