レベル: 初級 Uche Ogbuji (uche@ogbuji.net), Consultant, Fourthought, Inc.
2004年 5月 25日
Webはこれまで常に、共有され、相互参照されることを目的とした一連の記事や事象、その他の公表したい内容を表すサイトを包括していました。Webの大部分が対話型のコミュニティになりつつあるのに伴って、こうしたコミュニティの多くが、このような交換や相互参照に関するXMLベースの標準を作るために集まっています。Webメタデータ交換のためのフォーマットおよびAPIを規定したAtomは、こうした取り組みの産物です。今回の記事では、Uche OgbujiがAtomを紹介します。
XMLコミュニティでは、RSS論争についてよく知られています。配信(syndication)、つまりWebサイトからポータルに集約される情報の送信のためのこの軽量フォーマットをNetscapeがかき集めたのですが、その地味な滑り出し以来、頭文字の表す意味さえ議論の対象となっています。Weblogや次世代のポータルは、Webリソース記述の交換を、広範囲に及ぶ重要な事象へと変えました。様々な流儀のRSSがメタデータ交換の世界を支配しており、それがRSS論争の混乱に、さらに拍車をかけています。
この騒動に長らく関係している技術者の一人としてよく知られているのが、IBM Emerging Technology GroupのSam Rubyです。Rubyは2003年の中頃、RSSと関連した配信フォーマットに関する各方面の専門家やユーザに協力を呼びかけ、次世代のフォーマットを開発することを提案しました。その目的の一つは、あらゆる派閥が参加した標準を構築することによって、RSSで起きたような戦いを抑えようというものでした。そしてもう一つの目標は、様々な流儀のRSSに比べて、より技術的に健全な設計をすることです。多くのRSSユーザの実務的な経験を生かして、実用的な設計で和解を図り、新しいフォーマットの目標をWebのアーキテクチャのみならずWebの文化とも調和して動作することに置いたのです。すると、好戦的で妨害に終始しているRSSへの不満から、そして対象となっている技術的な問題に対する新しい手法への願望から、多数の開発者やライターがこのプロジェクトに参加しようと殺到したのです。
このプロジェクトは最初、Echoと呼ばれていましたが、商標権に関する懸念が浮上したため、Atomという名前に変わりました。Atom Wikiで述べられているように、このプロジェクトでは「エピソード(散発的な話題)から成るWebサイトの配信や保存、編集のための仕様」を作成します。Atomが対象としている領域を定義する特徴は、自然にエピソードに分解されるようなWebサイトだけではなく、他のサイトとの交換を通して対話型の性質を持つWebサイトも含む、と私は思っています。エピソードはしばしば他のサイトにある、類似の項目への相互参照によって活気づけられますが、Atomは、この交換(コメントやトラックバックなど)のまとめ役になろうとしているのです。
Atomは、様々な理由から注目すべきものですが、特に注目すべきなのは、コミュニティ仕様のために集まった委員会としては最大規模のものの一つでありながら、単純なままにとどまっているという点です。AtomはWebリソースに関する情報を表現するためのXMLフォーマットであるSyndication Format Specification(現時点ではversion 0.3, draft 2)と、HTTPに基づいた、Webリソースの取り出しや修正のための一連の規約であるAPI Specification(現時点ではversion 0.9)から構成されています。どちらの仕様もRFCとして標準化することを目標にインターネット・ドラフトとして書かれていますが、現在はAPI仕様のみが、正式に IETF(Internet Engineering Task Force) に提出されています。Atomは、XML構文だけでなく、OWL(Webオントロジー言語) を使ったRDF形式でも開発されています。この記事では、XMLフォーマットの仕様に焦点を当てながらAtomを紹介しますが、必要な部分ではAPIにも簡単に触れることにします。Atomの仕様はどれも活発な開発が行われている最中であり、本質的な部分は変わらずに残ると思いますが、標準化されるまでに様々な変更が行われる可能性が高いと思われます。
Webリソースを作る
ここで、Stanza Webという名前で、正式な詩歌に関するWebマガジンを始めることを考えてみてください。Atomを使うと、サイトを更新したり、新しい詩歌や論文、その他の特集記事をリストアップしたり、また他のサイトから興味のある情報を集めたりすることができます。最初の段階は、読者を歓迎する記事を掲載することです。そのためにAtomのAPIでは、Atomのentry要素から成るXML文書の中にコンテンツをラップし、この文書をWebサーバにあるPostURIと呼ばれる特別なURIに対して、HTTP POSTメッセージとして送るように規定しています。リスト1は、このXML文書の一例です。
リスト1. 項目を作成するためにPostURIに送られるAtomのentry要素の例
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://purl.org/atom/ns#">
<title>Welcome to Stanza Web</title>
<author>
<name>Uche Ogbuji</name>
<!-- May also contain a URL and e-mail address -->
</author>
<link rel="alternate" type="text/html"
href="http://stanzaweb.art/2004-06-01/welcome"/>
<!-- Time in UTC -->
<modified>2004-06-01T10:11:12Z</modified>
<content type="application/xhtml+xml" xml:lang="en">
<div class="article" xmlns="http://www.w3.org/1999/xhtml">
<p>Welcome to
<a href="http://stanzaweb.art/">Stanza Web</a>.
Come back often to keep track of the best in modern poetry.
</p>
<p>This site is powered by
<a href="http://atomenabled.org">Atom</a>
</p>
</div>
</content>
</entry>
|
Atomフォーマットの全要素は、まだ確定していない拡張性のための規則によれば、名前空間http://purl.org/atom/ns# または外部名前空間の中にある必要があります。entry要素は、次のような子要素を持つ必要があります。
-
title
-
alternate (代替)の関連を持つlink
-
modified
entryentryはidやcontributor、それにcontentのような、他の要素を持っている可能性があります。この場合のようにPostURIを扱う場合には、後者が通常存在しています。
サーバが既存のリソースに関する情報をクライアントに送信している時には、このentry情報の全てが意味をなしますが、PostURIに向けて送られる時の各要素の役割に関しては、まだ仕様として明確にはなっていません。恐らくtitle とauthor 要素は、作成されたリソースに、適切なメタデータを設定するために使われます。modified要素は、サーバがどのようにエントリに対してタイムスタンプを与えるかに関するヒントを提供しますが、リソースに対するタイムスタンプが送信者の指示ではなくサーバ・ポリシーによって設定される場合に、サーバがどのように対応すべきであるかは明確ではありません。linkは恐らく、作成されたリソースに対するURIをどのように構成するか、またそのリソース(の少なくとも一つの表現)にどんなインターネット・メディア・タイプを割り当てるかをサーバに対して示します。ただしこれがポリシーに関する、より深刻な疑問を引き起こすことになります。
content要素は恐らく、作成されるリソースの本体を規定します。content要素は、MIMEのあらゆる可能性を考えれば、バイナリであることもあり得ます。この例では、コンテンツはXHTMLのdivとして設定されています。これは投稿されているリソースがやがて、より大きなWebページの中に取り入れられ、表示される場合(これはWeblogでは一般的なことです)には巧妙な方法だと言えます。他の場合には、コンテンツとして(htmlルート要素も含めて)XHTML文書全体を送ることに意味があるかも知れません。もちろん、HTMLやプレーン・テキスト、それに画像ファイルや音声ファイルのような他のコンテンツ・フォーマットを送ることも全く問題ありません。そうした場合には、必ず各種のメディア・タイプ属性を適切に設定するようにしてください。
Atomの発見
皆さんは、歓迎のメッセージを新しいWebサイトに掲示したので、今度は同じ興味を持つ他の人から見つけて欲しいと望みます。そう言う人達の一部は、その人達自身のWebサイトに情報を配信するために、皆さんのAtomフィードを使うことを望むでしょう。また一部の人は、皆さんのメッセージにコメントを寄せたいと思うでしょう。これをAtomで実現するには、皆さんのWebサイトを更新して、HTMLヘッダに、ある特別なAtom特有のリンクを追加します。リスト2は、こうしたリンクを説明するHTMLの断片です。
リスト2. Atomに関連したURIを発見するためのHTMLヘッダにおけるリンクの例
<html>
<head>
<title>Stanza Web</title>
<link rel="service.post" type="application/x.atom+xml"
href="http://stanzaweb.art/atom-post"
title="Stanza Web"/>
<link rel="service.feed" type="application/x.atom+xml"
href="http://stanzaweb.art/atom-feed"
title="Stanza Web"/>
</head>
<body> ... </body>
</html>
|
リスト2における、最初のlink要素(赤で示しています)は、service.post という関連値を持っており、そして一般的に新しい記事を作成するために使用されるサイト全体に対するPostURIを提供しています。個々の記事に対するWebページは、その記事に関するコメントを作成するために、PostURIへの異なるリンクを持っている可能性があります。また、EditURIを提供するrel="service.edit" に関するリンクを持っているかも知れません。このURIにHTTP GETを送ると、編集に適した、コンテンツ表現を取得できます。そして更新はHTTP POSTを使って送ることができます。2番目のlink要素(青で示しています)は、service.feed という関連値を持ち、FeedURIを提供します。Atomクライアントが完全なAtomフィードを取得するためには、HTTP GETリクエストを送ります。
Atom API仕様では、セキュリティは直接扱われていませんが、様々なAtom API操作に対してHTTPベースの認証サポートが実装されることは期待できるでしょう。
Atomフィード
理想的には、読者がStanza Webにやって来て記事を読み、さらに次を読むためにまた戻って来ようと思うでしょう。そのような場合に読者は、Atom FeedURIを読み込んで自分のAtomツールをこのサイトに向けるように設定することができます。FeedURIには、いつでもアクセスでき、通常は最近の記事や変更された項目のメタデータを表すこのサイトのフィードを取得することができます。リスト3は、Atomフォーマットでの、そうしたフィードの例です。
リスト3. FeedURIから取得した完全なAtomフィードの例
<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<title>Schema Web</title>
<link rel="alternate" type="text/html"
href="http://stanzaweb.art/"/>
<modified>2004-06-01T10:11:12Z</modified>
<author>
<name>Uche Ogbuji</name>
</author>
<entry xmlns="http://purl.org/atom/ns#">
<title>Welcome to Stanza Web</title>
<author>
<name>Uche Ogbuji</name>
</author>
<link rel="alternate" type="text/html"
href="http://stanzaweb.art/2004-06-01/welcome"/>
<modified>2004-06-01T10:11:12Z</modified>
<content type="application/xhtml+xml" xml:lang="en">
<div class="article" xmlns="http://www.w3.org/1999/xhtml">
<p>Welcome to
<a href="http://stanzaweb.art/">Stanza Web</a>.
Come back often to keep track of the best in modern poetry.
</p>
<p>This site is powered by
<a href="http://atomenabled.org">Atom</a>
</p>
</div>
</content>
</entry>
</feed>
|
最上位レベルの要素は、feed になっています。feed には、追加された記事に対するentry要素を含んでいます。feedの、別の子要素は、サイト全体のメタデータを表現しています。rel="alternate" type="text/html" を含むlinkは、そのサイトの代替表現として、人に読める説明を指しています。modified要素は、新しいコンテンツがサイトに追加されたのはいつかを判定するためにAtomツールによって使われます。
まとめ
Atom仕様には、まだかなりの作業が必要であり、また、人に関連したURLがXML属性の中ではなく要素の内容として表現されるなど、気になる点も残っています。Atomが完全な標準に至るまでには、修正するだけの時間がまだ充分あります。幾つかのAtom実装は、実験用として既に入手可能であり、また、皆さんがこの取組みに何か貢献したいと思いたった場合に備えて、Atomコミュニティの扉は大きく開かれています。
参考文献
著者について  | 
|  | Uche Ogbuji氏は、Fourthought, Inc. のコンサルタント兼共同設立者です。この会社は、企業のナレッジ・マネジメントのためのXMLソリューションを専門とするソフトウェア・ベンダー兼コンサルタント会社です。Fourthoughtでは、XML、RDF、およびナレッジ・マネジメント・アプリケーション用のオープン・ソース・プラットフォームである4Suiteを開発しています。Ogbuji氏は、ナイジェリア出身のコンピューター・エンジニア兼ライターで、現在は、米国コロラド州ボールダーに住み、そこで働いています。Ogbuji氏の連絡先はuche.ogbuji@fourthought.com です。 |
記事の評価
|