Контрольное задание

В приведенном ниже XML документе описана экзаменационная ведомость:

<gradeReport id="120851"><date>10-06-2008</date><subject>Computer Science Fundamentals</subject><examiner>prof.Litvinov</examiner> <gradeList> <gradeRecord id="1"> <student>Ivanov</student> <grade>4</grade> </gradeRecord> <gradeRecord id="2"> <student>Petrov</student> <grade>3</grade> </gradeRecord> <gradeRecord id="3"> <student>Sidorov</student> <grade>5</grade> </gradeRecord> </gradeList></gradeReport>

Опишите структуру данного документа с помощью DTD схемы и XML Schema. Проверьте обе схемы с помощью соответствующих программ-валидаторов.

Для программной обработки 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; для систем на основе GNU — xsltproc.

Для того, чтобы обработать 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>


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: