目次


実用的な XML: RSS 拡張機能で RSS の実力を伸ばす

名前空間によるコア標準の向上

シンプルで制限のない RSS

RSS が何の略であるかと言えば、Really Simple Syndication、Rich Site Summary、RDFSite Summary の略という説があります。おそらく他の説もあるでしょう。実際のRSS は数多くのサイトでよく目にするようになったオレンジ色のボタンで、このdeveloperWorks にもあります。

RSS フィードによって、サイトに加入登録して更新の通知を受けることができます。RSSは、以下の 2 つの重要な点で E メール購読とは異なります。

  • RSS には RSS リーダーという特殊なクライアントが必要ですが、Web ブラウザーにこのクライアントが組み込まれることが多くなってきました。
  • RSS は E メールとは違って個人情報がサイトで交換されることがないため、ユーザーのプライバシーが保護されます。

RSS 101

RSS ファイルは初めてでも簡単にコード化できます。ルート RSS 要素はその名もrss で、その後に channel 要素が続きます。

channel 要素は newsfeed の説明で始まります。この要素には少なくとも、フィード・タイトル(title)、関連 Web サイトへのリンク (link)、フィードの説明 (description) を含める必要があります。

その他の要素はオプションです。最もよく使われるものとしては、フィードの言語(language)、公開日 (pubDate)、カテゴリーでの分類 (category)、そしてチャネルをキャッシュできる時間 (分) を示す有効時間 (ttl) があります。

docs 要素も含まれることがよくありますが、これは特殊です。docs 要素は RSS文書を指すため、この要素の値はすべての RSS 文書で同じでなければなりません。

チャネルの説明の後に続くのは item 要素で、それぞれのアイテムがニュースバリューのあるイベントを表します。

何がニュースバリューのあるものかと言えば、それはサイトとアプリケーションによって異なります。アイテムが表すものは、通常のWeb サイトの場合はページの大幅な更新、ポッドキャストの場合は新しいエピソード、ネットワーク監視アプリケーションの場合はネットワーク・アラート、フォーラムの場合は新しい投稿などと、さまざまです。

item のコンテンツは、チャネルと同じように title、link、description で始まります。コンテンツは、日付、マルチメディア・コンテンツ (enclosure)、配信元、そしてコメントへのリンクによって、より具体的にできます。

説明に HTML タグを含めるには、タグを拡張する必要があります (通常は、CDATAセクションを使用)。

注目に値するのは guid 要素という一意の識別子です。この識別子が存在する場合、RSS リーダーはこれを頼りに新しいアイテムを識別します。GUIDがない場合、リーダーはアイテムのタイトルとコンテンツを比較して新しいアイテムを検出します。

リスト 1 は、RSS フィードの例です。

リスト 1. RSS フィード
<rss version="2.0">
<channel>
<title>Marchal.com</title>
<link>http://www.marchal.com/</link>
<description>Marchal's site.</description>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<language>en</language>
<copyright>Copyright 2006, Benoit Marchal.</copyright>
<pubDate>Fri, 30 Jun 2006 00:35:40 +0200</pubDate>
<item>
<title>Online photos</title>
<link>http://www.marchal.com/en/photos</link>
<description><![CDATA[<p>In 2002 I added a digital camera to my
writer toolbox. I have used it to illustrate my articles and web
sites.</p>
<p>While I had some experience with film-based photos, I was
new to digital images. Most of the things I knew were
still valid, others I had to re-learn. There was
a lot of new material as well. These pages summarize
my findings.</p>]]></description>
<pubDate>Fri, 30 Jun 2006 00:35:40 +0200</pubDate>
<category>photo</category>
<category>2002</category>
<guid isPermaLink="false">photos</guid>
</item>
</channel>
</rss>

ビジターがフィードを購読するには、RSS リーダーが必要です。基本的には、リーダーが定期的にRSS ファイルをダウンロードし、新しいアイテムが見つかった場合はユーザーに通知します。

現在、主要なブラウザーでは RSS リーダーを組み込む流れがあり、Firefox 1.5、InternetExplorer 7、Safari にはすでに RSS リーダーが組み込まれています。スタンドアロンのリーダーも、例えばNewsGator などから入手できます。大事なことを言い忘れていましたが、新しいソフトウェアをインストールしたくないという場合は、GoogleReader や NetVibes などのアグリゲーター・サイトからフィードを読むことも可能です。Zookodaのような、RSS と E メール間のブリッジさえも登場しています。

この他にも、RSS にはこのセクションで紹介しきれないほど多くの要素が定義されています。仕様の詳細については、「参考文献」を参照してください。

RSS の力

