- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Технология XSLT - Алексей Валиков
Шрифт:
Интервал:
Закладка:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>I'm just a simple page...</title>
</head>
<body>
Welcome!<br>
Be our guest! <HR>
I've got a simple content
</body>
</html>
Как можно заметить, метод вывода "html" распознает элементы HTML вне зависимости от регистра символов — в нашем примере пустой элемент <HR/> был выведен как <HR>, что соответствует синтаксису HTML.
Документы, которые преобразуются в HTML, могут также иметь программы, определенные внутри элемента script или стили, заданные внутри элемента style. В случае если внутри этих элементов оказываются символы, считающиеся в XML специальными — такие как "<", "&" и так далее, процессор не должен заменять их символьными или встроенными сущностями.
ПримерПредположим, что в преобразуемом документе элемент script определен с использованием специальных символов, которые заменены сущностями:
<script> if (a > b) swap(a, b) </script>
или с использованием секций символьных данных:
<script><![CDATA[ if (a>b) swap(a, b) ]]></script>
При использовании метода вывода "html" оба варианта будут выведены, как
<script> if (a>b) swap(a, b) </script>
Пожалуй, стоит еще раз повторить, что это относится только к элементам style и script. Специальные символы, использованные в других элементах, будут заменены символьными или встроенными сущностями.
Пример<P>This >o< is a black hole of this page!</P>
будет выведено как
<P>This >o< is a black hole of this page!</P>
В соответствии со спецификацией, некоторые атрибуты в HTML могут и не иметь значений — как правило, это атрибуты с булевыми значениями, такие, к примеру, как атрибут selected элемента option, присутствие которого в элементе означает то, что опция выбрана, отсутствие — то, что она не выбрана. Для того чтобы получить в выходящем документе
<option selected>
следует в преобразовании указывать
<option selected="selected">
то есть присваивать булевому атрибуту значение, равное собственному имени. Такие значения будут выведены в минимизированной форме, как это и требовалось.
HTML и XML также имеют небольшие различия в формате вывода инструкций по обработке. В то время как в XML эти инструкции имеют вид
<?приложение содержимое?>
в HTML инструкции по обработке заканчиваются не "?>", а просто правой угловой скобкой (">"):
<?приложение содержимое>
Таким образом, результатом выполнения кода
<xsl:processing-instruction name="app">content</xsl:processing-instruction>
при использовании метода XML будет
<?app content?>
а при использовании метода HTML
<?app content>
Атрибут versionАтрибут version элемента xsl:output в методе "html" обозначает версию языка HTML, которая должна использоваться в выходящем документе. По умолчанию значением этого атрибута является "4.0", что означает соответствие выходящего документа спецификации языка HTML версии 4.0. Отметим, что последней версией языка HTML на момент написания этой книги является версия 4.02, однако отличия между этими версиями незначительны.
Атрибут encodingКодировка выходящего документа определяется в HTML несколько иначе, чем в XML. Если в XML мы использовали определение encoding в декларации XML, то в HTML кодировка описывается в элементе meta следующим образом:
<html> <head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
...
Поэтому, если в выходящем документе внутри корневого элемента html присутствует элемент head, процессор должен добавить в него элемент meta с соответствующим определением кодировки.
ПримерЭлемент
<xsl:output encoding="ISO-8859-1"/>
добавит в элемент head выходящего HTML-документа элемент meta в следующем виде:
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
Таким образом, для определения кодировки выходящего HTML-документа не следует вручную создавать соответствующий элемент meta — нужно просто указать требуемую кодировку в атрибуте encoding элемента xsl:output.
Атрибут indentXSLT позволяет использовать в HTML документах индентацию точно так же, как мы бы использовали ее в методе "xml".
Атрибуты doctype-system и doctype-publicДекларация типа документа с внешними системными или публичными идентификаторами может быть использована в HTML точно так же, как в XML. Поскольку в объявлении типа документа после <!DOCTYPE должно стоять имя корневого элемента, при методе вывода "html" этим именем будет "HTML" или "html" в зависимости от регистра символов имени корневого элемента документа.
Атрибут media-typeАтрибут media-type определяет медиа-тип содержимого выходящего документа. Для HTML-документов значением media-type по умолчанию будет "text/html".
Метод вывода "text"
XSLT позволяет выводить результат преобразования как простой текст. При использовании method="text" результирующее дерево приводится к строке, то есть в этом случае результатом преобразования будет строковое сложение всех текстовых узлов дерева.
ПримерВходящий документ
<?xml version="1.0" encoding="utf-8"?>
<page>
<title>My heart's in the Highlands</title>
<content>My heart is not here</content>
</page>
одним и тем же шаблоном:
<xsl:template match="/page">
<poem title="{title}">
<xsl:value-of select="title"/>
<xsl:text>
</xsl:text>
<xsl:value-of select="content"/>
</poem>
</xsl:template>
при использовании метода вывода "xml" будет преобразован к виду
<?xml version="1.0" encoding="utf-8"?>
<poem title="My heart's in the Highlands">
My heart's in the Highlands
My heart is not here
</poem>
а при использовании метода "text" к виду
My heart's in the Highlands
My heart is not here
Атрибут encodingАтрибут encoding указывает на предпочтительную кодировку вывода текста документа. Значение атрибута encoding по умолчанию зависит от программной платформы, на которой производится преобразование. В большинстве процессоров по умолчанию используются кодировки UTF-8, ASCII и ISO-8859-1.
В случае если кодировка, используемая для вывода текста, не отображает некоторые символы документа, процессор может выдать ошибку.
Атрибут media-typeПо умолчанию в качестве значения атрибута media-type, используемого для простого текста, указывается "text/plain". Значение атрибута media-type может быть использовано сервером, преобразующим документ в качестве MIME-типа.
Другие методы вывода
Как уже было сказано раньше, спецификация XSLT позволяет помимо основных методов "xml", "html" и "text" использовать также и другие методы, реализация которых будет зависеть от производителя того или иного процессора. Кажется вполне логичной и закономерной возможность использования, к примеру, такого метода, как "pdf" для создания документов в Adobe Portable Document Format (переносимом формате документов) или метода "bin" для создания двоичного потока данных. Однако, на данном этапе, процесс сериализации (создания физической сущности из логической модели) пока еще не определен в общем виде для произвольного метода. Возможно, в будущем, по аналогии с объектной моделью документа (DOM) будут созданы схожие интерфейсы для более легкого определения методов сериализации и интеграции преобразований в другие программы, но в настоящее время следует ограничиваться тремя основными методами.
Отметим также, что спецификация языка XSLT определяет функциональность элемента xsl:output как возможную, но не обязательную. Процессоры обязаны манипулировать логическими моделями XML-документов, но при этом они не обязаны поддерживать сериализацию и уметь выводить преобразованный XML-документ как последовательность байт. Конечно же, абсолютное большинство процессоров поддерживает такую возможность, но при всем том она остается не более чем возможностью.
Поэтому из соображений переносимости можно лишь только надеяться, что документ будет выведен так, как было задумано. Не следует исключать возможности, что в определённых условиях процессор не сможет контролировать процесс вывода документа.