RSS 1.0 の設計は、XML ベースのライトウェイトな多目的拡張可能なメタデータ記述およびシンジケートフォーマットにすることを目標としています。現存のシンジケートコンテンツ製作者が容易に適用できるようにするために、RSS 0.9 との下位互換性を目標とします。
4.1 ライトウェイト
多くの RSS の成功は、RSS が XMLNews や ICE のような完全なシンジケートフレームワークというよりむしろ単純な XML 文書であるという事実によるものです。
以下は、基本的な RSS 1.0 文書のサンプルです。RSS 1.0 のコア要素セットだけを使って作ったものです。
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://www.xml.com/xml/news.rss">
<title>XML.com</title>
<link>http://xml.com/pub</link>
<description>
XML.com features a rich mix of information and services
for the XML community.
</description>
<image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />
<items>
<rdf:Seq>
<rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
<rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
</rdf:Seq>
</items>
</channel>
<image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
<title>XML.com</title>
<link>http://www.xml.com</link>
<url>http://xml.com/universal/images/xml_tiny.gif</url>
</image>
<item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
<title>Processing Inclusions with XSLT</title>
<link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
<description>
Processing document inclusions with general XML tools can be
problematic. This article proposes a way of preserving inclusion
information through SAX-based processing.
</description>
</item>
<item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
<title>Putting RDF to Work</title>
<link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
<description>
Tool and API support for the Resource Description Framework
is slowly coming of age. Edd Dumbill takes a look at RDFDB,
one of the most exciting new RDF toolkits.
</description>
</item>
</rdf:RDF>
4.2 多目的
バージョン 0.91 がリリースされてからの 12 ヶ月間は、RSS のさまざまな奇抜な利用が浮上してきました。RSS は、成長しているアプリケーションのニーズとともに進化することを求められているのです。アグリゲーション、ディスカッションスレッド、ジョブリスティング、売り家(複数のリスティングサーービス)、スポーツのスコア、文書カタログなどです。モジュール化と RDF に基づいた XML 名前空間を通して、RSS 1.0 は、標準化とアドホックな再目的化の双方のためのフレームワークを構築します。
4.3 拡張性
RSS 1.0 とそれ以前(または派生)のバージョン間の違いで最も大事なポイントは、XML 名前空間 と RDF (Resource Description Framework) の準拠を通した拡張性にあります。
名前空間ベースのモジュールは、区分化された拡張性を実現します。これは、RSS を次に示すように拡張することができるということです。
- コア仕様を何度も書き直す必要がありません。
- 個々に要素についてコンセンサスを取る必要はありません。
- 特定の活躍の場やアプリケーションで使使われそうにもない要素で RSS が肥大化することはありません。
- 名前付けの重複が起こりません。
RSS モジュールは、後述のモジュール章でさらに詳細に取り扱っています。
4.4 メタデータ
メタデータとは、データに関するデータのことです。ウェブに関する情報はあちこちにありまったく不足はありませんが、メタデータに関して、貴重でちょっとした記述があります。W3C の Metadata Activity Statement は、その話題に関してこう言っています。
ウェブの可能な利用は終わりがないようです。しかし、テクノロジーは決定的な要素を欠いています。情報に関する情報を含む部分がウェブにはないのです。その部分とは、ウェブページがとりわけコンピュータによって適切に検索され生成されることができる方法で構築された、ラベル付け、分類、記述情報のことです。
RDF は、以前にフラットに構築された RSS を使って何か可能であるかということを超えて、リッチメタデータの関連性の記述を可能にしているのです。RSS 0.9 の中に存在する RDF ベースは、RSS の初期バージョンの上に構築することを選択するための理由だったのです。バージョン 0.91 の中に RDF を再導入する試みは、"歯磨き粉をチューブに戻す" 主張提案だと証明されました。
4.5 シンジケート
シンジケートとは、ここでは、情報検索や、さらなる転送、アグリゲーション、またはオンライン発行のために、データをオンラインで利用可能にすることとして定義します。シンジケートシステムのさまざまな複雑な問題の詳細(無料 vs. 月額制、プッシュ型 vs. プル型)は、この仕様の範囲外とします。
RSS 1.0 の中核は、RSS 0.9 の上に成り立っています。RSS 1.0 は、下位互換性を保ちながら、XML 名前空間と RDF を通した拡張性に注力しています。
RSS 0.9 との下位互換性
下位互換性は、基本 RSS パーサー、モジュールそしてライブラリーが以下に示すもので解釈できないものを無視するという想定と規定によって成り立っています。
- 属性: RSS 0.9 は RDF 名前空間で宣言されていない属性を一切使いません。
- デフォルトの名前空間ではないが存在するモジュール化された拡張要素メンバー
- RSS 0.9 文書の全体の構造を妨げないアドホックな要素
XML 名前空間ベースのモジュール化を通した拡張性
RSS 1.0 は、XML 名前空間ベースのモジュールを通して拡張可能です。アドホックな拡張性は、もちろん推奨されますが、分類法、アグリゲーション、Dublin Core 等のような機能をカバーしている承諾済みのモジュールのコアセットが出現することが望まれます。後述のモジュール章をご覧下さい。同様に RSS 1.0 モジュール ※ のコアの登録についても同様です。※ "RDF Site Summary 1.0 Modules 日本語訳" をご覧下さい。
image, item, textinput 要素 [5.3 <channel>, 5.4 <image>, 5.5 <item>, 5.6 <textinput>] 等のトップレベルの channel の子要素には一つの制限が課せられています。それは、これらの要素は繰り返す子要素をを含んではいけないという制限です(例: <item><dc:subject /><dc:subject /></item>
)。この提案は、直近の子要素に対して強制するだけです。(リッチコンテンツや繰り返される要素の)深さは、すでに RDF 構文を使って明確になっているのです。
RDF
RSS 1.0 は、次に挙げる最小の条件を追加することによって、RSS 0.9 に見られる(RSS 0.91 ではなくなっている) 未熟な RDF フレームワークの上に構築します。
- 第 2 レベルの要素 (channel, image, item, textinput) はそれぞれに rdf:about [ 5.3, 5.4, 5.5, 5.6 ] 属性を含まなければいけません。
- 直近の channel と image, items, textinput を結び付けているコンテンツの channel レベルの RDF テーブル。[5.3.4 <image>, 5.3.5 <items>, 5.3.6 <textinput>]
RDF と RSS 1.0 の 簡素な XML 表示を可能な限り同期し続けるために、RSS 1.0 は、コア要素内での typed-element RDF 構文の使用をサポートしているのに過ぎないのです。
Mime Type
RSS 1.0 文書の現時点の推奨 mime-type は、application/xml です。しかし、RDF (そしてできれば RSS)に対する mime-type を登録することが現在行われています。RDF (またはできれば RSS) mime-type は、一度それが登録されてしまえば、使われるべきなのです。
ファイル拡張子
RSS 1.0 文書に対する特定のファイル拡張子は必要ではありません。.rdf や .xml が推奨されますが、前者が好まれています。
エンコーディング
RSS 0.9 は ASCII エンコーディングのみをサポートしていましたが、RSS 1.0 は UTF-8 を想定します。US-ASCII (つまり、127 以上のすべての文字が &#nnn としてエンコードされます。)は、UTF-8 (そして HTTP のデフォルトヘッダーエンコーディングである ISO-8859-1 )と一緒です。
URL
RSS 0.9 との下位互換性を保証する手段として、次のスキームだけが、url と link 要素に受け入れられます。http:, https:, ftp:. mailto: は textinput の link 要素だけで受け入れられます。
実体
XML では、マークアップのためにいくつかの文字が使われます。RSS 文書内で XML のマークアップ用の文字を使うためには、その文字を実体参照に置き換えなければいけません。
<
は < となります。
>
は > となります。
&
は & となります。
次に示す 2 つの実体参照も、準拠した XML パーサーによって認識されます。一般的なことですが、それらの利用は任意です。しかし、文字列の中にクォート文字を含むときには、必須です。例えば、""Hello," she said" は、""Hello," she said" とエンコードされなければいけません。
'
は ' となります。
"
は " となります。
注意:RSS 1.0 は DTD を必要としませんので、必ず、前述の 5 つのほかに使われる実体の内部宣言を含めて下さい。次の DTD は、HTML 互換実体のソースとして非常に有用です。
使用例:
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY % HTMLlat1 PUBLIC
"-//W3C//ENTITIES Latin 1 for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
%HTMLlat1;
]>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
>
...
コンテント長
RSS 1.0 は、title, link, description のような要素のコンテント長をアプリケーションに受け入れられるようにしていますが、RSS 0.9 の最大文字長は、下位互換性への厳密な遵守のために、推奨される良い実行の状態へ廃止される可能性があります。
表記法
後述のコア要素の説明では、以下の表記法が使われます。
{something}
はただ単に URI や値などの代替です。
- モデル記述では DTD のような構文が使われますが、これはプレゼンテーション目的のためだけで、順番を意味するものではありません。要素の順番は重要ではないのです。
- モデル記述において、? は、要素もしくは属性が任意であることを意味します。
- モデル記述において、+ は "一つ以上" のこの要素のインスタンスもしくは属性が許されていることを意味します。
- モデル記述において、* は "ゼロ以上" のこの要素のインスタンスもしくは属性が許されていることを意味します。
5.1 <?xml version="1.0"?>
RSS 文書は、XML アプリケーションのように、 XML 宣言で始めることを要求されません。最適な実際の提案として、そして、RSS 0.9 (0.9 の仕様では、XML 宣言を必要としています。)との下位互換性をより確実にするために、この仕様では、XML 宣言で始めることを推奨します。
構文: <?xml version="1.0"?>
必要条件: 任意 (エンコーディングが指定されていなければ)
5.2 <rdf:RDF>
いかなる RSS 1.0 準拠の文書でも、最も外側のレベルは RDF 要素です。RDF タグで始まっていれば、rdf として関連付けます。名前空間が RDF 構文スキーマより前にきて、その文書のデフォルトの名前空間として RSS 1.0 スキーマを構築します。
どんな有効な名前空間プレフィックスが使われたとしても、文書製作者は、"rdf:" を基準とみなすよう勧告されます。RSS 0.9 との下位互換性を確実に保ちたいなら、"rdf:" を使わなければいけません。
構文: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
必要条件: 他の名前空間を宣言するとしても、上記に示す通りそのままで必須です。
モデル: (channel, image?, item+, textinput?)
5.3 <channel>
channel 要素は、channel 自身を説明するメタデータを含みます。channel 要素には、タイトル、短い説明、リソースを指し示す URL リンク(例えば、チャネル提供者のホームページ)を含みます。channel 要素の rdf:about 属性の {resource} URL は、RSS 文書内の他の rdf:about の中でユニークでなければいけません。そして、チャネルを識別する URI です。通常、これは記述されているホームページの URL や RSS ファイルを見つけられる URL のいずれかです。
構文: <channel rdf:about="{resource}">
必要条件: 必須
必須属性: rdf:about
モデル: (title, link, description, image?, items, textinput?)
例:
<channel rdf:about="http://www.xml.com/xml/news.rss">
<title>XML.com</title>
<link>http://xml.com/pub</link>
<description>
XML.com features a rich mix of information and services
for the XML community.
</description>
<image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />
<items>
<rdf:Seq>
<rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
<rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
</rdf:Seq>
</items>
<textinput rdf:resource="http://search.xml.com" />
</channel>
5.3.1 <title>
チャンネルについて説明するタイトルです。
構文: <title>{channel_title}</title>
必要条件: 必須
モデル: (#PCDATA)
(推奨) 最大長: 40 (文字)
5.3.2 <link>
チャンネルのタイトルを表示する HTML がリンクするであろう URL です。通常、親サイトのホームやニュースページです。
構文: <link>{channel_link}</link>
必要条件: 必須
モデル: (#PCDATA)
(推奨) 最大長: 500
5.3.3 <description>
チャンネルのコンテンツ、機能、ソース等の短い説明です。
構文: <description>{channel_description}</description>
必要条件: 必須
モデル: (#PCDATA)
(推奨) 最大長: 500
5.3.4 <image>
任意の image 要素 [5.4] とこの特別な RSS チャンネルとの間に RDF 関連付けを構築します。rdf:resource の {image_uri} は、image 要素の rdf:about {image_uri} と同じでなければいけません。
構文: <image rdf:resource="{image_uri}" />
必須条件: image 要素がある場合にだけ必須
モデル: Empty
5.3.5 <items>
コンテンツの RDF テーブルのことで、文書の items [5.5] をこの特定の RSS チャネルと関連付けます。各 item の rdf:resource {item_uri} は、item 要素の rdf:about {item_uri} と同じでなければいけません。
RDF Seq (列)は、レンダリングと再構築のための item の順番を意味するために、RDF Bag というよりむしろすべての item を含むために使われます。
channel レベルの item 列のメンバーとしてではなく、文書内に現れる item は、RDF パーサーによって捨てられるかもしれないことに注意して下さい。
構文; <items><rdf:Seq><rdf:li resource="{item_uri}" /> ... </rdf:Seq></items>
必須条件: 必須
5.3.6 <textinput>
任意の textinput 要素 [5.6] とこの特定の RSS チャネルとの間に RDF 関連付けを構築します。{textinput_uri} rdf:resource は、textinput 要素の rdf:about {textinput_uri} と同じでなければいけません。
構文: <textinput rdf:resource="{textinput_uri}" />
必須条件: textinput 要素がある場合にだけ必須
モデル: Empty
5.4 <image>
チャンネルの HTML 表示用のイメージです。このイメージは、主要なウェブブラウザーでサポートされているフォーマットにすべきです。0.91 以降の仕様では、幅が 1-144、高さが 1-400 が許されていましたが、慣例(そして 0.9 仕様)では 88x31 と指定されています。
構文: <image rdf:about="{image_uri}">
必須条件: 任意: もし存在するなら、channel 要素 [5.3.4] に現れなければいけません。
必須属性: rdf:about
モデル: (title, url, link)
例:
<image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
<title>XML.com</title>
<link>http://www.xml.com</link>
<url>http://xml.com/universal/images/xml_tiny.gif</url>
</image>
5.4.1 <title>
HTML として表示されるとき、チャネルの image タグ用の代替テキスト("alt" 属性)です。
構文: <title>{image_alt_text}</title>
必須条件: image 要素がある場合には必須
モデル: (#PCDATA)
(推奨) 最大長: 40
5.4.2 <url>
HTML として表示されるとき、チャネルの image タグの "src" 属性で使われるための画像の URL です。
構文: <url>{image_url}</url>
必須条件: image 要素がある場合には必須
モデル: (#PCDATA)
(推奨) 最大長: 500
5.4.3 <link>
チャネルイメージの HTML 表示がリンクするであろう URL です。これは、チャネルのタイトルリンクと同様に、通常は親サイトのホームもしくはニュースページです。
構文: <link>{image_link}</link>
必須条件: image 要素がある場合には必須
モデル: (#PCDATA)
Member of::image
(推奨) 最大長: 500
5.5 <item>
これは、通常、RSS 1.0 のモジュール拡張機能を使ったニュースヘッドラインのことなのですが、どんなことに関しても使えます。ディスカッション投稿、ジョブリスティング、ソフトウェアパッチ、URI を使ってどんなオブジェクト。RSS 文書ごとに少なくとも一つの item あります。RSS 1.0 は上限を強制しませんが、RSS 0.9 と 0.91 との下位互換性のために、最大 15 項目を推奨します。
{item_uri} は、RSS 文書内の他の rdf:about 属性に関してユニークでなければいけません。そして item を指し示す URI です。{item_uri} は、可能なら、<item> 要素の <link> 子要素の値と一致しているべきです。
構文: <item rdf:about="{item_uri}">
必須条件: >= 1
推奨 (0.9x との下位互換性用): 1-15
必須属性: rdf:about
モデル: (title, link, description?)
例:
<item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
<title>Processing Inclusions with XSLT</title>
<link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
<description>
Processing document inclusions with general XML tools can be
problematic. This article proposes a way of preserving inclusion
information through SAX-based processing.
</description>
</item>
5.5.1 <title>
item のタイトルです。
構文: <title>{item_title}</title>
必須条件: 必須
モデル: (#PCDATA)
(推奨) 最大長: 100
5.5.2 <link>
item の URL です。
構文: <link>{item_link}</link>
必須条件: 必須
モデル: (#PCDATA)
(推奨) 最大長: 500
5.5.3 <description>
簡単な item の説明/概要です。
構文: <description>{item_description}</description>
必須条件: 任意
モデル: (#PCDATA)
(推奨) 最大長: 500
5.6 <textinput>
textinput 要素は、任意の URL にフォームデータを投稿するための手段を提供します。任意の URL とは、通常、親のウェブサイトに位置する URL です。終端だけを受け取ったフォームプロセッサーは、HTTP GET メソッドをハンドルすると考えられます。
フィールドは、とりわけ検索ボックスや投稿フォームとしてよく使われます。これは、RSS 文書がチャネル(MNN を見て下さい)として表示され、タイトルや説明が人間に読める場合に使われますが、このオーバーロードされた要素の真意の自動的な判定におけるあいまいさは、それを表示します。そうでなければ特に使いやすいわけではないのです。それゆえに、RSS 1.0 は将来のバージョンでは、RSS 0.9 との下位互換性のためにそれを維持しながら、この要素のリソース発見のいくつかのフォームの廃止もしくは増強のいずれかを提案します。
{textinput_uri} は、RSS 文書内の他の rdf:about 属性の中でユニークでなければいけません。そして、textinput を特定する URI です。{textinput_uri} は、可能であれば、<textinput> 要素の <link> 子要素の値と一致すべきです。
構文: <textinput rdf:about="{textinput_uri}">
必須条件: 任意; もし存在するなら、channel 要素 [5.3.6] 内に存在しなければいけません。
必須属性: rdf:about
モデル: (title, description, name, link)
例:
<textinput rdf:about="http://search.xml.com">
<title>Search XML.com</title>
<description>Search XML.com's XML collection</description>
<name>s</name>
<link>http://search.xml.com</link>
</textinput>
5.6.1 <title>
textinput フィールドを説明するタイトルです。例えば、"投稿" や "検索!" です。
構文: <title>{textinput_title}</title>
説明: Textinput title
必須条件: textinput なら必須
モデル: (#PCDATA)
(推奨) 最大長: 40
5.6.2 <description>
textinput フィールドの目的を簡単に説明します。例えば、"私どもの ... に関するニュースレターを申し込む" や "当サイトのアーカイブから ... を検索" です。
構文: <description>{textinput_description}</description>
必須条件: textinput なら必須
モデル: (#PCDATA)
(推奨) 最大長: 100
5.6.3 <name>
テキスト入力フィールドの(変数の)名前です。
構文: <name>{textinput_varname}</name>
必須条件: textinput なら必須
モデル: (#PCDATA)
(推奨) 最大長: 500
5.6.4 <link>
textinput 投稿が(GET を使って)指し示すであろう URL です。
構文: <link>{textinput_action_url}</link>
説明: Textinput form action URL
必須条件: textinput なら必須
モデル: (#PCDATA)
(推奨) 最大長: 500