- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Технология XSLT - Алексей Валиков
Шрифт:
Интервал:
Закладка:
Если в преобразовании не определен элемент xsl:output или в нем не указан атрибут method, метод преобразования выбирается по умолчанию исходя из следующих условий.
□ Если корень выходящего документа имеет дочерний элемент с локальным именем "html" (в любом регистре символов), которому предшествуют только пробельные символы, методом вывода по умолчанию становится "html".
□ Во всех остальных случаях методом вывода по умолчанию является "xml".
ПримерДля документа
<HTML>
<HEAD>
<TITLE>XSL Transformations (XSLT)</TITLE>
</HEAD>
<BODY>
<H1>XSL Transformations (XSLT)<BR/>Version 1.0</H1>
</BODY>
</HTML>
Методом вывода по умолчанию будет "html", а для документа
<BODY>
<H1>XSL Transformations (XSLT)<BR/>Version 1.0</H1>
</BODY>
будет выбран метод вывода "xml".
Помимо главного атрибута method, элемент xsl:output имеет следующие атрибуты:
□ version (версия) — определяет версию языка выходящего документа;
□ indent (индентация) — определяет, должен ли процессор добавлять пробельные символы для более наглядного форматирования документа;
□ encoding (кодировка) — определяет, в какой кодировке должен быть выведен документ. Значение этого атрибута не зависит от регистра символов, то есть значения encoding="utf-8" и encoding="UtF-8" будут эквивалентны. В атрибуте encoding можно использовать только печатаемые символы ASCII, то есть символы интервала от #x21 до #x7e. Значением encoding должно быть название набора символов, определенное в стандартах IANA (Internet Assigned Numbers Authority) или RFC2278. В противном случае, атрибут должен начинаться символами "x-";
□ media-type — определяет тип содержимого MIME выходящего документа;
□ doctype-system — определяет системный идентификатор, который должен быть использован в декларации типа документа (DTD);
□ doctype-public — определяет публичный идентификатор, который должен быть использован в декларации типа документа (DTD);
□ omit-xml-declaration (пропустить декларацию XML) — определяет, нужно ли включать декларацию XML в выходящий документ или нет. Значением этого атрибута должно быть либо "yes" (пропустить декларацию), либо "no" (включить декларацию в выходящий документ);
□ standalone (самостоятельный документ) — определяет, должен ли процессор выводить указание на самостоятельность документа (standalone declaration). Значением этого атрибута может быть либо "yes" (выводить указание), либо "no" (не выводить указание на самостоятельность);
□ cdata-section-elements — определяет список элементов, текстовое содержимое которых должно быть выведено с использованием секций CDATA.
Использование этих атрибутов зависит от того, какой из методов выбран для вывода преобразованного документа.
Метод вывода "xml"
Для того чтобы вывести результирующее дерево в виде XML-документа, следует использовать в элементе xsl:output метод "xml". Ниже мы подробно опишем, каким образом на выход должны влиять другие атрибуты этого элемента.
Атрибут versionЭтот атрибут определяет версию языка XML, которая должна использоваться для вывода результирующего документа. В случае если процессор не поддерживает указанную версию, он может либо выдать ошибку, либо использовать одну из поддерживаемых версий. На данный момент единственной действующей версией языка является версия 1.0 и потому, если в атрибуте в version будет указано другое значение, единственным эффектом от этого будет измененный параметр version в декларации XML.
ПримерПредположим, что в преобразовании версия выходящего документа задана как 1.2:
<xsl:output method="xml" version="1.2"/>
Тогда процессор может вывести декларацию XML в следующем виде:
<?xml version="1.2" encoding="utf-8"?>
Значением атрибута version по умолчанию является "1.0", то есть, для того, чтобы получить декларацию XML вида
<?xml version="1.0" и т. д. ?>
достаточно опустить определение атрибута version:
<xsl:output method="xml"/>
Атрибут encodingАтрибут encoding указывает на то, какая кодировка предпочтительна для выходящего документа. Множество кодировок зависит от используемого процессора, но при этом в соответствии с технической рекомендацией все они обязаны поддерживать Unicode-формы кодировок UTF-8 и UTF-16.
В случае если процессор не поддерживает кодировку, указанную в атрибуте encoding, процессор может либо выдать ошибку, либо использовать UTF-8 или UTF-16.
Если атрибут encoding опущен, процессор должен по умолчанию использовать UTF-8 или UTF-16. На практике абсолютное большинство процессоров используют по умолчанию кодировку UTF-8.
При выводе содержимого выходящего документа может возникнуть ситуация, когда в выходящем потоке будут находиться символы, которые невозможно будет отобразить при используемой кодировке. В этом случае непечатаемые символы должны быть заменены символьными сущностями.
ПримерПредставим себе входящий документ в кодировке UTF-8, содержащий символ кириллицы "Э" с Unicode-кодом #x42d (или #1069 в десятичной системе счисления):
<?xml version="1.0" encoding="utf-8"?>
<page>Э</page>
Если преобразование будет использовать для вывода кодировку, которая не может отображать символы кириллического алфавита, например ISO-8859-1, то символ "Э" в выходящем документе должен быть заменен символьной сущностью.
Листинг 8.36. Преобразование<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
method="xml"
encoding="ISO-8859-1"
indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="/page"/>
</xsl:template>
</xsl:stylesheet>
Листинг 8.37. Выходящий документ<?xml version="1.0" encoding="ISO-8859-1"?>
<page>Э</page>
Вместе с тем синтаксис XML не разрешает использовать символьные сущности в именах элементов и атрибутов, и наличие в них символов, не отображаемых кодировкой вывода, будет являться ошибкой. Если в предыдущем примере документ будет иметь вид
<?xml version="1.0" encoding="utf-8"?>
<страница>Э</страница>
то вывести результирующее дерево в кодировке ISO-8859-1 будет невозможно.
Атрибут indentИндентацией называют форматирование исходного текста, не влияющее на семантику, но облегчающее читаемость. К примеру, один и тот же XML-документ можно написать как
<A><В><С/></В><С><В></В></С></А>
или
<A>
<B>
<C/>
</B>
<C>
<B>
</B>
</C>
</A>
Очевидно, что второй случай гораздо легче для понимания, поскольку в нем легко можно видеть принадлежность элементов одного другому. Подобное форматирование можно использовать и при выводе преобразованного документа при помощи атрибута indent элемента xsl:output. Если этот атрибут имеет значение "yes", процессор может добавить один или несколько пробельных символов или символов перевода строки — в зависимости от реализации. Как правило, каждый дочерний элемент помещают на новой строке, добавляя впереди два пробела на каждый уровень вложенности.
Пример Листинг 8.38. Входящий документ<?xml version="1.0" encoding="utf-8"?>
<A><B><C/></B><C><B></В></C></A>
Листинг 8.39. Преобразование<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="/"/>
</xsl:template>
</xsl:stylesheet>
Листинг 8.40. Выходящий документ<?xml version="1.0" encoding="utf-8"?>
<A>
<B>
<C/>
</B>
<C>
<B/>
</C>
</A>
Следует быть осторожными при использовании indent="yes" там, где в содержимом документа могут встречаться значащие пробелы. Индентация позволяет процессору при выводе документа добавлять пробельные символы по собственному усмотрению. В случаях, когда при последующей обработке преобразованного документа пробельные символы могут быть восприняты неадекватно, лучше индентацию не использовать.