手短に言えば、情報の共有やユーザーへの通知が必要なホスト・アプリケーションあるいはWeb サイトは、RSS フィードの恩恵を受けることができます。実に、RSS は山火事のように勢いよく広がりつつあります。

盛んに使用されるようになったことから、多くの頭痛の種も出てきました。一部の開発者は、さまざまなコンセプトをアイテムに押し込まなければならないこと、そのアイテムがあまりにも数限られていることに不満を漏らしています。このような制約に対処するため、RSS2.0 は拡張可能言語として設計されています。その原理は至ってシンプルです。RSS要素自体は名前空間に含められませんが (RSS 0.92 との後方互換性のため)、開発者は独自の名前空間に要素を追加することによって、RSSを自在に拡張できます。

タグに名前空間がある場合、RSS リーダーはその名前空間から拡張を認識しようとします。認識に成功すると、要素を処理することが可能になります。失敗した場合は、単に要素を無視するだけのことです。

これによって、RSS はより強力なアプリケーションの構築が可能なバックボーンとなります。このメカニズムの長所は、リーダーにとって拡張はオプションであるため、拡張を処理できなくてもコアRSS 仕様で実用にかなった目的を達成できるという点です。

名前空間についての注意

先に進む前に、ここで名前空間に関するいくつかの俗説の正体を暴かせてください。驚くべきことに、W3Cが名前空間の勧告を発表してから 7 年を経た今でも多くの誤解が生まれています。そして運悪く、RSSリーダーにはそのような誤解によって標準が誤って実装されているものもあります。

名前空間は、RSS のように要素のコア・セットに拡張が必要な語彙のために設計されています。具体的に言うと、2つの拡張が同じ XML 要素を異なる意味で使用する場合、この名前空間によって名前の衝突を防ぐことができます。

拡張はそれぞれが単独で開発されるため、共通の名前が再使用されるのは時間の問題です。「key」という言葉を例に挙げると、この言葉はデータベース・キー(database key) として使用されたり、暗号鍵 (cryptographic key) として使用される可能性があります。

この曖昧さを取り除くため、名前空間は要素名をローカル名と名前空間 URI (UniformResource Identifier ) に分けています。名前空間 URI は拡張の一意の識別子です。ローカル名はそれ自体では必ずしも一意になりませんが、ローカル名と名前空間URI との組み合わせによって一意性が保証されます。

読者のほとんどは、名前空間の構文を使い慣れていることでしょう。基本的には、xmlns属性が接頭辞を宣言して、これを名前空間の URI に関連付けます。接頭辞は名前空間のURI をローカル名に関連付けます。ローカル名と接頭辞との間の区切り文字となるのはコロンです。リスト2 に、一例を示します。

リスト 2. 名前空間の宣言
<dc:contributor xmlns:dc="http://purl.org/dc/elements/1.1/">
Marchal</dc:contributor>

実際には、名前空間の以下の 2 つの点が混同されています。

  • 識別子は URI で、ほとんどの場合は URL である。
  • 接頭辞とローカル名の組み合わせでは一意性が保証されないため、一意にするには名前空間のURI を使用する必要がある。

上記の 2 つの誤解を指摘しましょう。

まず、名前空間の URI です。名前空間のコンテキストでは、URI は語彙の定義ではなく、完全に識別子です。つまりURI が指すリソースは無関係で、リソースが存在さえしない場合も珍しくありません。

開発者やユーザーが定義を好む限り、アプリケーションが指定された名前空間に含まれる要素を処理するまでは、アプリケーションにファイルをダウンロードさせることは許容されないと考えます。

多くのアプリケーションは、固定的なインターネット接続なしでも実行されます。インターネット接続があるとしても、ファイルをダウンロードしなければならないとしたら、常に許容されるとは限らないくらいに動きが遅くなります。しかもWeb サイトが (一時的に) 使用できなくなったら、どうなるどうでしょう。

さらに、名前空間のコンテキストでは識別子さえあれば十分です。

接頭辞についてはどうでしょう。URI をすべてのタグに追加すると、文書が長くなってしまいます。そのため、URIを短縮するための手段として接頭辞が導入されました。ただし、接頭辞は一意であるとは限らないため(ローカル名を一意にできなければ、接頭辞が一意である確信する根拠は何もありません。接頭辞は非常に短いのが常なので、なおさらのことです)、URIを参照しなければなりません。

私にとって URI ならではの特徴と言うと、ほとんどの URI は URL で、URL にはドメイン名が含まれるため、URIが一意の識別子になるということです。自分のドメイン名を使用して名前空間を定義する限り、一意性は保証されます。同じドメインを登録している組織は他に1 つもないからです。

人気の高い 3 つの拡張

