Первые шаги xml xslt


Содержание

Синтаксис XSL

В заголовке документа помещается объявление XML, в котором указывается язык разметки документа, номер его версии и дополнительная информация, а в самом начале документа указывается стилистика XML и импорт пространства имен XML

Элемент xsl:stylesheet может содержать следующие типы элементов:

  • xsl:import
  • xsl:include
  • xsl:strip-space
  • xsl:preserve-space
  • xsl:output
  • xsl:key
  • xsl:decimal-format
  • xsl:namespace-alias
  • xsl:attribute-set
  • xsl:variable
  • xsl:param
  • xsl:template

В общем случае содержание XSL-документа должно удовлетворять определенным требованиям:

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

Неправильно:

  • в XML учитывается регистр символов;
  • все значения атрибутов, используемых в определении тэгов, должны быть заключены в кавычки:

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

    Неправильно:

  • вся информация, располагающаяся между начальным и конечным тэгами, рассматривается в XML как данные, и поэтому учитываются все символы форматирования;
  • Символ неразрывного пробела необходимо записывать как или
  • Использование значений XML в атрибутах тегов

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

    Для изображения в src подставляется значения тега dir и image_small , в атрибуты alt и title передается значение тега name .

    Использование Javascript

    Для вывода Javascript кода используйте следующую конструкцию:

    Если Вам нужно подставить какие-либо данные в Javascript-код из XML, то Javascript-код оборачиваете в некую функцию, которая принимает параметр myfunct(x, y, z) и т.д. Сами параметры вызываете в отдельном блоке, например:

    Экранирование

    При необходимости использовать фигурную скобку в атрибутах, экранирование осуществляется удвоением скобки:

    Глава 1

    Добро пожаловать в мир языка преобразований расширенной таблицы стилей, XSLT (Extensible Stylesheet Language Transformations). Эта книга послужит вам путеводителем в огромном мире XSLT, который каждую минуту расширяется непредсказуемым образом. Мы хотим, чтобы этот мир стал и вашим миром. Нам нужно охватить весьма большой материал, поскольку в наши дни XSLT используется в очень интересных местах и очень интересными способами. В этой книге вы увидите, как это все работает.

    Собственно XSLT представляет собой средство обработки и форматирования содержимого документов XML. XML уже стал очень популярным, теперь настала очередь XSLT. XML дает вам возможность структурировать данные в документах, a XSLT позволяет работать с содержимым документов XML — оперировать содержимым и создавать другие документы (например, при сортировке XML записей базы данных сотрудников или при сохранении данных в документ HTML, а также при детальном форматировании данных).

    С содержимым документов XML можно работать, написав собственную программу, реализующую интерфейс с приложениями разборщика (parser) XML, однако при этом приходится писать код программы самостоятельно. При помощи XSLT вы можете выполнять задачи подобного же рода, не прибегая к программированию. Вместо того чтобы писать код обработки содержимого документов XML на Java, Visual Basic или С++, можно просто указать при помощи XSLT, что вы хотите сделать, и процессор XSLT сделает все остальное. Именно для этих целей и предназначен XSLT, и в мире XML он выходит на ключевые позиции.

    XSL = XSLT + XSL-FO

    Сам XSLT в действительности является частью более крупной спецификации — расширенного языка таблиц стилей, Extensible Stylesheet Language, или XSL. XSL предназначен для задания точного, до миллиметра, формата документов.

    Форматирующая часть XSL, представляющая гораздо более крупную спецификацию, чем XSLT, основана на специальных форматирующих объектах (formatting objects) — эта часть XSL часто называется XSL-FO (или XSL:FO, или XSLFO). XSL-FO — сложная тема, поскольку задание стилей документов при помощи форматирующих объектов может оказаться весьма запутанным процессом. Фактически XSLT изначально был добавлен в XSL для того, чтобы проще осуществлять преобразование документов XML в документы, основанные на форматирующих объектах XSL-FO.

    Эта книга посвящена XSLT, но рассматривается также и введение в XSL-FO, в том числе способ использования XSLT для преобразования документов в форму XSL-FO; в конце концов, XSLT впервые был представлен для упрощения работы с XSL-FO. В начале данной главы будет приведен обзор как XSLT, так и XSL-FO.

    Краткая историческая справка

    XSL был создан консорциумом World Wide Web Consortium (W3C, www.w3.org) — объединением групп, первоначально возглавлявшимся Тимом Бернерс-Ли (Tim Berners-Lee). W3C — это комитет, выпускающий спецификации, — такие, как спецификация для XSL, используемая в данной книге. Именно спецификации делают XML и XSL тем, чем они являются.

    Вы можете прочитать об истории работы комитета W3C с языками стилей по адресу www.w3.org/Style/History. Интересно посмотреть, какая объемная работа была проделана и как много языков стилей сменилось за это время.

    W3C первоначально, в 1980-х, разработал «дедушку» XML, SGML (Standard Generalized Markup Language, стандартный обобщенный язык разметки), однако он был слишком сложен для того, чтобы завоевать широкую популярность, и в действительности XML (как и HTML) представляет собой упрощенную версию SGML. W3C также создал для работы совместно с SGML язык стилей DSSSL (Document Style Semantics and Specification Language, язык семантики стиля и спецификации документа) — и так же, как XML был произведен от SGML, XSL основан на исходном DSSSL. Как утверждает W3C: «Модель, используемая XSL для отображения документов на экране, базируется на многих годах работы над сложным языком стилей по стандарту ISO, который называется Document Style Semantics and Specification Language (DSSSL)».

    Однако исходная часть XSL, то есть XSL-FO, все равно оказалась не настолько простой, чтобы найти широкое распространение, поэтому XSLT был представлен как средство упрощения преобразования документов XML в форму XSL-FO. Как оказалось, именно XSLT был взят на вооружение, поскольку он представляет собой законченный язык преобразований, позволяющий работать с содержимым документов XML без написания программного кода, преобразовывать эти документы в другие документы XML, формат HTML или другие основанные на текстах форматы. Большой успех XSLT удивил даже W3C.

    Преобразования XSLT-XSL

    XSLT позволяет работать непосредственно с содержимым документов XML. Например, у вас может быть огромный документ XML, содержащий всю бейсбольную статистику за последний сезон, однако вас может интересовать только статистика для питчеров. Чтобы извлечь только эти данные, можно написать программу на Java, Visual Basic или С++, которая будет работать с разборщиками XML. Разборщики представляют собой специальные программные пакеты, читающие документы XML и передающие все данные документа последовательно в ваш код. Затем можно создать новый документ XML, pitchers.xml, содержащий только данные о питчерах.

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

    Помимо преобразования одного документа XML в другой документ XML, можно также преобразовывать документы XML в документы разных типов — таких, как HTML, документы форматированного текста (RTF), документы, использующие XSL-FO и другие. Можно также преобразовать документы XML в иные основанные на XML языки — такие, как MathML, MusicML, VML, XHTML и другие — все это можно осуществить, не прибегая к программированию.

    Во многих случаях язык XSLT может работать аналогично языку баз данных, такому как SQL (Structured Query Language, язык структурированных запросов, — известный язык доступа к базам данных), поскольку он позволяет извлекать требуемые данные из документов XML во многом похоже на то, как инструкция SQL извлекает данные из базы данных. Иногда даже говорят о XSLT как о SQL в Web, и если вы знакомы с SQL, это даст вам некоторое представление о безграничных возможностях XSLT. Например, при помощи таблицы стилей XSLT можно извлечь подмножество данных из документа XML, создать оглавление для большого документа, найти все элементы, удовлетворяющие определенному условию (например, поставщиков с определенным индексом) и т.д. И все это — за один шаг!

    XSL-FO: форматирующие объекты XSL

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

    С другой стороны, из-за излишней сложности XSL-FO не очень популярен, и его нельзя сравнивать с XSLT в этом отношении. Существует не так много программ, поддерживающих XSL-FO, и ни одна из них не реализует достаточно полное приближение к стандарту. Так же как самый распространенный способ применения XSLT — это преобразование XML в HTML, самый распространенный способ применения XSL-FO — преобразование XML в текст в формате PDF (Portable Data Format, переносимый формат данных), используемый в Adobe Acrobat. Пример такого преобразования приведен в конце этой главы, а также в главе 11.

    Спецификации W3C

    W3C выпускает спецификации как для XML, так и для XSL, и именно с ними мы будем работать на протяжении всей книги. Спецификации W3C не называются стандартами, поскольку, по международным соглашениям, стандарты могут создаваться только уполномоченными государством комитетами. Вместо этого W3C начинает с выпуска требований (requirements) для новой спецификации. Требования представляют собой список целей и обзоров спецификации, но сама спецификация на этот момент еще не написана. Далее W3C выпускает спецификации: сначала в виде рабочих проектов (working drafts), которые могут комментировать все заинтересованные лица, затем в виде рекомендаций-кандидатов (candidate recommendations), которые еще могут быть изменены; и, наконец, в виде окончательных рекомендаций (recommendations), которые уже нельзя изменять.

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

    • полная рекомендация-кандидат XSL www.w3.org/TR/xsl/. Это большой документ, определяющий все аспекты XSL;

    • рекомендация XSL Transformations 1.0 по адресу www.w3.org/TR/xslt. Предназначение XSLT состоит в преобразовании содержимого документов XML в другие документы, и именно поэтому XSL стал таким популярным;

    • рабочий проект XSLT 1.1 по адресу www.w3.org/TR/xslt11. Это рабочий проект XSLT 1.1, который не будет далее разрабатываться до рекомендации — W3C планирует добавить всю функциональность XSLT 1.1 в XSLT 2.0;

    • требования XSLT 2.0 по адресу www.w3.org/TR/xslt20req. W3C выпустил группу целей для XSLT 2.0, включая дополнительную поддержку схем XML;

    • спецификация XPath 1.0 по адресу www.w3.org/TR/xpath. XPath используется для нахождения и указания на определенные разделы и элементы в документах XML так, чтобы можно было с ними работать;

    • требования XPath 2.0 по адресу www.w3.org/TR/xpath20req. XPath в данный момент обновляется — добавляется дополнительная поддержка XSLT 2.0.

    Версии XSLT

    Спецификации XSLT разрабатывались значительно активнее, чем спецификации для всего XSL. Рекомендация XSLT 1.0 была окончательно принята 16 ноября 1999 г., и эта версия является сегодня основной версией XSLT.

    Затем появился рабочий проект XSLT 1.1 и, хотя первоначально он рассматривался в качестве пролога новой рекомендации, ряд сотрудников W3C начал работать над XSLT 2.0 — и через некоторое время W3C решил прекратить работу над рекомендацией XSLT 1.1. Это означает, что рабочий проект XSLT 1.1 не будет развиваться далее — он навсегда останется в виде рабочего проекта и никогда не станет рекомендацией. Иными словами, не будет выпущено официальной версии 1.1 для XSLT.

    Однако консорциум W3C также утверждает, что он планирует включить большую часть того, что было сделано в рабочем проекте XSLT 1.1, в XSLT 2.0, и поэтому в данной книге я кратко рассмотрю рабочий проект XSLT 1.1. Я обязательно отмечу материал как «только для рабочего проекта XSLT 1.1» при обсуждении нового материала, представленного в рабочем проекте XSLT 1.1.

    Ниже перечислены изменения в XSLT 1.0, сделанные в рабочем проекте XSLT 1.1; заметьте, что этот список приведен здесь только в качестве справочного материала, так как большая часть материала вряд ли пока что-нибудь для вас значит:

    • исключен поддерживаемый в XSLT 1.0 тип данных фрагмента результирующего дерева;

    • метод вывода больше не может произвольно добавлять узлы пространства имен, поскольку процесс установки пространства имен применяется автоматически;

    • была добавлена поддержка для XML Base;

    • теперь поддерживаются несколько выходных документов при помощи элемента

    • функции расширения теперь можно определять при помощи функции

    • функции расширения теперь могут возвращать внешние объекты, не соответствующие никаким типам данных XPath.

    В этой книге рассматривается рекомендация XSLT 1.0. а также рабочий проект XSLT 1.1. В развитие данной темы W3C и выпустил требования для XSLT 2.0, которые также рассматриваются в книге под именем XSLT 2.0. В следующем списке приведен обзор целей XSLT 2.0:

    • добавить дополнительную поддержку для работы с содержимым схемы XML при помощи XSLT;

    • упростить работу со строками;

    • упростить работу с XSLT;

    • улучшить поддержку различных языков;

    • сохранить обратную совместимость с XSLT 1.0;

    • поддерживать повышенную эффективность процессора.

    Илон Маск рекомендует:  Что такое код ldap_t61_to_8859

    Хотя XSLT 2.0 еще некоторое время не будет выпущен в окончательном варианте, я рассмотрю все, что о нем известно, при обсуждении имеющих к нему отношение тем. Например, разработанный W3C последователь HTML — это основанный на XML язык XHTML. В XSLT 1.0 и в рабочем проекте XSLT 1.1 нет прямой поддержки преобразований из XML в XHTML, поэтому нам придется создать это преобразование с нуля. Однако такая поддержка входит в состав XSLT 2.0, и я отмечу этот факт при обсуждении XHTML.

    Таким образом, мы рассмотрели краткий обзор тематики; давайте перейдем к работе. XSL предназначен для работы с документами XML, поэтому сначала я хочу рассмотреть структуру документов XML. Вы будете работать с документами XML, но сами таблицы стилей XSL также являются документами XML, что следует помнить при их написании. В этой книге считается, что вы обладаете знаниями и XML, и HTML.

    Документы XML

    Вы должны понимать, как работают документы XML, поэтому проверьте по материалам этого раздела, готовы ли вы к работе. Давайте посмотрим на примере документа XML:

    Создание отчетов на основе xsl-трансформаций (xslt)

    Опубликовано:
    25 января 2020 в 07:59

    XSLT (eXtensible Stylesheet Language Transformations) — язык преобразований xml-документов.

    Введение

    Задача генерирования отчетности в системе DIRECTUM является одной из наиболее востребованных.

    В этой статье описан возможно не самый широко распространенный способ формирования html-отчетов на основе xslt-преобразований. Но несомненно заслуживающий внимания, как один из наиболее удобных и наглядных (если сравнить например с rtf-отчетом).

    Если очень коротко, то xslt-преобразование заключается в трансформации xml-схемы с данными в отчет на основе предварительно подготовленного шаблона.

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

    Чтобы сформировать отчет понадобятся две составляющие:

    — xml-данные для отчета

    Данные в формате xml

    Данные в формате xml можно получить прямым sql-запросом:

    Описанный выше запрос вернет данные в таком формате:

    Данные нужно обернуть в тег и сохранить в файл, добавив заголовок:

    Вторая строка заголовка xml-файла данных важна, в ней указано, что в файле C:\Temp\template.xsl хранится шаблон отчета в который необходимо передать данные.

    В итоге получится такой xml-файл:

    Если открыть полученный xml-файл, браузер будет использовать указанный в заголовке шаблон и подставит данные в него.

    xsl-шаблон

    Далее необходимо создать шаблон, имя файла которого указано в заголовке xml-файла. xsl-шаблон отчета представляет собой обыкновенную html-страницу с особым заголовком:

    В тэге указаны версия и ссылка пространства имен xsl-преобразования. В остальном шаблон — это обыкновенная html-страница.

    Теперь нужно сотворить немного магии и указать какие именно данные из xml и в каком виде вставить в шаблон отчета.

    Для работы с данными в xsl-шаблоне используются специальные теги.

    Цикл for-each и правила выбора

    Чтобы перебрать все узлы из xml-файла данных нужно использовать конструкцию:

    Она позволит перебрать все дерево данных. Для того, чтобы выбрать только определенные данные из дерева используется правило выбора select=»orgs/org». Правила описаны на языке запросов XPath. В текущем примере будет последовательно отобрана каждый узел из .

    Сортировка

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

    Теперь записи будут перебираться предварительно отсортированными по наименованию.

    Отображение значения

    Но просто перебрать не достаточно, нужно вывести в отчет нужные данные, для этого существует конструкция:

    Конструкция отобразит значение тэга (наименование контрагента).

    Гиперссылки

    Чтобы сделать из наименования контрагента ссылку, по которой можно будет открыть запись справочника, нужно немного модифицировать код:

    Сase-оператор и фильтрация

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

    В конструкции choose с помощью фильтра test проводится проверка содержимого тэга (ИНН) на пустое значение ( ). Если содержимое не пусто, то выводиться значение. В других случаях выводится сообщение «ИНН не указан».

    Еще один фильтр

    С помощью фильтра возможно реализовать еще одну «рюшечку», которая будет помечать контрагентов с ИНН начинающихся например с кода региона «18». Выглядеть это будет так:

    Конструкция для всех записей ИНН которых начинается с «18» дополнительно выведет значок ♥ .

    В конечном итоге получится такой код шаблона:

    Результат

    А если открыть xml-файл в браузере, то получится такой отчет:

    Вывод

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

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

    Какие есть плюсы при реализации отчетов описанным способом:

    — Требуется разработка относительно небольшого количества прикладных вычислений;

    — Разработка шаблона наглядна и также относительно нетрудоёмка.

    Всё описанное в статье легко интегрируется в аналитический отчет, ссылка на который приведена ниже.
    Пример xsl отчета

    Собственно отображение задач в Директум выполняется как раз таким образом.

    Опять же трансформацию можно производить программно:

    Не увидел в статье ответа на вопрос зачем нам выгружать данные сначала в xml-файл, а потом еще и писать xslt (который еще и изучить надо), если можно сразу выгрузить в формате html (по сути это тот же xml).
    Аргументируйте, пожалуйста, и приведите примеры, применимые к отчетам Directum.
    Обычно разделение данных и представления делают когда надо одни и те же данные надо по-разному отображать (отображать в нескольких представлениях динамически формируемые данные или если данные хранятся где-то и отображение может со временем меняться).
    С отображением схем задач понятно почему надо использовать xslt — у нас данные уже есть, их надо только отобразить. Я не встречал никогда чтобы данные еще где-то хранились в xml и их надо было только отобразить.
    К недостаткам представленного подхода еще можно отнести то, что xsl-файл еще надо где-то размещать, чтобы отчет можно было переслать по почте, например.

    Александр, статья писалась для разработчиков, которые еще не слышали (или слышали, но краем уха) про xslt. И призвана подтолкнуть их к изучению этой темы.
    По поводу того «зачем нам выгружать данные сначала в xml-файл» — можно и не выгружать, а реализовать по-другому, как например выше в комментарии описал Роман.
    «а потом еще и писать xslt (который еще и изучить надо)» — именно для этого статья и писалась, чтобы начать изучать xslt.
    Про «сразу выгрузить в формате html» — чтобы это сделать, все равно нужно вычисления писать, которые данные «обернут» в тэги html-разметки. И такой путь не соответсвует парадигме MVC. Если отчетик небольшой и известно, что никаких изменений в нем не предвидится, то, возможно, отступить от этой парадигмы не страшно.
    Но если предполагается, что периодически необходимо вносить доработки в отчет, то поддержка такого отчета станет трудоемкой задачей.
    К примеру сейчас сущетсвует достаточно много государственных сервисов, которые выдают информацию в виде xml. Эти данные можно сразу отображать в удобно перевариваемом виде, в нужной форме.
    А если случится так, что форма видоизменится и/или в xml добавятся новые (или удалятся старые) реквизиты, то достаточно подкорректировать xsl-шаблон, чтобы форма отчета осталась актуальной не проводя при этом доработок вычислений.
    Что касается размещения xsl-файла. То размещать его можно, к примеру, в аналитическом отчете. А чтобы отправить отчет сформированный по xsl-шаблону сам шаблон уже не нужен, можно отправить html-страницу построенную на основе шаблона.

    Алексей,
    Если у нас уже есть xml и нам надо его отобразить пользователю, то я согласен что надо использовать xslt.
    Не надо показывать незнающим разработчикам что надо сначала выгружать sql-запросом в xml, учить xsl и писать преобразование. Думаю, нужна статья, показывающая, что в большинстве случаев html можно и надо формировать прямо на sql. Отображение sql -> html частая задача, xml->html редкая. Изучать что-то новое (при этом сомнительно удобное) и делать на нем все подряд отчеты не стоит. Потому что тем, кому достанется такое наследие, тоже придется учить xslt.
    Разделить данные и представление можно в рамках одного sql-запроса. Так что выгружать сначала в xml, а потом его преобразовывать в HTML xslt нет особого смысла, ведь промежуточный xml нигде использоваться не будет. Вот как выглядит sql-запрос для такого же результата:

    Это я всё к тому, что статья в каком-то неправильном ключе подана. Сам по себе материал полезен, но логичнее было бы сразу указать, что такой подход стоит использовать если уже есть xml или он для чего-то нужен, а не как промежуточное звено. А лучше сначала написать статью про формирование html-отчетов с помощью for xml, про эту штуку думаю тоже мало народу знает, хотя она ну очень удобная. SQL знают все, учить почти ничего нового не надо.

    Александр,
    Выше я уже написал, что статья для того, чтобы подтолкнуть разработчиков к изучению xsl. И приведенный пример не является идеальным ни с технической, ни с точки зрения бизнес-процессов. Это просто демо-пример с помощью которого описаны базовые xsl-конструкции.
    Отвечу на некоторые Ваши утверждения, которые кажутся мне спорными:
    «Отображение sql -> html частая задача, xml->html редкая» — очень спорное утверждение. Слишком много ньюансов для решения различных задач и в каждой задаче луший вариант необходимо выбирать. Универсального нет.
    «лучше сначала написать статью про формирование html-отчетов с помощью for xml» — думаю, тема тоже интересная, но эта статья именно про xsl.
    «SQL знают все, учить почти ничего нового не надо» — тоже спорное утверждение.
    «Разделить данные и представление можно в рамках одного sql-запроса» — можно. Но далеко не всегда нужно. Все-таки основная задача SQL-сервера не в этом. Особенно это касается крупных заказчиков, у которых SQL-сервер загружен «основной» работой. И, опять же, цель статьи была — рассказать именно про xsl.
    И по результатам переписки, думаю Вам есть что рассказать по тематике отображения данных базы данных в виде html-страницы. Если бы такая статья(и) появились на клабе, то было бы очень здорово. Сам бы с удовольствием почитал.

    Алексей, давайте не уходить в сторону от основного вопроса, он звучит так: зачем мне делать SQL->XML->[xslt]->HTML, если можно SQL->HTML.
    1) Если у нас уже есть XML (в таком формате хранятся данные или в таком формате откуда-то приходит), то я согласен, что хорошим вариантом отображения является использование XSLT. Собственно статья об этом (а не о том, что ВООБЩЕ отчеты хорошо и удобно строить используя xslt). И это надо указать в статье, и не приводить смущающих примеров (с выгрузкой в XML с SQL) и сравнивать с rtf. Подавляющее большинство отчетов в Directum строится на основе данных из SQL-таблиц, а не XML.
    2) Аргумент про то, что это не задача SQL — он смешной. SQL это делать умеет, и делает это быстро, дешево и удобно. По сравнению с «лишней» нагрузкой, которую создает работа с ОМ и говнокод, работа с XML — просто семечки. А еще напомню про существование приложений (я лично работал с WebTutor), для которых XML — чуть ли не основной тип хранимых данных и все выборки и преобразования XML производятся в БД. Ну и писать такое и в примере делать SQL->XML как-то нелогично.
    3) Чтобы использовать Ваш подход, надо знать и SQL->XML и XSL. Мой же вариант проще, достаточно знать SQL->XML(HTML). Я не услышал ни одного аргумента в пользу SQL->XML->[xslt]->HTML. Сначала Вы говорите, что мой подход «не соответсвует парадигме MVC», а когда я пишу что данные и представление можно разделить и в рамках одного SQL-запроса и XML в вашем подходе ИСПОЛЬЗУЕТСЯ ТОЛЬКО КАК ПРОМЕЖУТОЧНОЕ ЗВЕНО (а не как модель), Вы пишете что разделять модель и представление «далеко не всегда нужно».

    Вы можете придумать конкретный пример, когда нам гораздо удобнее и разрабатывать и поддерживать веб-отчет используя SQL->XML->[xslt]->HTML, а не SQL->HTML? Я лично изучал xsl, пытался пользоваться. Но за 5 лет реально что-то делал SQL->XML->[xslt]->HTML 1 раз и то потом переделал на SQL->HTML потому что xsl было излишеством, которое, к тому же, мало кто знал. Я видел веб-контролы в канцелярии на xslt и мое мнение — они слишком сложны для такой простой задачи. SQL->HTML я использовал раз 50 наверно уже (как для простых задач, так и для сложных 1, 2 etc). И не потому что не знаю xsl, а потому что SQL->HTML проще и удобнее. Возможно мне не попадались подходящие задачи, но такой вот у меня опыт. А Вы сколько раз делали SQL->XML->[xslt]->HTML и SQL->HTML?

    XML TO XML using XSL

    I have trouble trying to convert this xml format

    Into this xml format

    I have tried this with disasterus results. It just erases everything and gives me the raw data!

    These xmls are just an example of the export(first) of a long output from a product data-table , and the second only an example of one product, but i wish this format could be applied to all the products of the first , no matter how many.

    Is the XSL the correct way? Is this even possible or there is a better one? This is in a C# program Btw.

    Знакомство с XML и XSLT. Применение XML и XSLT. Зачем изучать XML и XSLT

    Этой статьей я открываю новую рубрику на блоге dmitriydenisov.com под названием «Уроки XML и XSLT». В ней мы пошагово изучим такой очень функциональный, универсальный и расширяемый язык разметки, как XML. После этого мы плавно перейдем к технологии преобразования XSLT, которая позволяет с легкостью управлять данными XML и буквально творить чудеса.

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

    Из этого стоит сделать вывод, что знание XML и XSLT будет для вас огромным плюсом, так как на данный момент специалистов в этой области не так уж и много. В результате через несколько лет, когда XML и XSLT наберет популярности и у нас, у вас будет огромное преимущество перед теми, кто еще не успел овладеть этой технологией. Как вы уже поняли, это позволит вам расширить свои возможности и увеличить свой доход. А кто не хочет сейчас заработать? Думаю, таких мало.

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

    Илон Маск рекомендует:  Что такое код asp logextfileuseragent

    Сказать по правде, не всегда все идет гладко. Порой приходится долго разбираться в некоторых моментах для того, чтобы понять всю суть того, что изучаешь. Исходя из этого, я постараюсь писать статьи максимально кратко и понятно, и в то же время не загружать вас ничем лишним. Весь материал будет разбит на части и подробно изложен в статьях объемом 800 – 1200 слов. На мой взгляд, это оптимальный размер статьи, который позволяет подробно изложить весь материал и избежать нагромождения лишней информацией. Думаю, со мной многие согласятся.

    Итак, теперь давайте рассмотрим, в каком порядке будет происходить изучение XML и XSLT.

    Что будет рассматриваться в рубрике «Уроки XML и XSLT»

    Для начала мы изучим основы языка разметки XML, рассмотрим базовые понятия XML, а также разберемся с описанием структуры XML документов (DTD, XML Schema). Таким образом, мы получим базовые знания для работы с XML.

    Далее мы перейдем к изучению основ XSLT. Для этого нам понадобится также немного изучить основы XPath. Мы рассмотрим основные элементы XSLT, а также возможности XSLT. Также на протяжении всего обучения будут приводиться разнообразные примеры для лучшего усвоения материала. Таким образом, обучение будет максимально быстрым и интересным.

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

    Использование расширяемого языка разметки XML

    XML – очень функциональный язык разметки, который широко применяется во многих сферах. На нем работают многочисленные программы и приложения, начиная с обычных RSS лент и заканчивая такими крупными проектами, как Microsoft Word. Убедиться в последнем очень просто. Для этого смените расширение документа Microsoft Word с docx на zip. Далее распакуйте получившийся архив, после чего перейдите в папку word. В ней вы найдете XML файлы, в которых и хранится вся информация документа Word.

    Отредактировав необходимые файлы, в частности файл word/document.xml, вы можете произвести обратную процедуру и запаковать все файлы обратно в zip архив. Далее сменить расширение архива на docx и открыть файл программой Microsoft Word. В результате вы увидите все изменения, которые вы вносили в XML документ.

    Таким образом, мы видим, что XML это универсальный, расширяемый язык с очень широкими возможностями. Благодаря этому он с успехом может использоваться в самых разнообразных проектах, начиная с небольших сайтов и заканчивая многомиллиардными проектами, такими как Microsoft Office.

    Поскольку это только вводная статья, то мы не будем слишком углубляться в основы языка и сферы его применения. Более подробно обо всем этом мы еще поговорим в соответствующих статьях рубрики «Уроки XML и XSLT».

    Использование языка преобразования XML-документов XSLT

    XSLT является очень мощным инструментом для работы с XML. С его помощью можно с легкостью преобразовывать XML данные, а также получать доступ к нужным нам элементам. Например, у нас есть исходный файл с перечислениями стран в формате XML и мы хотим получить названия всех стран Европы в формате HTML. Для этого достаточно написать небольшой XSLT шаблон, который обработает XML файл и сформирует готовую HTML страницу со списком нужных нам стран. Аналогичным образом результат может быть представлен также и в XHTML, XML или просто в виде текстового документа.

    По сути сам XSLT является набором правил, которые применяются к документу при определенных условиях. Его также еще называют таблицами стилей XLST, хотя, на мой взгляд, между таблицами стилей CSS и XSLT практически нет ничего общего. Таким образом, в результате обработки XML документа мы получаем то, что задано в XSLT шаблоне. Это немного похоже на работу CSS, но только лишь немного. На самом деле в XSLT есть очень большое количество других возможностей, которые никак несравнимы с возможностями CSS.

    Ну а теперь давайте подведем небольшой итог.

    XML и XSLT являются очень мощными инструментами, как для веб-разработчиков, так и для разработчиков в других сферах. С их помощью решения множества задач становятся очень простыми, что в свою очередь и послужило тому, что данные технологии становятся все более и более популярными. При этом зачастую не требуется знание каких-либо языков программирования, хотя сам XSLT может с успехом использоваться в связке с C++, JavaScript и т.д.

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

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

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

    На этом все. Удачи вам и успехов в изучении XML и XSLT.

    Создание разделов CDATA

    Создание разделов CDATA

    При преобразованиях XML-XML может потребоваться вывести разделы CDATA. В XSLT это легко осуществимо при помощи атрибута cdata-section-elements элемента . Упомянутый атрибут позволяет указать, содержимое каких элементов следует заключить в раздел CDATA. Последнее может понадобиться, например, при создании элементов сценария, когда браузер требует заключения кода сценария в раздел CDATA.

    В следующем примере я поместил содержимое элементов и в planets.xml в разделы CDATA :

    И вот результат:

    ОБРАБОТКА CDATA В ИСХОДНОМ И РЕЗУЛЬТИРУЮЩЕМ ДОКУМЕНТЕ

    Похожие главы из других книг

    7.2. Интерпретация разделов

    7.2. Интерпретация разделов В рамках любого раздела ключевых практик для обеспечения преемственности и согласованности используются определенные фразы и условные термины.Основные структурные термины описаны ниже и сгруппированы по

    2. СОДЕРЖАНИЕ РАЗДЕЛОВ

    1.1.3.3. Создание разделов

    1.1.3.3. Создание разделов При установке Fedora на новый компьютер, жесткий диск которого еще не размечен на разделы, вы увидите сообщение о том, что таблица разделов нечитаема, поэтому устройство (жесткий диск) будет инициализировано, т.е. будет создана таблица разделов с

    2.5. Подготовка разделов на диске

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

    2.5.1. Рекомендации по созданию разделов

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

    Нумерация страниц и разделов

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

    Элементы и

    Элементы и Эти элементы являются стандартными для разметки W3C XML 1.0. В сценариях WSH они определяют способ обработки WS-файла. Всего существует два режима обработки сценария: нестрогий (loose) и строгий (strict).При нестрогой обработке (элемент отсутствует)

    Элементы и

    Элементы и Напомним, что эти элементы являются стандартными для разметки W3C XML 1.0 (см. главу 3). Для того чтобы использовать символы кириллицы в файлах компонентов-сценариев, нужно обязательно в элементе указать атрибут encoding со значением,

    Глава 3. Выделение разделов (Partitioning)

    3.2.5. Подвыделение разделов (Subpartitioning)

    3.3.3. Сопровождение разделов

    3.3.3. Сопровождение разделов Ряд задач сопровождения выделения разделов может быть выполнен в MySQL 5.1. MySQL не поддерживает команды CHECK TABLE, OPTIMIZE TABLE, ANALYZE TABLE или REPAIR TABLE для разбитых на разделы таблиц. Вместо этого Вы можете использовать ряд расширений ALTER TABLE, которые были

    3.5. Ограничения выделения разделов

    3.5. Ограничения выделения разделов Этот раздел обсуждает текущие ограничения поддержки выделения разделов MySQL:Начиная с MySQL 5.1.12, следующие конструкции не разрешаются в выражениях выделения разделов:Вложенные обращения к функциям (то есть, конструкции типа

    5.2. Удаление разделов и параметров

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

    1.1.2. Имена разделов в ОС Linux

    1.1.2. Имена разделов в ОС Linux Linux представляет наименования разделов как имена файлов, в виде /dev/xxyN, где:? /dev — это каталог, в котором расположены все файлы, связанные с устройствами;? xx — две буквы названия раздела, указывающие тип устройства, на котором размещается раздел.

    2.3.3. Ручное создание разделов

    2.3.3. Ручное создание разделов Если вы настраиваете сервер, а не домашний компьютер, то я настоятельно рекомендую создать разделы вручную. По умолчанию программа установки создаст только два раздела — основной и для файла подкачки (будет использоваться при нехватке

    Корневые элементы разделов

    Корневые элементы разделов Некоторые элементы не появляются в сгенерированном содержании. Другими словами, неважно, сколько заголовков вы используете внутри своих элементов, – в содержании документа они не появятся.Элементы blockquote, fieldset и td являются исключениями для

    XSLT 1.0: переставить xml на разных этапах (xsl-template)

    Я пытаюсь изменить XML в несколько шагов, используя различные xsl-шаблоны и сумел заставить его работать — с 2 разделенными xsl-преобразованием в последовательности. В настоящее время я пытаюсь поместить 2 xsl файла в один, но не удалось. Чтобы достичь этого: есть ли способ использовать результат одного шаблона в другом шаблоне?

    Этот XML-код содержит заказ на поставку с двумя позициями и пакетами доставки. 3. позиция с номером «P000» — это материал для упаковки. Позициями 4 и 5. являются две партии, разделяющие 1 позицию. Ссылка между обычной позицией и ее разделом партии — это атрибут «origin_no».

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

    Результат должен быть следующим:

    Запустив последовательно 2 xsl, я смог получить результат успешно. Мои вопросы были бы следующими: есть ли элегантный способ достичь этого требования в одном единственном XSLT-сопоставлении без использования расширения «exsl: node-set» (который я узнал из других сообщений)?

    Введение в 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 учебник .

    Практика XSLT

    Пример трансформации XML-документа в HTML

    XSLT — это мощное средство для трансформации XML-данных. Его часто используют как web-шаблонизатор: на вход подаётся XML-документ и XSLT-преобразование, а на выходе получают HTML-документ. Процесс получения HTML-документа из XML называют отображением или рендерингом.

    Рассмотрим типичный пример рендеринга HTML.

    Дан список музыкальных композиций в виде XML-документа.

    Отобразим данный документ в виде HTML ul/li списка, как это показано ниже:

    Для этого используем следующее XSLT-преобразование:

    Данное преобразование вернёт нам следующий HTML:

    XSLT-преобразование состоит из трёх шаблонов ( xsl:template ). Каждый шаблон обслуживает свою сущность, что даёт нам возможность легко вносить изменения и делает код понятным.

    Если нам надо поменять отображение списка (например, добавить атрибут class), то мы редактируем шаблон match=»PlayList» .

    Если же мы хотим изменить отображение элементов списка, то тут, совершенно очевидно, что стоить менять шаблон match=»Track»

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

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

    Отладка XSLT

    Что мне очень нравится в XSLT, так это возможность отладки. Отладка помогает наглядно увидеть логику работы XSTL, структуру документа, значения переменных.

    Например, отладка поможет увидеть, что за сущность обрабатывает шаблон match=»/» .

    В Visual Studio отладка XSLT запускается сочетанием клавиш ALT+F5.

    Добавив в окно Watch XPath выражение » . » (точка), мы увидим, что текущий элемент шаблона — это корень (Root) документа. Здесь можно разместить контейнер div, или что-то относящееся ко всему XML-документу.

    Работа с сущностями XML

    Можно заметить, что в приведенных примерах присутствует сущность — Мы можем ее использовать, потому что определили ее в начале XSLT-документа

    Таким образом, — выводится, как символ с кодом — .

    Если нужно вывести строку «как есть», то стоит использовать CDATA следующим образом:

    Элемент xsl:text

    Хочу заострить внимание на элементе xsl:text . Он позволяет контролировать, что именно будет содержать TEXT-элемент. Значимость xsl:text очевидна на практике:

    Илон Маск рекомендует:  Что такое код pdf_get_buffer

    Как видно из примера выше, отсутствие элемента xsl:text привело к появлению в HTML лишних переводов строк и пробелов.

    Безусловно, можно писать XSLT и без xsl:text , следующим образом:

    Такой шаблон трудночитаем и есть большая вероятность, что при сопровождении в нём будут появлятся ошибки.

    Нужно стараться, чтобы форматирование XSLT-шаблона не влияло на результат трансформации. Именно поэтому я считаю, что использовать xsl:text — это хорошая практика.

    Ветвления

    Для ветвлений в XSLT есть специальные элементы: xsl:if и xsl:choose . Но я считаю, что этими инструментами сильно злоупотребляют. Более интересен приём, позволяющий не загромождать шаблон ветвлениями.

    Рассмотрим пример реализации ветвлений:

    Дополним предыдущий пример возможностью выводить сообщение «Список пуст» в случае, если PlayList не содержит элементов Track .

    Решение с использованием xsl:choose будет таким:

    Решение с использованием дополнительного шаблона будет следующим:

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

    Если понадобится добавить картинку к сообщению о пустом списке, то в первом случае скорее всего разбухнет элемент xsl:when в шаблоне match=»PlayList» . А вот во втором случае изменения будут только в специализированном шаблоне.

    В предыдущем примере мы разделили две абсолютно разные ветки рендеринга элемента списка. Но что если ветки различаются незначительно? Здесь использование xsl:if и xsl:choose вполне оправдано. Но мне бы хотелось показать другой подход: использование параметра mode у элемента xsl:template .

    В следующем примере навесим разные стили на чётные и нечётные элементы списка.

    Циклы и сортировка в XSLT

    Для циклов в XSLT есть элемент xsl:for-each , но схожий эффект можно получить, используя обычный xsl:apply-templates .

    Выведем список композиций, отсортированный по длительности.

    Вариант с использованием xsl:for-each :

    Вариант с использованием xsl:apply-templates :

    Как видно из кода, первый вариант короче и проще, но он нарушил принцип разделения ответственности для шаблонов. Теперь шаблон match=»PlayList» стал содержать логику отображения элемента Track.

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

    Вариант с использованием xsl:for-each :

    Вариант с использованием xsl:apply-templates :

    В случае xsl:for-each нам потребовалось добавлять ветвление, а в случае xsl:apply-templates — новый шаблон.

    Если бы шаблон match=»PlayList» уже содержал ветвления и логику, то нам понадобилось некоторое время, чтобы разобраться, куда именно нам нужно вставить ветку. Вариант с xsl:apply-templates лишён этого недостатка, поскольку мы лишь декларируем новый шаблон, а не пытаемся внедриться в старые.

    Использование xsl:for-each имеет ещё одну большую опасность. Если вы видите произвольный участок кода внутри шаблона match=»PlayList» , то предполагаете, что текущий элемент это PlayList , однако xsl:for-each меняет контекст. Увидев следующий код код:

    Вам потребуется внимательно присмотреться к контексту, чтобы понять, что select=».» на самом деле выбирает текущий Track .

    Шаблон mode=»TrackName» match=»Track» был добавлен для избежания дублирования кода, отображаюшего название. Я не сделал этого раньше, потому что в этом не было необходимости. Как только я заметил дублирование, я провёл рефакторинг и вынес общую логику отображения в новый шаблон.

    xsl:for-each — это способ не плодить сущности. Вы просто добавляете логику отображения внутрь xsl:for-each и всё прекрасно работает. Проблемы начинаются потом, когда тело цикла разрастается, а проводить рефакторинг xsl:for-each намного сложнее, чем выносить дублированный код.

    Заключение

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

    Надеюсь мои практические советы помогут вам писать более понятный код.

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

    Xslt преобразование. XSLT первый шаг. Допустимые документы XML

    Возможно, также, преобразование не в расширение XML, а в любой другой структурированный формат, к примеру, в (стандарты HTML и XHTML сильно похожи, но только внешне) или же просто в произвольное текстовое представление.

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

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

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

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

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

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

    1. Синтаксис или XML схема языка преобразований XSL.
    2. Язык запросов к элементам XML документа .
    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 поддерживает условные операторы, вызовы шаблонов с передачей параметров, изменение значения параметров в соответствии с математическими выражениями и т.д. Пример шаблона с оператором выбора и условным оператором приведен ниже:

    right center

    В процессе обработки элементов 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 документов.

    22. DOM XML. Преобразование XML документов

    Модель XML DOM. SAX: достоинства и недостатки. Спецификация XSL. XSLT и XPath. XSL-FO. XQuery.

    Для программной обработки XML документов используется модель XML DOM, которая определяет объекты и свойства всех XML элементов и методы (интерфейс) для доступа к ним. Иначе говоря, XML DOM описывает каким образом необходимо получать, изменять, добавлять и удалять XML элементы.

    все, что содержится внутри XML документа, является узлом;

    весь документ представляется узлом документа ;

    каждый XML элемент – узел элемента ;

    текст внутри XML элементов — текстовый узел ;

    каждый атрибут — узел атрибута ;

    комментарии — узлы комментариев .

    XML документ в соответствии с моделью XML DOM представляется как дерево из узлов, при этом:

    Все узлы дерева находятся в определенных отношениях друг с другом.

    Все узлы доступны через дерево. Их содержимое может быть изменено, удалено; новые элементы могут быть добавлены в дерево.

    Дерево начинается с корневого узла и разветвляется вниз вплоть до текстовых узлов на самом низшем уровне дерева.

    Все узлы находятся в иерархических отношениях между собой.

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

    Альтернативным интерфейсом для обработки XML документов является SAX .

    SAX (Simple API for XML ) — прикладной программный интерфейс для парсера с последовательным доступом к XML. Этот интерфейс предоставляет механизм чтения данных из XML документа.

    SAX парсер является поточным и управляемым событиями . Задачей пользователя SAX API заключается в описании методов, вызываемых событиями, возникающими при анализе документа.

    Такими событиями могут быть следующие:

    узел элемента XML;

    инструкция обработки XML;

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

    Анализ документа является однонаправленным (т.е. без возвратов по дереву).

    В отличие от DOM формальной спецификации для SAX не существует. В качестве нормативной рассматривается Java реализация SAX.

    Следует отметить следующие достоинства и недостатки SAX.

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

    Скорость работы выше за счет сокращения затрат времени на выделение памяти для элементов дерева в случае DOM.

    Потоковое чтение данных с диска в случае DOM невозможно. Если для размещения всего документа в памяти недостаточно места, то использование SAX является безальтернативным.

    Процедура проверки правильности предполагает доступ ко всему документу одновременно.

    Это также требуется и в случае XSLT преобразования.

    Если загрузить «чистый» XML документ в веб-браузер, то можно будет увидеть древовидную структуру этого документа:

    В этом как раз и заключается главное отличие между XML и HTML, а именно разделение структуры документа и его представления в браузере. Конкретный вид XML документа описывается отдельно с помощью CSS или XSL.

    CSS и XSL — принципиально разные технологии, имеющие лишь частичное пресечение областей применения. CSS-форматирование применяется к HTML-документу браузером на клиентской стороне , а XSL-преобразование выполняется, как правило, на сервере , после чего результат отправляется браузеру клиента. XSL базируется на XML, благодаря чему XSL более гибок и универсален . У разработчиков имеется возможность использовать средства контроля за корректностью составления стилевых списков (используя схемы XML).

    С помощью XSL можно преобразовать XML-документ в формат HTML , WML , RTF , PDF , SQL , SWF , а так же в другой XML и XSL документ. XSL указывает как будет оформлен документ, где и каким образом должны размещаться данные.

    Cпецификация XSL состоит из трех частей:

    XSLT (XSL Transformations), язык для преобразования XML;

    XPath — язык путей и выражений, используемый в XSLT для доступа к отдельным частям XML-документа;

    XSL-FO (XSL Formatting Objects), язык для верстки XML.

    Наиболее распространенным механизмом XSLT преобразований для систем работающих на платформе Microsoft Windows является MSXML ; для систем на основе GNU — xsltproc .

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

    Возвращаясь к рассмотренному ранее примеру, добавив в XML файл ссылку на XSL файл, получим следующий код разметки:

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL