- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания XSLT - Стивен Холзнер
Шрифт:
Интервал:
Закладка:
String instring;
while((instring = bufferedreader.readLine()) != null) { %>
<%= instring %>
<% }
filereader.close();
%>
Результат можно увидеть на рис. 1.4: там изображен файл planets.html, отправленный в Internet Explorer web-сервером, на котором выполняется JSP. В главе 10 приведена дополнительная информация об использовании сервлетов Java, JSP и ASP для XSLT-преобразований на стороне сервера.
Рис. 1.4. Преобразование XML на web-сервере
Мы рассмотрели, как выполнить XSLT-преобразования при помощи отдельных процессоров XSLT в браузере Internet Explorer и на web-серверах. Однако единственное преобразование, которое мы до сих пор сделали, — это преобразование XML в HTML. Хотя сейчас это наиболее популярное преобразование, преобразования из XML в XML также становятся все более распространенными.
Преобразования из XML в XML
Преобразования XML-XML иногда рассматриваются как SQL для Интернета, поскольку они позволяют оперировать запросами к базе данных в XML-документах. Ниже приведен пример. Используемый нами файл planets.xml содержит достаточно много данных о каждой планете:
<?xml version="1.0"?>
<PLANETS>
<PLANET>
<NAME>Mercury</NAME>
<MASS UNITS="(Earth = 1)">.0553</MASS>
<DAY UNITS="days">58.65</DAY>
<RADIUS UNITS="miles">1516</RADIUS>
<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B перигелии-->
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS UNITS="(Earth = 1)">.815</MASS>
<DAY UNITS="days">116.75</DAY>
<RADIUS UNITS="miles">3716</RADIUS>
<DENSITY UNITS="(Earth = 1)">.943</DENSITY>
<DISTANCE UNITS="million miles">66.8</DISTANCE><!--B перигелии-->
</PLANET>
.
.
.
Что, если нам нужно только подмножество этих данных — например, имя и масса каждой планеты? В терминах баз данных planets.xml представляет собой таблицу, и мы хотим создать новую таблицу, содержащую подмножество данных из первой. В базах данных для этого служит язык SQL, а для документов XML мы можем использовать XSLT.
В листинге 1.6 приведена новая версия файла planets.xsl, осуществляющая требуемое преобразование: выбираются только имя и масса каждой планеты, которые отправляются в выходной документ. В особенности обратите внимание на то, что мы осуществляем преобразование XML-XML, поэтому я использую элемент <xsl:output>, атрибут method которого установлен в «xml» (фактически тип выходных данных обычно и есть XML, но если процессор XSLT видит тег <html>, он обычно по умолчанию генерирует HTML).
Листинг 1.6. Выбор только имени и массы<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANETS">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="PLANET">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="MASS">
<xsl:copy>
<xsl:value-of select="."/>
<xsl:value-of select="@UNITS"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RADIUS"> </xsl:template>
<xsl:template match="DAY"> </xsl:template>
<xsl:template match="DENSITY"> </xsl:template>
<xsl:template match="DISTANCE"> </xsl:template>
</xsl:stylesheet>
Далее я применяю эту новую версию planets.xsl к planets.xml, используя Xalan, чтобы создать новый документ XML, new.xml:
C:planets>java org.apache.xalan.xslt.Process -IN planets.xml -XSL planets.xsl -OUT new.xml
Вот как выглядит результирующий документ XML, new.xml:
<?xml version="1.0" encoding="UTF-8"?>
<PLANET>
<NAME>Mercury</NAME>
<MASS>.0553(Earth = 1)</MASS>
</PLANET>
<PLANET>
<NAME>Venus</NAME>
<MASS>.815(Earth = 1)</MASS>
</PLANET>
<PLANET>
<NAME>Earth</NAME>
<MASS>1(Earth = 1)</MASS>
</PLANET>
Отметьте, что этот файл выглядит во многом похоже на исходный файл planets.xml, за тем исключением, что каждый элемент <PLANET> содержит только элементы <NAME> и <MASS>. Таким образом, мы смогли получить подмножество данных первоначального документа XML.
Конечно, можно проводить любое число такого рода преобразований XML-XML. Можно обрабатывать данные в документе XML для создания совершенно новых XML-документов. Например, можно взять XML-документ с именами студентов и их отметками и создать новый документ, отображающий средние оценки. В XSLT есть много встроенных функций, позволяющих работать с данными подобным образом, — мы познакомимся с ними в главе 8.
В дополнение следует сказать, что многие программы используют XML для обмена данными в Интернете, и, так как обычно они форматируют свои документы XML по-разному, еще одним популярным способом использования преобразований XML-XML в Интернете является преобразование XML из формата, используемого одной программой, в формат другой программы.
Преобразования из XML в XHTML
Хотя во многих книгах рассматриваются исключительно преобразования из XML в HTML, правда состоит в том, что консорциум W3C этому не очень-то рад. Консорциум пытался сместить акцент с HTML (который они первоначально стандартизировали) на свою новую спецификацию, XHTML, представляющую собой совместимую с XML переработку HTML. Документы XHTML являются также хорошо сформированными допустимыми документами XML, поэтому преобразование из XML в XHTML в действительности есть преобразование из XML в специальный вид XML.
Хотя W3C активно продвигает XHTML, этот формат еще не стал широко распространенным. Поэтому в данной книге я в основном рассматриваю HTML; но поскольку W3C утверждает, что следует использовать XHTML, я кратко рассмотрю эту тему здесь и в главе 6. Если вы хотите узнать больше о XHTML, прочитайте рекомендацию W3C XHTML 1.0 по адресу www.w3.org/TR/xhtml1/, а также рекомендацию XHTML 1.1 по адресу www.w3.org/TR/xhtml11/.
Пусть W3C и утверждает, что XML следует преобразовывать в XHTML, а не в HTML, я не видел ни одного работающего примера на их web-узле. Представленные ими примеры на самом деле не генерируют допустимых документов XHTML. Тем не менее, поддержка преобразований XML-XHTML предположительно будет встроена в XSLT 2.0, и желаемое W3C явление, вероятно, нас вскоре ждет.
Более подробно мы рассмотрим этот тип преобразования в главе 6, а здесь я приведу рабочую версию таблицы planets.xsl, которая создает допустимую XHTML-версию planets.html (листинг 1.7). Заметьте, что на этот раз в элементе <xsl:output> нужно использовать атрибут doctype-public, и хотя это корректный код XSLT, не все процессоры XSLT смогут его обработать.
Листинг 1.7. Преобразование XML-XHTML<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>
<xsl:template match="/PLANETS">
<html>
<head>
<title>
The Planets Table
</title>
</head>
<body>
<h1>
The Planets Table
</h1>
<table>
<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><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: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>