Запишем шаблон для обработки элемента
pre
:
Результат его выполнения будет иметь следующий вид:
One little rabbit
Two little rabbits
Three little rabbits
Данные, разделенные запятыми (CSV)
Рекурсивную методику замены, которую мы представили выше, можно использовать для того, чтобы разметить данные, разделенные запятыми (или CSV, comma-separated values). CSV — это старый простой формат представления данных, в котором они просто перечисляются через запятую, например:
a, b, с, d, e, f, g
и так далее. Формат CSV был одним из первых шагов к созданию языков разметки: данные в нем уже размечались запятыми.
Покажем на простом примере, как можно преобразовать CSV-данные в XML-документ. Пусть входящий документ выглядит как:
a, b, с, d, e, f
Для того чтобы решение было как можно более общим, вынесем создание XML-разметки для каждого из элементов этой последовательности в отдельный шаблон:
Тогда головной размечающий шаблон запишется в виде.
Листинг 11.18. Шаблон, размечающий данные в строковом формате
select="substring-before($str, $delimiter)"/>
select="substring-after($str, $delimiter)"/>
На вход шаблон markup принимает два параметра —
str
, строка, которую нужно разметить (по умолчанию — значение текущего узла) и delimiter
— строка, разделяющая отдельные значения в str
(по умолчанию — запятая ",
").Шаблон, форматирующий содержимое элемента
data
, будет в таком случае выглядеть следующим образом:
Результат этого преобразования будет иметь следующий вид:
- a
- b
- c
- d
- e
- f
Обратим внимание на то, что в элементах
item
присутствуют лишние пробелы, которые в начальной последовательности шли за запятыми. Избавиться от них можно, указав в качестве разделяющей строки символ ",
":
Результатом, как и следовало ожидать, будет:
- a
- b
- c
- d
- e
- f
Кстати сказать, того же эффекта можно было добиться, изменив шаблон
item
, который отвечает за XML-представление каждого из элементов последовательности.Глава 12Развитие технологий
Как известно, успех технологии зависит не только от того, насколько продумана и проработана она была. Ее широкое распространение невозможно без поддержки и заинтересованности ведущих производителей программного обеспечения. В этом смысле XSLT очень повезло: имплементациями языка с самых ранних черновых вариантов занимались такие крупные разработчики, как Microsoft, Oracle, IBM, Adobe, Lotus и многие другие. Поддержка Apache XML Project помогла XSLT завоевать популярность и среди open-source сообщества (open-source — разработки с "открытым" исходным кодом).
Так или иначе, сейчас следует лишь констатировать стабильный рост популярности XSLT. Количество XSLT-процессоров уже исчисляется десятками, а число разработчиков — пожалуй, что и тысячами.
Повышенный интерес помог в чрезвычайно короткий срок (менее года) изучить на практике недостатки и достоинства нового языка и приступить к разработке последующих версий, которые бы учитывали эти практические результаты. В декабре 2000 года была выпущена версия 1.1,. в которой было не только исправлено большинство основных проблем первой версии XSLT, но и включены очень важные дополнения — такие, например, как определение интерфейсов расширений для языков Java и JavaScript/ECMAScript. В августе 2001 года версии 1.1 дали статус Final Draft и положили на полку — она никогда не будет стандартом (технической рекомендацией Консорциума W3).
Нужно сказать, что по количеству доработок и дополнений версия XSLT 1.1 могла вполне претендовать на роль нового стандарта XSLT. Однако, в такой напряженной области информационных технологий, как XML, приходится считаться с другими разработками, ибо все они взаимосвязаны. На решение прекратить продвижение XSLT 1.1 и перейти к 2.0 во многом повлияли такие проекты, как XML Schema и XQuery.
XML Schema — это долгожданный XML-язык, описывающий структуру XML-документа, своего рода более мощный вариант DTD. XML Schema, в частности, позволяет описывать простые и сложные типы данных элементов и атрибутов, ограничивать количества повторений, определять в XML-документах первичные и внешние ключи и многое другое. Помимо этого, XML Schema определяется в XML-синтаксисе, что позволяет использовать для обработки схем стандартные XML-инструменты. Спецификация XML Schema получила статус технической рекомендации Консорциума W3 в мае 2001 года.
XQuery — это текущий проект W3C по созданию языка запросов для XML-документов. В основу XQuery легло множество предыдущих исследований в области языков запросов для полуструктурированных данных — пожалуй, стоит упомянуть такие, как Quilt, XML-QL и Lorel. Почти все старые языки запросов для XML были университетскими исследовательскими проектами; в XQuery же заинтересованы такие гиганты, как Microsoft и Software AG.
Следует пояснить, каким образом XML Schema и XQuery влияют на XSLT — казалось бы, их области применения несколько различаются. Напомним, что весомая часть функциональности XSLT зависит от языка XPath, который используется также и в XPointer. Как оказалось, XPath важен не только для XSLT и XPointer, но и для XQuery. Модель XML-документа, описанная в первой версии XPath, оказалась мощной, легко реализуемой и понятной абстракцией физической сущности XML и поэтому ее было решено использовать также и в XQuery. В следующей своей инкарнации эта модель будет выделена в отдельную спецификацию — "XQuery 1.0 and XPath 2.0 Data Model" ("Модель данных XQuery 1.0 и XPath 2.0"). Функции и операторы также будут выделены в отдельный документ — "XQuery 1.0 and XPath 2.0 Functions and Operators Version 1.0" ("Операторы и функции в XQuery 1.0 и XPath 2.0, версия 1.0").
Принятие XML Schema также оказывает определенное влияние на XPath. В схемах ХМL-документов можно определять типы данных атрибутов и элементов. Соответственно, семантика XPath выражений должна отражать эту метаинформацию: например, оператор сложения "
Оглавление
-
Предисловие
-
О чем эта книга?
-
Для кого эта книга?
-
Как работать с книгой?
-
Структура книги
-
Глава 1. Введение в XML
-
Глава 2. Введение в XSLT
-
Глава 3. Идея и модель языка XSLT
-
Глава 4. Структура преобразования
-
Глава 5. Шаблонные правила
-
Глава 6. XPath-выражения
-
Глава 7. Основные элементы XSLT
-
Глава 8. Дополнительные элементы и функции языка XSLT
-
Глава 9. Использование XSLT совместно с другими языками программирования
-
Глава 10. Расширения языка XSLT
-
Глава 11. Готовые решения
-
Глава 12. Развитие технологий
-
Приложение 1. Обзор XSLT-процессоров
-
Приложение 2. Краткий справочник элементов и атрибутов XSLT
-
Приложение 3. Краткий справочник функций XSLT и XPath
-
Приложение 4. Интернет-ресурсы, посвященные XSLT
-
Соглашения
-
Расширенная форма Бэкуса-Наура
-
Обозначения
-
Благодарности
-
Глава 1 Введение в XML
-
Что такое XML?
-
Разметка документов
-
XML снаружи и изнутри
-
Конструкции XML
-
Элемент
-
Атрибут
-
Инструкция по обработке
-
Секции СDATA
-
Комментарии (comments)
-
Пространства имён
-
Расширенные имена
-
Структура XML-документа
-
Декларация типа документа (DTD)
-
Определение элемента
-
Определение списка атрибутов
-
Определение сущности
-
Определение нотации
-
Символьные данные в XML-документах
-
Использование Unicode
-
Коды некоторых символов Unicode
-
Базовые продукции XML
-
XML-документы с точки зрения спецификации
-
Использование технологии XML
-
SAX-парсеры
-
DOM-парсеры
-
Основные классы задач XML
-
Создание новых языков
-
Хранение данных
-
Обмен данными и проекты интеграции
-
Краткая история XML
-
Глава 2 Введение в XSLT
-
Документ = Данные + Структура
-
XSLT как язык
-
Отсутствие "побочных" эффектов
-
Расширения
-
Преобразования снаружи
-
Области применения XSLT
-
XSLT в архитектуре клиент-сервер
-
XSLT на стороне сервера
-
XSLT на стороне клиента
-
XSLT в Web-решениях
-
XSLT при обмене данными
-
История XSLT
-
Глава 3 Идея и модель языка XSLT
-
Модель XML-документа
-
Деревья
-
Узлы дерева XML-документа
-
Корневой узел
-
Узлы элементов
-
Узлы атрибутов
-
Текстовые узлы
-
Узлы пространств имен
-
Узлы инструкций по обработке
-
Узел комментария
-
Сводная таблица характеристик узлов
-
Ограничения модели XML-документа
-
Порядок просмотра документа
-
Типы данных
-
Булевый тип (boolean)
-
Численный тип (number)
-
Строковый тип (string)
-
Множество узлов (node-set)
-
Результирующий фрагмент дерева (result tree fragment)
-
Таблица преобразования типов
-
Переменные
-
Выражения
-
Виды выражений
-
Пути выборки
-
Фильтрующие выражения
-
Объединение множеств
-
Арифметические операции
-
Операции сравнения
-
Логические операции
-
Функции
-
Контекст вычисления выражений
-
Модель преобразования
-
Контекст преобразования
-
Выполнение преобразования
-
Глава 4 Структура преобразования
-
Пространство имен XSLT
-
Корневые элементы преобразования
-
Элементы xsl:stylesheet и xsl:transform
-
Упрощенные преобразования
-
Модульная организация преобразования
-
Включение преобразований
-
Элемент xsl:include
-
Импорт преобразований
-
Элемент xsl:import
-
Порядок импорта
-
Использование сущностей для разбивки на модули
-
Совместное использование преобразований и XML-документов
-
Ассоциация преобразования с XML-документом
-
Объединение документа и преобразования
-
Включение преобразования в документ
-
Включение документа в преобразование
-
Литеральные элементы результата
-
Атрибуты языка XSLT в литеральных элементах
-
Шаблоны значений атрибутов
-
Глава 5 Шаблонные правила
-
Преобразование как набор правил
-
Определение шаблонного правила
-
Элемент xsl:template
-
Вызов шаблонных правил
-
Элемент xsl:apply-templates
-
Режимы
-
Именованные шаблоны
-
Элемент xsl:call-template
-
Встроенные шаблоны
-
Идентичное преобразование
-
Разрешение конфликтов в шаблонах
-
Элемент xsl:apply-imports
-
Тело шаблона
-
Переменные и параметры
-
Элемент xsl:variable
-
Область видимости переменных
-
Использование переменных
-
Параметры
-
Элемент xsl:param
-
Область видимости параметров
-
Элемент xsl:with-param
-
Глава 6 XPath-выражения
-
Выражения для XML-документов
-
Контекст вычисления выражений
-
Пути выборки
-
Шаги выборки
-
Оси навигации
-
Тесты узлов
-
Предикаты
-
Сокращенный синтаксис
-
Примеры путей выборки
-
Паттерны
-
Семантика паттернов
-
Примеры паттернов
-
Выражения
-
Переменные
-
Операции с булевыми значениями
-
Операции с числами
-
Арифметические операции
-
Операции сравнения
-
Операции с множествами узлов
-
Фильтрация
-
Использование в выражениях путей выборки
-
Объединение множеств
-
Старшинство операций
-
Функции
-
Булевые функции Функция boolean
-
Функция not
-
Функции true и false
-
Функция lang
-
Числовые функции
-
Функция number
-
Функция sum
-
Функции floor и ceiling
-
Функция round
-
Строковые функции
-
Функция string
-
Функция concat
-
Функция starts-with
-
Функция contains
-
Функция substring-before
-
Функция substring-after
-
Функция substring
-
Функция string-length
-
Функция normalize-space
-
Функция translate
-
Функции множеств узлов
-
Функции last и position
-
Функция count
-
Функции local-name , namespace-uri и name
-
Функция id
-
Базовые продукции XPath
-
Разбор XPath-выражений
-
Глава 7 Основные элементы XSLT
-
Основные и дополнительные элементы
-
Создание узлов элементов
-
Элемент xsl:element
-
Создание узлов атрибутов
-
Элемент xsl:attribute
-
Именованные наборы атрибутов
-
Элемент xsl:attribute-set
-
Атрибут xsl:use-attribute-sets
-
Создание текстовых узлов
-
Элемент xsl:text
-
Элемент xsl:value-of
-
Создание узлов комментариев и инструкций по обработке
-
Элемент xsl:comment
-
Элемент xsl:processing-instruction
-
Копирование узлов
-
Элемент xsl:copy
-
Элемент xsl:copy-of
-
Условная обработка
-
Элемент xsl:if
-
Элементы xsl:choose, xsl:when, xsl:otherwise
-
Циклическая обработка
-
Элемент xsl:for-each
-
Глава 8 Дополнительные элементы и функции языка XSLT
-
Дополнительные элементы и функции
-
Обработка пробельных символов
-
Элементы xsl:preserve-space и xsl:strip-space
-
Сообщения процессора
-
Элемент xsl:message
-
Сортировка
-
Элемент xsl:s ort
-
Псевдонимы пространств имен
-
Элемент xsl:namespace-alias
-
Ключи
-
Элемент xsl:key
-
Функция key
-
Определение множества ключей
-
Использование нескольких ключей в одном преобразовании
-
Использование нескольких определений од ного ключа
-
Использование множеств узлов в функции key
-
Использование ключей в нескольких документах
-
Составные ключи
-
Функция key в паттернах
-
Нумерация
-
Элемент xsl:number
-
Вычисление номеров
-
Форматирование номеров
-
Форматирование чисел
-
Функция format-number
-
Элемент xsl:decimal-format
-
Контроль вывода документа
-
Элемент xsl:output
-
Метод вывода "xml"
-
Метод вывода "html"
-
Метод вывода "text"
-
Другие методы вывода
-
Замена специальных символов
-
Кодировки в XSLT-преобразованиях
-
Случай нескол ьких входящих документов
-
Функция document
-
Вызов document(string)
-
Вызов document(node-set)
-
Вызов document(string, node-set)
-
Вызов document(node-set, node-set)
-
Другие дополнительные функции XSLT
-
Функция current
-
Функция unparsed-entity-uri
-
Функция generate-id
-
Функция system-property
-
Глава 9 Совместное использование XSLT с другими языками программирования
-
XSLT и другие языки
-
Выполнение XSLT-преобразований в Object Pascal
-
Импорт MSXML в Delphi
-
Форма проекта
-
Использование DOMDocument
-
Выполнение XSLT-преобразований в C/C++
-
Настройка путей
-
Использование класса XalanTransformer
-
Выполнение XSLT-преобразований в PHP
-
Страница гостевой книги
-
Выполнение XSLT-преобразований в JavaScript
-
Выполнение XSLT-преобразований в VBScript/ASP
-
Выполнение XSLT-преобразований в Python
-
Выполнение XSLT-преобразований в PL/SQL
-
Выполнение XSLT-преобразований в Java
-
***
-
***
-
Краткие выводы
-
Глава 10 Расширения языка XSLT
-
Что такое расширения?
-
Функции расширения
-
Функция function-available
-
Функция расширения nodeset
-
Элементы расширения
-
Функция element-available
-
Элемент xsl:fallback
-
Инициатива EXSLT
-
Глава 11 Готовые решения
-
Группировка
-
Перечисление узлов
-
Именованный шаблон как функция
-
Рекурсия
-
Циклы
-
Цикл while
-
Цикл for
-
Метод Пиза для for-цикла
-
Операции над множествами
-
Перенос строк и элементы BR
-
Данные, разделенные запятыми (CSV)
-
Глава 12 Развитие технологий
-
Отличия XSLT 1.1 от XSLT 1.0
-
Отсутствие result tree fragment
-
Несколько выходящих документов
-
Дополнительные возможности по расширению
-
"Внешние" типы данных
-
Стандартные интерфейсы расширений
-
Другие изменения
-
Отличия XSLT 2.0 от XSLT 1.1
-
Изменения в XPath 2.0
-
Выбор шаблонов для элементов пространства имен, определенного по умолчанию
-
Средства для форматирования даты и времени
-
Функции id и key на внешних документах
-
Включение неразбираемых внешних сущностей в виде текста
-
Использование именованных сущностей вместо кодов символов
-
Обращение ссылок по ID / IDREF
-
Другие требования
-
Приложение 1 Обзор XSLT-процессоров
-
Популярность XSLT-процессоров
-
Производительность XSLT-процессоров
-
Библиотека Microsoft XML Parser
-
Использование
-
Расширения
-
Процессор Xalan
-
Использование
-
Расширения
-
Процессор Saxon
-
Использование
-
Расширения
-
Библиотека Oracle XDK
-
Использование
-
Расширения
-
Процессор Sablotron
-
Использование
-
Процессор xt
-
Использование
-
Расширения
-
Библиотека libxslt
-
Использование
-
Расширения
-
Приложение 2 Краткий справочник элементов и атрибутов XSLT
-
Об означения
-
Элементы
-
***
-
Атрибуты
-
Приложение 3 Краткий справочник функций XSLT и XPath
-
Обозначения
-
Функции
-
Приложение 4 Интернет-ресурсы, посвященные XSLT
-
Зарубежные интернет-ресурсы по XSLT
-
Русскоязычные ресурсы
-
Технические рекомендации и стандарты
-
Переводы стандартов на русский язык
-
Другие ресурсы
-
Списки рассылки
-
Электронные конференции
-
Список литературы