WEB-ТЕХНОЛОГИИ Лекция 4 Задача преобразования XML-данных 1 XML: – отделение данных от их представления – передача данных между приложениями Задача преобразования Для передачи данных между разными приложениями необходимо преобразовать их из модели, используемой одним приложением, в модель, используемую другим 2 Понятие XSLT XSLT — это расширяемый язык стилей для преобразований (от англ. eXtensible Stylesheet Language for Transformations), который используется для описания преобразований структуры документов. XSLT позволяет трансформировать одни документы в другие, пользуясь простыми наборами правил преобразования Технология XSLT – это технология, позволяющая (трансформировать) XML-документ – в другой XML-документ; – в HTML-документ для отображения Web-браузером; – в документы иных форматов (WML, RTF, PDF, TEX и т.п.). преобразовывать Стадии: 1. Структурное преобразование, при котором структура данных исходного XML-документа конвертируется в структуру, отражающую желаемый вывод; 2. Форматирование, при котором новая структура выводится в желаемом формате, например, HTML или PDF. Стадия преобразования 3 Эта стадия может включать выборку данных, их объединение и группирование, сортировку или выполнение арифметических действий, например, перевод сантиметров в дюймы. SAX – это интерфейс, основанный на событиях, когда по мере анализа документа синтаксический анализатор уведомляет приложение о каждом отдельном фрагменте данных. Если же используется DOM, синтаксический анализатор считывает документа и формирует в памяти его древовидную объектную структуру. XSLT все еще использует синтаксический анализатор – неважно, с каким интерфейсом, DOM или SAX, – чтобы привести XML-документ к древовидной структуре. XSLT манипулирует именно древовидным представлением XMLдокумента, а не самим документом. XSLT-процессоры 4 Основная роль XSLT-процессора – применить таблицу стилей XSLT к исходному документу XML и сформировать конечный документ. Важно отметить, что все компоненты этого процесса являются приложениями XML, так что базовая структура каждого – дерево. Следовательно, XSLT-процессор фактически обрабатывает три дерева. Основные: – SAXON – XALAN – MS XML Parser XSLT и XSL 5 Язык XSLT возник как часть языка более высокого уровня – XSL (расширяемый язык таблиц стилей). XSL разбит на две части: описание преобразований, или сам язык XSLT, и «остальное» для стадии форматирования – официально это все еще язык XSL, хотя некоторые предпочитают называть его форматирующими объектами XSL (XSL-FO). Таблицы стилей 6 Язык XSLT возник как часть языка более высокого уровня – XSL (расширяемый язык таблиц стилей). Таблица стилей – это XML-документ специального вида (обычно файл с расширением .xsl), содержащий набор правил преобразования исходного XMLдокумента, написанных на языке XSLT и предназначенных для XSLT-процессора. XSLT вместо этого описывает необходимые действия в терминах особого представления XML-документа, которое называется деревом. Дерево – это абстрактный тип данных. Стандартизация 7 XSL ― стандарт, рекомендованый World Wide Web Consortium. Первые две части этого языка стали официальной рекомендацией W3C в ноябре 1999 года. Полная рекомендация по XSL, включая XSL-форматирование, стала кандидатом в официальные рекомендации в ноябре 2000 года. Пространство имен XSLT 8 Чтобы XSLT-процессор «понимал» указания таблицы стилей, соответствующие имена, используемые в таблице стилей, должны принадлежать определенному пространству имен. В зависимости от используемой версии или диалекта XSLT эти пространства имен разные: http://www.w3.org/1999/XSL/Transform http://www.w3.org/TR/WD-xsl Префикс: xsl Как происходит преобразование 9 В ходе преобразования XSLT-процессор манипулирует тремя объектами: 1) деревом исходного документа или входным деревом, которое строится в памяти в ходе загрузки исходного документа. Процессор анализирует это дерево путем целенаправленного обхода его узлов; 2) деревом таблицы стилей, которое также строится в памяти процессора в ходе загрузки таблицы стилей. Процессор анализирует это дерево путем целенаправленного обхода его узлов; 3) деревом результирующего документа или выходным деревом, которое процессор последовательно, узел за узлом строит в своей памяти в ходе преобразования. После окончания строительства процессор выполняет так называемую сериализацию, в ходе которой выходное дерево преобразуется в выходной документ. Как происходит преобразование 10 В ходе преобразования XSLT-процессор манипулирует тремя объектами: 1) деревом исходного документа или входным деревом, которое строится в памяти в ходе загрузки исходного документа. Процессор анализирует это дерево путем целенаправленного обхода его узлов; 2) деревом таблицы стилей, которое также строится в памяти процессора в ходе загрузки таблицы стилей. Процессор анализирует это дерево путем целенаправленного обхода его узлов; 3) деревом результирующего документа или выходным деревом, которое процессор последовательно, узел за узлом строит в своей памяти в ходе преобразования. После окончания строительства процессор выполняет так называемую сериализацию, в ходе которой выходное дерево преобразуется в выходной документ. Структура таблицы стилей xml version="1.0" encoding="windows-1251" stylesheet xsl ="http://www.w3.org/1999 version="1.0" /XSL/Transform" template КЛЭ Инструкция 12 Шаблоны 13 Таблица стилей должна содержать, по крайней мере, один шаблон; на самом деле их зачастую бывает много. В свою очередь, тело шаблона может содержать: – поддеревья конечных литеральных элементов, которые непосредственно копируются в выходное дерево; – элементы-инструкции, выполнение которых процессором приводит к формированию отдельных узлов или целых поддеревьев на основе узлов исходного дерева, которые также помещаются в выходное дерево. 14 Форсирующая обработка xml 1 снаб 4 7 =127 9 12 поставщик =Смит 14 17 поставка =300 товар 19 21 26 поставка =200 товар 28 30 =Болт 32 поставщик =Блейк поставка =300 товар html head title 3 =Снабжение body h2 6 =Гайка 23 stylesheet xsl ="http://www.w3.org/1999 /XSL/Transform" version="1.0" 2 template match="/" html 3 head title =Снабжение body 4 apply-template =Гайка template match="снаб" h2 =Список поставщиков br 5 6 apply-template 8 13 7 9 32 template match="поставщик" 10 11 p 12 14 23 apply-template template match="поставка" 15 24 16 25 br 17 19 26 28 apply-template template match="товар" apply-template br 11 =Номер 20 29 21 30 =Список поставщиков =Номер =127 p =Смит 16 br 18 22 =300 =Гайка 25 br 27 =200 =Болт 31 p =Блейк br =300 =Гайка 16 Извлекающая трансформация stylesheet xsl ="http://www.w3.org/1999 version="1.0" /XSL/Transform" match="/" template html head title =Снабжение body h3 =Список поставщиков for-each select="снаб/поставщик" value-of select="postion()" =. b value-of select="@имя" =: for-each select="поставка" value-of select="товар/@назв" = -- b =. br value-of select="@кол" html head body title h3 =Снабжение =Список поставщиков =1. b =Смит =: =Гайка = -=300 =. =Болт = -=200 =. br =2. b =Кларк =: =Гайка = -=300 =. br xml снаб поставщик имя поставка кол товар назв