XML — это необычно успешная технология, однако она имеет свои недостатки. Большой успех привлекает большое внимание; поэтому с самого начала разные специалисты пытались доработать технологию XML. Людям приходится иметь дело с такими сложностями, как пространства имен XML, а также с недавно появившимися средствами для обработки XML-данных — такими как XPath, XSLT и XQuery 3.0. Некоторые влиятельные специалисты по Core XML вообще предлагали заняться упрощением технологии XML как таковой.
Еще один осложняющий фактор — угроза, исходящая от создателей веб-браузеров, работающих с технологией HTML5. Технология, которую иногда называют XHTML5, стала бы радикальной переработкой XML и нарушила бы несколько самых заветных принципов экосистемы. Однако большинство специалистов, связанных с HTML5, считают неудобной и технологию XHTML5.
Такое сочетание действующих факторов породило дискуссии в сообществе XML-DEV и в различных блогах. В конечном итоге Джеймс Кларк (James Clark) выдвинул полномасштабное предложение по технологии MicroXML. Джон Кован (John Cowan), участник рабочей группе W3C XML Core, включился в этот процесс в качестве главного действующего лица и редактора спецификации MicroXML.
На данный момент технология MicroXML не имеет никакого официального статуса ни в одной из признанных организаций по стандартизации, однако по ряду причин она представляет значительный интерес для XML-разработчиков. Дж. Кован уже разработал инструмент MicroLark, реализованный на Java, а я разработал инструмент для Python. Имеет место значительный интерес к спецификации MicroXML (см. раздел Ресурсы). И не забывайте, что многие важнейшие современные технологии, такие как JSON и Markdown, имеют подобное неформальное происхождение.
Один из самых ценных аспектов понимания MicroXML — эта технология поможет вам освоить наиболее эффективный способ применения "полной" технологии XML. Эта статья рассказывает о MicroXML. Приведенные в ней примеры помогают изучить основные отличия между MicroXML и полной технологией XML. Кроме того, в статью включены некоторые объяснения. Предполагается, что читатель знаком с основами XML.
Две основных цели MicroXML:
- Поддержание весьма простой модели данных
- Поддержание обратной совместимости с XML
Все остальное является следствием этих двух целей. MicroXML-документы — это т. н. "правильно построенные" XML-документы (well-formed). Кроме того, при создании MicroXML была предусмотрена совместимость с HTML5 и JSON.
Основные спецификации для моделей XML-данных, включая Infoset и XDM (XPath Data Model), имеют размеры в десятки страниц. Даже у модели данных XPath 1.0, получившей признание за свою элегантность и компактность, размер составляет несколько страниц. Модель MicroXML-данных составляет примерно половину страницы, если исключить примечания по совместимости с JSON. Дж. Кован вообще уменьшил эти размеры до единственного параграфа. Ниже приводится полный текст его формулировки.
"Модель данных документа содержит не менее одного элемента object (объект). Элемент object — это абстрактное описание одного элемента в документе. Каждый элемент object имеет три ассоциированных с ним свойства: name (имя), attribute map (карта атрибутов) и sequence of children (последовательность потомков). Имя — это строка; карта атрибутов отображает строки имен в строки значений; каждый потомок в последовательности потомков — это или строка, представляющая символьные данные, или элемент object".
Остальная часть этой статьи посвящена описанию синтаксиса MicroXML (синтаксис непосредственно вытекает из модели данных). Охватывающая концепция: MicroXML — это документ, являющийся результатом синтаксического анализа (парсинга) входного потока, который полностью соответствует спецификации MicroXML.
Наиболее фундаментальное различие между XML и MicroXML — это манипулирование поведением парсера. Печально известная концепция строгой обработки ошибок в XML обязывает парсер останавливаться сразу же после первой встреченной им ошибки. Эта концепция была источником больших разногласий, особенно с учетом того, что технология HTML приучила людей к небрежной разметке. Кроме того, критики XML могут в этой связи цитировать закон Постела (Postel): "Относитесь консервативно к тому, что посылаете, и либерально к тому, что принимаете".
В MicroXML парсер способен продолжить работу после выявления ошибки. Тем не менее, в точке ошибки он обязан каким-либо образом обозначить входные данные как "не документальные". Это позволяет совместимому MicroXML-парсеру переключиться на иную интерпретацию входных данных. Подобным образом HTML-парсеры способны переключаться из режима соответствия стандартам в режим tag soup ("суп из тегов").
Например, если XML-процессор сталкивается со следующей входной информацией, он обязан остановиться, как только достигнет тега </para>, и выдать сообщение об ошибке типа "неправильность построения" (несоответствующий закрывающий тег).
<para>Hello, I claim to be <strong>MicroXML</para> |
MicroXML-парсер смог бы продолжить работу в этой точке, однако он больше не будет сообщать о входной информации как о MicroXML-документе. Он даже может исправить выходную информацию, для чего вставить тег </strong> непосредственно перед тегом </para>, однако и в этом случае должен не утверждать, что результат является MicroXML-документом. Это едва различимое смягчение ограничений по правильности построения имеет огромное значение при проектировании систем для работы с реальным языком, которым приходится иметь дело с непредсказуемой входной информацией.
MicroXML поддерживает лишь одну кодировку: UTF-8. MicroXML-документ представляет собой последовательность символов в кодировке UTF-8, которые образуют структуру, выраженную в виде модели MicroXML-данных. Как и в случае XML, исходная последовательность символов называется text (текст) и состоит из разметки и символьных данных. В следующем примере показано техническое различие между текстом и символьными данными.
<para style="friendly">Hello, I am...<strong>MicroXML</strong></para> |
Все символы между тегом <para> и тегом </para> являются текстом, однако символьными данными являются лишь следующие последовательности:
friendlyHello, I am...MicroXML
Символьные данные — это то, что находится внутри значений атрибутов и между тегами, образующими элементы.
Элементы, атрибуты и символьные данные
Элементы, атрибуты и символьные данные — это основа XML; в соответствующие конструкции MicroXML не внесено значительных изменений. Самое большое различие — запрет использования двоеточий в именах элементов. Это исключает элементы с префиксами, которые часто используются с целью задействования спецификации XML Namespaces (Пространства имен в XML). Как объясняется далее, технология MicroXML поддерживает пространства имен, однако все элементы должны использовать форму без префиксов.
Атрибуты могут использовать форму пространства имен с префиксами, которые иногда называются глобальными атрибутами. В спецификации MicroXML задано использование следующих атрибутов.
-
xml:space xml:langxml:basexml:id
Спецификация XML 1.0 разрешает такие имена атрибутов, как spam:eggs:toast, однако они запрещены спецификацией XML Namespaces, а также спецификацией MicroXML. В MicroXML применяются такие же правила для атрибутов без префиксов, как и в XML; атрибут без префиксов не принадлежит какому-либо пространству имен, даже если он появляется внутри элемента, который находится в том или ином пространстве имен.
В отличие от в XML, в MicroXML применение пробелов в атрибутах не нормализовано. К примеру, в XML следующие два документа неразличимы.
<para>Hi. I'm some form of <abbr ref="Extensible Markup Language">XML</abbr></para> <para>Hi. I'm some form of <abbr ref=" Extensible Markup Language ">XML</abbr></para> |
Обратите внимание на различия в количестве пробелов в атрибуте ref. В MicroXML все пробелы в атрибутах учитываются точно, поэтому эти два документа являются различными.
Инструкции по обработке и комментарии
Инструкции по обработке (Processing instruction, PI) всегда были спорной областью XML и остаются таковыми в MicroXML. Некоторые специалисты требуют, чтобы инструкции по обработке были включены, а некоторые требуют их исключения. В HTML5 будущее инструкций по обработке также весьма туманно. В спецификации MicroXML в этой области достигнут хороший баланс; она допускает ограниченный набор инструкций по обработке, которые выглядят подобно тегам start. Самое распространенное использования инструкций по обработке, xml-stylesheet, по-прежнему является корректным в MicroXML.
<?xml-stylesheet type="text/css" href="mystyles.css"?> |
Комментарии MicroXML весьма подобны комментариям XML. Введены некоторые дополнительные ограничения для адаптации к HTML5, однако они, скорее всего, не затронут большинство разработчиков. С целью сохранения совместимости в MicroXML не ослаблены ограничения XML, особенно запрет двух тире (--) в рамках комментария, в результате чего исключаются вложенные комментарии.
Комментарии предназначены исключительно для людей, читающих документы, и игнорируются парсером. MicroXML-парсер сообщает об инструкциях по обработке, однако не считает их частью модели данных. Приложения, которые распознают и используют инструкции по обработке в MicroXML, должны функционировать на синтаксическом уровне, а не на уровне данных.
MicroXML поддерживает упрощенный подход к пространствами имен XML. Парсер представляет приложению атрибуты для декларирования пространства имен (xmlns и xmlns:a-prefix) как регулярные атрибуты без какой-либо специальной обработки. Ну и конечно, разработчикам MicroXML-приложений следует использовать эту информацию для конструирования такой модели, в которой элементы и атрибуты имели бы универсальные имена, не зависящие от их префиксов.
В общем случае, технология MicroXML поддерживает такие спецификации, как XLink, а также такие зависимые спецификации, как SVG.
Спецификация MicroXML содержит краткие разделы по следующей тематике:
- Спецификация естественного языка (
xml:lang) и спецификации для сохранения пробелов (xml:space), подобные спецификации XML 1.0. - Спецификации
xml:baseиxml:id, подобные соответствующим спецификациям Core XML.
Единственная поддерживаемая декларация типа Document — это простая декларация для объявления имени корневого элемента. Определения типа документа (DTD) вообще не поддерживаются в MicroXML — ни во внутреннем, ни во внешнем подмножестве.
В этом параграфе приведен достаточно полный пример типичного XML-кода из реального мира, призванный продемонстрировать отличия MicroXML. Atom — это хороший формат для примера, поскольку он нередко содержит сочетание пространств имен. Листинг 1 Листинг 1 базируется на Листинге из учебного пособия под названием "Обработка документов Atom 1.0 с помощью XSLT" (см. Ресурсы). Я лишь удалил один из элементов entry и использовал префикс a пространства имен для всех основных элементов Atom, таких как feed, с целью иллюстрации изменений в пространствах имен в MicroXML.
Листинг 1. Типичный XML-код
<?xml version="1.0" encoding="utf-8"?>
<a:feed xmlns:a="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en"
xml:base="http://copia.ogbuji.net">
<a:id>http://copia.ogbuji.net/atom1.0</a:id>
<a:title>Copia</a:title>
<a:updated>2005-07-15T12:00:00Z</a:updated>
<a:author>
<a:name>Uche Ogbuji</a:name>
<a:uri>http://uche.ogbuji.net</a:uri>
</a:author>
<a:link href="/blog" />
<a:link rel="self" href="/blog/atom1.0" />
<a:entry>
<a:id>http://copia.ogbuji.net/blog/2005-09-16/xhtml</a:id>
<a:title>XHTML tutorial pubbed</a:title>
<a:link href="http://copia.posterous.com/xhtml-tutorial-pubbed"/>
<a:category term="xml"/>
<a:category term="css"/>
<a:category term="xhtml"/>
<a:updated>2005-07-15T12:00:00Z</a:updated>
<a:content type="xhtml">
<div>
<p>
<a href="http://www.ibm.com/developerworks/edu/x-dw-x-xhtml-i.htm">
"XHTML, step-by-step"
</a>
</p>
<blockquote>
<p>Start working with Extensible Hypertext Markup Language. In this tutorial,
author Uche Ogbuji shows you how to use XHTML in practical Web sites.</p>
</blockquote>
<p>In this tutorial</p>
<ul>
<li>Tutorial introduction</li>
<li>Anatomy of an XHTML Web page</li>
<li>Understand the ground rules</li>
<li>Replace common HTML idioms</li>
<li>Some practical considerations</li>
<li>Wrap up</li>
</ul>
</div>
</a:content>
</a:entry>
</a:feed>
|
Листинг 2 представляет собой MicroXML-версию листинга 1.
Обратите внимание на отсутствие XML-декларации, которая не поддерживается в MicroXML и не нужна, поскольку поддерживается только кодировка UTF-8. Ни один из элементов не имеет никаких префиксов. По умолчанию для элемента feed назначается пространство имен Атом, а для элемента div назначается пространство имен XHTML.
Листинг 2. MicroXML-версия
<feed xmlns="http://www.w3.org/2005/Atom"
xml:lang="en"
xml:base="http://copia.ogbuji.net">
<id>http://copia.ogbuji.net/atom1.0</id>
<title>Copia</title>
<updated>2005-07-15T12:00:00Z</updated>
<author>
<name>Uche Ogbuji</name>
<uri>http://uche.ogbuji.net</uri>
</author>
<link href="/blog" />
<link rel="self" href="/blog/atom1.0" />
<entry>
<id>http://copia.ogbuji.net/blog/2005-09-16/xhtml</id>
<title>XHTML tutorial pubbed</title>
<link href="http://copia.posterous.com/xhtml-tutorial-pubbed"/>
<category term="xml"/>
<category term="css"/>
<category term="xhtml"/>
<updated>2005-07-15T12:00:00Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<p>
<a href="http://www.ibm.com/developerworks/edu/x-dw-x-xhtml-i.htm">
"XHTML, step-by-step"
</a>
</p>
<blockquote>
<p>Start working with Extensible Hypertext Markup Language. In this tutorial,
author Uche Ogbuji shows you how to use XHTML in practical Web sites.</p>
</blockquote>
<p>In this tutorial</p>
<ul>
<li>Tutorial introduction</li>
<li>Anatomy of an XHTML Web page</li>
<li>Understand the ground rules</li>
<li>Replace common HTML idioms</li>
<li>Some practical considerations</li>
<li>Wrap up</li>
</ul>
</div>
</content>
</entry>
</feed>
|
В листинге 3 показан MicroXML-документ, который одновременно является валидным HTML5-документом. В нем используется упрощенная декларация Doctype. Кроме того, в этом примере используются инструкция по обработке и комментарий.
Листинг 3. MicroXML-документ/валидный HTML5-документ
<!DOCTYPE html>
<?xml-stylesheet type="text/css" href="mystyle.css"?>
<html lang="en">
<!-- A comment -->
<head>
<title>Welcome page</title>
</head>
<body>
<p>Welcome to <a href="ibm.com/developerworks/">IBM developerWorks</a>.</p>
</body>
</html>
|
Спецификация MicroXML по-прежнему находится в стадии развития. Я не призываю всех в обязательном порядке полностью перейти на MicroXML и отвернуться от полномасштабной технологии XML, тем не менее, MicroXML — это весьма важная разработка. Понимание MicroXML поможет вам осознать, как использовать XML наиболее эффективным образом в условиях происходящих изменений, таких как появление технологий JSON и HTML5. Спецификация MicroXML имеет весьма небольшие размеры, а некоторые инструменты уже находятся в пределах досягаемости. Я настоятельно рекомендую вам поэкспериментировать с MicroXML.
- Оригинал статьи: Introducing MicroXML, Part 1: Explore the basic principles of MicroXML.
- Представляем MicroXML. Часть 2. Обработка MicroXML с помощью инструмента MicroLark (Уче Огбуйи (Uche Ogbuji), developerWorks июнь 2012 г.). Вторая статья данного цикла, посвященная изучению MicroXML-парсера под названием MicroLark с использованием примера программного кода.
- Спецификация MicroXML (Джон Кован (John Cowan), июнь 2011 г.). Данная спецификация, представляющая собой MicroXML-документ, содержит дополнительную информацию по MicroXML.
- Подробнее о MicroXML (Джеймс Кларк (James Clark), декабрь 2010 г.). Прочитайте о том, как сформировалась концепция MicroXML.
- Основы HTML5 (Грейс Уолкер (Grace Walker),developerWorks, май 2011 г.). Дополнительная информация по технологии HTML5, а также о ее XML-дополнении в статье Thinking XML: The XML flavor of HTML5 (Уче Огбуйи (Uche Ogbuji), developerWorks июль 2010 г.).
- Обработка документов Atom 1.0 с помощью XSLT (Уче Огбуйи (Uche Ogbuji), developerWorks, декабрь 2005 г.). Учебное пособие по применению методик XSLT для обработки Atom-документов на примере реальных сценариев применения.
- XML-зона на ресурсе developerWorks: Необходимые ресурсы для развития навыков в области XML, включая DTD, схемы и XSLT. Материалы по тематике XML в разделе Technical library (техническая библиотека):обширный ассортимент технических статей, рекомендаций, руководств, учебных пособий и стандартов, а также материалов серии IBM Redbook.
- Сертификация IBM по XML: Узнайте, как получить сертификат IBM-Certified Developer in XML (сертифицированный корпорацией IBM разработчик по XML и связанным технологиям).
- Материалы developerWorks на ресурсе Twitter: присоединяйтесь к сообществу developerWorks.

Уче Огбуйи (Uche Ogbuji) является консультантом и соучредителем корпорации Fourthought, которая занимается поставкой и консультационными услугами в области XML-решений для корпоративного управления знаниями. Корпорация Fourthought разрабатывает 4Suite, платформу с открытым исходным кодом для XML, RDF и приложений управления знаниями. Огбуйи также является ведущим разработчиком Versa - языка запросов RDF. Специалист по компьютерной технике и писатель, Огбуйи родился в Нигерии, в данной время проживает и работает в г. Боулдер, Колорадо, США. Связаться с ним можно по электронной почте uche@ogbuji.net.