June 06, 2004

RSS の dc:date のフォーマット

[ XML ]

RSS 1.0 を採用している blog では、エントリの更新日時は Dublin Core モジュールの date エレメント (dc:date) を用いて表現するのがデファクトです。

<dc:date>2004-06-05T21:54:55+09:00</dc:date>

dc:date のフォーマットは W3C Date and Time Formats (W3CDTF) で記述することが推奨されています。W3CDTF による時刻フォーマットは以下のようなものが定義されています。

  1. 2004
  2. 2004-06
  3. 2004-06-06
  4. 2004-06-06T10:44+09:00
  5. 2004-06-06T10:44:30+09:00
  6. 2004-06-06T10:44.30+09:00

dc:date エレメントではこの W3CDTF のうち、YYYY-DD-MM を含んでいること、つまり上記の 3 以降が推奨されています。時刻以下の情報は省略してもよいということです。

Movable Type をはじめとする多くの blog ツールは、この dc:date の W3CDTF には時刻情報(10:44:30+09:00)も含んだフォーマットを採用しています。RSS リーダーなどのアプリケーションでは、この時刻情報に基づいて記事をソートして、複数のフィードをアグリゲートした結果を最新順に並べるという機能を実装しているものが多いです。

このとき、dc:date のフォーマットに時刻情報が入っているフィード、入っていないフィードをまとめてアグリゲートしていると、どうなるでしょうか。

・2004-06-06
・2004-06-06T10:58:00+09:00

この場合、どちらの時刻がより新しいかを判断するためには、dc:date 以外の情報が必要になります。時刻情報がないフィードに関しては、アプリケーションがフィードを取得した時刻で補正してやるとか。むしろ、お構いなくプログラミング言語のソートルーチンに任せている実装の方が多いようです。

また、時折 dc:date の中身が

・2004-06-06T00:00:00+09:00

と常に時刻が 00:00:00 になっているフィードがあります。この類のフィードの場合、たとえ実際に更新された時刻が 10:30:00+09:00 だったとしても、00:00:00+09:00 の記事として扱われてしまうため、新着記事が過去記事の中に埋もれてしまいます。

ということで、実装優先の考え方でいくと、現状 dc:date のフォーマットは時刻表記も含めた形式にしておくのがベターです。もちろん仕様ではそれ以外も許されているので、そうでなくても構いません。アプリケーションに使いまわされるためのメタデータであると考えるか、メタデータがあってアプリケーションができあがると考えるか、ですね。

ちなみに、時刻表記のフォーマットは Atom で厳密になったかというと、仕様書 を見る限りはそんなこともない様子。RSS 1.0 では dc:date 自体を入れる入れないが任意ですが、Atom ではエントリの時刻情報は atom:issued エレメントとして必ず入れる必要があります。しかし、そのフォーマットに関しては Date Constructs で定義される W3CDTF であること以外の言及はされていません。

これも rough semantics かなあ。

今や最人気の Bloglines がメタデータの時刻情報を使っていないというのがちょっとジレンマだったりします。

Posted by naoya at June 6, 2004 11:15 AM | トラックバック (0)  b_entry.gif
トラックバック [0件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/1039
コメント [0件]
コメントする









名前、アドレスを登録しますか?