目次


MicroXML の紹介

第 1 回 MicroXML の基本原則を探る

XML の将来の可能性について学ぶ

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: MicroXML の紹介

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:MicroXML の紹介

このシリーズの続きに乞うご期待。

XML は並外れて成功した技術ですが、欠点があります。その並外れた成功は、XML に対する非常に厳密な検証によってもたらされたものであり、ごく初期の頃から XML を再設計しようとする試みがなされてきました。現在、開発者は XML の名前空間の複雑さや、XPath、XSLT、XQuery 3.0 といったXML 処理仕様と格闘しています。XML の中心的な専門家として影響力を持つ人々のなかには、XML そのものを単純化して最初からやり直すという大胆な可能性を検討した人もいました。

XML は、HTML5 に取り組む Web ブラウザー・ベンダーによっても脅かされており、現在のすう勢は、XML プログラミングで最も重視されてきた原則の一部と対立するものになっています。実際 XML は、HTML5 を支持する多くの人々や JSON を好んで使用する多くの開発者から、使いにくいものとみなされています。

こうした勢力のせめぎ合いから、XML-DEV メーリング・リストやさまざまなブログでの議論が生まれました。最終的に、James Clark 氏が MicroXML の完全な提案を行い、W3C XML Core ワーキング・グループの John Cowan 氏が MicroXML 仕様の策定に中心的なコントリビューター兼編集者として参加することとなりました。そして 2012年には MicroXML に関する W3C コミュニティー・グループが設立され、私が議長を務め、Clark 氏と Cowan 氏が編集者を務めるようになりました (現在は、この 3 名が共同議長を務めています)。このグループではドラフト仕様を作成し (「参考文献」を参照)、グループのメンバーが基本実装をいくつか作成しました。

MicroXML は、一般に認知されている標準化団体のいずれにおいても正式な標準として承認されていません。MicroXML のコミュニティー・グループは意図的に非公式なものになっていますが、その仕様は XML 開発者に多大な関心を持たれています。JSON をはじめとする最近の重要な仕様の多くは、同じように非公式な形で開始されています。

この記事では、MicroXML の基本原則について説明するとともに、いくつかの例を用いて MicroXML と完全な XML との重要な違いについても説明します。この記事では読者が XML の基本を理解していることを前提としています。

MicroXML の原則

MicroXML には以下の 2 つの重要な目標があります。

  • 単純な構文とデータ・モデルを維持する
  • これまでの XML のバージョンとの互換性を維持する

コミュニティー・グループは、これらの目標をさらに広げ、仕様を導くためのより具体的な 9 つの設計目標にしました。

  • MicroXML の構文は、XML 1.0 のサブセットである。
  • MicroXML は、データ・モデルを指定するとともに、構文からデータ・モデルへのマッピングも指定し、それは XML 1.0 とおおむね矛盾しないものである。
  • MicroXML は、その仕様、構文、データ・モデルに関しては、XML よりも大幅に単純化される。
  • MicroXML は、XML、JSON、HTML を置き換えるものとしてではなく、補完するものとして設計される。
  • MicroXML は、文書 (特に、コンテンツが混在する文書) としての要求事項をサポートする。
  • MicroXML は、Unicode をサポートする。
  • MicroXML は、オーサリング用テキスト・エディターの使用をサポートする。
  • MicroXML は、HTML を直接表現することができる。
  • MicroXML の仕様は、実用的であると同時に自己完結している。

最初の 2 つの目標は最も基本的なものです。MicroXML 文書は整形式の XML 文書であり、データ・モデルの仕様が重要になります。XML 1.0 では実際にデータ・モデルが指定されることはなかったことから、XML データ・モデルの個別の仕様が継続されました。これらの仕様には、Infoset や、XPath 2.0 以降に対応する XDM (XPath Data Model) が含まれており、仕様全体の長さは何十ページにも及びます。その簡潔さと短さで知られている XPath 1.0 データ・モデルでさえ、仕様は数ページあります。MicroXML データ・モデルは、(MicroXML の仕様全体が 8 ページぐらいになるうちの) 半ページにもなりません。初期データ・モデルは、単純さの実現を支援し、相互運用の可能性を高めます。

MicroXML で全体を包含する概念は、MicroXML 仕様に完全準拠する入力ストリームを構文解析した結果として得られる「要素項目」です。要素項目は、名前、属性マップ、コンテンツ・リストで構成され、最上位レベルの要素項目は、他の要素項目を含むこともできます。

整形式性

XML と MicroXML との最も根本的な違いは、パーサーによるエラー処理にあります。XML のエラー処理は厳格さで悪名高く、パーサーは最初のエラーを検出すると即座に停止する必要があります。このエラー処理は、HTML のいい加減なマークアップに人々が慣れてしまっていることも手伝って、大きな論争の的となっています。XML を批判する人達は、ポステルの法則が一般に普及した形の「送信する内容に関しては厳密に、受信する内容については寛容に」を引用することがよくあります。

MicroXML では、エラー処理の手法に関しては何ら要求をしていません。パーサーは、エラーから正常な状態に回復することも、エラーのまま継続することもできます。文書が整形式の MicroXML 文書ではない場合、パーサーはその事実を通知することができますが、それとは別の動作をすることもできます。例えば、パーサーがエラーを検出した場合、入力の解釈を別のものに切り換えることができます。HTML パーサーは標準に準拠するモードから「タグ・スープ」モードに切り換えることができます。それと同様に考えれば、MicroXML パーサーの動作の感覚がつかめると思います。

例えば、XML プロセッサーが以下のような入力に遭遇した場合、</para> に到達した時点で即座に処理を停止し、開始タグと終了タグが一致しないことによる非整形式エラーを発生させなければなりません。

<para>Hello, I claim to be <strong>MicroXML</para>

MicroXML パーサーはその時点で動作を継続するかもしれませんが、もはや入力を MicroXML 文書と解釈してレポートすることはありません。MicroXML パーサーは、</para> の直前に </strong> を挿入して出力を修正することも可能ですが、その場合も、MicroXML パーサーは修正結果が MicroXML 文書であるとレポートすることはありません。入力を予測できない実際のシステムを設計している場合には、このように MicroXML では整形式性に関する制約が少し緩いことが大きな違いをもたらします。

MicroXML の詳細

MicroXML は UTF-8 エンコーディングのみをサポートしています。MicroXML 文書は UTF-8 でエンコードされた文字のシーケンスであり、それらの文字によって MicroXML のデータ・モデルで表現された構造が形成されます。XML の場合と同様、文字シーケンス自体は「テキスト」と呼ばれ、マークアップと文字データで構成されます。以下の例はテキストと文字データの技術的な違いを示しています。

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

<para> タグから </para> タグの間に含まれているものはすべてテキストですが、文字データは以下のシーケンスのみです。

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

属性値の中にあるもの、要素を構成するタグの間にあるものが、文字データです。

要素、属性、文字データ

要素、属性、文字データは XML の基礎であり、MicroXML の場合も、これらの構成体に関して大きな変更はありません。最大の違いは、MicroXML では要素名と属性名の中でコロンが禁止されていることです。この制約により、MicroXML では XML 仕様の名前空間の中で定義されているような接頭辞を指定することはできません。xmlns 属性を指定することもできないため、MicroXML では名前空間をまったくサポートしていないということになります。この特徴は、MicroXML に出くわした人が最も驚くことです。このことについて詳しくは、「名前空間」セクションで取り上げます。

XML の場合と同じく、MicroXML でも属性内のホワイトスペースは正規化されません。XML の場合、以下の 2 つの文書を区別することはできません。

<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 の場合、属性内のホワイトスペースは、そのまま正確に解釈されるため、上記 2 つの文書は異なることになります。

処理命令、コメント、文書型宣言

処理命令は、XML では常に議論の対象となる領域ですが、MicroXML では処理命令を使用することはできません。MicroXML でのコメントは、MicroXML データ・モデルにはコメントが含まれないことを除けば、XML でのコメントと同じです。MicroXML でのコメントは、構文を維持する特別なアプリケーションでなければ無視されます。基本的に MicroXML でのコメントは、人間のためのものであり、プログラムのためのものではありません。互換性を維持する理由で、MicroXML では XML におけるいかなる制約も緩和していません。特に、コメント内で 2 つのダッシュ (--) を使用することは許されないため、コメントをネストさせることはできません。

MicroXML では、XML 宣言も、いかなる形の文書型宣言もサポートしていません。例えば、HTML5 と互換性がある形で MicroXML を使用する場合であっても、標準的な Web ブラウザーで標準モードにすることはできません。

名前空間

MicroXML は、名前空間をまったくサポートしていません。コロンと接頭辞をサポートしておらず、xmlns 属性もサポートしていません。このように MicroXML が名前空間をサポートしていないことは、XML 仕様のかなりの部分との互換性に影響しており、MicroXML の機能の中でもより議論を呼ぶ部分の 1 つです。しかし、名前空間をサポートしないという決定は、正当な理由からなされたものです。

