atom-syndication-format

ブログなどの更新情報を配信するためのフィードが基本 Atom

前回は、リンクの詳細やイベント情報を表現できる microformats についてまとめた。ここでは、ブログなどの更新情報を配信するためのフィードが基本であるAtom(RFC 4287)について説明する。

1 Atomとは

Atom(Atom Syndication Format)とは、RFC 4287が規定するXMLフォーマットである。Atomの目的の1つは、拡張性のあるフィードの標準フォーマットを策定しようとしたことがある。RSSは主にブログの新着情報を伝えるフィードの目的で利用されていたが、Atomはブログだけでなく検索エンジンや写真管理など様々なWebサービスのWeb APIとして利用できる。

 

2 Atomのリソースモデル

Atomの論理モデルは、メンバリソース(Member Resource)と、メンバリソースを複数含むコレクションリソース(Collection Resource)の2つに大きく分かれる。

 

メンバリソース

メンバリソースとは、Atomにおける最小のリソース単位である。メンバリソースはXMLで放言できるエントリリソース(Entry Resource)と、それ以外のメディアリソース(Media Resource)に分かれる。エントリリソースはテキストやXMLで表現するリソースであり、<entry>要素で表現する。メディアリソースは画像や映像などテキストでは表現できないリソースであり、メディアリンクエントリ(Media Link Entry)という特別なエントリで表現する。

 

コレクションリソース

コレクションリソースは複数のメンバリソースを含むリソースである。コレクションリソースは階層化できない。<feed>要素で表現し、この表現のことをフィード(Feed)と呼ぶ。

 

メディアタイプ

Atomのメディアタイプは「application/atom+xml」である。エントリやフィードを明示したいときはtypeパラメータで「entry」「feed」を指定する。

 

拡張子

Atomは「.atom」という拡張子を用いることが推奨されている。

 

名前空間

Atomの名前空間は http://www.w3.org/2005/Atom である。Atomが定義している要素はこの名前空間に属する。

 

3 エントリ—Atomの最小単位

メタデータ

エントリはメタデータを持つ。以下にAtomが定義しているエントリのメタデータを解説する。ID(<id>)、タイトル(<title>)、著者(<author>)、更新日時(<updated>)は必須である。

<id>要素の内容は、このエントリを一意に示すURI形式のIDである。

エントリには、そのエントリの題名を表現する<title>要素が必須である。また、エントリの概要を示す<summary>要素もある。

エントリには著者を示す<author>要素が必須である。また、貢献者を示す<contributor>要素もある。<author>要素と<contributor>要素は以下の3つの要素を持つ。<name>要素(自然言語で記述した名前。必須)、<uri>要素(人に関連づけられたURI。任意)、<email>要素(人のメールアドレス。任意)。

エントリには更新日時を示す<updated>要素が必須である。また、エントリの公開日時を示す<published>要素もある。

<category>要素はそのエントリの属するカテゴリを表現する。

Atomではリンクを<link>要素で表現する。<link>要素はいくつかの属性を持つ。必須の属性はhref属性だけで、href属性にはリンク先のURIが入る。rel属性はリンク関係を表現し、Atomのリンク関係は以下の5つを定義している。

  • alternate:このエントリ/フィードの別表現(XHTML表現など)へのリンク。リンク関係のデフォルト値
  • self:このエントリ/フィード自身のURI
  • enclosure:ポッドキャストなどで用いる添付ファイルへのリンク
  • related:関連するリソースへのリンク
  • via:情報元リソースへのリンク

 

エントリの内容

Atomではエントリの内容に多彩なフォーマットを含められるようになっている。

組み込みで定義されている内容として、プレーンテキスト(text)、エスケープ済みHTML(html)、XHTML(xhtml)がある。

XMLの内容も、メディアタイプがapplication/xml、text/xml、またはサブタイプが「+xml」で終わる場合、<content>要素の中に含むことができる。

テキストの内容も、メディアタイプがtextであれば、直接<content>要素に埋め込める。

画像などテキスト以外の内容は、<content>要素に入れる場合は、src属性を使って外部リソースを参照することが向いている。

 

4 フィード—エントリの集合

フィードとは、メンバリソースを複数持つコレクションリソースの表現である。

 

エントリと共通のメタデータ

<feed>要素はエントリと同じメタデータを持てる。必須要素もエントリと同じである。

 

フィード独自のメタデータ

フィードはエントリと共通のメタデータ以外に、以下の4つのメタデータを持つ。

  • サブタイトル:<subtitle>要素にはタイトルで説明しきれない説明を記述する
  • 生成プログラム:<generator>要素はフィードを生成したプログラムの情報を表現する
  • アイコン:<icon>要素にはfaviconを指定する
  • ロゴ:<logo>要素にはこのフィードを象徴する画像を指定する

 

