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

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

Жанры

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

Шрифт:

На момент написания книги в одном процессоре 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>

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

Я все еще граф. Книга IX

Дрейк Сириус
9. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я все еще граф. Книга IX

Запрети любить

Джейн Анна
1. Навсегда в моем сердце
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Запрети любить

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Дважды одаренный. Том II

Матабар V

Клеванский Кирилл Сергеевич
5. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар V

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Ботаник

Щепетнов Евгений Владимирович
1. Ботаник
Фантастика:
фэнтези
боевая фантастика
4.56
рейтинг книги
Ботаник

Тринадцатый V

NikL
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый V

Ученик. Книга вторая

Первухин Андрей Евгеньевич
2. Ученик
Фантастика:
фэнтези
5.40
рейтинг книги
Ученик. Книга вторая

Неучтенный элемент. Том 2

NikL
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 2

Я – Легенда 2: геном хищника

Гарцевич Евгений Александрович
2. Я - Легенда!
Фантастика:
боевая фантастика
рпг
фантастика: прочее
попаданцы
5.00
рейтинг книги
Я – Легенда 2: геном хищника

Тьма чернее ночи

Коннелли Майкл
7. Гарри Босх
Детективы:
триллеры
7.64
рейтинг книги
Тьма чернее ночи

Представитель

Семин Никита
6. Переломный век
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Представитель

Гладиаторы

Трофимов Ерофей
Фантастика:
постапокалипсис
7.86
рейтинг книги
Гладиаторы

История США от глубокой древности до 1918 года

Азимов Айзек
Популярная наука от Азимова
Научно-образовательная:
история
5.00
рейтинг книги
История США от глубокой древности до 1918 года