Чтение онлайн

на главную - закладки

Жанры

Холзнер Стивен

Шрифт:

На момент написания книги в одном процессоре XSLT элемент

<xsl:document>
был реализован: это Saxon версии 6.2.1 и старше, в котором свой элемент
<saxon:output>
был изменен на
<xsl:document>
. Но пока это единственный известный мне процессор XSLT, поддерживающий этот элемент.

Элемент <xsl:namespace-alias>: генерация таблиц стилей

Одна из основных задач XSLT состоит в преобразовании одних таблиц стилей в другие, хотя на первый взгляд это может быть неочевидно.

Например, вам может потребоваться обработать длинные правила, которые нужно настроить непосредственно перед обработкой документов. И, как вы знаете, первоначально XSLT был представлен прежде всего для облегчения создания таблиц стилей объектов форматирования.

Но это порождает проблему: если вы обрабатываете таблицу стилей, полную таких элементов, как

<xsl:template>
и
<xsl:apply-templates>
, которые вы хотите видеть в результирующем документе — поскольку результирующий документ сам является таблицей стилей — как XSLT сможет отличить эти элементы буквального результата от элементов XSLT, которые он должен обработать?

Тут на помощь приходит элемент

<xsl:namespace-alias>
, поскольку он позволяет использовать новое пространство имен для элементов в исходном документе и преобразовывать это пространство имен обратно в правильное в результирующем документе. У элемента два атрибута:

• 

stylesheet-prefix
(обязательный). Префикс пространства имен, используемый в таблице стилей. Устанавливается в NCName или «#default»;

• 

result-prefix
(обязательный). Префикс, URI которого вы хотите присвоить пространству имен в результирующем документе. Устанавливается в NCName или «#default».

Следующий пример пояснит сказанное. Представьте, что вам нужно создать такую таблицу стилей:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet

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

 <xsl:template match="PLANET">

<TR>

<TD>

<xsl:value-of select="NAME"/>

</TD>

<TD>

<xsl:apply-templates select="MASS"/>

</TD>

<TD>

<xsl:apply-templates select="RADIUS"/>

</TD>

<TD>

<xsl:apply-templates select="DAY"/>

</TD>

</TR>

 </xsl:template>

</xsl:stylesheet>

Заметьте, что здесь много элементов XSLT с префиксом «xsl», — значит, если вы попытаетесь создать их при помощи XSLT-преобразования, процессор XSLT попытается выполнить эти элементы. Чтобы избежать такой ситуации, я задал им новый префикс пространства имен, «xslt». Ниже показано, как это выглядит в таблице стилей, производящей предыдущую таблицу

стилей (листинг 9.4). Заметьте, что нижеследующая таблица стилей просто выбирает корневой элемент исходного документа, чтобы она могла начать работать; она не использует исходный документ ни для каких других целей.

Листинг 9.4. Применение <xsl:namespace-alias>

<xsl:stylesheet version="1.1"

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

 xmlns:xslt="http://xslt">

 <xsl:template match="/">

<xslt:stylesheet version="1.1">

<xslt:template match="PLANET">

<TR>

<TD><xslt:value-of select="NAME"/></TD>

<TD><xslt:applу-templates select="MASS"/></TD>

<TD><xslt:apply-templates select="RADIUS"/></TD>

<TD><xslt:apply-templates select="DAY"/></TD>

</TR>

</xslt:template>

</xslt:stylesheet>

 </xsl:template>

 .

 .

 .

</xsl:stylesheet>

Здесь я использую пространство имен "http://xslt" для префикса "xslt", но я смогу изменить его в выходном документе на правильное пространство имен XSLT, "http://www.w3.org/1999/XSL/Transform", воспользовавшись элементом

<xsl:namespace-alias>
:

<xsl:stylesheet version="1.1"

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

 xmlns:xslt="http://xslt">

 <xsl:template match="/">

<xslt:stylesheet version="1.1">

<xslt:template match="PLANET">

<TR>

<TD><xslt:value-of select="NAME"/></TD>

<TD><xslt:applу-templates select="MASS"/></TD>

<TD><xslt:apply-templates select="RADIUS"/></TD>

<TD><xslt:apply-templates select="DAY"/></TD>

</TR>

</xslt:template>

</xslt:stylesheet>

 </xsl:template>

 <xsl:namespace-alias stylesheet-prefix="xslt" result-prefix="xsl"/>

</xsl:stylesheet>

Поделиться:
Популярные книги

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Возлюби болезнь свою

Синельников Валерий Владимирович
Научно-образовательная:
психология
7.71
рейтинг книги
Возлюби болезнь свою

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец