RSS2.0の要素を拡張する方法

RSSに独自要素を付け加えたくなることがあります。
その方法を勉強してみました。




まず動機はこんな感じです。

各種HTML→DB→html


としている場合にはそんなことを考える必要がないのですが、RSSを中核に据える場合

各種HTML→RSS→html


ってな時は、出来ればRSSに独自要素を付け加えることができると、後のhtml吐き出しの点で楽です。


いっそ

各種HTML→DB→html
     ↓
     RSS


もしくは

各種HTML→RSS(1)→DB→html
         ↓
         RSS(2)


ならいいんですけど、まぁそれは今後やることなので。




私がよく使うRSS2.0は、RSS 0.92 との後方互換性のため、独自の名前空間に要素を追加することによって、RSSを自由に拡張できるようになっています。


▽実用的な XML: RSS 拡張機能RSS の実力を伸ばす(IBM)
 http://www.ibm.com/developerworks/jp/xml/library/x-wxxm36/index.html
IBMのここいらのドキュメントは直訳で読みにくいものが多いのですが、これは比較的読みやすいです



つまり名前空間を宣言して、あとはその宣言に従って要素を追加するだけです。
例えば、よく使うdc:creatorは、Dublin Coreの略である「dc」ではじまります(いや、そういう意味とは今まで知りませんでした^^;)


問題は、名前空間をxmlnsで宣言する際、URIで指定することです。


これがどういう意味を持つのか。
dcのxmlnsにあるURIhttp://purl.org/dc/elements/1.1/)を開くと、http://dublincore.org/2008/01/14/dcelements.rdf#にリダイレクトされ、XMLファイル(rdf)が開かれます。


そうするとこういう定義を書かないといけないのか?と思ったのですが、どうやら違うようです。

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

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

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

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

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


▽実用的な XML: RSS 拡張機能RSS の実力を伸ばす(IBM)
 http://www.ibm.com/developerworks/jp/xml/library/x-wxxm36/index.html


「どうなるどうでしょう」とか謎のtypoがありますが(笑)、ためになりました。


つまりこのURIは、一意にするための識別子であって、定義ファイルを指定しているわけではないようです。


ですから、


となっているところに1行加え、


とかしてもいいようです。
http://d.hatena.ne.jp/mitaina/rss/1.0/の実在性は問わないので。


思ったよりハードルが低いですね!
あとは実際に要素を追加していくと。


後で気付いたのですが以下のページもわかりやすかったです。


XML名前空間の簡単な説明(The Web KANZAKI)
 http://www.kanzaki.com/docs/sw/names.html