Содержание


Представляем MicroXML

Часть 1. Базовые принципы MicroXML

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

Comments

Серия контента:

Этот контент является частью # из серии # статей: Представляем MicroXML

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Представляем MicroXML

Следите за выходом новых статей этой серии.

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

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


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

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