время W3C решил прекратить работу над рекомендацией XSLT 1.1. Это означает, что рабочий проект XSLT 1.1 не будет развиваться далее — он навсегда останется в виде рабочего проекта и никогда не станет рекомендацией. Иными словами, не будет выпущено официальной версии 1.1 для XSLT.
Однако консорциум W3C также утверждает, что он планирует включить большую часть того, что было сделано в рабочем проекте XSLT 1.1, в XSLT 2.0, и поэтому в данной книге я кратко рассмотрю рабочий проект XSLT 1.1. Я обязательно отмечу материал как «только для рабочего проекта XSLT 1.1» при обсуждении нового материала, представленного в рабочем проекте XSLT 1.1.
Ниже перечислены изменения в XSLT 1.0, сделанные в рабочем проекте XSLT 1.1; заметьте, что этот список приведен здесь только в качестве справочного материала, так как большая часть материала вряд ли пока что-нибудь для вас значит:
• исключен поддерживаемый в XSLT 1.0 тип данных фрагмента результирующего дерева;
• метод вывода больше не может произвольно добавлять узлы пространства имен, поскольку процесс установки пространства имен применяется автоматически;
• была добавлена поддержка для XML Base;
• теперь поддерживаются несколько выходных документов при помощи элемента <xsl:document>
;
• элемент <xsl:apply-imports>
теперь может иметь параметры;
• функции расширения теперь можно определять при помощи функции <xsl:script>
;
• функции расширения теперь могут возвращать внешние объекты, не соответствующие никаким типам данных XPath.
В этой книге рассматривается рекомендация XSLT 1.0. а также рабочий проект XSLT 1.1. В развитие данной темы W3C и выпустил требования для XSLT 2.0, которые также рассматриваются в книге под именем XSLT 2.0. В следующем списке приведен обзор целей XSLT 2.0:
• добавить дополнительную поддержку для работы с содержимым схемы XML при помощи XSLT;
• упростить работу со строками;
• упростить работу с XSLT;
• улучшить поддержку различных языков;
• сохранить обратную совместимость с XSLT 1.0;
• поддерживать повышенную эффективность процессора.
Хотя XSLT 2.0 еще некоторое время не будет выпущен в окончательном варианте, я рассмотрю все, что о нем известно, при обсуждении имеющих к нему отношение тем. Например, разработанный W3C последователь HTML — это основанный на XML язык XHTML. В XSLT 1.0 и в рабочем проекте XSLT 1.1 нет прямой поддержки преобразований из XML в XHTML, поэтому нам придется создать это преобразование с нуля. Однако такая поддержка входит в состав XSLT 2.0, и я отмечу этот факт при обсуждении XHTML.
Таким образом, мы рассмотрели краткий обзор тематики; давайте перейдем к работе. XSL предназначен для работы с документами XML, поэтому сначала я хочу рассмотреть структуру документов XML. Вы будете работать с документами XML, но сами таблицы стилей XSL также являются документами XML, что следует помнить при их написании. В этой книге считается, что вы обладаете знаниями и XML, и HTML.
Документы XML
Вы должны понимать, как работают документы XML, поэтому проверьте по материалам этого раздела, готовы ли вы к работе. Давайте посмотрим на примере документа XML:
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly world of XML.
</MESSAGE>
</DOCUMENT>
Вот как работает этот документ: я начал с инструкции обработки XML <?xml version='1.0' encoding='UTF-8'?> (все инструкции обработки XML начинаются с <? и заканчиваются ?>), означающей, что используется XML версии 1.0, единственная определенная сейчас версия, и кодировка символов UTF-8, то есть используется восьмибитная сжатая версия Unicode:
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
<MESSAGE>
Welcome to the wild and woolly world of XML.
</MESSAGE>
</DOCUMENT>
Затем я создаю новый тег (tag) с именем <DOCUMENT>
. Для тега можно использовать любое имя, не обязательно DOCUMENT; необходимо только, чтобы имя начиналось с буквы или символа подчеркивания (_), а последующими символами были буквы, цифры, символы подчеркивания, точки (.) или дефисы (-), но не пробелы. В XML теги всегда начинаются с < и заканчиваются >.
Документы XML образованы из элементов XML; последние начинаются с открывающего тега, такого как <DOCUMENT>
(за которым следует содержимое (content) элемента, если оно есть, — например, текст или другие элементы), и завершаются закрывающим тегом, парным тегу открытия (он начинается с символов </ — например, </DOCUMENT>
). Весь документ целиком, за исключением инструкций обработки, заключается в один элемент, называемый корневым (root) элементом; в нашем случае это элемент <DOCUMENT>
:
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT>
.
.
.
</DOCUMENT>
Теперь я добавлю новый элемент, <GREETING>
, в который заключено текстовое содержимое (здесь «Hello From XML», привет от XML) этого XML-документа:
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT>
<GREETING>
Hello From XML
</GREETING>
.
.
.
</DOCUMENT>
После этого я могу добавить еще один элемент, <MESSAGE>
, также образующий