На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » Сайтостроительство » Web-программирование

Bведение в XSLT. Преобразование в XML, HTML, XHTML, RTF

Inside XSLT, S. Holsner

Предположим, web-узел вашей компании использует основанное на XML программное обеспечение фирмы Commerce One, в котором для безопасной коммуникации через Интернет применяется Java Message Service (JMS). Ваша деятельность была настолько успешной, что вы только что поглотили своего конкурента. К сожалению, для своего узла в Интернете ваш бывший конкурент использует другой основанный на XML продукт, RosettaNet. Как вам теперь преобразовать заказ на покупку xCBL Commerce One, написанный на XML, в заказ на покупку RosettaNet, также написанный на XML, но совершенно на другом диалекте?

Разумеется, применить XSLT. Такого рода XML-XML преобразования становятся все более и более распространенными. Все больше компаний применяют JMS для безопасных коммуникаций через Интернет, и поскольку JMS выполняется в Java, будет разумным связать JMS с основанными на Java процессорами XSLT, такими, как Xalan или Saxon.

Основная задача XSLT состоит не просто в замене одного элемента на другой, но в полной реорганизации содержимого XML-документа. Например, вам может потребоваться реорганизовать planets.xml в терминах плотности планет при помощи XSLT для создания нового XML-документа:

<?xml version="1.0" encoding="UTF-8"?>

<DATA>
<DENSITY>
<VALUE>.983</VALUE>
<NAME>Mercury</NAME>
<MASS>.0553</MASS>
<DAY>58.65</DAY>
<RADIUS>1516</RADIUS>
</DENSITY>

<DENSITY>
<VALUE>.943</VALUE>
<NAME>Venus</NAME>
<MASS>.815</MASS>
<DAY>116.75</DAY>
<RADIUS>3716</RADIUS>
</DENSITY>

<DENSITY>
<VALUE>1</VALUE>
<NAME>Earth</NAME>
<MASS>1</MASS>
<DAY>1</DAY>
<RADIUS>2107</RADIUS>
</DENSITY>

</DATA>

Мы рассмотрим преобразование, которое полностью меняет содержимое planets. xml, оставляя только небольшой код HTML и код JavaScript для отображения нескольких кнопок в браузере.

До сих пор мы создавали новые элементы только при помощи элементов буквального результата, то есть рассматривая новые элементы как текст и встраивая их в таблицу стилей. Но, как мы увидим в этой главе, не всегда возможно знать имена создаваемых новых элементов. Можно состыковать вместе создаваемые элементы по ходу дела, рассматривая их как сырой текст, но это явная недоработка, поскольку разметка трактуется как текст. В этой главе мы начнем применять элементы XSLT <xsl:element>, <xsl:attribute>, <xsl:processing-instruction> и <xsl:comment> для создания новых элементов, атрибутов, инструкций обработки и комментариев на этапе выполнения. Хорошее знание этих элементов необходимо при реорганизации содержимого XML.

Мы также рассмотрим использование режимов XSLT для осуществления нескольких преобразований с документом и сориентируемся, как применять только один из нескольких подходящих шаблонов.

В большей части этой главы исследуются возможности элемента <xsl:output>, с краткого обзора которого я и начну.

Элемент <xsl:output>

С элементом <xsl:output>, элемент мы впервые познакомились в главе 2 и использовали его, главным образом, для задания типа результирующего документа. Этот тип может задать, например, будет ли процессор XSLT записывать инструкцию обработки XML, <?xml version="1.0"?>, в начале документа, а также задать тип MIME (такой, как "text/xml" или "text/html") документов, отправляемых процессором XSLT из web-сервера браузеру. Кроме того, если вы установите выходной тип в HTML, большинство процессоров XSLT смогут распознать, что не всем элементам HTML необходимы закрывающие или открывающие теги и т. п.

В следующем списке перечислены атрибуты <xsl:output>:

  • cdata-section-elements (необязательный). Задает имена тех элементов, чье содержимое должно выводиться как разделы CDATA. Принимает значения списка QName, разделенного символами-разделителями;

  • doctype-public (необязательный). Задает открытый идентификатор, который будет использован в объявлении <!DOCTYPE> в выходных данных. Устанавливается в строковое значение;

  • doctype-system (необязательный). Задает системный идентификатор, который будет использован в объявлении <!DOCTYPE> в выходных данных. Устанавливается в строковое значение;

  • encoding (необязательный). Задает кодировку символов. Устанавливается в строковое значение;

  • indent (необязательный). Определяет, будет ли выходной документ выровнен с отражением структуры вложенности. Устанавливается в yes или no;

  • media-type (необязательный). Задает тип MIME вывода. Устанавливается в строковое значение;

  • method (необязательный). Задает формат вывода. Принимает значения "xml", "html", "text" или допустимое имя QName;

  • omit-xml-declaration (необязательный) Определяет, будет ли включено в вывод объявление XML. Устанавливается в "yes" или "no";

  • standalone (необязательный). Определяет, будет ли включено в вывод отдельное объявление XML, и если да - устанавливает его значение. Устанавливается в yes или no;

  • version (необязательный). Задает версию вывода. Принимает значение допустимого NMToken.

Чаще всего используется атрибут method, поскольку именно он определяет требуемый тип выходного дерева. Официально методом выводаметод вывода по умолчанию является HTML, при условии, что выполняются все три следующих условия:

  • корневой узел результирующего дерева имеет дочерний элемент;

  • в названии элемента документа результирующего дерева присутствует часть "html" (в любой комбинации верхнего и нижнего регистров) и пустой URI пространства имен;

  • все текстовые узлы перед первым дочерним элементом корневого узла содержат только символы-разделители.

Если выполняются все три этих условия, то по умолчанию метод вывода устанавливается в HTML. В ином случае методом вывода по умолчанию является XML.

Тем не менее, не стоит полагаться на установки метода вывода по умолчанию, лучше явно присвоить этому атрибуту значение. Три распространенных значения атрибута method - "html", "xml" и "text", и мы познакомимся с ними в следующих разделах.

Метод вывода: HTML

Для метода вывода HTMLметод вывода;HTML процессор XSLT должен предпринять определенные действия. Например, для этого метода атрибут version определяет версию HTML. Значение по умолчанию - 4.0.

Этот метод не должен добавлять завершающий тег для пустых элементов. (Для HTML 4.0 пустыми элементами являются <AREA>, <BASE>, <BASEFONT>,<BR>, <COL>, <FRAME>, <HR>, <IMG>, <INPUT>, <ISINDEX>, <LINK>, <META> и <PARAM>.) Метод вывода HTML должен распознавать названия элементов HTML независимо от регистра.

В соответствии с W3C, метод вывода HTML не должен скрывать содержимое элементов <SCRIPT> или <STYLE>. Например, следующий элемент буквального результата:

<SCRIPT>
if (x < y)
</SCRIPT>
или следующий, использующий раздел CDATA:
<SCRIPT>
<![CDATA[if (x < y) ]]>
</SCRIPT>
должен быть преобразован в:
<SCRIPT>
if (x < y)
</SCRIPT>

Метод вывода HTML не должен также подавлять символы <, встречающиеся в значениях атрибутов.

При установке метода вывода в HTML процессор может учесть атрибут выравнивания. Если этот атрибут установлен в yes, процессор XSLT может добавить (или удалить) символы-разделители для выравнивания результирующего документа, поскольку это не влияет на отображение документа в браузере. Для метода вывода HTML значением по умолчанию является "yes".

Как вы могли предположить, метод вывода HTML завершает инструкции обработки при помощи >, а не ?>, а также поддерживает отдельные атрибуты, как и HTML. Например, тег

<TD NOWRAP="NOWRAP"> будет преобразован в: <TD NOWRAP>

Для этого метода можно установить атрибут media-type, значением по умолчанию для которого является "text/html". Метод HTML не должен убирать символ &, который появляется в значении атрибута, если сразу за ним следует фигурная скобка. Атрибут encoding задает используемую кодировку. Если присутствует элемент <HEAD>, этот метод вывода должен добавить элемент <META> сразу же после тега <HEAD>, определяя кодировку символов:

<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
.
.
.

При помощи атрибутов doctype-public или doctype-system можно вывести объявление типа документа непосредственно перед первым элементом, как мы увидим при преобразовании XML в XHTML.

Таковы правила вывода HTML. Ниже приведен пример преобразования из XML в HTML с небольшими отклонениями. В этом случае таблица стилей будет фактически генерировать код JavaScriptJavaScript;генерация из XML, демонстрируя создания JavaScript при помощи XSLT. В частности, мы прочитаем planets.xml и создадим новый документ HTML, отображающий три кнопки - по одной для каждой из трех планет в planets.xml. При щелчке на кнопке на странице будет выведена масса соответствующей планеты.

Все, что нам понадобится (листинг 6.1), - это два элемента <xsl:for-each>: один для прохода в цикле по трем планетам и создания для каждой кнопки HTML; и один для прохода по планетам и создания для каждой функции JavaScript. В качестве имен функций JavaScript я воспользуюсь названием планет; при вызове функция выведет массу соответствующей планеты. Заметьте, что для создания нужного кода JavaScript нужно всего лишь применить элемент <xsl:value-of> для получения названий и масс планет. Я также применю два новых элемента XSLT, <xsl:element> и <xsl:attribute-set>, которые мы рассмотрим позже в этой главе, для создания нового элемента и задания для него набора атрибутов.

Листинг 1. Преобразование в JavaScript

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

<xsl:template match="/PLANETS">
<HTML>

<HEAD>
<TITLE>
The Mass Page
</TITLE>

<SCRIPT LANGUAGE='javascript'>

<xsl:for-each select="PLANET">
<xsl:text>
function </xsl:text><xsl:value-of select="NAME"/><xsl:text>()
{
display.innerHTML = 'The mass of </xsl:text>
<xsl:value-of select="NAME"/>
<xsl:text> equals </xsl:text>
<xsl:value-of select="MASS"/>
<xsl:text> Earth masses.'</xsl:text>
}
</xsl:for-each>
</SCRIPT>
</HEAD>

<BODY>
<CENTER>
<H1>The Mass Page</H1>
</CENTER>
<xsl:for-each select="PLANET">
<P/>
<xsl:element name="input" use-attribute-sets="attribs"/>
</xsl:for-each>
<P/>
<P/>
<DIV ID='display'></DIV>
</BODY>

</HTML>
</xsl:template>

<xsl:attribute-set name="attribs">
<xsl:attribute name="type">BUTTON</xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="NAME"/></xsl:attribute>
<xsl:attribute name="onclick"><xsl:value-of select="NAME"/>()</xsl:attribute>
</xsl:attribute-set> </xsl:stylesheet>

Результат, включая элемент <SCRIPT> для нового кода JavaScript (листинг 2).

Листинг 2. Результирующий документ с JavaScript

<HTML>
<HEAD>
<TITLE>
The Mass Page
</TITLE>

<SCRIPT LANGUAGE="javascript">
function Mercury()
{
display.innerHTML =
'The mass of Mercury equals .0553 Earth masses.'
}

