суббота, 28 августа 2010 г.

Контроль правильности XML-документа

eXtensible Stylesheet Language – язык форматирования XML данных

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

Управлять отображением элементов в окне программы-клиента (например, в окне броузера) можно с помощью специальных инструкций - стилевых таблиц XSL (eXstensible Stylesheet Language). Эти таблицы XSL позволяют определять оформление элемента в зависимости от его месторасположения внутри документа, то есть к двум элементам с одинаковым названием могут применяться различные правила форматирования. Кроме того, языком, лежащим в основе XSL, является XML, а это означает, что таблицы XSL более универсальны, а для контроля корректности составления таких стилевых таблиц можно использовать DTD-описания или схемы данных, рассмотренные ниже.

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

XML рассматривается как преемник SGML, а этим подразумевается, что XSL тоже много черпает из некоторых спецификаций стилей SGM. Поскольку SGML стал международным стандартом взаимодействия документов, было бы разумно стили, определяющие то, какими должны быть документы, тоже стандартизировать. В результате мы имеем Язык Семантики и Спецификации Документов (Document Style Semantics and Specification Language — DSSSL). Однако, ранее коммерческих приложений с поддержкой DSSSL, не хватало.

Сейчас существует стандарт HTML, называемый Списки Каскадных Стилей (Cascading Style Sheets — CSS). Этот стандарт предусматривает расширенные возможности при переопределении умолчальных представлений HTML-тэгов, но этого иногда недостаточно, например, при переопределении тэгов и для наследования характеристик от главных или равноправных элементов. Этим и многим другим занимается XSL. Фактически, XSL можно рассматривать как комбинацию большинства возможностей DSSL (без увеличения усложненности) с совместимостью и легкостью в использовании CSS. Это — действительно лучшее, что можно было взять из того и другого.

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

Базовой доктриной XSL является то, что разработчик определяет правило для определенного элемента или набора элементов — правило, определяющее, как должен отображаться данный элемент.

По определению W3C XSL состоит из двух частей:

  • XSLT – XSL Transformation. Язык, используемый для трансформирования XML документов. Таким образом, при помощи XSLT мы можем получить разные разрезы данных.
  • Элементы форматирования. К этим элементам относятся все элементы типографического оформления XML данных после обработки их при помощи XSL.

clip_image001

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

Контроль правильности XML-документа

На сегодняшний день существует два способа контроля правильности XML-документа: DTD-определения (Document Type Definition) и схемы данных (Semantic Schema). Если XML-документ создается и пересылается с использованием DTD-описаний или схем (Schemas), то он называется валидным.

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

Поскольку XML-элементы, используемые в одном документе, могут быть взяты из различных XML-схем, то может возникнуть конфликт имен элементов. Пространства имен (name spaces) позволяют решить эту проблему. Пространства имен позволяют различать элементы с одинаковыми именами, но имеющие разное смысловое значение. Однако они не определяют способ обработки таких элементов - этим занимаются XML-анализаторы, обсуждаемые ниже.

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

<tv-program>

  <area>

    <country> Россия </country>

<city> Санкт-Петербург </city>

  </area>

<day date = "25 декабря">

    <channel name = "ОРТ">

      <program>

        <item time = "06.00">Доброе утро</item>

        <item time = "09.00">НОВОСТИ</item>

        <item time = "09.15">Сериал Нежный яд</item>

<item time = "10.15">Поле чудес (повтор)</item>

<item time = "11.15">М. ф.</item>

        <item time = "11.30">Здоровье</item>

        <item time = "12.00">НОВОСТИ</item>

<item time = "12.15">С легким паром!</item>

<item time = "14.20">М. ф.</item>

        <item time = "14.30">Вместе</item>

        <item time = "15.00">НОВОСТИ</item>

<item time = "16.00">Звездный час</item>

<item time = "18.00">НОВОСТИ</item>

        <item time = "19.35">Погода</item>

<item time = "20.45">Спокойной ночи, малыши</item>

<item time = "21.00">ВРЕМЯ</item>

        <item time = "23.45">Взгляд</item>

      </program>

</channel>

  </day>

</tv-program>

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

<Schema xmlns="urn:schemas-microsoft-com:xml-data"

xmlns:dt="urn:schemas-microsoft-com:datatypes"

name="TV-ProgramSchema">

  <AttributeType name="name" dt:type="string" required="yes"/>

  <AttributeType name="date" dt:type="string" required="yes"/>

  <AttributeType name="time" dt:type="string" required="yes"/>

  <ElementType name="country" content="textOnly"/>

  <ElementType name="city" content="textOnly"/>

  <ElementType name="area" content="eltOnly">

    <element type="country" minOccurs="0" maxOccurs="1"/>

    <element type="city" minOccurs="0" maxOccurs="*"/>

  </ElementType>

  <ElementType name="item" content="mixed">

    <attribute type="time"/>

  </ElementType>

  <ElementType name="program" content="eltOnly">

    <element type="item" minOccurs="0" maxOccurs="*"/>

  </ElementType>

  <ElementType name="channel" content="mixed">

    <attribute type="name"/>

    <element type="program" minOccurs="1" maxOccurs="1"/>

  </ElementType>

  <ElementType name="day" content="mixed">

    <attribute type="date"/>

    <element type="channel" minOccurs="0" maxOccurs="*"/>

  </ElementType>

  <ElementType name="tv-program" content="eltOnly">

    <element type="area" minOccurs="0" maxOccurs="*"/>

    <element type="day" minOccurs="0" maxOccurs="*"/>

</ElementType>

</Schema>

Эта XML-схема должна быть сохранена в файле TV-ProgramSchema.XML. Корневым элементом этого XML-файла является элемент <Schema>, атрибутами которого является название схемы TV-ProgramSchema и ссылка на пространства имен, которые определяют встроенные типы данных, используемые в этой схеме: xmlns="urn:schemas-microsoft-com:xml-data". Атрибуты элементов этой схемы minOccurs и maxOccurs задают соответственно минимально и максимально возможное количество таких элементов в схеме. Например, строчка <element type="item" minOccurs="0" maxOccurs="*"/> означает, что количество элементов типа item (то есть самих телепередач) в схеме может быть от 0 до бесконечности.

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

<tv-program xmlns="x-schema:TV-ProgramSchema.xml">

Теперь корневой элемент <tv-program> этого XML-описания имеет атрибут xmlns="x-schema:TV-ProgramSchema.xml", являющийся ссылкой на используемую XML-схему.

Теперь рассмотрим другой способ контроля правильности XML-документа:

DTD-определения (Document Type Definition):

Декларация типа XML-документа (document type declaration) содержит определение типа документа (document type definition, DTD) или указывает на него. DTD — это специальная грамматика, описывающая синтаксис определенного класса документов; не будем рассматривать правила создания DTD, а приводем только описание деклараций, которые обеспечивают доступ к DTD. Декларация типа документа, как и декларация раздела, может быть внутренней или внешней. Внутренняя декларация имеет вид:

<!DOCTYPE имя [ тело ]>


а внешняя — те же два варианта, что и внешние разделы:



<!DOCTYPE имя SYSTEM URI [ тело ]>


<!DOCTYPE имя PUBLIC строка? URI [ тело ]>


Таким образом, отличие декларации типа документа от декларации раздела состоит только в том, что:




  • она начинается с ключевого слова !DOCTYPE, а не !ENTITY;


  • она может иметь тело, заключенное в квадратные скобки.



Имя такой декларации должно совпадать с именем корневого элемента, который она описывает, а тело должно соответствовать правилам построения DTD. Примеры внешних деклараций:



<!DOCTYPE spec SYSTEM "xml/1998/06/xmlspec-v20.dtd">


<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.0//EN"


  "/XML/1998/06/xmlspec-v20.dtd">


Отметим, что внешняя декларация типа документа может содержать и ссылку на DTD, которая называется внешним подмножеством DTD, и тело, которое описывает дополнения к внешней DTD (оно называется внутренним подмножеством DTD).



Анализ XML-документов


Получение данных из XML-документа, а также проверка корректности XML-документов обеспечивается анализаторами (parsers) XML-документов. Если XML-документ является формально-правильным, то все анализаторы, предназначенные для разбора XML-документов, смогут работать с ним корректно.



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



Если же на вход XML-анализатору подается XML-документ, использующий XML-схему, то он будет разобран, проверен на правильность и соответствие схеме. Например, XML-описание программы телепередач канала РТР, использующее схему TV-ProgramSchema.xml, будет признано формально-правильным и валидным.



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



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



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



В некоторых анализаторах способ представления структуры документа основывается на спецификации DOM (Document Object Model), что позволяет использовать строгую иерархическую модель DOM при создании XML-документов.



Примером XML-анализатора может служить встроенный в Microsoft Internet Explorer версии 5.0 XML-анализатор MSXML. Он позволяет читать данные из XML-файла, обрабатывать их, генерировать дерево элементов, отображать данные с использованием стилевых таблиц XSL, а также, используя DOM, представлять все элементы данных в виде объектов.

Комментариев нет:

Отправить комментарий