Элемент <xsl:document>: создание нескольких выходных документов

Элемент <xsl:document>: создание нескольких выходных документов

В рабочем проекте XSLT 1.1 был представлен новым элемент, <xsl:document>, предназначенный для поддержки нескольких выходных документов, — и, скорее всего, этот элемент будет добавлен в XSLT 2.0. Он имеет следующие атрибуты:

• href (обязательный). Указывает место, в которое должен быть помещен новый документ. Устанавливается в абсолютный или относительный URI, без идентификатора фрагмента;

• method (необязательный). Устанавливает метод вывода, используемый для создания результирующего документа. Устанавливается в «xml», «html», «text» или QName, которое не является NCName;

• version (необязательный). Задает версию выходного документа. Устанавливается в NMTOKEN;

• encoding (необязательный). Задает кодировку выходного документа. Устанавливается в строку; 

• omit-xml-declaration (необязательный). Принимает значения «yes» или «no» для того, чтобы пропускать или не пропускать объявление XML;

• cdata-section-elements (необязательный). Определяет имена тех элементов, чье содержимое вы хотите вывести как разделы CDATA. Принимает значение разделенного символами-разделителями списка QName;

• doctype-public (необязательный). Определяет открытый идентификатор, который будет использован в объявлении <!DOCTYPE> вывода. Устанавливается в строковое значение;

• doctype-system (необязательный). Определяет системный идентификатор, который будет использован в объявлении <!DOCTYPE> вывода. Устанавливается в строковое значение;

• encoding (необязательный). Задает кодировку символов. Устанавливается в строковое значение;

• indent (необязательный). Определяет выравнивание вывода для отображения структуры вложенности. Устанавливается в «yes» или «no»;

• media-type (необязательный). Задает тип MIME вывода. Устанавливается в строковое значение;

• standalone (необязательный). Определяет, нужно ли включать в вывод отдельное объявление, и если да, задает его значение. Устанавливается в «yes» или «no».

Этот элемент содержит тело шаблона.

В следующем примере, основанном на упрощенной таблице стилей, я создаю в документе HTML две рамки (frame), и два HTML-документа, которые будут в них отображаться, frame1.html и frame2.html. Первую рамку и документ, который в ней появится, frame1.html, я создам при помощи <xsl:document> следующим образом (заметьте, что здесь я устанавливаю атрибут version в «1.1», поскольку мы используем возможность, входящую только в рабочий проект XSLT 1.1, но «1.1», вероятно, не будет правильным значением атрибута version в долгосрочном периоде; если элемент <xsl:document> будет включен в XSLT 2.0, версию следует установить в «2.0»):

<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.1">

 <HEAD>

  <TITLE>

   Two Frames

  </TITLE>

 </HEAD>

 <FRAMESET cols="50%, 50%>

  <FRAME src="frame1.html"/>

  <xsl:document href="frame1.html">

   <HTML>

    <HEAD>

     <TITLE>

      Frame 1

     </TITLE>

    </HEAD>

    <BODY>

     <H1>This is frame 1.</H1>

    </BODY>

   </HTML>

  </xsl:document>

  .

  .

  .

После этого я могу создать вторую рамку и документ для вывода в нее, frame2.html (листинг 6.10).

Листинг 6.10. Применение <xsl:document>

<HTML xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="1.1">

 <HEAD>

  <TITLE>

   Two Frames

  </TITLE>

 </HEAD>

 <FRAMESET cols="50%, 50%>

  <FRAME src="frame1.html"/>

  <xsl:document href="frame1.html">

   <HTML>

    <HEAD>

     <TITLE>

      Frame 1

     </TITLE>

    </HEAD>

    <BODY>

     <H1>This is frame 1.</H1>

    </BODY>

   </HTML>

  </xsl:document>

  <FRAME src="frame2.html"/>

  <xsl:document href="frame2.html">

   <HTML>

    <HEAD>

     <TITLE>

      Frame 2

     </TITLE>

    </HEAD>

    <BODY>

     <H1>This is frame 2.</H1>

    </BODY>

   </HTML>

  </xsl:document>

 </FRAMESET>

</HTML>

ПРИМЕР ТОЛЬКО ДЛЯ XSLT 1.1

Обратите внимание на то, что этот пример предназначен только для рабочего проекта XSLT 1.1. Ни один из известных мне доступных процессоров XSLT пока не обрабатывает элемент <xsl:document>.