Спонсор: Microsoft
Воронежский государственный университет
Опубликован: 04.02.2009 | Доступ: свободный | Студентов: 8216 / 665 | Оценка: 4.14 / 3.78 | Длительность: 19:54:00
Лекция 11:

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

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

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

Согласно DOM:

  • все, что содержится внутри XML документа, является узлом;
  • весь документ представляется узлом документа ;
  • каждый XML элемент – узел элемента ;
  • текст внутри XML элементов - текстовый узел ;
  • каждый атрибут - узел атрибута ;
  • комментарии - узлы комментариев.

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

  • Все узлы дерева находятся в определенных отношениях друг с другом.
  • Все узлы доступны через дерево. Их содержимое может быть изменено, удалено; новые элементы могут быть добавлены в дерево.
  • Дерево начинается с корневого узла и разветвляется вниз вплоть до текстовых узлов на самом низшем уровне дерева.
  • Все узлы находятся в иерархических отношениях между собой.
  • Эти отношения описываются с помощью понятий родитель, дочерний и потомок (все дочерние на одном уровне).

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

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

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

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

  • текстовый узел;
  • узел элемента XML;
  • инструкция обработки 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 ; для систем на основе GNUxsltproc.

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

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="my-style.xsl"?> 
<root> 
	< !-- ... -- > 
</root>

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

<?xml version="1.0" encoding="windows-1251" ?>
<!DOCTYPE mailbox SYSTEM "mailbox.dtd">
<?xml-stylesheet href="mailbox.xsl" type="text/xsl" ?>

<mailbox>
 <message uid='1'>
  <body>Проверка почтового ящика</body>
  <head>
    <to>user2@myhp.edu</to>
    <to>user3@myhp.edu</to>
    <from>user1@myhp.edu</from>
    <subject>Test</subject>
    <cc></cc>
    <notify></notify>
  </head>
 </message>
 <message uid='2'>
  <body>Это письмо не является спамом</body>
  <head>
    <to>user2@myhp.edu</to>
    <from>user4@myhp.edu</from>
    <subject>Интересное предложение</subject>
    <notify></notify>
  </head>
 </message>
</mailbox>

После загрузки данного документа в веб-браузере его вид кардинально изменится:


Содержимое XSL файла mailbox.xsl приводится ниже:

<?xml version="1.0" encoding="windows-1251"?> 
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match = "mailbox">
    <h2 align="center" color="red">Почтовый ящик</h2>
    <xsl:apply-templates/>
</xsl:template>

<xsl:template match = "message">
    <table align="center" border="0" width="80%" bgcolor="gray">
	 <tr>
	    <td width="20%"><b>From:</b></td>
	    <td>
	       <xsl:value-of select="head/from"/>
	    </td>
	 </tr>
	 <tr>
	    <td width="20%"> <b>To:</b> </td>
	    <td> <xsl:for-each select="head/to">
		 <xsl:apply-templates/>, 
		 </xsl:for-each>
	    </td>
	 </tr>
	 <tr>
	    <td width="20%"><b>Subject:</b></td>
	    <td><xsl:value-of select="head/subject"/></td>
	 </tr>
	 <tr>
	    <td width="20%"><b>CC</b></td>
	    <td><xsl:value-of select="head/cc"/></td>
	 </tr>
	 <tr>
	    <td width="20%"><b>Notify</b></td>
	    <td><xsl:value-of select="head/notify"/></td>
	 </tr>
	 <tr>
	  <td colspan="2">
	   <textarea cols="120%" rows="3"> 
	         <xsl:value-of select="body"/> 
	   </textarea>
      </td>
     </tr>
    </table>
    <br/><hr/><br/>
</xsl:template>

</xsl:stylesheet>

XSLT и XPath

Спецификация XSLT является рекомендацией W3C.

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

Благодаря XSLT реализуется отделение данных от их представления в рамках парадигмы MVC ( Model-view-controller ).

XPath (XML Path Language) - язык запросов к элементам XML-документа. XPath был разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C. В языке XPath используется компактный синтаксис, отличный от принятого в XML. Начиная с версии 2.0, XPath является составной частью языка XQuery. XPath призван помочь обходить всевозможные деревья, получать необходимые элементы из другой ветви относительно точки обхода, распознавать предков, потомков, атрибуты элементов. Это полноценный язык навигации по дереву.

Для нахождения элемента(ов) в дереве документа используются пути адресации.

Каждый шаг адресации состоит из трех частей:

  • оси, например child::;
  • условия проверки узлов, например имена элементов документа body, html ;
  • предиката, например attribute::class .

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

XSL-FO

XSL-FO (eXtensible Markup Language Formatting Objects) - рекомендованный W3C язык разметки предпечатных материалов. По-сути , XSL-FO - это унифицированный язык представления. Он не имеет семантической разметки (как в HTML) и сохраняет все данные документа внутри себя (в отличие от CSS, который модифицирует представление по умолчанию для внешнего HTML или XML-документа) .

В результате применения XSLT-преобразования к исходному XML документу получается его описание на языке XSL-FO. FO-процессор конвертирует XSL-FO-документ в какой-либо читаемый и/или печатаемый формат. Наиболее часто используется преобразование в PDF либо PS; некоторые FO-процессоры могут давать на выходе RTF-файлы либо просто показывать документ в окне.

XQuery

XQuery - язык запросов, разработанный для обработки данных в формате XML.

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

В рамках стандарта SQL:2006 разработаны механизмы для встраивания XQuery -запросов непосредственно в SQL-запросы.

Михаил Олифиренко
Михаил Олифиренко
Александр Табачук
Александр Табачук

Это только у меня не работает кнопочка "Получить код DreamSpark"? Пишет "временно не доступно..." А когда заработает?