Создание уникальных идентификаторов при помощи generate-id
Создание уникальных идентификаторов при помощи generate-id
При существенном изменении структуры документов важно рассмотреть еще одну тему: как в результирующих документах создавать идентификаторы элементов для обращения к ним при необходимости. Представьте, например, что вам нужно при помощи таблицы стилей добавить в документ оглавление, записи в котором будут представлять собой гиперссылки, так чтобы пользователь по щелчку на них сразу переходил к нужному разделу. В этом случае потребуется какой-то способ идентификации элементов в результирующем документе, в чем поможет функция generate-id.
В следующем примере я добавляю составленное из гиперссылок оглавление в planets.html. Для создания оглавления я прохожу в цикле по всем планетам при помощи элемента <xsl:for-each>. На каждом шаге цикла я создаю гиперссылку и при помощи шаблона значений атрибута создаю атрибут HREF, который устанавливается в уникальный идентификатор для рассматриваемой планеты. Заметьте, что, несмотря на свое имя, функция generate-id создает только строковый идентификатор элемента, она не создает атрибуты ID:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<xsl:for-each select="PLANET">
<H2><A HREF="#{generate-id()}">
<xsl:value-of select="NAME"/>
</A></H2>
<P/>
</xsl:for-each>
.
.
.
Эта таблица стилей (листинг 6.12) генерирует для каждой планеты идентификатор и создает требуемые гиперссылки. Функция generate-id не только создает для элемента новый идентификатор, но и возвращает его при последующем применении generate-id к этому элементу. В данном случае это удобно, поскольку таким образом я могу создать закладки гиперссылки в HTML-таблице данных планет, установить по очереди атрибут <NAME> закладки в идентификатор для каждого элемента <PLANET> — так, чтобы он стал гиперссылкой-назначением.
Листинг 6.12. Применение функции generate-id
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<xsl:for-each select="PLANET">
<H2><A HREF="#{geherate-id()}" >
<xsl:value-of select="NAME"/>
</A></H2>
<P/>
</xsl:for-each>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<TR>
<TD><A NAME="{generate-id(.)}">
<xsl:value-of select="NAME"/>
</A></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:template match="MASS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="RADIUS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="DAY">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
Вот как это делается: сейчас я создал гиперссылки с атрибутом HREF, значение которого равно идентификатору элемента <PLANET>; при помощи этого же идентификатора я сделал каждый элемент <PLANET> назначением гиперссылки. Когда пользователь щелкает на гиперссылку в оглавлении, браузер прокручивает данные до соответствующей записи планеты в HTML-таблице. (Заметьте, что для того чтобы большинство браузеров осуществляли прокрутку, HTML-таблица должна быть вне пределов экрана.) Каждый процессор XSLT создает свои собственные идентификаторы; ниже приведен результат для процессора Xalan:
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
</HEAD>
<BODY>
<H1>
The Planets Table
</H1>
<H2>
<A href="#N5">Mercury</A>
</H2>
<Р></Р>
<Н2>
<A href="#N20">Venus</A>
</H2>
<P></P>
<H2>
<A href="#N3B">Earth</A>
</H2>
<Р></Р>
<TABLE BORDER="2">
<TR>
<TD>Name</TD>
<TD>Mass</TD>
<TD>Radius</TD>
<TD>Day</TD>
</TR>
<TR>
<TD><A NAME="N5">Mercury</A></TD>
<TD>.0553 (Earth = 1)</TD>
<TD>1516 miles</TD>
<TD>58.65 days</TD>
</TR>
<TR>
<TD><A NAME="N20">Venus</A></TD>
<TD>.815 (Earth = 1)</TD>
<TD>3716 miles</TD>
<TD>116.75 days</TD>
</TR>
<TR>
<TD><A NAME="N3B">Earth</A></TD>
<TD>1 (Earth = 1)</TD>
<TD>2107 miles</TD>
<TD>1 days</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Результат показан на рис. 6.3 (в том числе — оглавление из гиперссылок). Пользователю достаточно щелкнуть на гиперссылке к соответствующей записи в таблице.
Рис. 6.3. Использование сгенерированных идентификаторов в гиперссылках
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
generate-id()
generate-id() Функция generate-id дает указание процессору XSLT присвоить узлу идентификатор (который возвращается как строка). Функция применяется следующим образом:string generate-id(node)Функции следует передать набор узлов, содержащий только узел, которому нужен идентификатор (все узлы
Согласование идентификаторов пользователей на клиентском компьютере и на сервере
Согласование идентификаторов пользователей на клиентском компьютере и на сервере Самым простым решением описанной выше проблемы отображения пользовательских имен является синхронизация UID и GID на клиентской машине и на сервере. Например, если некоторому пользователю
Средства синхронизации идентификаторов пользователей, выполняемые на стороне клиента
Средства синхронизации идентификаторов пользователей, выполняемые на стороне клиента Решить проблему синхронизации пользовательских идентификаторов можно, задавая на стороне сервера опцию map_daemon. Эта опция позволяет использовать на стороне клиента специальный демон,
20.6 Имена идентификаторов объектов
20.6 Имена идентификаторов объектов На рис. 20.5 показаны наиболее важные части дерева SMI, которые применяются для присвоения управляющим переменным имен, называемых идентификаторами объектов (object identifiers). Рис. 20.5. Дерево именования объектов MIBИдентификаторы объектов
Создание библиотеки форм при помощи InfoPath 2007
Создание библиотеки форм при помощи InfoPath 2007 Библиотека SharePoint хранит формы, основанные на одном шаб лоне форм. Шаблон форм InfoPath – это файл, определяющий внешний вид, структуру и поведение формы InfoPath 2007. Шаблоны форм позволяют проектировщикам форм создавать дизайн
Создание страницы веб-части при помощи обозревателя
Создание страницы веб-части при помощи обозревателя Узлы SharePoint могут иметь одну или несколько страниц веб-частей. Пользователи могут создавать дополнительные веб-страницы, которые будут храниться в библиотеках документов.В следующем упражнении вы создадите библиотеку
3.6. Повторное использование идентификаторов
3.6. Повторное использование идентификаторов Структура ipc_perm (раздел 3.3) содержит переменную seq, в которой хранится порядковый номер канала. Эта переменная представляет собой счетчик, заводимый ядром для каждого объекта IPC в системе. При удалении объекта IPC номер канала
Создание документов при помощи шаблонов
Создание документов при помощи шаблонов Еще один способ упрощения процедуры форматирования – применение шаблонов. В отличие от стиля, кроме видов форматирования, шаблон обычно включает в себя определенные участки текста, которые пользователь просто дополняет своими
Породить (Generate)
Породить (Generate) template ‹class ForwardIterator, class Generator›void generate(ForwardIterator first, ForwardIterator last, Generator gen);template ‹class OutputIterator, class Size, class Generator›OutputIterator generate_n(OutputIterator first, Size n, Generator gen);generate вызывает функциональный объект gen и присваивает возвращаемое gen значение через все итераторы в диапазоне
Алгоритм generate()
Алгоритм generate() template class ForwardIterator, class Generator voidgenerate( ForwardIterator first,ForwardIterator last, Generator gen );generate() заполняет диапазон, ограниченный парой итераторов [first,last), путем последовательного вызова gen, который может быть объектом-функцией или указателем на функцию.#include algorithm#include list#include
4. Создание объектной модели и ее связывание с моделью данных при помощи ERwin Translation Wizard
4. Создание объектной модели и ее связывание с моделью данных при помощи ERwin Translation Wizard 4.1. Язык UML Классический структурный подход к созданию ИС предполагает последовательную реализацию этапов анализа, проектирования, создания модулей, объединения модулей в единую
Функция generate-id
Функция generate-id Синтаксическая конструкция этой функции:string generate-id(node-set?)Функция generate-id возвращает уникальный строковый идентификатор первого в порядке просмотра документа узла, передаваемого ей в виде аргумента. Если аргумент опущен, функция возвращает уникальный
1.6. Биты смены идентификаторов (SUID и SGID)
1.6. Биты смены идентификаторов (SUID и SGID) Биты SUID (Set User ID — установить идентификатор пользователя) и SGID (Set Group ID — установить идентификатор группы) были предметом жарких споров на протяжении многих лет. В некоторых системах установка этих битов не допускается либо они
26.1.2. Создание уникальных временных файлов
26.1.2. Создание уникальных временных файлов При рассмотрении специальных переменных уже обсуждалась переменная $$ Она содержит ID или номер процесса, выполняющегося в текущий момент. Эти сведения применяются при создании временных файлов в текущем сценарии, поскольку ID