Что такое код xslt


Содержание

Способ: использование преобразований XSLT с файлами обмена данных XML проекта How to: Use XSLT Transformations with Project XML Data Interchange Files

Таблица стилей преобразования (XSLT) standard указывает определение языка для преобразования XML-данных. The Extensible Stylesheet Language Transformation (XSLT) standard specifies a language definition for XML data transformations. XSLT используется для преобразования XML-документов в документы XHTML или в других XML-документов. XSLT is used to transform XML documents into XHTML documents, or into other XML documents. В этой статье показано, как использовать XSLT с помощью Microsoft Office Project 2007 XML обмена данными файлов для фильтрации и отображения сведений о проекте. This article shows you how to use XSLT with Microsoft Office Project 2007 XML Data Interchange files to filter and display project information. (Сведения в этой статье был предоставили Джессика Britton корпорации Майкрософт.) (The content of this article was contributed by Jessica Britton, Microsoft Corporation.)

Сведения о сохранении проекты в виде обмена данными Project XML-файлов можно Сохранение и открытие проектов в формате XML. For information about saving projects as Project XML Data Interchange files, see Saving and Opening Projects in XML Format.

Таблицы стилей XSLT — это XML-документ, состоит из комбинации XHTML разметки, правила шаблона XSLT и XPath операторов, которые работают вместе. An XSLT stylesheet is an XML document that consists of a combination of XHTML markup, XSLT template rules, and XPath statements that work together.

Разметка XHTML определяет среды отображения, представленных в XML-данных. XHTML markup defines the display environment that XML data is presented in.

Правила шаблона XSLT предоставлены инструкции для преобразования XML-элемент источника определенным образом. XSLT template rules provide instructions for transforming a source XML element in a particular way.

Операторы XPath определите определенных элементов XML-документа. XPath statements identify specific elements within an XML document.

При XML-элемент соответствует шаблону XPath, вызывается связанного шаблона правила преобразования XSLT. When an XML element matches an XPath pattern, the associated XSLT template rule is invoked. Преобразованные данные выводятся в платформе отображения, указанный с помощью разметки XHTML. The transformed data is then rendered in the display framework specified by the XHTML markup.

Дополнительные сведения о правилах шаблон XSLT и XPath операторов воспользуйтесь ссылками в конце этой статьи. For more information about XSLT template rules and XPath statements, see the links at the end of this article.

Отображение сведений о проекте с помощью XSL-преобразований Displaying Project Information by using XSLT Transformations

Процедура 1. Procedure 1. Чтобы создать таблицу стилей XSLT: To create an XSLT stylesheet:

Создание файла XSLT для вашей таблицы стилей. Create an XSLT file for your stylesheet. При работе в Microsoft Visual Studio 2005 можно использовать шаблон XSLT-файл (в Visual Studio откройте меню файлвыберите команду Создатьи выберите пункт файл. If you are working in Microsoft Visual Studio 2005, you can use the XSLT File template (in Visual Studio, click File, point to New, and then click File. Этот шаблон предварительно заполняется в XML-коде показано в следующем примере. This template is prepopulated with the XML code shown in the following example. Если вы работаете в качестве другого текстового или XML-редактора, скопируйте этот шаблон XML и вставьте его в XSLT-файл. If you are working in another text or XML editor, copy this template XML and then paste it into your XSLT file.

Удалите следующий XML-код комментарии. Delete the following XML code comment. Здесь указывается, где написании кода XSLT. This is where you write your XSLT code.

Создание кода XSLT. Create your XSLT code. Код XSLT, показано в следующем примере выполняет следующие действия. The XSLT code shown in this example does the following:

Отображает текстовое значение имя дочернего элемента проекта в заголовок. Displays the text value of the Name child of the Project element in a header.

Проверяет сводки дочерним элементом каждой задачи для просмотра, если значение равно 0 (false). Tests the Summary child of each Task element to see if the value is 0 (false).

Проверка важных дочерних каждого элемента задачи для просмотра, если значение равно 1 (true). Tests the Critical child of each Task element to see if the value is 1 (true).

Отображает данные для особо важные задачи, которые не являются суммарными задачами полужирным шрифтом. Displays data for critical tasks that are not summary tasks in bold.

Отображает данные для некритические задачи, которые не являются суммарными задачами. Displays data for noncritical tasks that are not summary tasks.

Сортировка сведения о ресурсах по текстовое значение дочернего имя для каждого элемента ресурсов. Sorts resource information alphabetically by the text value of the Name child of each Resource element.

Проверяет дочернего превышение доступности для каждого элемента ресурсов является ли значение 1 (true). Tests the Overallocated child of each Resource element to see if the value is 1 (true).

Отображение сортированных ресурсе только с превышением доступности ресурсов. Displays sorted resource data for only overallocated resources.

Сохраните файл как ProjectTransform.xslt. Save the file as ProjectTransform.xslt.

После создания таблицы стилей XSLT, необходимо связать файл XML для проекта к нему, добавив инструкции по обработке. After you create the XSLT stylesheet, you must link your Project XML file to it by adding processing instructions. Процедура 2 показано, как связать ProjectTransform.xslt файл, созданный в процедуру 1 для всех файлов XML для проекта. Procedure 2 shows you how to link the ProjectTransform.xslt file created in Procedure 1 to any Project XML file.

Процедура 2. Procedure 2. Чтобы изменить файл XML для проекта для использования таблицы стилей XSLT: To modify the Project XML file to use the XSLT stylesheet:

Откройте файл XML для проекта в Visual Studio или в другом текстовом редакторе или редакторе XML. Open a Project XML file in Visual Studio, or in another text or XML editor.

Вставьте следующую строку кода после объявления XML — это первая строка в проект XML-файл. Insert the following line of code after the XML declaration, which is the first line in the Project XML file.

Удалите объявление пространства имен XML из внутри элемента проекта, который представляет собой корневой элемент проекта XML-файла. Delete the XML namespace declaration from inside the Project element, which is the root element of the Project XML file. Если не удаляйте объявление пространства имен, встроенного в элемент проекта, операторы XPath завершится с ошибкой в соответствии с элементами в проект XML-файл. If you do not delete the namespace declaration that is embedded in the Project element, XPath statements will fail to match elements in the Project XML file.

После выполнения действия 2 и 3, первые три строки проект XML-файл должен выглядеть как в следующем примере кода. After you perform Steps 2 and 3, the first three lines of your Project XML file should look like the following code example.

Сохраните файл XML для проекта. Save the Project XML file.

Мы рекомендуем сохраните файл с именем файла, отличный от исходное имя файла XML для проекта, так как изменения, внесенные в шаге 3 разорвать связь проекта XML-файла из проекта данных Interchange схемы XML. We recommend you save the file by using a file name that is different from the original Project XML file name, because the changes made in Step 3 disassociate the Project XML file from the Project XML Data Interchange Schema.

Просмотр преобразованный файл XML для проекта. View the transformed Project XML file. Можно выполнить преобразования XSLT в Visual Studio, установив таблицы стилей проекта XML-файла для ProjectTransform.xslt и затем выбрав команду Показать вывод XSLT в меню XML . You can perform the XSLT transformation in Visual Studio by setting the Stylesheet property of the Project XML file to ProjectTransform.xslt, and then selecting Show XSLT Output from the XML menu.

Можно также открыть проект XML-файл в Internet Explorer 7, Microsoft Office Word 2007 или любого другого приложения, поддерживающего XSLT. You can also open the Project XML file in Internet Explorer 7, Microsoft Office Word 2007, or any other application that supports XSLT.

На рисунке 1 показано преобразованные выходные данные проекта XML-файла в Word 2007. Figure 1 shows the transformed output of a Project XML file in Word 2007. При открытии файла XML для проекта по умолчанию только данные представления данных отображается. When you open the Project XML file, by default the Data only data view is displayed. Чтобы просмотреть преобразованные выходные данные необходимо выбрать представление данных ProjectTransform.xslt в области XML-документа . To see the transformed output you must select the ProjectTransform.xslt data view in the XML Document pane.

Рис. 1. Figure 1. XML-файл преобразованного проекта Transformed Project XML file

Применение языка преобразований XSLT

Язык преобразований XSLT

Во второй лекции мы уже рассматривали пример с использованием XSLT . В этой лекции мы рассмотрим эту технологию более подробно. XSL (eXtensible Stylesheet Language) переводится как Расширяемый Язык Стилей, и представляет собой язык для создания стилей XML документов. XSLT(XSL Transformations) — это язык преобразований XSL и является его частью. Стиль XSLT предназначен для преобразования иерархической структуры и формата документа XML . Результатами преобразования могут стать XML — файл , текстовый файл , программный код, HTML — файл , файл в формате PDF , и так далее. Этот язык предоставляет мощные возможности для манипуляции данными, информацией, текстом в иерархическом виде.

А это как раз то, что нужно для генерации кода. Применение XSLT может существенно помочь в генерации кода. Кроме того, он предоставляет удобную альтернативу технологии шаблонов Т4.

XSLT был разработан консорциумом W3C (World W >XSLT 1.0 стала рекомендацией 16 ноября 1999 года, а версия XSLT 2.0 стала рекомендацией 23 января 2007 года. Обе версии используются достаточно активно, и в этой лекции мы рассмотрим ту базовую функциональность, которая является для них общей. А это значит, что рассматривать будем в основном первую версию. Также упомянем некоторые команды из второй версии.

Как работает XSLT

Модель XSLT включает в себя такие части как:

  • документы XML,
  • стили XSLT ,
  • процессор XSLT ,
  • выходные документы.

Документы XML являются входными данными, которые нужно преобразовать в другие документы. Документ стиля XSLT является корректным (well formed) документом XML и содержит набор правил для выполнения преобразования. Иными словами, документ стиля является шаблоном.

Процессор XSLT является приложением, которое принимает в качестве входных данных документы XML и стили XSLT . Он выполняет трансформацию, то есть применение набора правил в стилях XSLT к документам XML . Результатом этой работы являются выходные документы.

Процессоры XSLT имеют множество реализаций и встроены во многие браузеры вроде Internet Explorer, Firefox, Mozilla, Opera и другие. В Internet Explorer используется инструмент MSXML, разработанный Microsoft. XSLT — процессор встроен в Internet Explorer, начиная с версии 4.5. Сгенерированный результат примеров данной лекции можно просматривать путем открытия XML -файлов в одном из браузеров. В конце лекции мы рассмотрим возможности запуска трансформации программным путем, используя соответствующие классы языка программирования.

XPath

Другой частью технологии XSL является язык XPath, предназначенный для доступа к узлам документа XML путем задания путей и выражений. Язык Xpath используется в файлах стилей для навигации внутри XML -документов, определения частей исходного XML -документа, которые совпадают с одним или более заранее заданными шаблонами. При нахождении совпадения процессор XSLT применит к нему соответствующие правила из файла стиля и преобразует его в часть результирующего документа. В файлах стилей XSLT выражения XPath используются весьма интенсивно.

Применение XSLT

Язык XSLT состоит из множества инструкций, записанных в виде тегов. Имя каждой инструкции обычно начинается с символов xsl . Для выполнения трансформации документ стиля XSLT должен являться корректным документом XML .

Для преобразования документа XML необходимо добавить в начало документа инструкцию, подобную следующей:

XSL — файл стилей обычно содержит множество элементов, самым главным из которых является элемент xsl :stylesheet . Именно он указывает, что данный XML — файл является файлом стилей. Кроме него могут содержаться другие элементы, например xsl :template , xsl :value-of . Документ XML и файл стиля передается в XSLT — процессор , который обрабатывает данные файлы, выполняет преобразование и выводит результат трансформации.

Ниже представлен документ XML , содержащий список языков программирования.

Необходимо вывести этот список в формате HTML . Для этой цели используем инструкцию xsl :for-each , которая будет применять часть шаблона к секциям документа, наименование которых указано в атрибуте select . В нашем случае укажем select=»languages/language» .

Файл стилей будет применяться следующий:

Шаблон внутри xsl :for-each выводит содержимое каждого элемента language из languages . Для этой цели используется инструкция xsl :value-of и задаваемый атрибут select=».» . Это означает, что процессор должен выбирать текст содержимого текущего элемента в документе. Кроме отражения содержимого можно задавать имена конкретных тегов, а также атрибутов для выборки значений, хранящихся в них. Примеры будут рассмотрены далее.

Илон Маск рекомендует:  Линейный градиент

Откроем XML файл через Internet Explorer или другой браузер . Будет выведен такой текст:

Мои любимые языки:

  • C#
  • Visual Basic
  • Delphi
  • Prolog

Одним из самых главных элементов в стиле является xsl :template . Служит для определения повторно используемого шаблона и содержит правила, по которым будет преобразован документ XML . В атрибуте match содержится выражение для отбора узлов, к которым будет применен шаблон . Также может присутствовать атрибут name . В этом случае есть возможность вызывать шаблон по имени инструкцией xsl :apply-templates .

Для повторения вывода шаблона для каждого элемента документа применяется инструкция xsl :for-each . Шаблон выполняется для каждого элемента, соответствующего условию, указанному в атрибуте select .

Инструкция xsl :value-of служит для вычисления выражения, записанного в атрибуте select с последующим выводом результата в том месте, где расположен сам элемент.

Фильтрация

Мы рассмотрели случай, когда считываются значения каждого узла. Однако часто возникает необходимость выбирать только часть данных, то есть их надо фильтровать. Шаблоны XSLT поддерживают два способа фильтрации.

Один из них — это применение атрибута select инструкции xsl :for-each , а второй — применение атрибута match элемента xsl :template . Применение match мы рассмотрим позже, а сейчас рассмотрим select .

Изменим немного файл с данными: добавим атрибут high , обозначающий, является ли язык из нашего списка языком высокого уровня. Также расширим сам список языков.

Заметим, что значение false для атрибута high стоит только для значения «Assembler» . Изменим немного файл таблицы стилей:

В секции [@ high =’true’] мы указываем, что выбирать следует только те узлы документа, у которых атрибут high имеет значение ‘true’ . Знак @ является символом, указывающим на то, что после него стоит имя атрибута.

Посмотрим на результат:

Языки высокого уровня:

  • C#
  • Visual Basic

  • Delphi
  • Prolog
  • Java
  • Perl

Как видим, значение «Assembler» не отображается в списке языков, то есть процессор XSLT отфильтровал данные согласно заданным условиям.

Сортировка

Кроме фильтрации другой часто применяемой операцией при генерации кода является сортировка . Атрибут order-by инструкции xsl :for-each служит для сортировки результата, для обозначения порядка прохода узлов документа при выполнении трансформации. Сортируемые поля перечисляются через точку с запятой, а также имеют перед своим названием знаки «+» или «-» , означающие сортировку по возрастанию или убыванию.

Рассмотрим немного измененный вариант документа — вместо атрибута high будем использовать элемент level , принимающий значения high или low . А имя языка запишем в элемент name .

В следующей таблице стилей для инструкции xsl :for-each применим атрибут order-by со значением +name , где знак плюса означает, что надо отсортировать по возрастанию.

В атрибуте select мы фильтруем по значению элемента level . Также в атрибуте select инструкции xsl :value-of указываем непосредственно имя элемента.

Получается такой результат.

Языки высокого уровня:

  • C#
  • Delphi
  • Java
  • Perl
  • Prolog
  • Visual Basic

Названия языков отсортированы в алфавитном порядке и значение «Assembler» не отображается в списке.

Другим способом сортировки является применение элемента xsl :sort путем вложения в xsl :for-each или в xsl :apply-templates . Элемент xsl :sort имеет атрибуты select и order , которые указывают на элементы, по которым должна осуществляться сортировка и на порядок сортировки соответственно.

Вложенные шаблоны

В сложных случаях возникает необходимость применения вложенных друг в друга шаблонов. Рассмотрим документ, в котором содержатся таблицы и их поля вместе с названиями.

В данном примере у нас будут два шаблона. Один будет основной, для таблиц, а другой будет вызываемым из него, для полей таблиц. Для вызова шаблона используется инструкция xsl :apply-templates .

XSLT -процессором будет сформирован следующий HTML -код:

При открытии сгенерированного результата в браузере будет показано следующее:

Инструкция xsl :apply-templates позволяет вызывать определенный шаблон и выполнять его много раз. Кроме того она является более наглядной и удобной альтернативой xsl :for-each .

Преобразование XML + XSLT с помощью Sablotron

Альтернативное введение в использование XSL Transformations в PHP при помощи Sablotron.

Данный материал следует воспринимать как альтернативное введение в использование XSLT с Sablotron в PHP.

Термины XSL и XSLT близки друг к другу, и новичкам их можно считать синонимами. Подробности, в чём же различия, описаны в спецификации XSL Transformations W3C.

Все, кто интересовался возможностями XSLT, читал стандартный пример из мануала, либо примеры, приводимые в статьях, посвящённых XSLT, на разных сайтах. Работающий пример из этой же серии:

Подобных примеров в Сети полно. Все они хорошо показывают, что XSL-трансформация в php работает, но после их прочтения остаётся неясным, зачем XSL нужен, скорее даже наоборот — почему XSL не нужен.

«Действительно», — подумает читатель, — «если данные лежат в базе, зачем городить огород, формируя сперва XML, а затем ещё преобразовывать через XSL? С тем же успехом это сделает класс HTML-шаблона.»

После этого разочарованный программист напрочь теряет интерес к XSL и вешает на технологию ярлык «ненужная заумь».

Вам, уважаемые читатели, повезло найти такой замечательный сайт, как «php в деталях». Здесь вы прочитаете о том, что XSL может не только преобразовывать XML в HTML, но и то, как можно при помощи XSL облегчить работу с php-скриптами.

Начало работы

Приведённый выше пример, хоть и слишком прост, хорошо иллюстрирует, каким образом делается XSL-преобразование в php.

Чтобы этот код работал, нужно установить XSLT-процессор Sablotron. На виндовой машине это делается так:

1. положить iconv(-1.3).dll, expat.dll и sablot.dll в C:windowsSystem (все файлы есть в стандартном дистрибутиве php)
2. открыть C:windowsphp.ini и в нём найти параметр extension_dir. Если значение параметра — «.» или нечто вроде «./», исправить на, скажем, «f:usrlocalphpextension» (или адрес директории, в которой у вас лежат/будут лежать расширения php). Теперь это будет директория расширений php.
3. положить в директорию расширений файл php_xslt.dll (это для php версии 4.2.x), либо php_sablot.dll (для версии 4.0.x)
4. в php.ini раскомментируйте строчку extension=php_xslt.dll (4.2.x) или extension=php_sablot.dll (4.0.x)

Теория

Использование XSLT позволяет отделить от php-скриптов работу по форматированию и представлению данных. Это не только уменьшение объёма кода, но и вынос большого количества логических конструкций (if, else, switch), а следовательно, облегчение работы по написанию и отладке программ. Смею утверждать, что тот, кто не пробовал работать с XSLT, не представляет себе, насколько php-кодирование облегчится.

Впрочем, не надо обольщаться: если у вас было несколько конструкций if … else в php-скрипте, они, скорее всего, появятся в том же количестве в XSL-файле.

Теперь к примерам.

Вывод списков

Все усложнения, происходящие от необходимости выводить список в удобочитаемом виде, переносятся на плечи XSL. Пример #2. Список статей на сайте с подсветкой статьи, которую читают сейчас, чередование цвета в строках и нумерация списка.

Произвольная разметка

Переводя на XML сайт с текстами (как этот), естественно хотеть сделать собственную разметку статей. Например, в контейнером important выделять очень важные места и иметь возможность выделять их не обязательно жирным шрифтом, но, может быть, цветом, CSS-стилем. Или писать цитаты как текст цитаты и иметь возможность менять стиль их оформления вместе с дизайном сайта.

Медленно продвигаясь от самого простого первого примера, многие натыкаются на эту проблему и не могут найти решения. Ведь если выделить абзац в тег

и делать для него шаблон, на первый взгляд, существуют три способа вывода содержимого:

1. тег xsl:value-of выводит текст, но удаляет все теги в абзаце
2 .тег xsl:copy-of выводит копию всего содержимого (без возможности применять шаблоны к детям — внутренним тегам) и самого контейнера

(что не очень красиво в HTML).
3. наконец, xsl:apply-templates применит шаблоны к детям, но пропустит текст

Проблема кажется безвыходной, но решение есть. Я использую «магические» шаблоны, которые выводят и текст и теги в нём со всеми атрибутами и без изменений. Пример #3:

Первым делом XSLT-процессор при вызове инструкции apply-templates ищет шаблон для каждого элемента. Для элемента strong шаблон есть, и именно в соответствии с ним такие элементы будут обработаны. Для гиперссылки шаблона нет, поэтому она будет выведена, как есть. Можно добавить в XSL шаблон и для ссылки, который бы выводил рядом с каждой текстовой ссылкой картинку для открытия её в новом окне:

* в шаблоне использован параметр match=»a[@href]» — этот шаблон будет применён только к тем тегам ссылок, в которых есть поле href и пропустит якоря ( ).

Невалидный код и

Кажущаяся необходимость писать валидный XML-код так же отпугивает многих неофитов XSLT. Хорошо, с завтрашнего дня будем писать статьи только валидно, благо дома можно проверить, нет ли в тексте XML-ошибки — mismatched tag или invalid token, — с этим как-нибудь справимся. Но ведь, по-хорошему, нужно и весь архив перевести в валидный код! И я так тоже думал, когда появилась возможность переделывать сайт на XML.

Решение проблемы довольно простое: не хочешь — не пиши валидно. Пиши, как привык, — без кавычек в атрибутах тегов, используй простой
и прочее. Достаточно заключить текст в контейнер (пример ниже).

Что касается , то здесь дела такие: элемента nbsp в XML нет. Есть lt, gt, quot, но не nbsp (вполне логично — это ведь non-braking space, который относится к форматированию и придуман для HTML). Поэтому его нужно объявить в документе, либо использовать только внутри .

Очень удобно! Большие изменения в архив вносить не придётся. Можно начать писать валидно, а продолжать как попало. А можно комбинировать эти два подхода. Чтобы не писать в архивные файлы тег CDATA, я сделал простое преобразование при помощи регулярных выражений (важно так же помнить, что один тег CDATA не должен содержать в себе другой).

Циклы

Допустим, нам нужно сделать форму для редактирования статьи, в том числе её даты. Для удобства пользования надо сделать три раскрывающихся списка (далее — «крутилки») — дата от 1 до 31, месяц, год. Первое решение, которое приходит в голову — сделать HTML-код крутилок в php, вставить в XML в контейнере CDATA, а затем вывести в XSL с параметром disable-output-escaping=»yes».

На самом деле, XSLT может и это. Достаточно вставить в данные XML число, номер месяца и год. Крутилки можно нарисовать сразу в XSLT.

Напишем шаблон, не предназначенный ни для какого элемента документа. Он будет вызываться командой xsl:call-template и получать два параметра: значение счётчика и максимум. Сперва он будет выводить нужные нам данные со значением счётчика, затем вызывать самого себя с параметрами максимум и счётчик, увеличенный на 1. Пример #5:

Оставляю вам в качестве домашнего задания шаблон для вывода крутилки с годом.

Резюме

Как видите, многое из того, что пишется в php-скриптах, даже при использовании класса шаблона, можно успешно спустить в XSLT. Но стОит ли заниматься этим?

Ответ зависит от условий работы в вашем проекте. Второй момент — технологичность работы.

Допустим, я захочу сделать на этом сайте меню быстрой навигации — раскрывающийся список со всеми статьями, — чтобы пользователь мог выбрать статью из списка и сразу перейти к ней. Ещё я захочу оставить список последних материалов (сейчас он находится справа вверху).

Если делать это при помощи класса шаблона типа FastTemplate, нужно два специальных блока и дополнительный код в php, который бы объявлял в шаблоне блок для списка всех статей и отдельно блок для списка 10 последних. Аналогичные действия необходимы в таком случае и при работе без класса шаблона. При работе с XML достаточно всего лишь одного набора данных «Дата => Статья», из которого в XSL-документе строятся и листбокс быстрого перехода, и список последних статей.

А если вдруг понадобится неважно для чего сделать другое оформление сайта (например, версия для WAP, или просто редизайн), в котором будет решено отказаться от списка 10 последних материалов. В случае первых двух технологий — класс шаблона и смешанный код — нужно будет убрать часть php кода, в случае XSLT изменения коснутся только XSL-файла. Такой процесс более технологичен, поскольку невозможно сделать новые ошибки в php-скриптах (а теперь представьте обратный случай — списка 10 последних статей не было, но его решили добавить!).

Итак, выбор остаётся за вами, а я как мог привёл сильные стороны технологии и доводы в пользу использования XML в проектах.

Введение в XSLT

XSLT представляет собой способ для XML-документов в другие XML или документы язык документа XHTML.

XPath это язык для навигации в XML-документах.

Вы должны иметь базовые знания

Перед тем, как продолжать учиться, мы должны иметь общее представление о следующем:

  • HTML / XHTML
  • XML / пространство имен XML
  • XPath

Если вы хотите изучать эти предметы во- первых, пожалуйста , наш домашняя страница , чтобы получить доступ к обучающим.


Что такое XSLT?

  • преобразование XSLT XSL средство (XSL Transformations)
  • XSLT является наиболее важной частью XSL
  • XSLT может преобразовать документ XML в другой документ XML
  • XSLT использует XPath для навигации в XML-документах
  • XSLT является стандартом W3C

XSLT = преобразование XSL

XSLT является наиболее важной частью XSL.

XSLT используется для преобразования документа XML в другой документ XML, или может быть идентификация браузера других типов документов, таких как HTML и XHTML. Как правило, XSLT каждым элементом XML преобразуется в (X) HTML элементов, чтобы завершить эту работу.

В XSLT можно добавлять элементы и атрибуты в выходной файл, или удалить элементы и атрибуты из выходного файла. Кроме того, можно изменить и сортировать элементы, выполнять тесты и решить, чтобы скрыть или показать, какой элемент, и так далее.

Одно общее утверждение описывает процесспреобразования, XSLT к исходному XMLдерева в результирующее дерево как XML.

XSLT использует XPath

XSLT использует XPath, чтобы найти информацию в документе XML. XPath используется для навигации по элементов и атрибутов в XML-документе.

Если вы хотите сначала узнать XPath, пожалуйста , посетите наш XPath учебник .

Как это работает?

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

XSLT является стандартом W3C

XSLT в 16 ноября 1999 года был создан в качестве стандартов W3C.

Для получения более подробной информации о W3C деятельности XSLT, пожалуйста , посетите наш W3C учебник .

Илон Маск рекомендует:  Шаблон сайта под дерево HTML, CSS

Глава 10

Работа с API процессоров XSLT

Как вы видели на протяжении всей книги, при работе с XSLT вам не требовалось никакого программирования. Но все процессоры XSLT, с которыми мы работали до сих пор, — Xalan, Saxon, XT, Oracle и MSXML — разработаны так, что при желании к ним можно обращаться и из кода программы. Здесь мы рассмотрим, как работать с этими процессорами в прикладной программе. Можете спокойно пропустить эту главу, если вы не программист или не собираетесь им становиться. Но если вы не будете использовать возможности программного интерфейса, вы потеряете довольно много, в том числе поддержку XSLT на web-серверах. В этой главе будет также показано, как преобразовывать XML в реляционную базу данных.

Для взаимодействия с различными прикладными программными интерфейсами (API, Application Programming Interface) процессоров XSLT я буду применять Java и JavaScript. С различными процессорами XSLT можно работать и при помощи таких языков, как С++ или Visual Basic, но до сих пор подавляющее большинство программистов выбирало Java, а язык JavaScript удобен для обработки преобразований в Internet Explorer. Кроме того, используемые вами процессоры XSLT специально разработаны для взаимодействия с Java, хотя с процессором MSXML3 можно работать из программы как с СОМ-объектом. Как я говорил, с процессором MSXML в Internet Explorer можно работать при помощи JavaScript, такой пример был показан еще в главе 1. И, как я обещал в главе 1, здесь я рассмотрю его более подробно.

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ДЛЯ РАБОТЫ С XSLT ИЗМЕНЯЕТСЯ ОЧЕНЬ БЫСТРО!

Будьте внимательны! Программное обеспечение для работы с XSLT изменяется очень быстро, зачастую ежемесячно, поэтому ко времени, когда вы будете читать книгу, оно частично может уже устареть. Тут уж ничего не поделаешь, и вам нужно за ним следить. Все примеры в этой главе были тщательно проверены по крайней мере тремя людьми — мной и двумя техническими редакторами, работавшими независимо, и на момент написания книги все примеры работали. Если у вас что-то не заработает, проверьте, конечно, такие элементы, как путь к классам Java, но также сверьтесь и с документацией по вашему процессору XSLT на предмет возможных изменений.

XSLT и JavaScript в Internet Explorer

Любите вы Microsoft или нет, нельзя отрицать тот факт, что эта фирма включает в Internet Explorer все больше средств поддержки XSLT (дополнительную информацию можно найти по адресу http://msdn.microsoft.com/xml/general/xmlparser.asp), и поэтому работа с браузером заслуживает нашего внимания. В главе 1 я представил пример создания преобразований XSLT в Internet Explorer при помощи JavaScript, и здесь мы рассмотрим этот пример подробнее. Как вы помните (см. главу 2), IE версии 5.5 и младше может осуществлять настоящие преобразования XSLT, если они реализованы на JavaScript (новый, только что вышедший IE 6.0 может разбирать непосредственно синтаксис XSLT просто путем просмотра XML-документов).

В этом случае я, пользуясь MSXML и JavaScript, преобразую

Шаблонизация на XSLT. Приемы и примеры

Начнем с азов.

Получение выходного HTML-кода получается путем преобразования XSLT-процессором входных XML-данных по XSL-шаблону. Соответственно, умение организовать правильный выходной поток, т.е. наш HTML-код, состоит из умения правильно организовать XML-данные и умения правильно писать шаблоны. (Хотелось бы отметить, что использование XSLT-преобразования не ограничивается генерацией только выходного HTML-кода).

Отсюда напрашивается вывод, что, прежде чем искать ошибку в шаблонах, надо проверить сами XML-данные, т.е. их структуру и состав. Проверка организуется двумя способами: либо выводом в лог-файл, либо выводом XML-данных вместо результата XSLT-процессора.

Если мы используем второй способ (вывод в браузер), то, чтобы эти данные опознал браузер как XML поток и представил в удобопонимаемом виде, необходимо выдать заголовок Content-type: text/xml:

Необходимо отметить, что когда пишется XSL-шаблон, то это уже не HTML, а XML, и надо руководствоваться правилами валидности XML:

  • Каждому открывающему тегу должен соответствовать закрывающий тег. Это в основном касается парности таких тегов, как
    , .
  • Если тег представлен без пары (одинарный), то он должен иметь закрывающий слэш. Это в основном касается таких одинарных тегов, как
    и .
  • Практически это означает, что нельзя перемешивать теги, должна быть четкая иерархия вложенности. Например, такие конструкции как: bla-bla-bla bla-bla-bla bla-bla-bla валидны в HTML, но недопустимы в XML.

    Использование включений

    Вот уже готово Ваше преобразование, осталось только придать внешний вид сгенерированной странице. Нет проблем, когда страница одна или две. Проблемы появляются, когда их больше десятка и весь сайт надо сделать в едином стиле.

    Действительно, не будешь же вносить повторяющиеся части HTML кода в каждый шаблон. В PHP-шаблонизаторах это решалось путем включений:

    В XSLT-преобразованиях есть аналогичный механизм >xsl:include / .

    Имеется файл main.xsl, который содержит «генеральный» шаблон, единый для всех страниц:

    В данном шаблоне есть правило , которое применяется ко всем элементам xml-документа. Данная инструкция, может быть заменена на .

    В нашем преобразовании должна быть инструкция и, соответственно, шаблонное правило, определенное в «генеральном» шаблоне:

    Если мы используем в «генеральном» шаблоне инструкцию то вместо используем именной шаблон: . В этом случае и технология разработки шаблонов – иная.

    В любом случае при использовании «генеральных» шаблонов надо придерживаться строго определенного формата выходных xml-данных.

    Например, у меня следующая структура:

    Под > понимается имя тега, соответствующему экшену в модуле, например, для экшена edit буде тег . Но разработка структуры — дело сугубо индивидуальное.

    В заключение хотелось бы заметить, что при использовании XSLT-процессора sablotron (версия php 4) необходимо определить базовую директорию, где лежат файлы включений, функцией xslt_set_base($xh, $filebase) , где переменная $filebase должна содержать полный путь к директории.

    Если что-то не получается.

    К сожалению, существующие XSLT-процессоры не имеют средств отладки. Приходится применять «дедовские способы» и «идти по шагам к цели», т.е. идти от разработки общих шаблонов к разработке частных шаблонов. Иначе это называют проектированием сверху вниз.

    Как правило, разработка шаблонов соответствует порядку разбора шаблонов, т.е. начинается с корневого элемента xml-данных. Может само обрамление дизайна – это уже дело рук самого дизайнера, но заготовку в виде пустого шаблона надо предусмотреть. И пошли так далее, углубляясь по ходу обработки структуры xml- данных.

    Если шаблон ничего не выводит, то надо проверить:

    • вызывается ли вообще данный шаблон (применяется ли к нему шаблонное правило)
    • наличие данных, обрабатываемых данным шаблоном
    • результат преобразования.

    Первое (вызывается ли вообще данный шаблон) проверяется довольно просто заменой нашего шаблона конструкцией типа:

    Если шаблон вызывался (применялось к нему шаблонное правило), то в результирующем документе увидим наши звездочки.

    Несколько труднее определить, какие входные узлы обрабатывал наш шаблон. Это определяется либо копированием обрабатываемых узлов в результирующее преобразование, либо определением имени обрабатываемого тега.

    Копирование узла осуществляется заменой нашего шаблона на следующую конструкцию:

    Результатом применения будет текст, содержащий значение текущего узла, обрамленного тегами .

    Определение имени обрабатываемого узла осуществляется заменой нашего шаблона на такой:

    Результатом применения будет текст, содержащий имя текущего узла, обрамленного тегами .

    Иногда полезно знать положение узла в контексте, тогда применим функцию position() к текущему узлу. Использование этой функции позволяет нам увидеть динамику прохода, т.е. применение шаблонных правил к текущей ветке xml-документа. Как правило, функцию position() применяют в циклах , но иногда применяют и к вызовам шаблонных правил.

    Проверка результата преобразования — это моделирование части работы шаблона (или всего полностью). Как и всякое моделирование, оно заключается в подготовке входных данных, которые должны представлять часть нашего xml-документа, самого шаблонного правила, т.е. набора части задействованных шаблонов, и, соответственно, простого скрипта преобразования, суть действий которого – взять файл xml-документа с диска, файл xsl-шаблона и вывести результат преобразования.

    Ближе к практике. Сортировка.

    Одна из часто применяемых практических задач – это вывод отсортированной таблицы, причем критерий сортировки определен данными, т.е. при разработке шаблона мы заранее знаем только перечень критериев, по которым будет производиться сортировка. Для примера возьмем прайс-лист, который можно отсортировать по:

    • цене
    • наименованию товара
    • наименованию группы товаров

    Если в шаблоне не запланировано вывода нескольких таблиц, то имя критерия сортировки можно содержать в корневом элементе. В случае, если таблиц несколько, то имя критерия сортировки, можно хранить в атрибуте корневого элемента фрагмента данных таблицы. Лично я использую для этого корневой элемент. Допустим, имеется следующая структура данных:

    Значение атрибута sort корневого элемента root определяет, какой тип сортировки использовать. В данном примере используется сортировка по категориям товаров (type).

    Шаблон, обрабатывающий тег

    ,
    и «строящий» таблицу, будет выглядеть следующим образом:

    Для реализации данного шаблона использован XSLT-элемент , который определяет XSLT переменную $sort . Данная переменная содержит значение атрибута sort корневого элемента root .

    Для определения критерия сортировки использовались предикаты выборки. При вычислении предиката его результат приводится к булевому типу. Синтаксически предикат заключен в квадратные скобки, т.е. конструкция типа показывает, что сортировка будет осуществляться для всех узлов по ключу, соответствующему атрибуту @type , при условии, что значение переменной $sort будет равно стоковому выражению «type». Соответственно, по каждому критерию, по которому будет осуществлена сортировка, необходима своя команда .

    Заключение

    Конечно, количество всяких методов и приемов при разработке XSLT шаблонов множество и «нельзя объять необъятное». В настоящее время даже появились разные стили написания шаблонов. Я попытался охватить лишь первые этапы «Путешествия в страну Шаблонизации».

    В данной статье были отражены в основном главные проблемы, с которыми сталкиваются юные XSLT-шаблонизаторы. Планируется продолжение.

    Уже после написания данной статьи автор узнал о существовании инструментария XSLT-разработчика, включающее средства XSLT-отладки. Это такие программные продукты, как: xselerate, Stylus Studio, Altova XML StyleVision. Данные программные продукты являются платными.

    Автор будет благодарен за любую критику данного материала, а также будет рад услышать ваши пожелания и узнать, с какими же вы сталкивались трудностями при разработке XSLT–шаблонов. Все замечания будут учтены при подготовке следующей статьи из цикла: «Шаблонизация на XSLT».

    Что такое код xslt

    Таблицы стилей преобразования (XSLT) превратился из ранних Extensible Stylesheet Language (XSL) standard. XSL задает определение языка для преобразования XML-данных представления и данных. Представление данных означает отображение данных в некотором формате и средний. Презентация является о стиле. Преобразование данных означает синтаксический анализ входного XML-документа в виде дерева узлов, а затем преобразование исходного дерева в результирующее дерево. Преобразование является об обмене данными.


    Так как эти функции служат двум целям distinct, XSLT был предложенный и позднее принято как отдельный стандарт только преобразования данных XML. XSL теперь обычно называют объектов форматирования XSL (XSL-FO), чтобы отличить его от XSLT. Будущее XSL-FO как стандартный не определен, так как большая часть его функциональность перекрывается с предоставляемым каскадных таблиц стилей (CSS) и HTML-тега. Если важна совместимость между поставщиками, можно избежать XSL-FO, пока она не станет полностью принят Worldwide Web Consortium стандартный.

    MSXML версии 4.0 и более поздних полностью внедрении и поддержке преобразований XSL (XSLT) версии 1.0 (рекомендовано W3c 16 ноября 1999). Если приложение XML требует более поздней версии XSLT, корпорация Майкрософт настоятельно рекомендует переход на новые классы framework System.Xml, так как существует фокусироваться всех будущих усилия разработчиков XML.

    В этом разделе рассматриваются следующие вопросы:

    Кодировки в XSLT-преобразованиях

    Кодировки в XSLT-преобразованиях

    Несмотря на то, что в логических деревьях, которыми манипулирует XSLT, текстовые узлы представляются в кодировке Unicode, очень часто в обрабатываемых документах бывает необходимо использовать также другие кодировки. К примеру, большинство русскоязычных документов хранятся в кодировках Windows-1251 и KOI8-R.

    Если внимательно присмотреться к преобразованиям, можно заметить, что, как правило, в них участвуют минимум три документа — входящий (преобразовываемый) документ, документ преобразования (преобразующий) и выходящий (преобразованный документ). Соответственно, каждый из них может иметь собственную кодировку.

    Кодировка входящего документа указывается в его xml-декларации. Например, документы в кодировке Windows-1251 должны иметь xml-декларацию вида

    Возможно, небольшим сюрпризом окажется то, что в соответствии со стандартом XML, имена тегов вовсе не обязаны состоять исключительно из латинских букв. В имени элемента можно использовать весь кириллический алфавит, а также множество других символов. Совершенно корректным будет документ

    Аналогичным образом кириллицу, а также другие наборы символов и алфавиты можно использовать и в самих преобразованиях, поскольку те в свою очередь также являются XML-документами.

    Что такое код xslt

    Прохаживаясь по страницам нашего форума и отвечая на вопросы я пришел к выводу, что большинство спрашивающих посетителей в основных чертах знают основы применения XSLT преобразования, но на практике сталкиваются с рядом вопросов — а как же это использовать?

    Про XSLT-преобразование написано много статей, и мне не хотелось бы повторяться и пересказывать теорию XSLT. В данной статье речь пойдет о некоторых приемах и хитростях XSLT-разработчика. На такое громкое название, как CookBook (книга рецептов), статья не претендует, но парой хитростей я поделюсь. Статья рассчитана на начинающих пользователей XSLT-шаблонизации, знающих хотя бы ее основы.

    Начнем с азов.

    Получение выходного HTML-кода получается путем преобразования XSLT-процессором входных XML-данных по XSL-шаблону. Соответственно, умение организовать правильный выходной поток, т.е. наш HTML-код, состоит из умения правильно организовать XML-данные и умения правильно писать шаблоны. (Хотелось бы отметить, что использование XSLT-преобразования не ограничивается генерацией только выходного HTML-кода).

    Отсюда напрашивается вывод, что, прежде чем искать ошибку в шаблонах, надо проверить сами XML-данные, т.е. их структуру и состав. Проверка организуется двумя способами: либо выводом в лог-файл, либо выводом XML-данных вместо результата XSLT-процессора.

    Если мы используем второй способ (вывод в браузер), то, чтобы эти данные опознал браузер как XML поток и представил в удобопонимаемом виде, необходимо выдать заголовок Content-type: text/xml:

    Необходимо отметить, что когда пишется XSL-шаблон, то это уже не HTML, а XML, и надо руководствоваться правилами валидности XML:

    • Каждому открывающему тегу должен соответствовать закрывающий тег. Это в основном касается парности таких тегов, как
    Примечание
    , .
  • Если тег представлен без пары (одинарный), то он должен иметь закрывающий слэш. Это в основном касается таких одинарных тегов, как
    и .
  • Практически это означает, что нельзя перемешивать теги, должна быть четкая иерархия вложенности. Например, такие конструкции как: bla-bla-bla bla-bla-bla bla-bla-bla валидны в HTML, но недопустимы в XML.

    Использование включений

    Вот уже готово Ваше преобразование, осталось только придать внешний вид сгенерированной странице. Нет проблем, когда страница одна или две. Проблемы появляются, когда их больше десятка и весь сайт надо сделать в едином стиле.

    Действительно, не будешь же вносить повторяющиеся части HTML кода в каждый шаблон. В PHP-шаблонизаторах это решалось путем включений:

    В XSLT-преобразованиях есть аналогичный механизм >xsl:include / .

    Имеется файл main.xsl, который содержит «генеральный» шаблон, единый для всех страниц:

    В данном шаблоне есть правило , которое применяется ко всем элементам xml-документа. Данная инструкция, может быть заменена на .

    В нашем преобразовании должна быть инструкция и, соответственно, шаблонное правило, определенное в «генеральном» шаблоне:

    Если мы используем в «генеральном» шаблоне инструкцию то вместо используем именной шаблон: . В этом случае и технология разработки шаблонов – иная.

    В любом случае при использовании «генеральных» шаблонов надо придерживаться строго определенного формата выходных xml-данных.

    Например, у меня следующая структура:

    Под > понимается имя тега, соответствующему экшену в модуле, например, для экшена edit буде тег . Но разработка структуры — дело сугубо индивидуальное.

    В заключение хотелось бы заметить, что при использовании XSLT-процессора sablotron (версия php 4) необходимо определить базовую директорию, где лежат файлы включений, функцией xslt_set_base($xh, $filebase) , где переменная $filebase должна содержать полный путь к директории.

    Если что-то не получается.

    К сожалению, существующие XSLT-процессоры не имеют средств отладки. Приходится применять «дедовские способы» и «идти по шагам к цели», т.е. идти от разработки общих шаблонов к разработке частных шаблонов. Иначе это называют проектированием сверху вниз.

    Как правило, разработка шаблонов соответствует порядку разбора шаблонов, т.е. начинается с корневого элемента xml-данных. Может само обрамление дизайна – это уже дело рук самого дизайнера, но заготовку в виде пустого шаблона надо предусмотреть. И пошли так далее, углубляясь по ходу обработки структуры xml- данных.

    Если шаблон ничего не выводит, то надо проверить:

    • вызывается ли вообще данный шаблон (применяется ли к нему шаблонное правило)
    • наличие данных, обрабатываемых данным шаблоном
    • результат преобразования.

    Первое (вызывается ли вообще данный шаблон) проверяется довольно просто заменой нашего шаблона конструкцией типа:

    Если шаблон вызывался (применялось к нему шаблонное правило), то в результирующем документе увидим наши звездочки.

    Несколько труднее определить, какие входные узлы обрабатывал наш шаблон. Это определяется либо копированием обрабатываемых узлов в результирующее преобразование, либо определением имени обрабатываемого тега.

    Копирование узла осуществляется заменой нашего шаблона на следующую конструкцию:

    Результатом применения будет текст, содержащий значение текущего узла, обрамленного тегами .

    Определение имени обрабатываемого узла осуществляется заменой нашего шаблона на такой:

    Результатом применения будет текст, содержащий имя текущего узла, обрамленного тегами .

    Иногда полезно знать положение узла в контексте, тогда применим функцию position() к текущему узлу. Использование этой функции позволяет нам увидеть динамику прохода, т.е. применение шаблонных правил к текущей ветке xml-документа. Как правило, функцию position() применяют в циклах , но иногда применяют и к вызовам шаблонных правил.

    Проверка результата преобразования — это моделирование части работы шаблона (или всего полностью). Как и всякое моделирование, оно заключается в подготовке входных данных, которые должны представлять часть нашего xml-документа, самого шаблонного правила, т.е. набора части задействованных шаблонов, и, соответственно, простого скрипта преобразования, суть действий которого – взять файл xml-документа с диска, файл xsl-шаблона и вывести результат преобразования.

    Ближе к практике. Сортировка.

    Одна из часто применяемых практических задач – это вывод отсортированной таблицы, причем критерий сортировки определен данными, т.е. при разработке шаблона мы заранее знаем только перечень критериев, по которым будет производиться сортировка. Для примера возьмем прайс-лист, который можно отсортировать по:

    • цене
    • наименованию товара
    • наименованию группы товаров

    Если в шаблоне не запланировано вывода нескольких таблиц, то имя критерия сортировки можно содержать в корневом элементе. В случае, если таблиц несколько, то имя критерия сортировки, можно хранить в атрибуте корневого элемента фрагмента данных таблицы. Лично я использую для этого корневой элемент. Допустим, имеется следующая структура данных:

    Значение атрибута sort корневого элемента root определяет, какой тип сортировки использовать. В данном примере используется сортировка по категориям товаров (type).

    Шаблон, обрабатывающий тег

    ,
    и «строящий» таблицу, будет выглядеть следующим образом:

    Для реализации данного шаблона использован XSLT-элемент , который определяет XSLT переменную $sort . Данная переменная содержит значение атрибута sort корневого элемента root .

    Для определения критерия сортировки использовались предикаты выборки. При вычислении предиката его результат приводится к булевому типу. Синтаксически предикат заключен в квадратные скобки, т.е. конструкция типа показывает, что сортировка будет осуществляться для всех узлов по ключу, соответствующему атрибуту @type , при условии, что значение переменной $sort будет равно стоковому выражению «type». Соответственно, по каждому критерию, по которому будет осуществлена сортировка, необходима своя команда .

    Заключение

    Конечно, количество всяких методов и приемов при разработке XSLT шаблонов множество и «нельзя объять необъятное». В настоящее время даже появились разные стили написания шаблонов. Я попытался охватить лишь первые этапы «Путешествия в страну Шаблонизации».

    В данной статье были отражены в основном главные проблемы, с которыми сталкиваются юные XSLT-шаблонизаторы. Планируется продолжение.

    Уже после написания данной статьи автор узнал о существовании инструментария XSLT-разработчика, включающее средства XSLT-отладки. Это такие программные продукты, как: xselerate, Stylus Studio, Altova XML StyleVision. Данные программные продукты являются платными.

    Автор будет благодарен за любую критику данного материала, а также будет рад услышать ваши пожелания и узнать, с какими же вы сталкивались трудностями при разработке XSLT–шаблонов. Все замечания будут учтены при подготовке следующей статьи из цикла: «Шаблонизация на XSLT».

    Язык трансформации XSL

    Что такое XSL трансформация

    Спецификация XSL (eXtensible Stylesheet Language) – еще один набор рекомендаций от W3C, который на этот раз представляет собой язык описания трансформации или набора преобразований данных XML документов в другие форматы. Трансформация осуществляется из одного XML формата в другой, например из документа XML, соответствующего вашей прикладной схеме в формат XML документа Microsoft Office или просто в XHTML. Возможно, также, преобразование не в расширение XML, а в любой другой структурированный формат, к примеру, в HTML (стандарты HTML и XHTML сильно похожи, но только внешне) или же просто в произвольное текстовое представление.

    Слово stylesheet в названии стандарта заставляет многих проводить аналогию с другим инструментом форматирования языков разметки — CSS (Cascading Style Sheets) – каскадными таблицами стилей. Оба эти стандарты имеют из общего, скорее всего только это самое слово в названии. С использованием XSL можно добиться эффекта применения CSS, но CSS ни разу не аналог XSL. Вот их принципиальные отличия:

    • CSS оказывает влияние только на стиль представления данных HTML/XHTML, в то время, как XSL может легко изменить само их содержание.
    • CSS применяется на стороне клиента интернет браузером, а XSL может быть применен как на стороне клиента, так и на стороне сервера.
    • XSL является расширением XML, а CSS – отдельный формальный язык.

    Стандарт XSL, в контексте преобразований XML в HTML, ближе по своему назначению к PHP (Hypertext Preprocessor) – скриптовому языку веб-программирования, применяемому на стороне сервера. И PHP и XSL могут существенно сократить объемы страниц интернет ресурсов, позволяя хранить только их содержимое (в базе данных или в XML файлах): без параметров стилей форматирования, самой HTML разметки, ссылок и метатегов. Более того, они могут использоваться совместно: на первом этапе средствами PHP формируется XML документ, соответствующий структуре запрашиваемой пользователем интернет страницы, а на втором этапе XSL преобразует этот XML в HTML. На завершающем этапе все это дело форматирует и “раскрашивает” браузер уже на стороне клиента по правилам, указанным в CSS. Таким образом, экономится не только место на сервере, но и объем трафика, поскольку передаются данные в оптимальном для каждого конкретного случая XML формате.

    Применением XSL весьма широкое. К примеру, XSL трансформация используется для преобразования результатов запросов в контексте работы информационных систем в удобный для восприятия, печати и дальнейшей обработки вид. Далее вашему вниманию будет представлен обзор основных конструкций XSL, инструмент для отладки схем трансформации и пример преобразования XML отчета в HTML.

    Основные элементы или синтаксис XSL

    Для составления XSL преобразований необходимы знания следующих стандартов:

    1. Синтаксис или XML схема языка преобразований XSL.
    2. Язык запросов к элементам XML документа XPath.
    3. Формат целевого документа (чаще всего HTML).

    С HTML многие знакомы, про XPath можно узнать, перейдя по соответствующей ссылке, а список основных элементов XSL будет представлен ниже.

    Заголовок схемы XSL трансформации

    Определение заголовка схемы трансформации XSL является корневым элементом соответствующего XML документа. Файлам со схемами трансформации чаще всего дают расширения .xsl. Помимо определения пространства имен xsl, заголовок схемы трансформации может содержать параметры выведения (output) результата трансформации: xml, html или text. Если элемент output не указан явно, то его параметры определяются интерпретатором по ходу разбора схемы трансформации. Параметры вывода – различные атрибуты элемента output могут влиять на форматирование конечного результата: появление дополнительных пробелом, символов перевода каретки и т.п. Я обычно не уделяю особого внимания этому элементу, поскольку в случае преобразования в XML дополнительное форматирование или его отсутствие мне не мешает, а в случае HTML его обработка — проблемы интернет браузера. С обычным текстовым форматом вывода я не сталкивался.

    Шаблон XSL

    Шаблон XSL используется для применения группы преобразований к определенному фрагменту XML документа. Группа преобразований помещается внутри определения шаблона, а целевой фрагмент документа отбирается посредством XPath запроса, указанного в атрибуте match. Самый распространенный вариант запроса – имя дочерних по отношению к контексту разбора элементов. Контекстом разбора до начала преобразований является сам документ и постепенно, по мере применения XSL шаблонов, контекст перемещается по структуре документа в соответствии с результатами XPath запросов. Пример шаблона ниже.

    Как видно из примера, шаблон применяется к XML элементам DataSet. В результате преобразования формируется HTML заголовок с текстом, соответствующим атрибуту Caption трансформируемого элемента, создается HTML таблица и по очереди применяются к дочерним по отношению к DataSet элементам два шаблона: с запросами элементов Columns и Records. Шаблоны для обработки элементов Columns и Records должны быть определены в схеме трансформации отдельно.

    Условные операторы XSL и вызов параметризованного шаблона

    При должном владении XSL с его помощью можно даже писать небольшие программы. Я имею в виду не программное управление обработкой данных, а решение задач, которые вообще не связанны с их обработкой. Такие случаи, безусловно, экзотика, но в процессе обработки сложно структурированных данных без проверки условий и циклов иногда не обойтись. Спецификация XSL поддерживает условные операторы, вызовы шаблонов с передачей параметров, изменение значения параметров в соответствии с математическими выражениями и т.д. Пример шаблона с оператором выбора и условным оператором приведен ниже:

    В процессе обработки элементов Column анализируется значение атрибута Name и в зависимости от его значения вызывается определенный шаблон. Шаблоны могут иметь имя, и для их вызова используется конструкция call-template. Сами шаблоны Name и AnyColumn определены в документе отдельно. Шаблон AnyColumn к тому же является параметризованным – принимает параметры выравнивания текста в ячейке таблицы. Каждый элемент when соответствует варианту выбора, а элемент otherwise – всем остальным вариантам. Полное описание примера трансформации будет приведено в следующем разделе.

    В конце тела шаблона присутствует условный оператор, с помощью которого определяется вид пустой ячейки: если значение атрибута Caption – пустая строка, то выводим символ “-”. Обратите внимание, что шаблон, помимо условия выбора элементов Column содержит атрибут mode со значением Row. Атрибут mode можно использовать для различных шаблонов с одинаковым значением атрибута match. В ходе трансформации именно значение атрибута mode в конструкциях применения шаблона apply-template будет определять выбор шаблона. Вот пример.

    Таким образом, если у шаблона не указано имя, то возможность его применения обусловлена контекстом трансформации в соответствии со значениями атрибута match и, дополнительно, атрибута mode. Место применения шаблона по контексту определяется конструкцией apply-template. Если шаблон имеет имя, то его можно принудительно применить к текущему контексту с использованием конструкции call-template без изменения самого контекста.

    Цикл и сортировка в XSL

    Язык XSL не только позволяет гибко настраивать трансформацию данных, но и проводить их предварительную сортировку. Сортировка доступна только в контексте перебора элементов, организованного циклом for-each. Какие элементы перебирать определяет атрибут select элемента for-each, а по каким данным их сортировать определяет уже атрибут select элемента sort. Значениями обоих этих атрибутов должно быть XPath выражение.

    Определение параметризованного шаблона XSL и присвоение значений атрибутов

    Следующий пример показывает, как можно определить шаблон с параметрами и как эти параметры можно использовать в теле шаблона. Сам вызов представленного в качестве примера шаблона был рассмотрен в разделе об условных операторах чуть выше.

    Обратите внимание, каким образом выходному элементу p присваивается значение атрибута align – c помощью отдельной конструкции attribute и конструкции value-of, которая обращается к значению входного параметра.

    Отладчик XSL схем

    Ну и в заключение представляю вашему вниманию отладчик XSL схем, который можно использовать в качестве обучающей программы по теме преобразования XML документов.

    Скачать демонстрационную программу.
    Скачать пример XSL трансформации.
    Скачать Microsoft .NET Framework 3.5 SP1.

    Окно отладчика XSL разделено на 4 части: область редактирования XSL, область просмотра входного XML, область просмотра результата трансформации в текстовом виде HTML и область просмотра результата в интернет браузере. В качестве примера данных используется все тот же отчет, что рассматривался в ходе изучения XPath, а в качестве XSL схемы – преобразование отчета в таблицу HTML. Фрагменты этой схемы трансформации уже были представлены выше в разделе описания синтаксиса XSL. Теперь все это предстанет в виде единого документа. Вот перечень требований к результатам трансформации:

    • Список персонала должен быть отсортирован по значению Ф.И.О. в алфавитном порядке.
    • Выравнивание первой колонки по левому краю, выравнивание стажа по правому краю, выравнивание всех остальных колонок по центру.
    • Пустые значения обозначаются прочерком.

    Надеюсь, что эта программа сможет стать полезным инструментом в процессе составления вами своих собственных схем трансформации данных. Пройдя по следующей ссылке, можно увидеть, как выглядит результат XSL трансформации на стороне клиента .

    Пример XSL трансформации на C# можно посмотреть здесь.

    Опубликовал +автор Март 07 2012 11:56:14 20044 Прочтений
    Компьютерные курсы и курсы программирования

    Курс для начинающих программистов на C# и VB.NET.

    Построение SQL запросов и работа с базой данных.

    Программирование на C#. Краткое руководство.

    Применение регулярных выражений.

    Примеры программной Plug-in архитектуры.

    Язык разметки XML и его расширения с примерами.

    Языки HTML, XHTML и CSS с примерами разметки.

    Основы веб-дизайна: решения типовых задач верстки.

    Руководство по программированию на PHP для начинающих.

    Шаблоны проектирования
    Каталог шаблонов проектирования программных компонентов.

    Рефакторинг кода
    Каталог приемов рефакторинга программного кода.

    Илон Маск рекомендует:  Видео о веб-студиях
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL
    Справочные материалы