- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания XSLT - Стивен Холзнер
Шрифт:
Интервал:
Закладка:
В таблицах стилей для элементов XSLT обычно используется префикс пространства имен xsl. Формально можно использовать для элементов XSLT любой префикс пространства имен (или даже вообще никакого), но практически повсюду применяется xsl, поскольку это пространство имен фигурирует в рекомендации XSLT.
На практике это означает, что все элементы XSLT, с которыми мы станем работать, будут начинаться с префикса пространства имен xsl, как в <xsl:stylesheet>. Следовательно, надо начинать таблицу стилей XSLT с элемента <xsl:stylesheet>. (Есть одно исключение: в «упрощенных» таблицах стилей этот элемент опускается, как мы увидим позже в этой главе.)
Как и любое другое приложение XML, XSLT имеет хорошо разработанный набор правил допустимости таблицы стилей XSLT. W3C даже определил для XSLT псевдо-DTD, где перечислены все правила синтаксиса, — эти объявления DTD приведены в приложении А, которое послужит вам хорошим справочником в случае затруднений с синтаксисом XSLT. Как показано в приложении А, элемент <xsl:stylesheet> может содержать несколько других элементов XSLT, называемых элементами верхнего уровня.
ОБРАБОТКА ПРОСТРАНСТВ ИМЕН ПО УМОЛЧАНИЮ
Работа с пространствами имен может оказаться не слишком простой. Например, иногда присваивают пространство имен по умолчанию всему элементу <xsl:stylesheet>, как в <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="mydefault">, ожидая, что <xsl:template match="mysymbol"> выберет mysymbol в пространстве имен "mydefault" исходного документа. Однако это не будет работать. Обработка пространств имен по умолчанию, как в таком случае, — одна из проблем, которую призван решить XSLT 2.0.
Элементы таблиц стилей высокого уровня
В XSL определен ряд элементов высокого уровня, которые могут быть прямыми дочерними элементами <xsl:stylesheet>:
• <xsl:attribute-set>;
• <xst:decimal-format>;
• <xsl:import>;
• <xsl:include>;
• <xsl:key>;
• <xsl:namespace-alias>;
• <xsl:output>;
• <xsl:param>;
• <xsl:preserve-space>;
• <xsl:strip-space>;
• <xsl:template>;
• <xsl:variable>.
Рабочий проект XSLT 1.1 добавляет еще один элемент высокого уровня:
• <xsl:script>
В книге мы поработаем со всеми этими официальными элементами XSLT высокого уровня.
Заметьте, что, в дополнение ко всем элементам высокого уровня, вы можете также повсюду использовать обычные комментарии XML, поскольку таблицы стилей XSLT являются также документами XML:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Этот шаблон содержит все элементы PLANETS -->
<xsl:template match="/PLANETS">
<HTML>
<HEAD>
.
.
.
В дополнение к официальным элементам высокого уровня, некоторые процессоры XSLT определяют свои собственные элементы высокого уровня, использующие пространства имен, отличающиеся от пространства имен XSL. Функциональность таких элементов полностью определяется разработчиком процессора XSLT.
Вы также можете определять собственные элементы высокого уровня, называемые «элементами высокого уровня, определенными пользователем». Эти элементы должны иметь пространство имен, отличное от XSL и элементов, определенных разработчиком процессора. Процессор XSLT игнорирует определенные пользователем элементы высокого уровня; но, поскольку вы способны сами получить доступ ко всему документу при помощи функции документа (как мы увидим в главе 8), вы можете самостоятельно работать с этими элементами.
Из всех элементов высокого уровня самым популярным является элемент <xsl:template>:
<?xml version="1.0">
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template>
.
.
.
</xsl:template>
.
.
.
Создание шаблонов и работа с ними — суть XSLT, и сейчас мы рассмотрим этот элемент, продолжая создавать таблицу planets.xsl.
Элемент <xsl:template>
Шаблоны XSL позволяют задать способ выполнения вашего преобразования. Каждый элемент <xsl:template> устанавливается для выбора одного узла (который может содержать другие узлы) или ряда узлов в исходном документе, а также точного указания способа преобразования этого узла. В следующем списке перечислены атрибуты <xsl:template>:
• match (необязательный). Задает шаблон, выбирающий обрабатываемые узлы. Устанавливается в допустимый шаблон;
• name (необязательный). Содержит имя шаблона, что разрешает его вызов. Если вы не используете этот атрибут, вы должны использовать атрибут match. Принимает значение типа QName;
• priority (необязательный). Положительное или отрицательное целое или действительное число, задающее приоритет шаблона. Используется, когда один и тот же узел удовлетворяет нескольким шаблонам. Устанавливается в число;
• mode (необязательный). Если вы применяете <xsl:apply-templates> к множеству узлов, будут использоваться только шаблоны с совпадающим режимом (mode). Принимает значение типа QName.
Каждый такой элемент <xsl:template> называется правилом (rule). В общем случае элемент <xsl:template> может содержать ноль или более элементов <xsl:param> (как мы увидим в главе 9), за которыми следует тело шаблона, задающего способ осуществления преобразования.
Тела шаблонов
Шаблоны формируются по жестко заданным правилам. Они способны содержать элементы <xsl:param>, за которыми следует тело шаблона; в последнем могут содержаться данные PCDATA, инструкции XSLT, элементы расширения и элементы буквального результата.
Инструкции XSLT
В теле шаблона может присутствовать ряд элементов XSLT, называемых инструкциями:
• <xsl:apply-imports>;
• <xsl:apply-templates>;
• <xsl:attribute>;
• <xsl:call-template>;
• <xsl:choose>;
• <xsl:comment>;
• <xsl:copy>;
• <xsl:copy-of>;
• <xsl:element>;
• <xsl:fallback>;
• <xsl:for-each>;
• <xsl:if>;
• <xsl:message>;
• <xsl:number>;
• <xsl:processing-instruction>;
• <xsl:text>;
• <xsl:value-of>;
• <xsl:variable>.
В теле шаблона больше никакие элементы XSLT непосредственно появиться не могут. Как вы увидите в главе 9, элемент <xsl:param> может появиться в шаблоне перед телом, но он не называется инструкцией XSLT. В шаблонах могут также появляться и другие элементы XSLT, такие как <xsl:sort>, <xsl:otherwise> и <xsl:with-param>, но только в определенных местах, поэтому W3C не называет их инструкциями. Далее в книге мы рассмотрим, как использовать каждую из этих инструкций.
Элементы расширения
Элементы расширения рассматриваются в главе 5; эти элементы, расширяющие XSLT, определяются пользователем или процессором XSLT. Во многих процессорах XSLT были определены собственные расширения — и это стало одной из причин, по которым W3C представил рабочий проект XSLT 1.1, где механизм расширений был более регламентирован. Вероятно, эта функциональность будет включена в XSLT 2.0.
Элементы буквального результата
Если элемент в теле шаблона не является инструкцией XSL или элементом расширения, процессор XSLT должен рассматривать его в качестве элемента буквального результата. Это означает, что элемент должен трактоваться буквально и копироваться в результирующее дерево (то есть копироваться в выходное дерево, созданное процессором XSLT).
Например, в следующем теле шаблона элемент <TD> является элементом буквального результата, который будет скопирован в выходной документ:
<xsl:template match="RADIUS">
<TD>RADIUS</TD>
</xsl:template>
Элементы буквального результата могут сами по себе иметь содержимое, которое затем трактуется как еще одно тело шаблона и разбирается процессором XSLT. Позже в настоящей главе мы посмотрим, как работает этот механизм.
Элементы буквального результата могут также обладать атрибутами, которые интерпретируются процессором XSLT. Например, при помощи атрибута version можно указать, что все элементы XSLT внутри элемента буквального результата должны быть элементами XSLT версии 1.0:
<xsl:template match="RADIUS">
<TD xsl:version="1.0">RADIUS</TD>
</xsl:template>
В следующем списке перечислены все возможные атрибуты элемента буквального результата: