2008-01-08

atom:id はどのような値を割り振ればよいのだろうか

feed/id や feed/entry/id はどうなっているのだろうかと、いくつかの Atom Feed の中やサンプルを見てみると、次のようなものが多いようです。
urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a
http://example.org/blog/a-day-at-the-beach.xhtml
tag:blogger.com,1999:blog-1509463847369212828.post-8271786567008127478
tag:flickr.com,2005:/grouppool/322338@N20/photo/56104498
The Atom Syndication Format によると、atom:id の値は IRI にしなさいとあります。また、その値は、グローバルでユニークにしなさいともあります。が、その IRI を使ってどのような atom:id を割り振ればよいかといった指針は示されていません。

で、そこが知りたいのよーと探してみると、How to make a good ID in Atom にそのヒントがありました。

次のように、atom:id は feed/link や feed/entry/link の URL と同じでいいと思っていましたが、atom:id は普遍性が要求されるため、URL が変わったとしても atom:id は変えてはいけないようです。

ので、このような状況になると atom:id の意味づけや運用に支障が出てきそうです。ちなみに atom:id が示したリソースが実存する必要性はないようです。
http://example.org/blog/a-day-at-the-beach.xhtml
次のように UUID を使うという方法もあるようです。ただ、こうすると、URL と UUID の対応表を保持しないといけませんね。
urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a
次のように The 'tag' URI Scheme を使うという方法もあるようです。調べた範囲ではもっとも使われている方法でした。

blogger.com は、ブログとエントリの単位でユニーク値を付与し、その値を組み合わせて Tag URI としています。UUID と同じく URL との対応表が必要ですが、blogger.com (と年) をスコープにしている点が異なります。

filckr.com は URL をそのままマッピングしています。これだと前述のとおり URL が変わったときに不都合がありそうです。
tag:blogger.com,1999:blog-1509463847369212828.post-8271786567008127478
tag:flickr.com,2005:/grouppool/322338@N20/photo/56104498
う~む。私も自前の Atom Feed を設計しているのですが、atom:id をどう割り振ろうかとよっと悩んでしまいました。

サイトの構成を変えない前提とすれば、atom:id と URL は同じでよい気がしています。filckr.com が Tag URI にしている根拠はどこにあるのだろうか。まだ私の理解の曖昧さがあるのだろうか。

サイトの構成を変えることを前提とすれば、blogger.com と同じように、サイト内でユニーク値を付与して、その値と URL の対応表を保持すればよい気がしています。

将来のことを考え過ぎると、前に進めなくなりそうなので、前者の atom:id と URL を同じにする案でいこうかなぁと・・・でもなんかシックリこないので、もう少し保留にします。

Web開発者のためのRSS & AtomフィードWeb開発者のためのRSS & Atomフィード
ベン ハンマースリー Ben Hammersley 菅野 良二

詳解RSS~RSSを利用したサービスの理論と実践 XML Hacks―エキスパートのためのデータ処理テクニック RSSマーケティング・ガイド 動き始めたWeb2.0ビジネス JavaScript & DHTMLクックブック―Webエキスパート必携テクニック集 Life Hacks PRESS ~デジタル世代の「カイゼン」術~

by G-Tools

2 件のコメント:

匿名 さんのコメント...

IDとしては無視されるコメントのような文字列を埋め込められれば、UUIDで定義してお尻にURLをコメントで付ける事で妥協できそうですが、できなさそうな予感

Unknown さんのコメント...

tag URI の "#" fragment を使うというアイディアですね。などほどです。意味的な妥協としてはよいですね。ただ atom:id の仕様としては、"#" fragment であっても、異なる entry とみなすと思うので、やはり完全な解決策ではなさそうです。