拡張は実際にはどのように機能するかをより深く理解するため、RSS で人気の高い次の3 つの拡張を検討してみましょう。

  • メタデータ用 Dublin Core
  • ポッドキャスト用 iTunes
  • 拡張のさらなる拡張としての写真配信

Dublin Core

Dublin Core は、当初 RFC2413 で定義されたメタデータ要素のセットです。DublinCore はリソースの検索に最低限必要なメタデータのセットで、HTML (META 要素内) や各種の XML の用語で使用されています。

Dublin Core は RSS 以前に開発されたため、当然、一部の要素は RSS 要素と重複しています(言語など)。このような重複はかえって好都合で、Dublin Core 拡張はチャネルまたはアイテムに追加できます。例えば、RSSの copyright 要素はチャネル・レベルでしか使用できませんが、Dublin Coreの rights は個別のアイテムに追加できます。

Dublin Core の名前空間は http://purl.org/dc/elements/1.1/ です。

リスト 3 は、RSS 内の Dublin Core の一例です。

リスト 3. RSS 内の Dublin Core
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<channel>
<title>Marchal</title>
<link>http://www.marchal.com/</link>
<description>Personal site.</description>
<language>en</language>
<item>>
<title>Introduction</title>
<link>http://www.marchal.com/en/</link>
<description>Introduction to the site.</description>
<dc:creator>Marchal</dc:creator>
<dc:rights>Copyright 2001-2004 Marchal</dc:rights>
</item>
</channel>
</rss>

Dublin Core の拡張は、RSS と同様の要素でさえも、追加オプションを提供することにより価値を加えることが可能であることを示しています。

iTunes ミュージック・ストア

iTunes では、iTunes ミュージック・ストアを介してポッドキャストに直接アクセスできます。ポッドキャストをミュージック・ストアに統合するため、iTunesでは http://www.itunes.com/dtds/podcast-1.0.dtd 名前空間に拡張を定義しています。

iTunes 拡張が素晴らしい理由は、以下のとおりです。

  • RSS と同様の要素でも、その定義が異なる場合 (例えば、RSS ではイメージの最大幅を144 と指定していますが、itunes:image iTunes には 300×300 ピクセルのイメージが必要です)、積極的に再定義できます。
  • ユーザー・アクセシビリティーを強化するための新しい要素を定義しています。例えば、RSSではファイルの長さだけが提供されている一方、itunes:duration ではポッドキャストの期間を指定できます。

リスト 4 に、iTunes 拡張を使用した RSS の例を示します。

リスト 4. iTunes 拡張を使用した RSS フィード
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
version="2.0">
<channel>
<title>Declencheur</title>
<link>http://www.declencheur.com/</link>
<description>Le podcast qui parle photos</description>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<language>fr</language>
<copyright> 2006, Benoit Marchal. Tous droits reserves.</copyright>
<pubDate>Wed, 24 May 2006 16:19:39 +0200</pubDate>
<itunes:author>Benoit Marchal</itunes:author>
<itunes:image href="http://www.declencheur.com/clic/medias/2006/dsc_7478.jpg"/>
<itunes:category text="Arts & Entertainment">
<itunes:category text="Photography"/>
</itunes:category>
<itunes:category text="International">
<itunes:category text="French"/>
<itunes:category text="Belgian"/>
</itunes:category>
<item>
<title>Histogramme</title>
<link>http://www.declencheur.com/clic/archives/2006/05/histogramme-visuel</link>
<description><![CDATA[<p><img alt="L'histogramme" height="225"
width="150" align="right" class="photo illustrationright" 
src="//www.declencheur.com/clic/medias/2006/_dsc1808.jpg" />A mes yeux,
l'histogramme est un des progres les plus remarquables de la photographie sur
les dix dernieres annees. Un progres dans la precision de l'exposition au moins
aussi important que la mesure matricielle en son temps.</p>
<p>Les trois segments de l'episode sont (entre parentheses, le debut du
segment concerne) :</p>
<ol><li>(01:34) Elinchrom D-Lite, je suis particulierement enthousiaste
par l'arrivee de ces flashes electroniques de studio. Mes premieres
impressions.</li>
<li>(07:40) Histogramme, le theme principal de l'episode. Un
<a href="http://www.declencheur.com/clic/medias/2006/decl-2006-05-13.pdf"
target="_blank">complement visuel</a> est disponible.</li>
<li>(27:03) Vos commentaires, mes reactions : conseils pour la sauvegarde
et precisions sur l'impression jet d'encre. Merci de votre
soutien !</li></ol>
<p>Les liens presentes dans l'episode :</p>
<ul><li><a href="http://www.elinchrom.com"
target="_blank">Elinchrom</a></li>
<li><a href="http://www.foto-mueller.at" target="_blank">Foto
Mueller</a><br clear="right" /></li></ul>]]></description>
<pubDate>Mon, 15 May 2006 00:21:13 +0200</pubDate>
<category>numerique</category>
<category>technique</category>
<enclosure length="34722926" type="audio/mpeg"
url="http://www.declencheur.com/clic/medias/2006/decl-2006-05-14.mp3" />
<guid isPermaLink="false">histogramme</guid>
<itunes:duration>36:08</itunes:duration>
</item>
</channel>
</rss>

