540 likes | 739 Views
Язык преобразования XSLT. Презентацию подготовила Шигаева Алена, гр.950б. Язык XSLT.
E N D
Язык преобразования XSLT Презентацию подготовила Шигаева Алена, гр.950б
Язык XSLT Это расширяемый язык таблиц стилей.Язык XSL фактически состоит из двух частей: языка преобразований и языка форматирования. Язык, предназначенный для выполнения преобразований, позволяет конвертировать структуры документов в различные формы (например, PDF,WML,HTML или иные типы схем), в то время как язык форматирования используется для оформления и определения стилей документов различными способами. Обе части языка XSL могут функционировать совершенно независимо одна от другой, поэтому их можно рассматривать в качестве независимых языков разметки.
Применение таблиц стилей XSLТ в XML-документах. Язык XSLT применяется для обработки документов, внесения изменений и необходимых дополнений в разметку. Его можно применять для преобразования XML-кода в отформатированный HTML-код. Язык XSLT обеспечивает доступ к содержимому XML-документов, а также применяется для создания новых документов на их основе. Для выполнения XSLT-преобразований используется два документа: преобразуемый документ и таблица стилей, определяющая само преобразование. В данном случае речь идет об XML-документах.
Таблицы стилей XSL Ниже показан примерный вид таблицы стилей. В данном случае содержимое файла преобразуется в HTML-код:
Выполнение преобразования Документ можно преобразовать тремя способами: • С помощью сервера – серверная программа, например JAVA или JAVA SERVER PAGE, применяет таблицу стилей для автоматического преобразования документа и представления его клиенту. • С помощью клиента – клиентская программа, например браузер, выполняет преобразование путем чтения таблиц стилей, указанной с помощью инструкции по обработке <?xml-stylesheet?>. • С помощью отдельной программы – некоторые программы, обычно основанные на JAVA, предназначены для выполнения XSLT-преобразования.
1) Выполнение преобразований с помощью сервера:
Результат выполнения jslt-преобразования Выполненного с помощью сервера Tomcat:
2) Применение браузеров для преобразования XML-документов:
3)Применение специальных программ Для создания программы воспользуемся классом TransformerFactory для формирования нового объекта из этого класса.
Методы класса TransformerFactory МЕТОД • Protected TransformerFactory() • Abstract Source getAssociatedStylesheet(Source source, String media, String title, String charset) • Abstract object getAttribute (String name) • Abstract ErrorListenergetErrorListener() • Abstract boolean getFeature (String name) • Abstract URIResolvergetURIResilver() • Static TransformerFactory newInstance() • Abstract Templates newTemplates (Source source) • Abstract Transformer new Transformer() ОПИСАНИЕ • Заданный по умолчанию конструктор • Получает спецификации таблиц стилей • Возвращает определенные атрибуты • Возвращает обработчик ошибочного события для TransformerFactory • Возвращает значение свойства • Получает объект, используемый по умолчанию в процессе преобразования для разрешения URI-ссылок • Получает новый объект TransformerFactory • Обрабатывает Source в объекте Templates • Создает новый объект TransFormer, который использует источник для преобразований
МЕТОД • AbstractTransformer newTransformer(Source source) • Abstract void setAttribute (String name, Object value) • Abstract void setErrorListener (ErrorListener listener) • Abstract void setURIResolver (URIResolver resolver) ОПИСАНИЕ • Создает новый объект TransFormer, который применяет Source для выполнения преобразований • Устанавливает определенные атрибуты • Устанавливает слушатель событий, связанных с ошибками JAVA • Устанавливает объект, применяемый по умолчанию во время преобразования для разрешения URI-ссылок
Методы класса javax.xml.transform.Transformer МЕТОД • Protected Transformer() • Abstract void clearParameters() • Abstract ErrorListenergetErrorListener() • Abstract Properties getOutputProperties() • Abstract String getOutputProperty (String name) • Abstract Object getParameter(String name) • Abstract URIResolvergetURIResolver() • Abstract void setErrorListener (ErrorListener listener) • Abstract void setOutputProperties (Properties oformat) • Abstract void SetOutputProperty (String name, String value) ОПИСАНИЕ • Заданный по умолчанию конструктор • Очищает все параметры, установленные с помощью setParameter • Возвращает обработчик сообщения об ошибке • Возвращает копию выводимых свойств • Возвращает значение выводимого свойства • Возвращает параметр, с помощью setParameter либо setParameters • Возвращает объект, используемый для разрешения URI-ссылки • Устанавливает слушатель событий, связанных с ошибками JAVA • Устанавливает выводимые свойства • Устанавливает выводимое свойство
МЕТОД • Abstract void setParameter (String name, Object value) • Abstract void setURIResolver (URIResolver resolver) • Abstract void transform (Source xmlSource, Result outputTarget ОПИСАНИЕ • Устанавливает параметр • Устанавливает объект, применяемый для разрешения Uri-ссылки • Выполняет преобразование
Пример Для выполнения преобразования воспользуемся методом transform объекта TransFormer, передавая ему преобразованный XML-документ:
Создание таблиц стилей XSLT В процессе XSLT-преобразований в качестве вводных данных используется дерево документа, в результате обработки которого формируется дерево результатов. В этом случае документы представляют собой деревья, построенные на основе узлов. Язык XSLT распознает семь типов XSLT-узлов. Эти узлы представлены в следующем списке,где также указан порядок их обработки XSLT-процессорами: • Корень документа – начало документа; • Атрибут - данный узел включает значение атрибута наравне с объектными ссылками, которые могут расширяться, и пропусками, которые могут удаляться; • Комментарий – данный узел включает текст комментария без знаков <!– и -->; • Элемент – этот узел содержит все символьные данные элемента, включая символьные данные любого дочернего элемента; • Пространство имен – данный узел содержит URIпространства имен; • Инструкция по обработке – этот узел включает текст инструкции по обработке, куда не входят символы <? и ?>; • Текст – данный текст содержит текст узла.
Для определения обрабатываемого узла XSLT предлагает различные способы, обеспечивающие установку соответствия с узлами или их выбора. Для начала разработаем небольшой пример, заменяющий корневой узел HTML-страницей.
Таким образом начинает создаваться таблица стилей XSLT. Для обработки определенных узлов XML-документа XSLT использует шаблоны. В следующем примере требуется заменить корневой узел новым HTML-документом. Начнем с создания шаблона с помощью элемента <xsl:template>:
При установлении соответствия с корневым узлом к нему применяется шаблон. В этом случае корневой узел заменяется HTML-документом, который непосредственным образом используется в качестве содержимого элемента <xsl:template>:
Вот и все, что требуется выполнить в данной ситуации. С помощью элемента <xsl:template> в таблице стилей устанавливается правило. Когда XSL-процессор просматривает документ, в качестве первого узла выбирается корневой узел. Данное правило устанавливает соответствие с корневым узлом, поэтому XSL-процессор заменяет его HTML-документом. Результат:
Элемент xsl:apply-templates Шаблон описанный в предыдущем разделе, применяется только по отношению к корневому узлу. Выполняется тривиальное действие по замене полного XML-документа HTML-документом. Можно также применять шаблоны по отношению к дочерним элементам узла, с которым установлено соответствие. В этих целях применяется элемент <xsl:apply-templates>. Например, рассмотрим случай, когда элемент <PLANETS> можно заменить элементом <HTML>:
Чтобы удостовериться, что дочерние элементы корректно преобразованы воспользуемся элементом <xsl:apply-templates>следующим образом:
Теперь можно применить шаблоны для дочерних узлов:
Например, если требуется заменить текст из элемента <NAME> в каждом элементе <PLANET> в результирующем документе, используется следующий код:
Получение значений узлов с помощью xsl:value-of В данном примере выбирается название каждой из планет, включаемое в результирующий документ. Для получения названия каждой планеты применяется элемент <xsl:value-of> из шаблона, выбранного в элементе <PLANET>. Элемент <NAME> выделяется с помощью атрибута select:
Обработка нескольких выделенных областей с помощью xsl:for-each Атрибут select выделяет только первый узел, соответствующий данному критерию. Но как быть, если требуется установить соответствие с несколькими узлами? Ответ: для выполнения цикла по всем возможным соответствиям можно воспользоваться элементом <xsl:for-each>:
Определение шаблонов для атрибута match Атрибуту match элемента <xsl:template> присущ специфический синтаксис; еще в большей степени сказанное справедливо в отношении атрибута select элементов <xsl:apply-templates>, <xsl:value-of>, <xsl:copy-of>, <xsl:for-each> и <xsl:sort>. • Начнем с match: Установка соответствия с корневым узлом
Установка соответствия с элементами Установка соответствия с дочерними элементами Установка соответствия с потомками элементов Установка соответствия с атрибутами
Теперь select: Атрибут select использует выражения XPath .Основы XPath : чтобы указать узел или набор узлов в Xpath, применяется путь локализации. Путь локализации, в свою очередь, состоит из одного или большего числа шагов локализации, которые разделяются / или //. Если путь локализации начинается с /, он называется абсолютным путем локализации, поскольку начинается от корневого узла; иначе, путь локализации является относительным, начинаясь от текущего узла, именуемого контекстным узлом. Шаг локализации состоит из оси, узла тестирования и нуля или других предикатов. Оси XPath
Узлы тестирования Xpath Предикаты XPath
Заданные по умолчанию XSLT-правила Самое важное заданное по умолчанию правило применяется по отношению к элементам и может выражаться следующим образом: Это правило просто гарантирует то, что каждый элемент, от корневого и далее, обрабатывается с помощью <xsl:apply-templates/> в том случае, если не применяется никакое другое правило. Если же применить другое правило, это приведет к отмене соответствующего заданного по умолчанию правила. Заданное по умолчанию правило для текста может выражаться следующим образом: Аналогичное заданное по умолчанию правило применяется по отношению к атрибутам,
Которые добавляются к результирующему документу с помощью заданного по умолчанию правила, например: По умолчанию инструкции по обработке не включаются в результирующий документ, поэтому соответствующее заданное по умолчанию правило можно выразить следующим образом: Аналогичное утверждение справедливо и для комментариев, для которых заданное по умолчанию правило можно выразить так: Если не применяются никакие правила, все анализируемые символьные данные из вводного документа включаются в результирующий документ. Ниже показано, какой имеет вид таблица стилей XSLT, где не используются явно определенные правила: Результат:
Изменение структуры документа на основе вводных данных Создание шаблонов атрибутов
Результирующий документ: Создание новых элементов
Создание новых атрибутов В случае, когда необходимо контролировать выбор названий элементов и содержимого, применяется элемент <xsl:attribute>. Пример:
Генерирование комментариев с помощью xsl:comment
Получаем следующий результат: Генерирование текста с помощью xsl:text С помощью этого элемента можно создавать текстовые узлы, которые позволяют выполнить замену целых элементов текстом «на лету». Одно из преимуществ элемента заключается в сохранении пропусков.
Копирование узлов Элемент <xsl : copy> можно применять для копирования узлов, причем можно указывать отдельные копируемые части. Заданное по умолчанию правило для элементов состоит в том, что копируется только текст элемента. Но правило можно изменить, если воспользоваться элементом <xsl : copy> , который копирует целые элементы, текстовые узлы, атрибуты, инструкции по обработке и т.д. Рассмотрим соответствующий пример:
Сортировка элементов Элемент <xsl : sort> используется для выполнения сортировки наборов узлов. Этот элемент используется внутри <xsl : apply-templates>, а атрибут select этого элемента применяется для указания объекта сортировки. Пример, в котором показано, как отсортировать планеты с учетом их плотности:
Применение xsl:if С помощью элемента <xsl : if> можно выбирать варианты на базе вводного документа. Чтобы воспользоваться этим элементом, просто присвоить его атрибуту test выражение, оценивающее булевское значение. Пример: перечисляем планеты и в конце горизонтальная линия.