名前空間は、小さな問題を解決するために複雑さを増大させます。XML のトレーニングを受けた人や、他の人を支援するために XML を使用する人の多くは、名前空間がユーザーや開発者にとって理解するのが群を抜いて困難な概念であると証言することができます。名前空間は、そこから作られる仕様とソフトウェアのすべてをとてつもなく複雑なものにします。もし MicroXML が単純さに対する立場を明確にすることになっていたら、名前空間には反対の立場を取らなければなりませんでした。

MicroXML で新しい語彙を設計する場合、XML 名前空間がなくて不自由することは、思っていたよりもかなり少ないことに気付くはずです。困難なのは、名前空間を使用している既存の XML 語彙を適応させることです。このような場合、MicroXML のフェーズで名前空間を取り除くための変換を使用しなければならず、さらには XML フェーズ用の名前空間を再構築しなければなりません。MicroXML コミュニティーはこのプロセスに役立つツールと規約の作成に取り組んでいます。

接頭辞を使用できないということは、例えば xml:lang の代わりに lang を使用しなければならないということでもあります。しかし MicroXML では、そのような属性を特別にサポートしてはいないため、それらの属性に対する規約を語彙によって設定しなければなりません。

MicroXML の例

このセクションでは、かなり完全な実際の例として、典型的な XML を使用して、その XML が MicroXML ではどのようになるかを示します。Atom は複数の名前空間を含んでいることが多いため、サンプル・フォーマットには適しています。リスト 1 は developerWorks のチュートリアル「XSLT を使用して Atom 1.0 を処理する」のリストを基にしています。ここでは MicroXML での名前空間に関する変更がわかりやすいように、entry 要素の 1 つを削除し、feed などの Atom のコア要素すべてに名前空間接頭辞 a を使用しています。

リスト 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 はリスト 1 を MicroXML で表現したものです。XML 宣言がないことに注意してください。MicroXML では UTF-8 エンコーディングしかサポートしていないため、XML 宣言はサポートしておらず、必要もありません。また、名前空間は一切含まれていません。

リスト 2. MicroXML で表現したバージョン
<!-- http://www.w3.org/2005/Atom -->
<feed lang="en" 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>
        <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>

リスト 2 のコードは Atom ではありません。Atom の場合、Atom 独自の名前空間と、構造化された記述およびコンテンツに対応する XHTML が定義されています。リスト 2 のコードは簡単に Atom の XML に変換することができます。それには、feed 要素とすべての div 要素に xmlns 属性を追加する、構文上の XML 変換を適用してください。Atom のdiv 要素が他の要素と混同されることはめったにありません。このことは、必要とされるよりもはるかに多くの XML 名前空間が使用されているという私の主張を裏付けています。

リスト 3 に示すのは、妥当な HTML5 文書に近い MicroXML 文書です。

リスト 3. HTML5 のような MicroXML
<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>

リスト 3 の文書では、(MicroXML では禁止されている) HTML5 の doctype 宣言が省略されています。この文書は、以下の行を先頭に追加することによって、妥当な HTML5 文書に変換することができます。

<!DOCTYPE html>

まとめ

MicroXML には、完全な XML に勝る重要な利点がいくつかあります。具体的には、モバイルおよびクラウド・コンピューティングなどの分野における利点、セキュリティーの考慮事項に関する利点などがあります。厳格なエラー処理がない MicroXML は、情報交換をするためのより柔軟なフォーマットになります。MicroXML は非常に単純であることから、モバイル機器上で処理する場合など、リソースが限られているような状況でも容易に処理され、クラウド・コンピューティングを使用する場合のように、リソース使用量が計測されているような状況ではより安価に処理されます。また、MicroXML には、ネットワーク上で使用する場合の重要な考慮事項であるセキュリティー問題がごくわずかしかありません。MicroXML 文書には、文書型宣言や文書型が指定されたエンティティーがなく、自己完結しています。MicroXML 文書を構文解析する際に個別のリソースにアクセスする必要はないため、サービス妨害 (DoS) 攻撃やスプーフィング攻撃を排除する上で有効です。

MicroXML はまだ新しく登場したばかりの仕様です。私は、皆さんが完全な XML を使用するのをやめて全面的に MicroXML を採用することを必ずしも支持するわけではありません。しかし、MicroXML の発展が重要であることは確かです。MicroXML を理解すれば、JSON や HTML5 の登場といった変化に直面するなかで XML を最も効果的に使用する方法を十分理解できるはずです。MicroXML 仕様は簡潔であり、いくつかのツールがまもなくリリースされる見通しです。ぜひ皆さんも MicroXML を試してみてください。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source, Web development
ArticleID=822594
ArticleTitle=MicroXML の紹介: 第 1 回 MicroXML の基本原則を探る
publish-date=08092013