Шаблоны

Шаблоны в контексте этой статьи являются обычными XML-документами, составленными по определенным правилам. Основным их содержанием является SQL-запрос или вызов хранимой процедуры. Шаблоны также используются для запросов XPath, однако их я коснусь чуть позже. Параметры шаблона задаются в URL-строке. Если они там не указаны, берутся значения по умолчанию из соответствующих тегов <param>.

Шаблоны хранятся на сервере, поэтому в смысле безопасности их использование намного предпочтительнее, чем URL-запросов. Чтобы ISAPI-расширение, которое их обрабатывает, поняло, что вы вызываете шаблон, его нужно поместить в свой виртуальный каталог. Обычно он называется template. Настроить его можно в упоминавшемся ранее мастере "Configure SQL XML Support in IIS" на закладке Virtual Names.

Структура шаблона выглядит так:

<?xml version="1.0" ?><your_root xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:xsl="xsl file name"> <xql:header> <xql:param name="your_param_name"> param_value </sql:param> <xql:param name="your_param_name"> param_value </sql:param>...n </xql:header> <sql:query> любое SQL-выражение </sql:query></your_root>

Для форматирования результатов исполнения шаблона может быть использована XSL-трансформация. Для этого необходимо задать атрибут xsl, значение которого есть относительный или полный путь до файла, содержащего шаблон трансформации. Атрибут xsl необязателен, как и раздел header.

Вот как будет выглядеть шаблон, основанный на изрядно уже поднадоевшем вам запросе.

<?xml version="1.0" ?><my_root xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:xsl="xsl_for_query.xsl"> <sql:query> select au_fname,au_lname,address from authors where au_fname like 'M%' for xml raw </sql:query></my_root>

В нем используется та же схема преобразования, что и в предыдущем примере. Теперь попробуйте его вызвать (предположим, вы его сохранили под именем first_template.xml):

http://server/server_pubs/template/first_template.xml

Результат получается довольно странным: IE представляет HTML-документ (получаемый при трансформации) в формате XML. Делает он это на вполне законных основаниях, и чтобы результат выдавался все-таки в формате HTML, нужно явно указать тип выходного потока. Это легко сделать с помощью параметра contenttype.

http://server/server_pubs/template/first_template.xml?contenttype=text/html

Достоинства шаблонов очевидны:

  • Так как шаблон находится на сервере, вы полностью контролируете его содержимое;
  • Шаблоны намного проще в использовании;
  • Тело шаблона и используемая схема преобразования скрыты от пользователя;
  • Шаблоны можно динамически изменять или создавать, что придает интернет-серверу дополнительную гибкость;
  • С помощью шаблонов можно выполнять запросы XPath, но об этом уже в следующем разделе.

В шаблонах можно использовать следующие атрибуты (рассмотрены наиболее используемые):

  • client-side-xml – Булева переменная, принимающая значение 0 или 1. Если указывается 1, то при выборке используется форматирование XML-документа на клиенте. Т.е. SQL Server выполняет обычный запрос, передает рекордсет клиенту, и уже там производится формирование документа. Более подробно клиентские курсоры будут рассмотрены в разделе ADO и XML.
ПРИМЕЧАНИЕ В данном случае клиентом является компьютер, откуда поступает запрос к SQL Server-y, то есть машина, где расположен SQLXMLOLEDB-провайдер. В случае использования ADO – это машина клиента. В случае использования шаблонов – сервер IIS.
  • nullvalue – позволяет задавать строку, которая в URL-запросе и запросе XPath будет означать NULL.
  • is-xml – атрибут параметра, принимающий значение 0 и 1, используется в разделе header. По умолчанию он равен 1. Это означает, что значение параметра интерпретируется как фрагмент xml, поэтому, например, &lt; не заменяется. Если задано значение 0, параметр интерпретируется как обычный текст.

Назначение других атрибутов можно найти в MSDN.