Upload
stone-graham
View
61
Download
0
Embed Size (px)
DESCRIPTION
Язык преобразования XSLT. Презентацию подготовила Шигаева Алена, гр.950б. Язык XSLT. - PowerPoint PPT Presentation
Презентацию подготовила Шигаева Алена, гр.950б
Это расширяемый язык таблиц стилей. Язык XSL фактически состоит из двух частей: языка преобразований и языка форматирования. Язык, предназначенный для выполнения преобразований, позволяет конвертировать структуры документов в различные формы (например, PDF,WML,HTML или иные типы схем), в то время как язык форматирования используется для оформления и определения стилей документов различными способами. Обе части языка XSL могут функционировать совершенно независимо одна от другой, поэтому их можно рассматривать в качестве независимых языков разметки.
Язык XSLT применяется для обработки документов, внесения изменений и необходимых дополнений в разметку. Его можно применять для преобразования XML-кода в отформатированный HTML-код. Язык XSLT обеспечивает доступ к содержимому XML-документов, а также применяется для создания новых документов на их основе.
Для выполнения XSLT-преобразований используется два документа: преобразуемый документ и таблица стилей, определяющая само преобразование. В данном случае речь идет об XML-документах.
Ниже показан примерный вид таблицы стилей. В данном случае содержимое файла преобразуется в HTML-код:
Документ можно преобразовать тремя способами:С помощью сервера – серверная программа, например
JAVA или JAVA SERVER PAGE, применяет таблицу стилей для автоматического преобразования документа и представления его клиенту.
С помощью клиента – клиентская программа, например браузер, выполняет преобразование путем чтения таблиц стилей, указанной с помощью инструкции по обработке <?xml-stylesheet?>.
С помощью отдельной программы – некоторые программы, обычно основанные на JAVA, предназначены для выполнения XSLT-преобразования.
Выполненного с помощью сервера Tomcat:
Для создания программы воспользуемся классом TransformerFactory для формирования нового объекта из этого класса.
Для выполнения преобразования воспользуемся методом transform объекта TransFormer, передавая ему преобразованный XML-документ:
В процессе XSLT-преобразований в качестве вводных данных используется дерево документа, в результате обработки которого формируется дерево результатов. В этом случае документы представляют собой деревья, построенные на основе узлов. Язык XSLT распознает семь типов XSLT-узлов. Эти узлы представлены в следующем списке, где также указан порядок их обработки XSLT-процессорами:
Корень документа – начало документа; Атрибут - данный узел включает значение атрибута наравне с объектными
ссылками, которые могут расширяться, и пропусками, которые могут удаляться;
Комментарий – данный узел включает текст комментария без знаков <!– и -->;
Элемент – этот узел содержит все символьные данные элемента, включая символьные данные любого дочернего элемента;
Пространство имен – данный узел содержит URIпространства имен; Инструкция по обработке – этот узел включает текст инструкции по
обработке, куда не входят символы <? и ?>; Текст – данный текст содержит текст узла.
Для определения обрабатываемого узла XSLT предлагает различные способы, обеспечивающие установку соответствия с узлами или их выбора. Для начала разработаем небольшой пример, заменяющий корневой узел HTML-страницей.
Таким образом начинает создаваться таблица стилей XSLT. Для обработки определенных узлов XML-документа XSLT использует шаблоны.
В следующем примере требуется заменить корневой узел новым HTML-документом. Начнем с создания шаблона с помощью элемента <xsl:template>:
При установлении соответствия с корневым узлом к нему применяется шаблон. В этом случае корневой узел заменяется HTML-документом, который непосредственным образом используется в качестве содержимого элемента <xsl:template>:
Вот и все, что требуется выполнить в данной ситуации. С помощью элемента <xsl:template> в таблице стилей устанавливается правило. Когда XSL-процессор просматривает документ, в качестве первого узла выбирается корневой узел. Данное правило устанавливает соответствие с корневым узлом, поэтому XSL-процессор заменяет его HTML-документом. Результат:
Шаблон описанный в предыдущем разделе, применяется только по отношению к корневому узлу. Выполняется тривиальное действие по замене полного XML-документа HTML-документом. Можно также применять шаблоны по отношению к дочерним элементам узла, с которым установлено соответствие. В этих целях применяется элемент <xsl:apply-templates>.
Например, рассмотрим случай, когда элемент <PLANETS> можно заменить элементом <HTML>:
Чтобы удостовериться, что дочерние элементы корректно преобразованы воспользуемся элементом <xsl:apply-templates>следующим образом:
Теперь можно применить шаблоны для дочерних узлов:
Например, если требуется заменить текст из элемента <NAME> в каждом элементе <PLANET> в результирующем документе, используется следующий код:
В данном примере выбирается название каждой из планет, включаемое в результирующий документ. Для получения названия каждой планеты применяется элемент <xsl:value-of> из шаблона, выбранного в элементе <PLANET>. Элемент <NAME> выделяется с помощью атрибута select:
Атрибут select выделяет только первый узел, соответствующий данному критерию. Но как быть, если требуется установить соответствие с несколькими узлами? Ответ: для выполнения цикла по всем возможным соответствиям можно воспользоваться элементом <xsl:for-each>:
Атрибуту 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
Самое важное заданное по умолчанию правило применяется по отношению к элементам и может выражаться следующим образом:
Это правило просто гарантирует то, что каждый элемент, от корневого и далее, обрабатывается с помощью <xsl:apply-templates/> в том случае, если не применяется никакое другое правило. Если же применить другое правило, это приведет к отмене соответствующего заданного по умолчанию правила.
Заданное по умолчанию правило для текста может выражаться следующим образом:
Аналогичное заданное по умолчанию правило применяется по отношению к атрибутам,
Которые добавляются к результирующему документу с помощью заданного по умолчанию правила, например:
По умолчанию инструкции по обработке не включаются в результирующий документ, поэтому соответствующее заданное по умолчанию правило можно выразить следующим образом:
Аналогичное утверждение справедливо и для комментариев, для которых заданное по умолчанию правило можно выразить так:
Если не применяются никакие правила, все анализируемые символьные данные из вводного документа включаются в результирующий документ. Ниже показано, какой имеет вид таблица стилей XSLT, где не используются явно определенные правила:
Результат:
Создание шаблонов атрибутов
Результирующий документ:
Создание новых элементов
В случае, когда необходимо контролировать выбор названий элементов и содержимого, применяется элемент <xsl:attribute>. Пример:
Получаем следующий результат:
Генерирование текста с помощью xsl:text
С помощью этого элемента можно создавать текстовые узлы, которые позволяют выполнить замену целых элементов текстом «на лету». Одно из преимуществ элемента заключается в сохранении пропусков.
Пример:
Элемент <xsl : copy> можно применять для копирования узлов, причем можно указывать отдельные копируемые части. Заданное по умолчанию правило для элементов состоит в том, что копируется только текст элемента. Но правило можно изменить, если воспользоваться элементом <xsl : copy> , который копирует целые элементы, текстовые узлы, атрибуты, инструкции по обработке и т.д.
Рассмотрим соответствующий пример:
Элемент <xsl : sort> используется для выполнения сортировки наборов узлов. Этот элемент используется внутри <xsl : apply-templates>, а атрибут select этого элемента применяется для указания объекта сортировки.
Пример, в котором показано, как отсортировать планеты с учетом их плотности:
С помощью элемента <xsl : if> можно выбирать варианты на базе вводного документа. Чтобы воспользоваться этим элементом, просто присвоить его атрибуту test выражение, оценивающее булевское значение.
Пример: перечисляем планеты и в конце горизонтальная линия.
Результат:
Применение xsl : choose
Элемент < xsl : choose>во многом схож с JAVA –конструкцией switch,которая позволяет сравнивать тестовое значение с несколькими возможными. Например, предположим, что атрибут COLOR добавляется к каждому элементу <PLANET>:
Правило: если узлом документа для результирующего документа является <HTML>, XSLT-процессору известно, что типом результирующего документа является HTML-код, и документ записывается соответствующем образом.
Можно указать три типа результирующих документов. XML задан по умолчанию, подобный документ начинается с объявления <?
xml?>. Кроме того, объектные ссылки не заменяются в результирующем документе символами, например < либо &; в результате отображается реальная объектная ссылка.
HTML – стандартный html 4.0, без XML-объявления, то есть не возникает необходимости закрывать элементы, которые обычно не имеют завершающего тега. Пустые элементы могут заканчиваться с помощью >, но не />. Кроме того, символы < и & в тексте не заключаются в соответствующие символы объектных ссылок.
TEXT – этот тип результирующего документа представляет собой сплошной текст. В этом случае результирующий документ представляет собой просто текст дерева документа.
Можно определить результирующий метод, присвоив атрибуту method элемента <xsl : output> значения “xml”, “html” либо “text”. Например если необходимо создать html-документ, даже если корневой элемент не является <HTML>, можно воспользоваться элементом <xsl : output>:
Другим полезным атрибутом для <xsl : output> является indent,позволяющий XSLT-процессору включить пропуск для выделения результата:
Атрибуты для <xsl : output> ,которые можнот использовать для создания или обновления XML-объявлений: