Microsoft/eXtensible Markup Language. Обзор

Юрий Беленький
YuriB@astrosoft.ru

    Краткий обзор посвященный одной из самых фундаметальных технологий последнего времени - XML

Для начала...

XML – один из самых популярных в последнее время языков разметки. Вот уже несколько лет в мире продолжается бум XML. Большинство новых версий известных приложений к числу своих достоинств причисляет поддержку XML (XML support). Что же такое XML и зачем он нужен?

В 1986 ISO был стандартизован SGML (Standard Generalize Markup Language). Этот язык сейчас называют прадедушкой всех языков разметки. Он широко применяется и сейчас в издательской деятельности, при создании технической документации и во многих других областях. Но излишняя сложность спецификаций этого языка отпугивала от него пользователей. Во время первоначального бурного развития World Wide Web огромную популярность завоевал другой язык разметки – HTML (Hyper Text Markup Language). HTML предоставлял достаточно ограниченное количество тегов (элемент языка разметки) и являлся одной из частных реализаций (приложений) SGML. В среде дизайнеров и разработчиков HTML был очень популярен, так как позволял быстро и просто создавать Web-сайты.

Но, к сожалению, HTML накладывал массу ограничений, разработчики браузеров предоставляли специфические теги для расширения возможностей (при этом возникала опасность, что ряд пользователей пользующихся другими браузерами будут лишены доступа к информации). До сих пор при необходимости сделать что-нибудь неординарное разработчики вынуждены использовать какой-нибудь язык сценариев, например JavaScript или VBScript. Но все эти подходы не позволяли осуществлять управление структурой документа и данными в полной мере. Эту проблему решает XML, являющийся подмножеством SGML и фактически полностью поддерживающий его возможности. Основными достоинствами XML являются:

  • Интеграция данных из различных источников.
  • Просмотр и манипулирование данными в различных разрезах.

Теперь перейдем непосредственно к обзору XML.

Синтаксис языка

В этом разделе я рассмотрю только общие принципы синтаксиса языка XML. Подробное описание спецификаций XML можно найти по следующим адресам:

http://www.w3c.org/xml – По этому адресу можно найти спецификации стандартов XML.

http://msdn.microsoft.com/library – По этому адресу можно найти библиотеку Microsoft (MSDN), в которой есть раздел посвященный реализации XML, разработанной Microsoft.

XML элемент

Введем определение XML элемента на примере:

<director> Ivanov </director>
<actor> Ivanov </actor>

Между начальным (<director>) и конечными (</director>) тегами элементанаходится содержимое данного элемента. Элемент может состоять как из двух тегов (начального и конечно), так и только из одного, например – <director/>. В самом теле элемента может содержаться дополнительная информация – атрибуты:

<city zip= “194100”> Saint-Petersburg </city>

В данном случае ZIP является атрибутом тега CITY. Значение атрибута всегда передается в виде строки. Ниже приведено несколько не сложных правила, которые необходимо соблюдать при работе с XML элементами:

XML элементы регистро-зависимые. Таким образом <city>, <city> и <city> –разные теги.

Любой тег должен быть закрыт <item attribute=“text”/>

XML документ

Любой элемент и есть правильный XML документ

<director> Ivanov
<actor> Petrov </actor>
<actor> Sidorov </actor>
</director>

Элемент может и не содержать других элементов.

Основные правила для составления правильного документа:

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

XML Data Islands

Раньше для добавления семантической информации использовались такие “tricks”, как добавление этих данных к комментариям. Microsoft и W3C разработали технологию инлайновой вставки XML данных в HTML.

Это может быть реализовано так добавлением в HTML документ ссылки на внешний XML источник при помощи следующего HTML тега:

<xml id="xmlData" src="xmlData.xml"></xml>

А можно и непосредственно внедрить XML данные в HTML документ:

<head></HEAD>
<title></title>
<xml id="xmlMeetings">
<?xml version="1.0" ?>
<meetings>
<meeting>
<date>1/1/99</date>

</meetings>
</XML>

Использовать внедренные XML данные в HTML документе можно следующим образом:

<table datasrc="#xmlMeetings">
<tr>
<td> <div datafld="date"></div> </td>
<td> <div datafld="time"></div> </td>
<td> <div datafld="location"></div> </td>
</tr>
</table>

Описание структуры XML документа

Существует два способа описания структуры XML документа и данных входящих в него: при помощи DTD (Document Type Definition) и при помощи семантических схем. Первый способ является достаточно устаревшим, но тем не менее все еще активно используется. Именно поэтому более подробно мы рассмотрим семантические схемы, но также уделим внимание и DTD.

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

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

<!DOCTYPE tree [
<!ELEMENT tree (folder | item)* >
<!ATTLIST tree type CDATA #IMPLIED>
<!ELEMENT folder ANY>
<!ATTLIST folder id ID #REQUIRED>
<!ELEMENT item ANY>
<!ATTLIST item id ID #REQUIRED>
]>

Этот DTD называется tree (<!DOCTYPE tree[), это имя используется для указания в XML документе. Корневой элемент этого документа содержит элементы folder и tree в произвольном порядке следования. Кроме того, символ "*" указывает, что корневой элемент может не содержать подэлементов вообще и, что эти подэлементы могут повторяться.

У корневого элемента tree есть атрибут type, этот атрибут имеет тип CDATA и является необязательным. Элементы tree и folder содержат обязательный атрибут id, который имеет тип ID (идентификатор элемента).

Как уже говорилось, второй способ описания XML документов называется XML схемы или XSD (XML Schema Definition). Основные преимущества XML схем мы рассмотрим ниже, но первое, что бросается в глаза – для создания XML схемы нет необходимости разбираться с каким либо новым языком. XML схемы написаны на самом XML.

Теперь рассмотрим те преимущества, которые нам предоставляют XML схемы при описании документа:

  • Количество доступных типов при описании документа увеличилось по сравнению с DTD.
  • В XML схемах появилась поддержка namespace’ов – пространства имен.
  • Поддержка новой контекстной модели – open. Эта контекстная модель позволяет добавлять к элементу атрибуты или дочерние узлы, не описанные схемой, не нарушая его соответствия схеме.
  • Также добавлены многие другие возможности, например, такие как поддержка maxOccurs, minOccurs – количество подэлементов в элементе.

Рассмотрим в виде примера часть XML схемы:

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<AttributeType name="Name" dt:type="string" required="yes"/>
<AttributeType name="ID" dt:type="id" required="yes"/>
<ElementType name="Folder" content="eltOnly" model="open" order="many">
<attribute type="Name"/>
<attribute type="ID"/>
<element type="Item" minOccurs="0" maxOccurs="*"/>
<element type="Folder" minOccurs="0" maxOccurs="*"/>
</ElementType>

</Schema>

В этой схеме описаны доступные атрибуты Name и ID, типа string и id соответственно. Описан элемент Folder в котором присутствуют обязательные атрибуты Name и ID и могут быть подэлементы типов Folder и Item. Количество подэлементов неограниченно. Внутри элемента Folder могут быть только другие элементы, это указывается при помощи content="eltOnly", элемент Folder имеет модель open. Декларация order="many" указывает на то, что элементы Folder могут появляться в любом порядке. Более подробная информация о синтаксисе XML схем доступна на Web-сайте www.w3c.org или же в библиотеке MSDN.

Замечу, что в XML документах применение DTD или XML схем не обязательно. DTD и XML схемы используются только при проверке "правильности" документов (document validation).

Как схема, так и DTD могут быть внешними и внутренними, т.е. находиться как в отдельном файле, так и внутри XML документа.

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

Как понятно из заголовка eXtensible Stylesheet Language (XSL) используется для форматирования XML данных. По определению W3C XSL состоит из двух частей:

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

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

XML данные

<books>
<book>
<title>Heart of Darkness</title>
<author>Joseph Conrad</author>
<price>12.99</price>
</book>
<book>
<title>Arrowsmith</title>
<author>Sinclair Lewis</author>

<books>

XSL файл

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<BODY>
<TABLE>
<xsl:for-each select="books/book">
<TR>
<TD><xsl:value-of select="title" /></TD>
<TD><xsl:value-of select="author" /></TD>
<TD><xsl:value-of select="price" /></TD>
</TR>
<br/>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

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

Для того чтобы увидеть преобразованный документ достаточно добавить в файл, содержащий XML данные строку, указывающую какой таблицей стилей необходимо воспользоваться (в параметре href укажите путь к файлу содержащему XSL):

<?xml-stylesheet type="text/xsl" href="BooksTable.xsl"?>

После этого можно открыть XML файл при помощи браузера Internet Explorer 5.0 или выше, который автоматически совершить преобразование XML данных и выведет таблицу.

О чем не сказано

Не сказано еще об очень многом, например о таких важных сопутствующих XML технологиях, как XPath и XPointer. Также в этой статье нет ни слова об объектной модели XML – XML DOM (Document Object Model). Схемы и XSL рассмотрены очень кратко. К сожалению, границы обзорной статьи не позволяют рассказать о XML достаточно глубоко. Все эту информацию можно получить на Web-сайтах, хранящих данные по технологии XML и из будущих статей посвященных этой же теме.


Источник публикации: Софтерра