Использование сущностей для разбивки на модули

Использование сущностей для разбивки на модули

Поскольку XSLT-преобразования являются XML-документами, мы можем воспользоваться средствами XML для модульной организации данных. Части преобразований можно просто вынести во внешние документы и включать в документ в виде сущности.

Пример

Листинг 4.15. Входящий документ:

<root>

 <a/>

 <b/>

</root>

Листинг 4.16. Основное преобразование

<!DOCTYPE xsl:stylesheet [

 <!ENTITY ab SYSTEM "ab.xsl">

]>

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="root">

  <ROOT>

   <xsl:apply-templates/>

  </ROOT>

 </xsl:template>

 &ab;

</xsl:stylesheet>

Листинг 4.17. Файл ab.xsl

<xsl:template match="a">

 <A/>

</xsl:template>

<xsl:template match="b">

 <B/>

</xsl:template>

Листинг 4.18. Результат преобразования

<ROOT>

 <A/>

 <B/>

</ROOT>

В этом примере в DTD-блоке мы определяем сущность с именем ab, которая содержит два шаблонных правила для обработки элементов a и b. Файл ab.xsl, в котором содержится текст внешней сущности, заменяет в документе ссылку &ab;. После раскрытия процессором сущности (замены ссылки на ее содержимое) наше преобразование будет выглядеть следующим образом.

Листинг 4.19. Основное преобразование после раскрытия сущности &ab;

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="root">

  <ROOT>

   <xsl:apply-templates/>

  </ROOT>

 </xsl:template>

 <xsl:template match="a">

  <A/>

 </xsl:template>

 <xsl:template match="b">

  <B/>

 </xsl:template>

</xsl:stylesheet>