RSS -- サイト情報の要約と公開
メタデータ/RDFの応用として利用されているXMLフォーマットの代表として、RSS (RDF Site Summary) があげられます。共通の書式でドキュメントの見出し、要約などのリストを提供することで、サイトの更新情報などを効率的に公開できます。
※RDFの体系的な解説『RDF/OWL入門』を上梓しました。
RSS 1.0の要素と構文
RSS (RDF Site Summary) は、サイトの概要をメタデータとして簡潔に記述するXMLフォーマットです。1999年にRSS 0.9が登場して以来、さまざまな議論や変遷を経てきていますが、本稿ではRSS 1.0(RDFとXML名前空間に基づき、拡張性と「メタデータ配信」の可能性を持つ)を紹介していきます。
RSS 1.0はサイトの情報を簡便に伝えられるよう、次のような簡単な基本構造を持ちます。
- rdf:RDF
- channel
- title
- link
- description
- items
- rdf:Seq
- rdf:li+
- rdf:Seq
- item+
- title
- link
- description?
- channel
上記のリストで、要素型名の後ろに?のあるものはオプション、+のあるものは1回以上の繰り返しを示します(ここではRSS 1.0の最小限の構成要素のみを取り上げています。全要素のリストは、後ほど示します。なお本稿では、デフォルト名前空間がRSS、rdf:はRDFの名前空間接頭辞を示すものとして扱います)。
以下、当サイトが「コントラバスの話」と「ごく簡単なHTMLの説明」という2つのリソースを持つことを示すRSSを記述する例を考えながら、RSSの要素型と構文を簡単に説明していきましょう。
channel要素
RSSはもともと「チャンネル」情報を提供するために開発されたので、基本情報はchannel要素に記述します。この要素はRDFのDescription要素と同様に主語ノードを表す役割を持ち、rdf:about
属性でチャンネルのURI(通常このRSS自身のURI)を示します。channelの内容となる要素は次のものです。これらは、このチャンネルの「プロパティ」に相当します。
要素型名 | 役割 | 出現規則 |
---|---|---|
title | チャンネル(サマリー対象)のタイトル。できれば40バイト以内 | 必須 |
link | RSSでサマリー対象とするサイトのURI。ホームページや新着ページのURIが一般的だが、特定のページやセクションのサマリーをチャンネルとする場合はそのURI | 必須 |
description | チャンネル(サマリー対象)の内容、機能、ソースなどの概要説明。できれば500バイト以内 | 必須 |
image | チャンネルのロゴなどがある場合に記述。イメージのURIをrdf:resource 属性で示し、さらに具体的内容をrdf:RDF直下のimage要素に記述する |
オプション |
items | channelに続くitem要素で記述するリソースの目次に相当。リソースのURIをrdf:li要素のrdf:resource 属性で示し、これらをitem要素と対応させる |
必須 |
textinput | チャンネルと共に検索用のフォームなどを送る場合に使う。古いRSSとの互換性のために残されているが、あまり使われない | オプション |
これらの要素を使って、当サイトのチャンネルを記述してみます。このRSSは、http://www.kanzaki.com/info/rss.rdfでアクセスできるものとします。とりあえずimage要素とtextinput要素は使いません。
[例1]
<channel
rdf:about
="http://www.kanzaki.com/info/rss.rdf"> <title
>The Web KANZAKI - Japan, music and computer</title> <link>http://www.kanzaki.com</link> <description
>コントラバスの話やX/HTMLの情報を提供しています</description> <items
> <rdf:Seq
> <rdf:li
rdf:resource="http://www.kanzaki.com/bass/
"/> <rdf:li rdf:resource="http://www.kanzaki.com/docs/htminfo.html"/> </rdf:Seq> </items> </channel>
items要素はRDFのリストとなるので、rdf:Seq
、rdf:li
といったタグを用いてRDFのコンテナモデルとして表現することに注意してください。この目次に示したリソースについて、次のitem要素で見出しや要約を記述していきます。
item要素
channelのitems要素で目次として示したリソース(記事、文書など)それぞれについて、item要素で具体的に内容を説明します。それぞれがリソースを記述するので、rdf:about
属性で対象URI(主語)を示します。このURIは、対応する目次項目(rdf:li要素)のrdf:resource
属性値(URI)と一致させなければなりません。
item要素内では次の要素を用いてリソースを記述します。これらは、各リソースの「プロパティ」という訳です。
要素型名 | 役割 | 出現規則 |
---|---|---|
title | リソースのタイトル(ニュースヘッドラインなら見出し)。できれば100バイト以内 | 必須 |
link | リソースのURI。基本的にはrdf:about 属性の値と同じ |
必須 |
description | リソースの要約、概要説明など。できれば500バイト以内 | オプション |
RSS 1.0ではitem要素の数は1つ以上で上限はありませんが、RSS 0.9との互換性を考えるならば、15までにしておくことが推奨されています。文字数に関する推奨も、後方互換性のためです。
これらの制約は近い将来取り除かれる方向で検討されており、あまり気にする必要はありません。ただし、description要素に日記やblog記事の全文を記載すると、コンパクトなサマリーを期待する読者には歓迎されないかも知れないので、description要素は短くとどめ、全文は後述するContentモジュールのcontent:encoded要素に記述すると良いでしょう。
[例2]
<item rdf:about="http://www.kanzaki.com/bass/
">
<title>コントラバスの話</title>
<link>http://www.kanzaki.com/bass/</link>
<description>コントラバスに関する基礎知識、エッセイなどを集めた
楽しくてためになるセクション</description>
</item>
シンプルなRSSの全体
ここまでで取り上げた要素を組み合わせることで、サイトを紹介するための基本的なRSSを作成できます。必要な名前空間宣言を持つルート要素を加え、全体を構成してみましょう。目次(rdf:li要素)のrdf:resource
属性で示したURIが、それぞれのitem要素のrdf:about
属性値に対応していることを確認してください。
[例3]
<?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xml:lang="ja"> <channel rdf:about="http://www.kanzaki.com/info/rss.rdf"> <title>The Web KANZAKI - Japan, music and computer</title> <link>http://www.kanzaki.com</link> <description>コントラバスの話やX/HTMLの情報を提供しています</description> <items> <rdf:Seq> <rdf:li rdf:resource="http://www.kanzaki.com/bass/
"/> <rdf:li rdf:resource="http://www.kanzaki.com/docs/htminfo.html
"/> </rdf:Seq> </items> </channel> <item rdf:about="http://www.kanzaki.com/bass/
"> <title>コントラバスの話</title> <link>http://www.kanzaki.com/bass/</link> <description>コントラバスに関する基礎知識、エッセイなどを集めた 楽しくてためになるセクション</description> </item> <item rdf:about="http://www.kanzaki.com/docs/htminfo.html
"> <title>ごく簡単なHTMLの説明</title> <link>http://www.kanzaki.com/docs/htminfo.html</link> <description>HTMLは本当は簡単で便利なもの。「30分間HTML入門」から XHTMLの解説まで、さまざまなテキストで説明します</description> </item> </rdf:RDF>
以上の簡単な要素を揃えるだけで、チャンネルを公開してサイトの情報を提供することができるようになります。この手軽さが、RSSが幅広く支持されている大きな要因です(RSSの公開などについては、末尾の「RSSの実際の利用」セクション参照)。
構文周辺について細かい話
RSS 1.0の仕様で定められていたり推奨されている細かい点をいくつか取り上げておきます。
- 文字コード
- デフォルトはutf-8とされています。正しく文字コード情報を提供すればどんな符号化方法でも良いはずですが、一部のRSS処理ソフト(のXMLパーサ)は、utf-8でないと正しく働かないことがあるようです。
- 拡張子
- ファイルとして保存する場合の拡張子は、
.rdf
もしくは.xml
が推奨されており、前者がより望ましいとされています。 - MIMEタイプ
- 現時点では
application/xml
となっていますが、[RFC3023]で示されるXMLのメディアタイプが確定したら、それに従うこととされています。
RSS 1.0全要素のツリー
ここまでで取り上げなかったものも含め、RSS 1.0を構成する要素全体をツリーとして示しておきます。各要素の出現順序もこの通りに定められていますは特に定められていません。(以下のimage要素、textinput要素はあまり使われません。むしろ日付などの要素を取り込むためのモジュールの方が重要です)。
- rdf:RDF
- channel
- title
- link
- description
- image?
- items
- rdf:Seq
- rdf:li+
- rdf:Seq
- textinput?
- image?
- title
- url
- link
- item+
- title
- link
- description?
- textinput?
- title
- description
- name
- link
- channel
channel要素内のimage,items,textinput各要素は、channel要素に続く各要素の目次の役割を持ちます。したがって、channel要素内のimage、textinput要素は、対応する要素がchannel要素に続く場合のみ必要です。
image要素
image要素はサイトのロゴなどの画像を示すために用います。扱いはitem要素と同様ですが、複数を指定することはできません。具体的には、channel内のimage要素でrdf:resource
属性を使って画像の存在を示し、channel要素の次にimage要素を置いてtitle,link,urlの各要素を記述します。
image要素でrdf:about
属性を用いるのも、item要素の場合と同様です。title要素は、一般に画像の代替テキストとして扱われます。また、linkは画像をアンカーとしてリンクを設定する場合のリンク先となり、画像自身のURIはurl要素に記述します。
[例4]
<channel rdf:about="http://www.kanzaki.com/info/rss.rdf"> ... <image
rdf:resource="http://www.kanzaki.com/parts/banner.png"/> ... </channel> <image
rdf:about="http://www.kanzaki.com/parts/banner.png"> <title>The Web KANZAKI</title> <link>http://www.kanzaki.com</link> <url>http://www.kanzaki.com/parts/banner.png</url> </image>
textinput要素
チャンネルの最後に、検索などのためのフォームを付け加えることを想定しています。フィールドを一つしか送ることができないため、柔軟性に乏しく、RSS1.0では“RSS0.9との互換性のために残されている”となっています。一般にtitle要素を(チャンネル受信側で生成する)フォームの見出し、description要素をラベル、link要素をaction属性の値として用います。他の要素にないname要素は、テキスト入力データの名前(input要素のname属性)となります。
[例5]
<channel rdf:about="http://www.kanzaki.com/info/rss.rdf"> ... <textinput rdf:resource="http://www.kanzaki.com/search/"/> ... </channel> <textinput rdf:about="http://www.kanzaki.com/search/"> <title>Search The Web KANZAKI</title> <description>検索文字列を入力してください</description> <name>key</name> <link>http://www.kanzaki.com/search/</link> </textinput>
RDFとして見た場合のRSS
(このセクションはRDFの細部を説明するので、読み飛ばして先に進んでも構いません)
RSSのRDFモデル
[例3]のXML構文をRDFモデルとして表現すると、channel要素のrdf:about
属性で示したリソースを主語として連鎖的に叙述するRDFのグラフを描くことができます。
[図1] サンプルRSSのRDFグラフ
グラフを見ると明らかなように、このRDF(RSS)が記述するステートメントの主語は、それぞれのrdf:about
属性が示すリソースです。「サイトのサマリーを示すメタデータ」なのだから主語(channel
要素のrdf:about
属性の値)はサイトそのもののURIを用いるべきという気がするかも知れません。しかしRSSは「チャンネル」を記述するものなので(主語リソースはchannel
クラスのインスタンス)、RDFとしてはチャンネルすなわちRSS自身が主語になります。
要約対象となるサイトは、主語チャンネルからlinkプロパティによってそのURIを示されていますが、これはただのリテラルであり、RDFとしてリンク先リソースを示すかたちになっていません。古いRSSの書式と整合性を取るためにこうなっているわけですが、やはりサイトもリソースとして示す方が意味が(エージェントなどにとって)明確でRDFとしては望ましい構文だったはずだと言えるでしょう。なお、rdf:aboutとlinkを巡る背景は別文書RSS 1.0のchannel要素のrdf:aboutを参照。
RDFモデルの補足説明
channel要素内で目次としてrdf:resource属性でリソースを示し、同じものをitem要素でまたrdf:about属性として示すのは冗長に感じられるかも知れません。これはRDFの構造化モデルで説明したような、ステートメントの目的語が別のステートメントの主語となる文の一例です。[例3]の構文は、次のようにしてchannel内のitems要素にitem要素の記述を直接埋め込んでも、RDFのモデルとしては等価で、[図1]と同じグラフが得られます。
[例6]
<rdf:RDF xmlns:...> <channel> ... <items> <rdf:Seq> <rdf:li> <item rdf:about="http://kanzaki.com/bass/
"> <title>コントラバスの話</title> <link>http://kanzaki.com/bass/</link> <description>コントラバスに関する基礎知識...</description> </item> </rdf:li> <rdf:li> <item rdf:about="http://kanzaki.com/docs/htminfo.html
"> <title>ごく簡単なHTMLの説明</title> <link>http://kanzaki.com/docs/htminfo.html</link> <description>HTMLは本当は簡単で便利なもの...</description> </item> </rdf:li> </rdf:Seq> </items> ... </channel> </rdf:RDF
[例3]のようにitem要素をchannel要素の外に出すほうが、それぞれのリソースを記述するという意味が(人間がXMLを読み書きする時には)分かりやすいかもしれません。それにその方がRSS 0.9の構文に近いので、互換性のためもあってitem要素がchannel要素の外に出されているのでしょう。[例6]はRDFモデルとしては同等ですが、構文が異なるので、RSSアプリケーションがうまく処理できるとは限りません。もっともchannel要素内にitem要素が含まれるという形は、逆にRSS 0.91のモデルに近いので、そのまま処理できてしまうことも多いと思いますが。(処理できないリーダーが少なくないので、公開フィードには用いないでください)
また、item要素内のlink要素はrdf:about属性と重複していて蛇足なのですが、rdf:aboutはこのアイテム(コンテンツ)を識別するためのID、linkはハイパーリンクのURLを示し、理屈の上では異なるURIとなることもあり得ます。とはいえ、通常は両者は同じと考えられるので、やはりRSS 0.9との互換性としての意味合いが大きいのでしょう。
RSSの拡張/応用とモジュール
RSS 1.0はXML名前空間を利用した拡張性を重要な特徴としています。名前空間を宣言してCreative CommonsやFOAFといったポピュラーな語彙、あるいは独自の要素型を追加することもできます。より高い相互運用性のために、RSS-DEV Working Groupで拡張語彙の標準「モジュール」を定めています[RSSMOD]。
現在一般に利用されるのは、Dublin CoreモジュールとSyndicationモジュールの2つです。RSSを利用するプログラムの多くは、これらのモジュールを理解します。また、blogの人気に伴いContentなどほかのモジュールも広まりつつあるようです。
コンテナとしてのRSS:RSS1.0の拡張性利用し、さまざまなメタデータの公開・配信のための「コンテナ」として応用することができます。例えばFOAFとRSSを用いた画像メタデータやRDFカレンダーなど。この可能性については、また改めて検討します。
Dublin Coreモジュール
標準的なメタデータ記述要素として用いられるDublin CoreのDCMESを利用するモジュールです。
使い方は簡単です。ルート要素のタグに名前空間の宣言 xmlns:dc
="http://purl.org/dc/elements/1.1/" を加え、DCMESのプロパティを使って作者や更新日付などの情報を記述します。名前空間の接頭辞をdc:
とすること、これらは第2レベル(rdf:RDF
要素の直接の子供)であるchannel, image, item, textinput
各要素の直接の子供として(つまりプロパティ要素として)のみ使用することがモジュールで定義されています。またDCMESの修飾子はいまのところサポートされていません。
このモジュールは、チャンネル自身やそこで記述するリソースの更新日を示すのに特に有益です。ニュースヘッドラインなどの情報は、日時の情報がとても重要なので、それを共通の語彙を用いて明記できるメリットは大きいでしょう。dc:date
の形式はYYYY-MM-DDThh:mm
を用います[W3CDTF]。
[例7]
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc
="http://purl.org/dc/elements/1.1/" xml:lang="ja"> ... <item rdf:about="http://www.kanzaki.com/docs/htminfo.html"> <title>ごく簡単なHTMLの説明</title> <link>http://www.kanzaki.com/docs/htminfo.html</link> <description>HTMLは本当は簡単で便利なもの。「30分間HTML入門」から XHTMLの解説まで、さまざまなテキストで説明します</description> <dc:date
>2001-09-14</dc:date> </item> ...
dc:subject
を用いてコンテンツの分野や分類を示すのもよく使われる方法です(SharpeaderやNewsGlueなどいくつかのRSSリーダーでは、Subject/分類として一覧に表示してくれるようです)。また、RSS0.91ではチャンネルのlanguage
要素が必須だったので、これに代わるものとしてdc:language
を使うこともあります。
米国製blogツールのテンプレートをそのまま使って、日本語コンテンツなのに言語情報をen-US
などとしないよう注意してください。xml宣言のencodingをutf-8
にしたままShift_JIS
のRSSを送り出している例もよく見かけます。
Syndicationモジュール
シンジケーションとはニュースの記事などを配信(配給)するサービスのことです。ウェブ上でも、ニュースサイトなどが最新のヘッドラインを「チャンネル」という形で配信することがありますが、この手段としてRSSが広く使われています。
「配信」といっても、RSSのようなウェブ上のリソースの場合は、基本的はプッシュ型ではなく利用者が情報をチェックしに行かなければなりません。その際、どんな頻度で情報が更新されているかが分かると都合がよいため、Syndicationモジュールの語彙を用いて更新予定を示します。
- 名前空間宣言
- xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
- updatePeriod
- 更新の頻度を示します。値は
hourly, daily, weekly, monthly, yearly
のいずれかで、省略時はdaily
とみなされます。 - updateFrequency
- updatePeriodと関連づけ、その期間中に何度更新されるかを示します。たとえば、updatePeriodがdailyでupdateFrequencyが2ならば、1日2回更新するという意味です。省略時は 1 とみなされます。
- updateBase
- 上記の要素から次回更新予定時を計算するための基準を示します。一般には、前回の更新日時を
YYYY-MM-DDThh:mm
の形式[W3CDTF]で示します。
※2004年1月以前の本文書では、この名前空間URIをhttp://purl.org/rss/modules/syndication/
と記述していましたが、誤りでした("/1.0
"が抜けていた)のでお詫びして訂正します。
[例8]
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:sy
="http://purl.org/rss/1.0/modules/syndication/" xml:lang="ja"> <channel rdf:about="http://www.kanzaki.com/info/rss.rdf"> <title>The Web KANZAKI - Japan, music and computer</title> <link>http://www.kanzaki.com</link> <description>コントラバスの話やX/HTMLの情報を提供しています</description> <sy:updatePeriod
>daily
</sy:updatePeriod> <items> ...
このように記述してあると、“この「チャンネル」は毎日更新されているので、毎日チェックしてください”ということを意味します。
Contentモジュール
XHTMLによるマーク付けなどを含めた、コンテンツをそのまま配信するためのモジュールです。ウェブログツールのRSSテンプレートに含まれていたりするので、最近見かけるようになってきました。提案当時の構文と、改訂された構文がありますが、新しい方だけを取り上げておきます。
- 名前空間宣言
- xmlns:content="http://purl.org/rss/1.0/modules/content/"
- encoded
- マークアップ記号を実体参照に置き換えるか、CDATAセクションとして、コンテンツそのものを記述します。
提案当時は複数のフォーマットのコンテンツを使い分けることなどを想定していましたが、実質的に使われているのは改訂仕様のcontent:encoded
要素のみです。
[例9]
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:content
="http://purl.org/rss/1.0/modules/content/"> ... <item rdf:about="http://www.kanzaki.com/bass/bass-lecture.html"> <title>コントラバスの研究</title> <link>http://www.kanzaki.com/bass/bass-lecture.html</link> <description>パトリック・ズュースキントの『コントラバス』を素材にした コントラバス奏者の生態の研究</description> <content:encoded
><![CDATA[
<p><img src="http://www.kanzaki.com/bass/suskind.gif" /> 「<a href="http://www.kanzaki.com/bass/">コントラバスの話</a>」の冒頭に 引用したのは、小説『香水』で有名なドイツの作家パトリック・ズュースキン トの処女作である『コントラバス』です。これは、ミュンヘンの国立歌劇場に つとめるしがないコントラバス弾きが、ソプラノ歌手に恋する思いを切々と語 るモノドラマで、ベースを巡るさまざまなフレーズが登場します。ちょうど手 頃な材料なので、ここに表れる科白をテキストに、コントラバスについて研究 してみましょう。</p>]]>
</content:encoded
> </item>
Contentモジュールに対応するビューアで表示すると、次のような具合になります(img要素などを埋め込む場合、パスを絶対URIにしておかないとうまくいきません。xml:base属性を使ってもいいはずですが、必ずしも対応していないようです)。当サイトのRSS Feed Readerは、この要素を折り畳んで表示します(例:音楽雑記帖RSS)。
実際のマークアップなどをそのまま扱う場合、次に述べるセキュリティの配慮が重要です。また、CDATAセクションやエスケープ(<
など)を使って、ただのテキストでしかないはずの要素をマークアップを含む(子要素がある)ように扱わせるのは、エラーの温床となる危険性もあり、大きな問題を孕むと指摘されていることも注意してください[WALSH]。
そのほかのモジュール
そのほか、RSSでさまざまなメタデータを記述するため、独自のモジュールが定義されることもあります:
Trackbackモジュール:ウェブログなどのシステムでよく使われるトラックバックに関するURIを、記事のメタデータとしてRSSのアイテムに記述するための語彙です。このモジュールについては「RSSとトラックバック」で簡単に検討しています。
Annotationモジュール:記事が参照したりコメントしたりしている相手のURLを記述する
reference
という語彙を定義しています。このモジュールについては上記「RSSとトラックバック」内の「RSS 1.0のannotationモジュール」でごく簡単に説明しています。Eventモジュール:イベントの開始日時、終了日時、場所などをRSSで配信しようというモジュールです。シンプルで使いやすいものの、構文上若干問題があるので、RDFicalを使う方がよさそう。RDFical(RDFカレンダー)のページで、Eventモジュールも少し取り上げています。
Taxonomyモジュール:チャンネルのアイテムを分類する(トピックを示す)ために使います。dc:subjectと似ていますが、taxonomyではキーワードを文字列ではなくURIで示します。メモ帖のRSSのtaxonomyモジュールで、少し取り上げています。
RSSとセキュリティ
RSSのような分散型のアプリケーションでは、セキュリティに対する配慮が欠かせません。RSSの利用方法は、ほとんどの場合読みとりのみだと考えられるので、それほど重大な問題はなさそうですが、RSSを処理してブラウザなどに表示させる場合、ごく一般的なCGIと同等の注意は必要です。
- 表示要素内にHTMLのタグや特殊文字が含まれている場合の処理。特に
script
要素などが勝手に働かないよう、エスケープ処理をする link
要素、rdf:about
属性値などに、javascript:
スキームのような特殊なURIが記述されている場合のチェック
RSS1.0の仕様では、urlおよびlink要素で許されるスキームはhttp:、https:、ftp:(textinput要素ではこれに加えてmailto:)に限るとしていますので、これに合わせたチェックをするのも良いでしょう。javascript:に関しては、Kevin A. Burtonによって仕様書にセキュリティの章を追加する提案が出されています[BURTON]。
RSSの実際の利用
RSSは、実際にはどんな具合に利用されているのでしょうか。最近では新しい情報をRSSとして提供するサイトが増えてきており、それを読むための「Feed Reader」プログラムもいくつか提供されています。また、簡単なスクリプトで自分のサイトのRSSを自動生成して公開することも可能です。
RSS提供サイト
RSSを集めて一種のポータルとして提供しているサイトとしては、次のようなものがあります。
- syndic8.com
- NewsIsFree
- WebReference.com/internet.com RSS News Feeds
- Redland RSS 1.0 Viewer -- Dave BeckettによるRSS1.0リソースの紹介とビューア(英)
- xmlTree - Directory of Content (obsolete?)
- Bulknews -- Bulknewsで巡回している各サイトのRSS(日)
- Bulkfeeds: RSS Directory & Search --
Bulkfeeds は RSS を中心とした Feeds のディレクトリサービスです。日本国内で Syndicate されている RSS を検索できます
(日) - 日本で配布されているRSSファイル -- 精力的にRSSを収集し、埋め込み用スクリプトも配布。頑張れ!
- My Portal -- (2002-03でサービスを終了したそうですが、関連記事とリンクが残されています)
主要なサイトが公開しているRSSを取り込んで、自分用のディレクトリ(ポータル)をつくるのもいいでしょう。現在提供されているRSSをいくつかあげてみます(RSSそのものはXMLなので、ブラウザで見てもそれほど読みやすくはありません)。現状はRSS 0.9/0.91/1.0が混在しています。
RSS生成ツール
RSSをプログラムで生成したり処理するには、次のようなツールや解説が役立つでしょう。
- 当サイトのRSS生成スクリプトのサンプル
- XML::RSSなどCPANのRSS関連モジュール
- PHPでRSSを解析するParsing XML With PHP
- RSS ValidatorはRSSの構文をチェックする(と言ってるけど、あまり意味ないかも)
多くのウェブログツールは、テンプレートを使ってRSS生成の設定ができます。また、更新が頻繁なサイトは自動化しないとRSS生成が面倒になってしまうと思いますが、たまに更新するものについてRSSを提供したり、試しにRSSを自作してみようという場合には、テーブルに必要な要素を記述することでRSSを生成してくれる次のようなツールが便利です。
過剰巡回に注意
多くのRSSリーダーは、定期的にフィードをチェックして取得できるようになっていますが、プログラムによってはLast-Modifiedヘッダなどを考慮せずに毎回GETをかけていくものがあるので、利用にあたっては設定に注意してください。こうしたツールで頻繁に巡回すると、相手のサーバーに負担をかけてしまいます(各アイテムのリンク先コンテンツまで毎回全部GETするツールなど、もってのほかです)。
If-Modified-Sinceによる更新確認をきちんとおこなっていると思われるのは、今のところSharpReader、FeedReader、NetNewsWire、Bloglines、FeedDemon、RssBandit、xyzzy-rss-modeなどです。
RDFアイコンについて
アイコンは、RDFによって記述されたリソース(RSS 1.0など)を示すために、Dave Beckettによって提供されているシンボルです。画像に埋め込まれたメタデータをそのまま保持することを条件に、自由に利用できます。お気に召したら、ご自身のサイトにコピーの上ご利用ください。なお、形式をGIFに変換することは認められていません。
RSSの歴史〔補足〕
最初のRSSは、Netscape社が自社のポータルMy Netscapeに「チャンネル」を登録するための手段として1999年3月に開発・公開した、バージョン0.9と呼ばれるものです[NS-RELEASE]。これはもともとRDFベース (つまりRDF Site Summary) で、基本的には見出し一覧を配信するためのものでした[RSS09]。1999年7月には、概要を記述するdescription
など、UserLandのScriptingNews規格から10以上の要素型を取り入れたRSS 0.91が登場します[RSS091]。見出しだけでなく要約、格付け、著作権、更新日付などさまざまな情報も加えたサイトサマリーを提供できるところからRich Site Summaryと呼ばれ、何割かのコンテンツプロバイダはこの新しいフォーマットを採用しました。ただしRSS 0.91では、RDFはチャンネル作成者にとって複雑だとして、ルート要素をrss
とする独自のXMLに変更されています。
その後Netscape社はRSSから手を引きますが、サイトサマリーを提供する枠組みとしてのRSSへの要望はむしろ高まり、これに独自の要素型を加味して用いるユーザーも出現するなど、混乱の様相を見せてきました。そこで、
- 基本的なサマリー提供機能をコアなRSSとして定義し、
- より高度な機能は(XML名前空間を利用した)モジュールとして追加できるようにする
という新しい規格が、改めてRDFに基づくものとして開発者のグループ(RSS-DEVワーキンググループ)で検討されました。この成果として2000年12月に提案されたのがRSS 1.0です[RSS10]。RSS 0.9およびRSS 0.91も依然として用いられていますが、本稿ではRSS 1.0をこれから注目すべき規格と位置づけ、紹介しています。
RSSの異版と展望
RDFや名前空間が複雑であるとして、RSS 0.91を拡張したRSS 0.92/0.93を提案するコミュニティもあり、その延長として、2002年8月にRSS 2.0なるものが出てきました(これはRSS 1.0の発展形ではなく、RSS 0.91/0.92 etc.にあれこれ付け足しをしたものですが、一部名前空間を使うようになっています)。それならいっそ、古き良き電子メールスタイルのテキストで単純なRSS 3.0をつくったらというブラックユーモアが出たり[SWARTZ]、逆にRSSを乗り越えて新しいフォーマットをつくろうというAtomのような試みも行われています。
RSS 0.9/1.0はヘッドラインなどの「メタデータ」を扱うことに主眼をおいているのに対し、RSS 2.0やEchoは、RSSを「コンテンツ配信」の手段に拡張しようという考え方で、同床異夢的なところがあります。当サイトは、「メタデータ」配信の可能性、標準やほかの規格との親和性、および拡張性という点から、RSS 1.0を推奨します。なお、RSSの歴史と概要についてはAndrew KingのThe Evolution of RSS[KING]、MCFやCDFまで遡った経緯とRSS 0.91/1.0の論争の背景についてはDan BrickleyのHistorical debt[BRICKLEY]などを参照してください。
〔注意〕サイト要約のフォーマットRSSとメタデータ記述の枠組みRDFを混同しないでください。RSS⊂RDFでもRSS⊃RDFでも、ましてRSS=RDFでもありません。
参照文献
- [NS-RELEASE]
- Netscape Opens My Netscape to Millions of Web Publishers, , Company Press Release ,
- <http://home.netscape.com/newsref/pr/newsrelease744.html>
- [RSS09]
- RDF Site Summary (RSS) 0.9 official DTD, proposed, , Netscape Communications ,
- <http://my.netscape.com/publish/formats/rss-0.9.dtd>
- [RSS091]
- RSS 0.91 Spec, revision 3, , Netscape Communications ,
- <http://my.netscape.com/publish/formats/rss-spec-0.91.html>
- [RSS10]
- RDF Site Summary (RSS) 1.0, , RSS-DEV Working Group ,
- <http://purl.org/rss/1.0/spec>
- [KING]
- The Evolution of RSS, , Webreference.com ,
- <http://www.webreference.com/authoring/languages/xml/rss/1/>
- [BRICKLEY]
- RSS-Classic, RSS 1.0 and a historical debt, , RSS-DEV mailing list ,
- <http://groups.yahoo.com/group/rss-dev/message/1136>
- [RSSMOD]
- RDF Site Summary 1.0 Modules, , RSS-DEV Working Group ,
- <http://purl.org/rss/1.0/modules/>
- [W3CDTF]
- Date and Time Formats, , W3C Note ,
- <http://www.w3.org/TR/NOTE-datetime>
- [RFC3023]
- XML Media Types, , The Internet Society, Standards Track ,
- <http://www.ietf.org/rfc/rfc3023.txt>
- [SWARTZ]
- The Road to RSS 3.0, ,
- <http://www.aaronsw.com/weblog/000574>
- [BURTON]
- Security section proposal for RSS 1.0 spec., ,
- <http://www.peerfear.org/rss/permalink/1025904432.shtml>
- [WALSH]
- Embedded Markup Considered Harmful, ,
- <http://www.xml.com/pub/a/2003/08/20/embedded.html>
- [TBMOD]
- TrackBack Module for RSS 1.0/2.0, , Version 1.0 (Draft) ,
- <http://madskills.com/public/xml/rss/module/trackback/>