本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

ヒント: Atom の構造を使ってアグリゲート・フィードの中の重複を回避する

atom:id 要素を正しく構成し、固有なものに保つ

Tyler Andersonは2004年にBrigham Young Universityにてコンピューター・サイエンスの学位を取得しており、現在はコンピューター・エンジニアリングの修士取得に向けての最終学期を送っています。これまで、DPMG.COMのデータベース・プログラマーとして働いたことがあり、現在はオレゴン州BeavertonにあるStexar Corp.のエンジニアです。

概要: Atom は成長しつつあるシンジケーション・フォーマットであり、メジャーなシンジケーション・フォーマットである RSS よりも多くの人に好まれています。Atom のような索引付けシステムを使う場合は、決して重複したフィードを意図的に作成してはいけません。重複したフィードがあると、古い、オリジナルの id 要素が上書きされてしまい、また重複したエントリーは (上書きされない場合は)、ハードディスクのスペースを浪費します。しかしもっと重大なことは、重複したコンテンツは検索エンジンを混乱させ、それによって検索エンジンの中のランキングに狂いが生じてしまうことです。このヒントでは、主要な識別子としての id タグを、フィード・エントリーに関する他の情報 (フィードのリンク id やソース URL など) を含めて最大限に利用し、Atom フィードの中で重複を避けるための方法を説明します。

日付:  2007年 3月 20日
レベル:  初級 この記事の原文:  英語
アクティビティー: 2971 ビュー
お気軽にご意見・ご感想をお寄せください: 


フィード

フィードは、ニュース・アーカイブやブログのような Web アプリケーションのデータを配信するために使われます。下記のフィード (リスト 1) には潜在的な問題があり、あるエントリーの id がどこかで重複している可能性があります。もし、この重複によって現在のエントリーが上書きされないとすると、このフィードはシンジケーション上に重複したコンテンツを作成します。


リスト 1. オリジナルのフィード
                
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom'
      xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'>
<id>http://www.example.com/myblog/index.html</id>
<updated>2007-01-10T17:23:36.222-08:00</updated>
<title type='text'>MyBlog updates</title>
<link rel='alternate' type='text/html'
    href='http://www.example.com/myblog/index.html'></link>
<link rel='next' type='application/atom+xml'
    
href='http://www.example.com/myblog/feeds/posts/default?start-index=26&max-results=2
5'></link>
<link rel='self' type='application/atom+xml' 
    href='http://www.example.com/myblog/feeds/posts/default'></link>
<author><name>tsa</name></author>
<generator version='1.01' uri='http://www.example.com'>Example 
Blogerator</generator>
<openSearch:totalResults>2</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<entry>
<id>http://www.example.com/myblog/posts/55</id>
<published>2007-01-10T17:21:00.000-08:00</published>
<updated>2007-01-10T17:23:35.767-08:00</updated>
<title type='text'>My first post ever</title>
<content type='html'>Content goes here!</content>
<link rel='alternate' type='text/html'
    href='http://www.example.com/myblog/posts/55'></link>
<link rel='self' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/default/55'></link>
<link rel='edit' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/edit/55'></link>
<author><name>tsa</name></author></entry>
<entry>
<id>http://www.example.com/myblog/posts/56</id>
<published>2007-01-11T17:21:00.000-08:00</published>
<updated>2007-01-10T17:23:35.767-08:00</updated>
<title type='text'>My second post ever</title>
<content type='html'>Content for second post goes here!</content>
<link rel='alternate' type='text/html'
    href='http://www.example.com/myblog/posts/56'></link>
<link rel='self' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/default/56'></link>
<link rel='edit' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/edit/56'></link>
<author><name>tsa</name></author></entry>
</feed>

リスト 1 には、2 つのエントリーのみを持つフィードがあります。このヒントでは、id タグと link タグのみ、そして (リンクの中に含まれる) Atom フィードのソース、つまり URL に焦点を当てます。これは有効な Atom 1.0 フィードですが、id タグの作成に関して潜在的な危険性をはらんでいます。



問題

問題は、URL、つまり link タグの内容が、id として使われている点です。atom:id 要素は、Atom シンジケーション・フォーマットの仕様 (「参考文献」にリンクがあります) に書かれているとおり、絶対に重複が起こらないように作成されている必要があります。

ブログやニュース Web サイト、あるいはどのようなコンテンツを配信するにせよ、その構造から id エントリーの重複が防げるとしても、atom:id 要素の内容として単純に URL を使うのは悪い習慣です。それによって重複が起きる可能性があるからです。

例えば皆さんは、ブログのポストや記事を編集するかもしれません。新しい内容を保存する際には、その URL は同じです。しかし、新しいデータベース・エントリーが作成されています。これはつまり、Atom エントリーは、更新されたエントリーとは別の、固有の id を持つ必要があるということです。



問題の修正

修正は、atom:id 要素を適切にフォーマットすることで行います。id 要素をフォーマットするための最も一般的な方法は、「tag」URI スキームを使う方法です (「参考文献」に完全な仕様へのリンクがあります)。

このスキームは基本的に、重複が不可能なように、しかも atom:id 要素から逆に URL が得られるように atom:id 要素を作成するためのフォーマットです。

リスト 1 に示した 3 つの id 要素は、リスト 2 に示すタグ・スキームに変換されます。


リスト 2. id 要素をタグ・スキームに変換する
                
<id>tag:example.com,2007:myblog</id>
<id>tag:example.com,2007:myblog.post-55</id>
<id>tag:example.com,2007:myblog.post-56</id>


今度はポストを編集しても、URL つまり link 要素は変化しませんが、id は <id>tag:example.com,2007:myblog.post-55.edit-0</id> のように変化するかもしれません。編集後はすべてが無視され、この URL は相変わらずこの id 要素から取得することができます。この atom:id を再変換した URL は、http://www.example.com/myblog/posts/55/edit/0 となります。

これで終わりです。今後は、不適切な構成の atom:id 要素によってフィード・エントリーが重複したり上書きされたりするトラブルを回避できるはずです。



まとめ

これで、Atom フィードについて、そして atom:id 要素を固有に保つことの重要さを理解できたと思います。そしてもっと重要なこととして、フィードを作成するためのコードを開発する際には、このヒントで説明した概念を念頭に置き、フィード・エントリーの中に絶対に atom:id 要素の重複が起こらないことを確認してください。





ダウンロード

内容ファイル名サイズダウンロード形式
Atom duplicates samplesx-tipatom1-dup-source.zip2KBHTTP

ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために

  • feedvalidator.org を利用して Atom フィード・ジェネレーターを検証してください。

議論するために

著者について

Tyler Andersonは2004年にBrigham Young Universityにてコンピューター・サイエンスの学位を取得しており、現在はコンピューター・エンジニアリングの修士取得に向けての最終学期を送っています。これまで、DPMG.COMのデータベース・プログラマーとして働いたことがあり、現在はオレゴン州BeavertonにあるStexar Corp.のエンジニアです。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=245647
ArticleTitle=ヒント: Atom の構造を使ってアグリゲート・フィードの中の重複を回避する
publish-date=03202007
author1-email=tyleranderson5@yahoo.com
author1-email-cc=dwxed@us.ibm.com

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。