Элемент <xsl:namespace-alias>: генерация таблиц стилей
Элемент <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>
Вот результат. Заметьте, что здесь все еще используется префикс пространства имен «xslt», но это пространство имен теперь соответствует правильному пространству имен XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xslt:stylesheet
xmlns:xslt="http://www.w3.org/1999/XSL/Transform" version="1.1">
<xslt:template match="PLANET">
<TR>
<TD>
<xslt:value-of select="NAME"/>
</TD>
<TD>
<xslt:apply-templates select="MASS"/>
</TD>
<TD>
<xslt:applу-templates select="RADIUS"/>
</TD>
<TD>
<xslt:apply-templates select="DAY"/>
</TD>
</TR>
</xslt:template>
</xslt:stylesheet>
На этом глава завершается. В следующей главе мы рассмотрим, как работать с XSLT в коде.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Генерация заплат
Генерация заплат Все изменения исходного кода ядра Linux распространяются в виде заплат (patch). Заплаты представляют собой результат вывода утилиты GNU diff(1) в формате, который может подаваться на вход программы patch(1). Наиболее просто сгенерировать заплату можно в случае, когда
Глава 2 Создание и применение таблиц стилей
Глава 2 Создание и применение таблиц стилей В предыдущей главе был представлен обзор XSLT. В этой главе мы начинаем детальную работу с ним. Мы собираемся научиться рассматривать документы в терминах XSLT, структурировать таблицу стилей XSLT и встраивать в документы таблицы
Элементы таблиц стилей высокого уровня
Элементы таблиц стилей высокого уровня В XSL определен ряд элементов высокого уровня, которые могут быть прямыми дочерними элементами <xsl:stylesheet>:• <xsl:attribute-set>;• <xst:decimal-format>;• <xsl:import>;• <xsl:include>;• <xsl:key>;• <xsl:namespace-alias>;• <xsl:output>;• <xsl:param>;•
Элемент <xsl:namespace>: создание объявлений пространств имен
Элемент <xsl:namespace>: создание объявлений пространств имен В XSLT 2.0 включен еще один новый элемент: <xsl:namespace>, позволяющий добавлять в результирующий документ объявления пространств имен. Однако на текущий момент больше об этом элементе ничего не известно, так что я не
Применение оси namespace
Применение оси namespace Ось namespace содержит узлы пространств имен контекстного узла. Заметьте, что эта ось пуста, если контекстным узлом не является элемент. У элемента присутствует узел пространства имен для:• каждого атрибута элемента, чье имя начинается с «xmlns:»;• каждого
namespace-uri()
namespace-uri() Функция namespace-uri возвращает строку, содержащую URI пространства имен в расширенном имени узла. Как правило, это URI в объявлении пространства имен, установленное при помощи атрибутов xmlns или xmlns:prefix. Функция применяется следующим образом (заметьте, что эту функцию
1.2. Генерация текста
1.2. Генерация текста С необходимостью генерации хотя бы простейших фраз разработчики практических систем столкнулись еще на заре их создания. Даже в столь примитивно организованной (в плане дружественности пользовательского интерфейса) среде, как DOS, при попытке
Генерация контента
Генерация контента Как часто нужно писать статьи, выкладывать новые материалы? В среднем, оптимальный вариант – один раз в сутки. У вас на сайте и во всех ваших соцсетях должно постоянно что-то появляться. Хотя мы пишем значительно больше.Видео удобнее выкладывать на YouTube,
Свойства Namespace и Description
Свойства Namespace и Description При запуске этого проекта вы обнаружите, что теперь автоматически сгенерированная страница тестирования не отображает сообщение с предложением заменить http://tempuri.org. Более того, если вы щелкнете на ссылке Service Description, чтобы просмотреть содержимое
Функции local-name , namespace-uri и name
Функции local-name, namespace-uri и name string local-name(node-set?)string namespace-uri(node-set?)string name(node-set?)Функция local-name возвращает локальную часть имени первого в порядке просмотра документа узла множества, переданного ей в качестве аргумента. Эта функция выполняется следующим образом.? Если аргумент
Элемент xsl:namespace-alias
Элемент xsl:namespace-alias Синтаксическая конструкция этого элемента выглядит следующим образом:<xsl:namespace-alias stylesheet-prefiх="префикс" | "#default" result-prefix="префикс" | "#default"/>Элемент xsl:namespace-alias назначает пространству имен выходящего документа пространство имен, которое будет подменять
Генерация ключа RSA.
Генерация ключа RSA. Для генерации вашей собственной уникальной пары открытый/секретный ключ заданного размера, наберите:pgp -kgPGP покажет вам меню рекомендуемых размеров ключа (простой уровень, коммерческий уровень или военный уровень) и запросит требуемый размер ключа
Генерация пар ключей
Генерация пар ключей При помощи этого сервиса генерируется пара ключей (открытый ключ/секретный ключ), секретный ключ хранится в файле, защищенном паролем или иными средствами (например, на смарт-карте или при помощи другого аппаратного или программного средства,