5 Atomの拡張

Atomは拡張性の高さから、ブログ以外の様々なシステムで応用されている。拡張要素はすべて「os」という接頭辞が示すOpenSearchの名前空間に属している。OpenSearchは検索結果の標準フォーマットとして、Atomとはまったく別に標準化されている仕様である。OpenSearchを知らないプログラムにはフィードとして見えるXMLデータが、OpenSearchに対応したプログラムには検索結果一覧として見える。

 

Atom Threading Etensions—スレッドを表現する

Atom Threading Etensionsとは、RFC4685で定義しているスレッド機能である。スレッド機能とは、ある人が投稿したコンテンツに対して他の人が次々と返答を行い、1つの流れを作るというものである。

  • 名前空間:http://purl.org/syndication/thread/1.0
  • <thr:in-reply-to>要素:対応関係の表現。ref属性(必須)、href属性、type属性、source属性の4つの属性を持つ
  • repliesリンク関係とthr:count属性/thr:updated属性:repliesリンク関係は親エントリの側から子エントリを参照するときに使うもの。ref属性(必須)、href(必須)、type属性、thr:count属性、thr:updated属性
  • <thr:total>要素:エントリへの返答総数

 

Atom License Extension—ライセンス情報を表現する

Atom License Extensionとは、RFC 4946で定義しているライセンス情報を表現する仕様である。

  • 名前空間:なし
  • 複数ライセンス:<entry>要素や<feed>要素はライセンスリンクを複数持てる
  • ライセンスを指定しない場合:unspecifiedリンクを指定する
  • Atomの<rights>要素との関係:ライセンスリンクはプログラムでのライセンス処理を目的に、<right>要素は人間が読んで理解することを目的にしている

 

Feed Paging and Archiving—フィードを分割する

Feed Paging and Archivingとは、RFC 5005で定義しているフィードを分割する仕様である。

  • 名前空間:http://purl.org/syndication/history/1.0
  • フィードの種類:完全フィード(Complete Feed)、ページ化フィード(Paged Feed)、アーカイブ済みフィード(Archived Feed)
  • 完全フィード:そのフィード文書単体で、コレクションに含まれるすべてのメンバリソースを含んでいる
  • ページ化フィード:いくつかのページに分割する(first、last、previous、next、current)
  • アーカイブ済みフィード:ブログなどの月別のアーカイブをフィードで表現するための仕様(prev-archive、next-archive、current)

 

OpenSearch—検索結果を表現する

OpenSearchとは、Amazonの子会社A9が中心になって策定している検索エンジンのWeb APIのベースとなる仕様で、様々な検索サービスが活用している。以下の4つのパートに分かれる。

  • Description Document:検索エンジンが提供する検索機能をプログラムから理解可能な形式で記述するXML形式
  • URI Template Syntax:検索結果リソースを表現するURLの検索クエリ部分をパラメータ化する仕様
  • Query Element:URL Template Syntaxで使用する検索パラメータを記述するXML要素。Description Documentと検索結果の両方で利用する
  • Response Element:検索結果をAtomやRSS 2.0などのフィード形式で表現するための拡張要素

以降では、Atomの拡張となるResponse Elementについて解説する。

  • 名前空間:http://a9.com/-/spec/opensearch/1.1/
  • <os:totalResults>要素:検索結果総数を表現する正の整数
  • <os:startIndex>要素:フィードに入っている検索結果の最初のエントリのインデックスを示す
  • <os:itemsPerPage>要素:1フィードに入る最大の検索結果エントリ数
  • <os:Query>要素:検索クエリ
  • リンク関係:リンク関係を使って検索結果をページ化できる

 

6 Atomを活用する

Atomはタイトル、著者、更新日時といった基本的なメタデータを備えたリソース表現のためのフォーマットである。また、多様なアプリケーション用の拡張が用意されたフォーマットでもある。さらに、AtomPub(CRUD操作を実現できる Atom Publishing Protocol参照)と組み合わせることで、リソースの表現だけでなくHTTPを活用した操作もできるようになる。

 

最後に

Atomはフィードだけでなく、実際には幅広い分野での応用が可能なXMLフォーマットである。この拡張性により、Atomはポッドキャストによる音楽配信や写真管理、検索エンジンなどでも用いられている。これらのアプリケーションは、XMLの名前空間のしくみを使ってAtomに独自の要素を追加していくことができる。

次回は、CRUD操作を実現できる Atom Publishing Protocolについてまとめる。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB DB PRESS plus)


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>