写真配信

フォトキャスティングは、RSS フィードによる写真の配信です。基本的にはポッドキャスティングと同様ですが、この場合は音楽ではなく画像です。一見すると、RSSフィードで写真を配信するには enclosure 要素で十分のように思えます。

効率的なフォト・ビューアーは、最初にサムネールをダウンロードし、ユーザーの要求時にのみ写真をダウンロードします。これはenclosure の動作ではないため、Pheed では、photo:thumbnail (素早くダウンロードできるサイズの小さい画像) と photo:imgsrc (完全解像度の画像) という2 つのタグだけで拡張を定義する必要があります。Pheedは RSS アグリゲーターで、写真などのマルチメディア文書を対象とした特殊なサポートを備えています。

興味深いことに、写真にもメタデータが必要です。Pheed では Dublin Core が選ばれているため、写真拡張は別の拡張でビルドされます。このような賢明な手段によって、作業の重複が削減されています。

リスト 5 に、写真のフィードの例を示します。2 つの名前空間が宣言されていることに注意してください。

リスト 5. 写真のフィードを拡張した RSS フィード
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:photo="http://www.pheed.com/pheed/"
xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<channel>
<title>Fun with photos</title>
<link>http://www.marchal.com/en/photos/</link>
<description>Photo humor.</description>
<language>en</language> 
<item>
<title>Journalist</title>
<link>http://www.marchal.com/en/photos/humour</link>
<description>He needs to fly</description>
<dc:creator>Marchal</dc:creator>
<dc:rights>Copyright 2004 Marchal</dc:rights>
<dc:format>digital</dc:format>
<dc:subject>Lego humor</dc:subject>
<photo:imgsrc>
http://www.marchal.com/en/photos/humour/phbd0001.jpg
</photo:imgsrc>
<photo:thumbnail>
http://www.marchal.com/images/shared/thbd0001.jpg
</photo:thumbnail>
</item>
</channel>
</rss>

独自の拡張を定義する

RSS にあと 1 つの機能があったらよかったのに、と思った場合に行う実際的な方法とは何でしょう。

  1. 必要な拡張が他にまだ存在していないことを確認してください。わかりきったことをやり直す必要はありません。それは、RSSリーダーを悩ませることになってしまいます。
  2. 新しい拡張をどうしても開発する必要がある場合は、名前空間を正しい規則にのっとって作成してください。
  3. 既存の要素が完全に適切なわけではない場合 (例えば、itunes:image は RSS の要素と似ているが、RSS 独自の画像とは異なる場合) は、ためらわずに定義し直してください。要素にいろいろなものを詰め込み過ぎると、混乱を招くだけです。

RSS は柔軟性のあるフォーマットですが、それにも増して重要なのは、ブロードキャストまたはナローキャストが必要な多くのアプリケーションにとって、絶好の開始点であるということです。拡張メカニズムのおかげで、その有効性は無限大です。


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


関連トピック

  • 「シンジケーションの概要」(Vincent Lauria、developerWorks、2006年3月):RSS やその他のフィード・リーダーを紹介しています。また、RSSの人気の理由とメリット、そしてどのフィード・リーダーがご自身のニーズに合っているかを学んでください。
  • RSS 仕様: この非常に信頼性の高い仕様を確認してください。
  • 「Atom 1.0 Syndication Format の概要」(James Snell、developerWorks、2005年8月): Atom を RSS に代わるフィード・リーダーとして検討しています。
  • iTunes extensions: この非常に簡単な仕様、そしてサブミッション・プロセスに関する情報と RSSフィードの準備に関する技術的側面を読んでください。
  • The Dublin Core: さまざまなメタデータ標準の基本を探ってください。
  • Dublin Core で構築された Pheed 拡張: 写真関連の追加要素が含まれる RSS 文書、Pheeds について学んでください。
  • IBM XML 1.1 certification: XML 1.1 や関連技術の IBM 認定開発者になる方法について調べてください。
  • XML: 広範な技術に関する記事とヒント、チュートリアル、標準、そして IBM レッドブックについては、developerWorksXML ゾーンを参照してください。
static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=242789
ArticleTitle=実用的な XML: RSS 拡張機能で RSS の実力を伸ばす
publish-date=08152006