function Venus()
{
display.innerHTML = 'The mass of Venus equals .815 Earth masses.
' }
function Earth()
{
display.innerHTML = 'The mass of Earth equals 1 Earth masses.'
}
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<H1>The Mass Page</H1>
</CENTER>

<P></P>
<input type="BUTTON" value="Mercury" onclick="Mercury()">
<P></P>
<input type="BUTTON" value="Venus" onclick="Venus()">
<P></P>
<input type="BUTTON" value="Earth" onclick="Earth()">
<P></P>
<P></P>
<DIV ID="display"></DIV>
</BODY>
</HTML>

Как видите, при помощи XSLT я написал код JavaScript для прохода в цикле по планетам. Этот документ HTML показан на рис. 1. При щелчке на кнопку выводится масса соотвествующей планеты.

Преобразование XML в HTML при помощи JavaScript

Рис. 1. Преобразование XML в HTML при помощи JavaScript

Inside XSLT

Автор: Холзнер С.

Эта книга призвана дать вам столько посвященного XSLT материала, сколько может содержать одна книга. В ней не только рассматривается весь синтаксис XSLT, от основ до всех специальных аспектов, но и подробно излагаются современные способы использования XSLT. Вы найдете сотни практических примеров, таких как осуществление преобразований XSLT на Web-серверах, подключение к базам данных и использование браузеров для осуществления преобразований на лету. Книга рассчитана практически на всех, кто хочет изучать XSLT и использовать его на практике.

Заказать книгу вы сможете в http://shop.piter.com/to_order.phtml?postid=978594723271&refer=10000Издательском Доме "Питер" - http://shop.piter.com/to_order.phtml?postid=978594723271&refer=10000

Содержание

Об авторе

О технических редакторах

Благодарности

Введение
Материал книги
Для кого предназначена эта книга
На каком уровне написана книга
Используемые соглашения
От издательства
Глава 1. Основы XSLT
XSL = XSLT + XSL-FO
Краткая историческая справка
Преобразования XSLT-XSL
XSL-FO: форматирующие объекты XSL
Спецификации W3C
Версии XSLT
Документы XML
Хорошо сформированные документы XML
Допустимые документы XML
Как XML выглядит в браузере?
XSLT-преобразования
Что нужно для XSLT-преобразования
Использование отдельных процессоров XSLT
Использование процессора XSLT на Java
XT Джеймса Кларка
Saxon
Oracle XSLT
Xalan
Преобразование документов XML при помощи браузеров
Работа с XSLT и JavaScript в Internet Explorer
XSLT-преобразования на web-серверах
Преобразования из XML в XML
Преобразования из XML в XHTML
Ресурсы XSLT
Спецификации, руководства и примеры XSLT
Редакторы XSLT
Утилиты XSLT
Форматирующие объекты XSL: XSL-FO
Ресурсы XSL-FO
Форматирование документа XML
Таблица стилей XSLT
Преобразование документа в представление с форматирующими объектами
Создание форматированного документа
Глава 2. Создание и применение таблиц стилей
Деревья и узлы
Символ-разделитель
Модель информационного множества против модели дерева XSLT
Работа с элементами XSLT
Инструкция обработки <?xsl:stylesheet?>
Элемент <xsl:stylesheet>
Пространство имен XSL
Элементы таблиц стилей высокого уровня
Элемент <xsl:template>
Тела шаблонов
Инструкции XSLT
Элементы расширения
Элементы буквального результата
Совпадающие элементы в шаблонах
Элемент <xsl:apply-templates>
Доступ к значениям узлов
Поддержка XML Base
Выбор методов вывода
Метод вывода: HTML
Метод вывода: XML
Метод вывода: текст
Упрощенные таблицы стилей
Встроенные таблицы стилей
Элемент <xsl:include>
Элемент <xsl:import>
Элемент <xsl:apply-imports>
Преобразование документов XML при помощи Internet Explorer

Глава 3. Создание и применение шаблонов
Создание шаблона
Обработка дочерних узлов
Доступ к значениям узлов
Создание образцов выбора
Выбор применяемого шаблона
Чтение значений атрибутов
Элемент <xsl:text>
Отключение вывода эскейп-последовательностей
Написание значений атрибутов
Шаблоны значений атрибутов
Обработка символов-разделителей
Элементы <xsl:strip-space> и <xsl:preserve-space>
Автоматическое выравнивание
Правила по умолчанию в шаблоне
Удаление содержимого
Разрешение конфликтов шаблонов
Элемент <xsl:copy>
Элемент <xsl:copy-of>
Элемент <xsl:message>

Глава 4. Создание образцов выбора
Выбор корневого узла
Выбор элементов
Выбор дочерних элементов
Выбор потомков элемента
Выбор атрибутов
Формальное определение образцов выбора
Образцы шага, часть 1: оси образца
Сокращенный синтаксис
Образцы шага, часть 2: условия узла
Выбор комментариев
Выбор узлов при помощи node()
Выбор текстовых узлов при помощи text()
Выбор инструкций обработки
Образцы шага, часть 3: предикаты
Создание предикатов
Предикаты: наборы узлов
Предикаты: логические значения
Предикаты: числа
Строки
Предикаты: фрагменты результирующего дерева
Сокращенный синтаксис предикатов
Выбор по ID
Выбор по ключу
Применение операции Or
Примеры образцов
Глава 5. Принятие решений и сортировка данных
Элемент <xsl:if>
Элементы <xsl:choose>, <xsl:when> и <xsl:otherwise>
Элемент <xsl:for-each>
Сортирующие элементы
Сортировка по нескольким критериям
Элемент <xsl:number>
Одноуровневая нумерация
Нумерация на произвольных уровнях
Многоуровневая нумерация
Расширяемость XSLT
Функции расширения
Элемент <xsl:script>
Применение функции function-available
Внешние объекты
Элементы расширения
Применение функции element-available
Элемент <xsl:fallback>
Глава 6. Преобразование в XML, HTML, XHTML, RTF
Элемент <xsl:output>
Метод вывода: HTML
Метод вывода: XML
Метод вывода: текст
Вывод в формате XHTML
Изменение структуры документа на основе входных данных
Элемент <xsl:element>: создание новых элементов на этапе выполнения
Элемент <xsl:attribute>: создание новых атрибутов
Элемент <xsl:comment>: создание комментариев
Элемент <xsl:processing-instruction>: создание инструкций обработки
Элемент <xsl:document>: создание нескольких выходных документов
Элемент <xsl:namespace>: создание объявлений пространств имен
Элемент <xsl:attribute-set>: создание наборов атрибутов
Пропуск объявления XML и создание фрагментов XML
Создание уникальных идентификаторов при помощи generate-id
Создание разделов CDATA
Установка кодировки символов
Режимы: форматирование в зависимости от контекста
Глава 7. Работа с XPath
Изучаем XPath
Типы данных XPath
Наборы узлов XPath
Числа XPath
Строки XPath
Логические значения XPath
Создание путей расположения XPath
Шаги расположения XPath, часть 1: оси
Шаги расположения XPath, часть 2: условия узлов
Шаги расположения XPath, часть 3: предикаты
Применение осей XPath
Применение оси ancestor
Применение оси ancestor-or-self
Применение оси descendant
Применение оси descendant-or-self
Применение оси following
Применение оси following-sibling
Применение оси namespace
Применение оси parent
Применение оси preceding
Применение оси preceding-sibling
Применение оси self
Примеры путей расположения
Сокращенный синтаксис XPath
Проверка выражений XPath
XPath 2.0
Глава 8. Работа с функциями XSLT и XPath
Функции XSLT
current()
document()
element-available()
format-number()
function-available()
generate-id()
key()
system-property()
unparsed-entity-uri()
Функции XPath для работы с наборами узлов
count()
id()
last()
local-name()
name()
namespace-uri()
position()
Функции XPath для работы со строками
concat()
contains()
normalize-space()
starts-with()
string()
string-length()
substring()
substring-after()
substring-before()
translate()
Функции XPath для работы с числами
ceiling()
floor()
number()
round()
sum()
Логические функции XPath
boolean()
false()
lang()
not()
true()
Элемент <xsl:decimal-format>: создание числовых форматов
Новые функции в XSLT 2.0 и XPath 2.0
Глава 9. Именованные шаблоны, параметры и переменные
Элемент <xsl:variable>: создание переменных
Область видимости переменной
Работа с переменными
Элемент <xsl:call-template>: применение именованных шаблонов
Элементы <xsl:param> и <xsl:with-param>: создание параметров
Рекурсивный вызов шаблонов
Шаблон: значение по умолчанию
Как задавать значения шаблона в командной строке
Элемент <xsl:key>: выбор по ключу
Элемент <xsl:document>: создание нескольких результирующих документов
Элемент <xsl:namespace-alias>: генерация таблиц стилей

Глава 10. Работа с API процессоров XSLT
XSLT и JavaScript в Internet Explorer
Обработка ошибок разбора
Internet Explorer и динамические стили
Internet Explorer и участки данных XML
Вызов Java непосредственно из процессоров XSLT
Работа с API XSLT для Java
Взаимодействие Xalan с Java
Взаимодействие Saxon с Java
Взаимодействие процессора XSLT Oracle с Java
Взаимодействие XT с Java
Преобразование XML в реляционную базу данных
Применение XSLT с активными серверными страницами
Применение XSLT с Java Server Pages
Применение XSLT с сервлетами Java

Глава 11. Применение XSLT для создания документов XSL-FO
Форматирование XSL
Форматирующие объекты XSL-FO
Форматирующие свойства XSL-FO
Форматирование документа XML
Преобразование в XSL-FO при помощи таблицы стилей XSLT
Создание корня документа: <fo:root>
Создание схемы набора шаблонов: <fo:layout-master-set>
Создание шаблона страницы: <fo:simple-page-master>
Создание областей
Создание последовательностей страниц: <fo:page-sequence>
Создание объектов потока: <fo:flows>
Создание содержимого уровня блока: <fo:block>
Создание таблиц
Создание таблиц: <fo:table>
Создание столбцов таблицы: <fo:table-column>
Создание тел таблицы: <fo:table-body>
Создание строк таблицы: <fo:table-row>
Создание ячеек таблицы: <fo:table-cell>

Глава 12. Документы XSL-FO
Создание списков XSL-FO
Создание списка: <fo:list-block>
Создание элементов списка: <fo:list-item>
Создание меток элемента списка: <fo:list-item-label>
Создание тел элементов списка: <fo:list-item-body>
Размещение текста при помощи контейнеров блоков: <fo:block-container>
Встроенные форматирующие объекты
Создание встроенных областей: <fo:inline>
Обработка отдельных символов: <fo:character>
Создание номеров страниц: <fo:page-number>
Вставка графики: <fo:external-graphic>
Форматирование первых строк: <fo:initial-property-set>
Создание сносок: <fo:footnote> и <fo:footnote-body>
Создание ссылок: <fo:basic-link>
Создание колонок
Последовательности страниц и нумерация страниц
Приложение А. DTD XSLT
Фрагмент DTD для таблиц стилей XSLT

Приложение Б. Форматирующие свойства XSL-FO

Алфавитный указатель


Издательский дом "Питер"

Спонсор раздела

Рассылки Subscribe.ru:

Библиотека сайтостроительства - новости, статьи, обзоры
Дискуссионный лист для web-разработчиков
Подписка на MailList.Ru
Автор: NunDesign
Другие разделы
Оптимизация сайтов
Web-студии
» Новое в разделе
Web-дизайн
Web-программирование
Интернет-реклама
Раскрутка сайта
Web-графика
Flash
Adobe Photoshop
Рассылка
Инструменты вебмастера
Контент для сайта
HTML/DHTML
Управление web-проектами
CSS
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100