Представляем MicroXML: Часть 1. Базовые принципы MicroXML

Возможное будущее технологии XML

Многие участники XML-сообщества постоянно жаловались, что технология XML трудна для понимания и для применения. В силу разнообразных исторических причин технология XML в своей основе весьма сложна, поэтому на протяжении последних десяти лет было предложено несколько упрощенных версий. Технология HTML5 стала угрозой для некоторых наиболее фундаментальных принципов XML, что породило масштабные дискуссии. Следствием этих дискуссий явилось появление технологии MicroXML — обратно-совместимого упрощения технологии XML. Технология MicroXML — это весьма знаменательное явление, что объясняется такими причинам, как известность некоторых из причастных к ней людей и время ее появления. К настоящему времени Джон Кован (John Cowan) уже разработал MicroXML-парсер на языке Java™ а также другие родственные инструменты. Из этой статьи вы узнаете о технологии MicroXML, а также о ее технических отличиях от спецификации XML 1.x и от соответствующих стандартов.

Уче Огбуйи (Uche Ogbuji), главный консультант, Fourthought

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



12.06.2012 (Впервые опубликовано 31.10.2012)

Введение

XML — это необычно успешная технология, однако она имеет свои недостатки. Большой успех привлекает большое внимание; поэтому с самого начала разные специалисты пытались доработать технологию XML. Людям приходится иметь дело с такими сложностями, как пространства имен XML, а также с недавно появившимися средствами для обработки XML-данных — такими как XPath, XSLT и XQuery 3.0. Некоторые влиятельные специалисты по Core XML вообще предлагали заняться упрощением технологии XML как таковой.

Еще один осложняющий фактор — угроза, исходящая от создателей веб-браузеров, работающих с технологией HTML5. Технология, которую иногда называют XHTML5, стала бы радикальной переработкой XML и нарушила бы несколько самых заветных принципов экосистемы. Однако большинство специалистов, связанных с HTML5, считают неудобной и технологию XHTML5.

Часто используемые сокращения

  • HTML: HyperText Markup Language(язык гипертекстовой разметки, язык HTML)
  • JSON: JavaScript Object Notation(формат обмена данными)
  • PIs: Processing instructions(инструкция по обработке)
  • XML: EXtensible Markup Language(расширяемый язык разметки)
  • XSLT: Extensible Stylesheet Language Transformations(расширяемый язык преобразований таблиц стилей)

Такое сочетание действующих факторов породило дискуссии в сообществе 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

Две основных цели 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

MicroXML поддерживает лишь одну кодировку: UTF-8. MicroXML-документ представляет собой последовательность символов в кодировке UTF-8, которые образуют структуру, выраженную в виде модели MicroXML-данных. Как и в случае XML, исходная последовательность символов называется text (текст) и состоит из разметки и символьных данных. В следующем примере показано техническое различие между текстом и символьными данными.

<para style="friendly">Hello, I am...<strong>MicroXML</strong></para>

Все символы между тегом <para> и тегом </para> являются текстом, однако символьными данными являются лишь следующие последовательности:

  • friendly
  • Hello, I am...
  • MicroXML

Символьные данные — это то, что находится внутри значений атрибутов и между тегами, образующими элементы.

Элементы, атрибуты и символьные данные

Элементы, атрибуты и символьные данные — это основа XML; в соответствующие конструкции MicroXML не внесено значительных изменений. Самое большое различие — запрет использования двоеточий в именах элементов. Это исключает элементы с префиксами, которые часто используются с целью задействования спецификации XML Namespaces (Пространства имен в XML). Как объясняется далее, технология MicroXML поддерживает пространства имен, однако все элементы должны использовать форму без префиксов.

Атрибуты могут использовать форму пространства имен с префиксами, которые иногда называются глобальными атрибутами. В спецификации MicroXML задано использование следующих атрибутов.

  • xml:space
  • xml:lang
  • xml:base
  • xml: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 — ни во внутреннем, ни во внешнем подмножестве.


Примеры на 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.

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Open source
ArticleID=843887
ArticleTitle=Представляем MicroXML: Часть 1. Базовые принципы MicroXML
publish-date=06122012