FOAFとRSSを用いた画像メタデータ

画像にメタデータを与えれば、検索やデータベースなどさまざまな応用が可能になります。広く知られたDublin Core、FOAFとRSS 1.0の語彙を組み合わせると、既存のツールでも利用できる形で画像メタデータを記述でき、より高度な画像データ提供・共有の基礎とすることができます。

This page discusses some methods to describe an image metadata with common vocabularies such as Dublin Core, RSS and FOAF. Most parts are written in Japanese, but you'll find a short summary at the beginning of each section.

画像メタデータと語彙

There are many approaches to describe image metadata. While some of them 'invent' their own vocabularies, well-known DC and FOAF can be used with RSS as its container, and the latter approach will be more interoperable.

ウェブ上にはたくさんの画像や写真データが存在しますが、これら自身を検索するなど共有と活用のための有効な手段が確立していません。そこで、画像にメタデータを付与することで、検索やデータベース管理を効果的に実現しようという試みがいくつか行われています([PICDIARY], [MATT-MAIL], [LIBBY-JS])。

これらの試みに関連して、画像を描写・表現するために独自の語彙を定義しようとすることもありますが([BURTON], [PHEED]など)、ある程度知られた一般語彙を使えるものなら、それに越したことはありません。標準的な語彙ならば、画像専用ソフトでなくてもそのメタデータ(の一部)を処理することができ、より共有性・相互運用性が高まるからです。ここでは、比較的良く知られているFOAFRSSおよびDublin Coreの語彙を中心として画像のメタデータを記述する方法を検討します。

以下、foaf:rss:dc:rdf:はそれぞれFOAF、RSS、Dublin Core、RDFの名前空間に結びつけられた接頭辞とします。また、例をシンプルにするため、rdf:RDF要素を省略して記述することがあります。

FOAFとDublin Coreによる画像表現

まず最初に、ひとつの画像のメタデータを記述する方法を考えましょう。 ここでは「舞妓」の写真を例にしてメタデータを記述してみます。 RDFでリソースを記述するにはrdf:Description要素を使うのが基本ですが、FOAFにはfoaf:Imageクラスがあるので、これを用いた型付きノードとすれば画像であることがより明確です。

Dublin Coreで基本情報を記述する

Dublin Core will be the basis of image description.

もっとも基本的な情報である画像のタイトル、作者、および説明をDublin Coreで記述してみると、次のようになります。

[例1]

<foaf:Image rdf:about="http://www.kanzaki.com/art/maiko.jpg">
 <dc:title>舞妓</dc:title>
 <dc:creator>Kazuyuki Kanzaki</dc:creator>
 <dc:date>1996</dc:date>
 <dc:description>茶屋からすだれをかき上げて顔を出す舞妓。
   1996年鈴鹿市長賞受賞作品</dc:description>
</foaf:Image>

ここで改めて確認しておくと、foaf:Image要素のrdf:about属性で示されるURIが、画像の所在地を表します。dc:...の各要素は、このURIが示すリソースのプロパティで、要素内容のテキストがそのプロパティ値です。

(図)[http://.../maiko.jpg]--dc:title-->'舞妓'などのグラフが得られる

dc:subjectプロパティ(要素)を加えると、その写真のジャンルを示すことができます。また旅行などの写真の場合は、dc:coverageプロパティ(要素)で、写真がカバーしている地域を示してもよいでしょう。

FOAFで画像を説明する

Some FOAF terms such as foaf:thumbnail and foaf:depicts will add more information.

FOAFには、画像を説明するためのプロパティがいくつか用意されています。foaf:thumbnailはその名のとおりサムネイルを、foaf:depictsはその画像で描かれている対称を示します。

foaf:depicts

foaf:depicts is defined to have rdfs:Resource as its range. Common usage is to put foaf:Person as its object. Other interesting approach is to make a WordNet class its object, so as to enable hierarchal search.

foaf:depictsの目的語(値域=rdfs:range)はリソースなので、dc:のプロパティのように直接リテラルを記述するわけにはいきません。よく使われる例は、人物写真の場合にfoaf:Personで対称となる人を記述する方法です。

[例2]

<foaf:Image rdf:about="http://www.kanzaki.com/info/masaka.jpg">
 ...
 <foaf:depicts>
  <foaf:Person
     foaf:name="Masahide Kanzaki"
     foaf:mbox="mailto:webmaster&#64;kanzaki.com"/>
 </foaf:depicts>
</foaf:Image>

また、foaf:depictsでWordNetのようなシソーラスを参照することで、語彙の階層関係を利用した検索を可能にするという方法も提案されています([MATT-XE2003], [DANBRI])。たとえば、ホテルを写した写真の場合は次のように記述します(wn:はRDF版WordNetの名前空間接頭辞です)。

[例3]

<foaf:Image ...>
 ...
 <foaf:depicts><wn:Hotel/></foaf:depitcs>
</foaf:Image>

このメタデータは、Hotelというキーワードで検索できるだけでなく、シソーラスの階層をさかのぼって Building というキーワードでもこの写真がヒットするようになるわけです。日本語の場合、このようなRDFのクラスとして使えるシソーラスはまだありませんが、WordNetと日本語の単語を電子和英辞書EDICTを介して結びつけた試作版日本語オントロジーを用いれば、次のような表現も可能です(jw:はこのオントロジーの名前空間接頭辞です)。

[例4]

<foaf:Image rdf:about="http://www.kanzaki.com/art/maiko.jpg">
 <dc:title>舞妓</dc:title>
 ...
 <foaf:depicts><jw:舞妓/></foaf:depitcs>
</foaf:Image>

一部のXMLパーサは要素型名に漢字が使われているとエラーになることがあるので、その場合、foaf:depictsの属性としてrdf:typeを用いて記述することもできます。

[例4-2]<foaf:depicts rdf:type="http://www.kanzaki.com/ns/jword/舞妓"/>

RDFとしての意味(モデル)は空要素のjw:舞妓を内容に持つのと同じことです。rdf:resouceではなく、rdf:typeを属性として使うことに注意してください。

画像とウェブページ

With foaf:page property, you can connect an image to a web page which describes the image (such as photo diary or gallery page).

FOAFの面白いプロパティにfoaf:pageがあります。これは、主語リソースに関して記述した文書を示すものですが、foaf:Imageにこれをあてはめると、写真日記や写真ギャラリーのページなど、その画像を中心にして文章が書かれているウェブページを示すことができます。

[例5]

<foaf:Image rdf:about="http://www.kanzaki.com/art/maiko.jpg">
 <dc:title>舞妓</dc:title>
 ...
 <foaf:page rdf:resouce="http://www.kanzaki.com/art/photo1.html"/>
</foaf:Image>

(図)主語となる画像をpageプロパティでドキュメントに結びつける:[http://.../maiko.jpg]--foaf:page-->[http://.../photo1.html]

ここまでとりあげたDublin CoreとFOAFの語彙を用いて、ひとつの写真についてのメタデータを記述してみると、次のような具合になります。

[例6]

<foaf:Image rdf:about="http://www.kanzaki.com/art/maiko.jpg">
 <dc:title>舞妓</dc:title>
 <dc:creator>Kazuyuki Kanzaki</dc:creator>
 <dc:date>1996</dc:date>
 <dc:description>茶屋からすだれをかき上げて顔を出す舞妓。
   1996年鈴鹿市長賞受賞作品</dc:description>
 <foaf:depicts><jw:舞妓/></foaf:depicts>
 <foaf:page rdf:resource="http://www.kanzaki.com/art/photo1.html"/>
 <foaf:thumbnail rdf:resource="http://www.kanzaki.com/art/maiko_s.jpg"/>
</foaf:Image>

そのほかのメタデータ

Of course, you can add other vocabularies with appropriate namespaces. Those data can be directly written as property-value pairs, while native data of an image (e.g.Exif) can be pointed by rdfs:seeAlso, which is linked to some Exif extraction programs.

これだけでも、かなりのメタデータが提供でき、画像を検索したり管理するための基本には十分です。もちろん、更に語彙(名前空間)を追加すれば、より詳細なメタデータの記述が可能になります。

たとえば、再利用を認める画像ならば、クリエイティブ・コモンズの語彙を使ってライセンス情報を機械可読な形で示すと有益です。また、ほとんどのデジタルカメラ写真にはExifデータが埋め込まれていますから、これらのエッセンスをExif語彙を使って記述することもできるでしょう(cc:exif:はそれぞれの名前空間接頭辞です)。

[例7-1]

<cc:license rdf:resource="http://creativecommons.org/licenses/by-nc-sa/1.0/"/>
<exif:exposureTime>119/10000</exif:exposureTime>

もっとも、上の例のうちExifデータは画像自身に含まれる情報なので、こうしたものはわざわざ別のメタデータに書き込むよりも、次のようにrdfs:seeAlsoプロパティで、ExifデータをRDFとして抽出するプログラムにリンクしておくのが得策かも知れません。

[例7-2]

<rdfs:seeAlso rdf:resource="http://www.kanzaki.com/test/exif2rdf?u=(image's URI)"/>

これらのメタデータを、画像自身に埋め込んでしまうのか(たとえばJPEGのコメントセグメントを使うなど)、外部ファイルとして保持するのがよいのかは、意見が分かれるところです。

  • 埋め込み型メタデータは、画像と一体化できて管理が容易です。特に、ライセンス情報などは、画像ファイル単独で見た場合も確認できる方が便利と言えます。一方、メタデータ取得のためのオーバーヘッドが生じ、現状の検索エンジンロボットなどに情報を与えるのは難しそうです。
  • 外部ファイルの場合、RDF対応のツールでデータベースに格納したり、直接検索したりすることが可能です(例えば[LIBBY-RSS])。さらに、次に述べるRSSのようなコンテナを用いることで、汎用的なメタデータとして広く流通・応用することも視野に入ってきます。

RSSを使った画像メタデータの公開

Using RSS as a container of the image metadata, it can be processed by common feed reader programs, as well as by more sophisticated image tools.

foaf:Imageを直接処理するアプリケーションはあまり一般的ではないので、上記のメタデータを活用するには、今のところ自前でツールを用意するなどちょっと工夫が必要になります。しかしこれを、RSSと結びつけてやれば、画像のメタデータを広い範囲に公開、共有することが可能になってきます。

Good! RDFと名前空間に基づくRSS 1.0は、このようにして基本的なチャネルとしての働きを保ったまま、必要な語彙を追加して、さまざまなメタデータのコンテナとして利用することができます。また、汎用のRDFツールを用いた検索やデータベースの構築なども可能です。

A. 画像自身をアイテムとするチャンネル

One intuitive way to use RSS is to make image itself the subject of rss:item. In this approach, you'll get the image by clicking a link on an RSS reader window.

簡単なのは、上記[例6]のメタデータのfoaf:Image要素をrss:item要素に置き換え、画像そのものをRSSチャンネルのアイテムにしてしまう方法です。title, descriptionといったRSSに含まれる語彙は、dc:ではなくRSSのものとしておくことで、フィードリーダーでこれらの情報を表示させることができます。channelのlink要素が参照するリソースは、写真集のような画像を集めたページになるでしょう。

RSSの名前空間をデフォルトとすると、次のようなフィードが書けます(例をシンプルにするために、rdfs:seeAlsoは略します)。アイテムのURIは画像自身になっていることに注意してください。

[例8]

<rdf:RDF
  xmlns="http://purl.org/rss/1.0/"
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

 <channel rdf:about="http://www.kanzaki.com/art/photoindex.rdf">
  <title>Photogallery - Some Japanese scenes</title>
  <link>http://www.kanzaki.com/art/photoindex.html</link>
  <description>いくつかの日本の情景を捉えた写真集</description>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://www.kanzaki.com/art/maiko.jpg"/>
    ...
   </rdf:Seq>
  </items>
 </channel>

 <item rdf:about="http://www.kanzaki.com/art/maiko.jpg">
  <title>舞妓</title>
  <link>http://www.kanzaki.com/art/maiko.jpg</link>
  <description>茶屋からすだれをかき上げて顔を出す舞妓。
  1996年鈴鹿市長賞受賞作品</description>
  <dc:date>1996</dc:date>
  <dc:creator>Kazuyuki Kanzaki</dc:creator>
  <foaf:depicts><jw:舞妓/></foaf:depicts>
  <foaf:page rdf:resource="http://www.kanzaki.com/art/photo1.html"/>
  <foaf:thumbnail rdf:resource="http://www.kanzaki.com/art/maiko_s.jpg"/>
  ...
 </item>

 ...
</rdf:RDF>

RSSフィードリーダーなどでこのチャンネルを読み込めば、画像のタイトルや説明(dc:を理解するなら日付や作者も)が表示され、画像自身にリンクが張られることになります。foaf:関連の語彙は、現在のフィードリーダーでは利用できないことがほとんどでしょうけれど、XSLTなどでも表示は可能ですし、さまざまな応用が可能です。

〔補足〕ここで、FOAFのスキーマではfoaf:depictsfoaf:thumbnailプロパティの定義域(rdfs:domain)がfoaf:Imageとなっていることに注目しておきましょう。これは、このプロパティをもつ主語リソース(ここではmaiko.jpg)がfoaf:Imageクラスに属することを意味します。つまり、明示的にfoaf:Image要素を用いず、rss:itemとしていても、このリソースが画像であることがエージェントには理解できるようになっているのです(リソースは複数のクラスに属することができます)。

※位置データとデジタル画像とRSSを組み合わせて地図連動型アルバムをつくる実験も参照してください。

B. ウェブページに焦点を当てたチャンネル

On the contrary, the subject of the rss:item can be the web page which describes the image. Within rss:item, you can use foaf:topic to relate the target image.

一方、フィードリーダーなどのリンクを辿った時に、画像だけでなくその紹介文なども含めた「ギャラリーページ」を表示させたいケースもあるでしょう。その場合は普通にページのチャンネルRSSを書くことになりますが、そのなかに画像そのもののメタデータを埋め込んでしまえば、一種の画像メタデータ・レポジトリとしても使えます。

A. の画像メタデータ([例8])では、その画像のギャラリーページをfoaf:pageプロパティで示しました。FOAFには、この逆の働きをするプロパティfoaf:topicが用意されています。主語のドキュメントが扱っているリソースを示すものです。この目的語をfoaf:Imageとすれば、文書情報内にその主題である画像のメタデータを記述することができます。

[例9]

<rdf:RDF ...>

 <channel rdf:about="http://www.kanzaki.com/art/photopages.rdf">
  <title>Photogallery - Some Japanese scenes</title>
  <link>http://www.kanzaki.com/art/photoindex.html</link>
  <description>いくつかの日本の情景を捉えた写真</description>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://www.kanzaki.com/art/photo1.html"/>
    ...
   </rdf:Seq>
  </items>
 </channel>

 <item rdf:about="http://www.kanzaki.com/art/photo1.html">
  <title>舞妓</title>
  <link>http://www.kanzaki.com/art/photo1.html</link>
  <description>茶屋からすだれをかき上げて顔を出す舞妓。
  1996年鈴鹿市長賞受賞作品</description>
  <dc:date>1996</dc:date>
  <dc:creator>Kazuyuki Kanzaki</dc:creator>
  <foaf:topic>
   <foaf:Image rdf:about="http://www.kanzaki.com/art/maiko.jpg">
    <foaf:depicts><jw:舞妓/></foaf:depicts>
    <foaf:thumbnail rdf:resource="http://www.kanzaki.com/art/maiko_s.jpg"/>
    ...
   </foaf:Image>
  </foaf:topic>
 </item>

 ...
</rdf:RDF>

[例8]とは違って、item要素の主語URIはギャラリーページを指しています。この場合、dc:dateがこの位置にあると、写真の撮影日ではなくページの作成日を意味することになるので、必要に応じて置き換える(あるいは両方に記述する)ことになるでしょう。作者などほかのプロパティについても同様です。

(図)主語となるドキュメントをtopicプロパティで画像に結びつける:[http://.../maiko.jpg]<--foaf:topic--[http://.../photo1.html]

この方法は、基本はウェブページの記述であり、画像メタデータは間接的に言及される形になります。画像メタデータのデータベースとして機能させるには、A. の画像自身をアイテムとするチャンネルの方がストレートで扱いやすでしょうが、現在のRSSでのチャンネルとしても普通に使える情報を提供しつつ画像メタデータも公開するというときには、なかなか良い現実解かも知れません。

〔補足〕

ページを記述するitem要素にfoaf:Imageを直接埋め込むことはできません。次のような記述はRDFとして誤りです。

[例10-1]

 <item rdf:about="http://www.kanzaki.com/art/photo1.html">
  <title>舞妓</title>
  ...
  <foaf:Image rdf:about="http://www.kanzaki.com/art/maiko.jpg">
  <!--  ^^^^^ ^^^^^^^^^ cannot write a node in place of an arc -->
   ...
  </foaf:Image>
 </item>

rss:item、foaf:Imageともにノード(クラス)を示すので、RDFとしては両者をつなぐプロパティが必要です(foaf:Imageはプロパティではないのでrdf:resouceで目的語を記述することもできません)。ここでは、「このアイテムのトピックがこの画像である」という関係を示すものとして、foaf:topicを使っているわけです。

なお、画像のメタデータを記述するほどではなく、単純にそのページではどんな画像がテーマになっているかを示すだけであれば、foaf:topicを空要素として、rdf:resouceで画像URIを示すだけで十分意味が通じます。トピックが画像データであることを示すためには、dc:formatでMIMEタイプを加えておくとより明確でしょう。

[例10-2]

 <item rdf:about="http://www.kanzaki.com/art/photo1.html">
  <title>舞妓</title>
  ...
  <foaf:topic dc:format="image/jpeg"
        rdf:resouce="http://www.kanzaki.com/art/maiko.jpg"/>
 </item>

〔以上補足〕

サンプル

Example RSS feeds of each method, along with its XHTML rendering (including thumbnails). You can also let FOAF tools deal those RSS with a bit trick.

2通りのRSSによる画像メタデータを作成してみました。

(※RSS自身にXSLTを加えたので、RDFはソースをご覧下さい。なお、IE5やSafariを利用している方は、自動的にサーバー側でXSLT処理を行うので、B.のリダイレクトされないバージョンを参照してください)

いずれもXHTML表示は同じですが、リンク先がA.は画像、B.はギャラリーページになっています(XHTML表示では、サムネイルも表示します。ちなみに、独自語彙のPheedによるRSSのサムネイルも表示できるようにしています)。

これらのメタデータは、FOAFの語彙を用いているので、ちょっと手を加えるとFOAF対応ツールでも処理できるようになります。多くのFOAFツールは、foaf:Personを出発点にしてデータを解析するので、RSSに次のような断片を加えてやりましょう。

[例11]

<foaf:Person>
 <foaf:name>Masahide Kanzaki</foaf:name>
 <foaf:mbox rdf:resource="mailto:webmaster&#64;kanzaki.com"/>
 <foaf:made rdf:resource="http://www.kanzaki.com/art/photoindex.rdf"/>
</foaf:Person>

foaf:madeプロパティでチャンネルのURIを示しておくことで、この人物とRSSが結びつけられ、FOAFツールはそのチャンネルの示す画像データも処理できるわけです。上記のRSSを、FoaF Explorerで表示させてみると次のようになります。

RSSとFOAFを介することで、いろいろなメタデータを連動させられることがイメージできるでしょうか。

参考リソース

[PICDIARY]
Matt Biddulph, Picture Diary
<http://www.picdiary.com/>
[LIBBY-RSS]
Libby Miller, Libby's photos rss channels
<http://swordfish.rdfweb.org/discovery/2003/03/rssphotos/photos.html>
[MATT-MAIL]
Matt Biddulph, To rss-dev about picdiary, , hackdiary
<http://www.hackdiary.com/archives/000001.html>
[MATT-XE2003]
Matt Biddulph, A Semantic Web shoebox - annotating photos with RSS and RDF, , hackdiary
<http://www.hackdiary.com/archives/000020.html>
[DANBRI]
Dan Brickley, WhyWordnetIsCool, , FOAF Wiki
<http://rdfweb.org/topic/WhyWordnetIsCool>
[LIBBY-JS]
Libby Miller, An image annotation tool written in javascript
<http://swordfish.rdfweb.org/discovery/2003/06/codjsform/shell.html>
[LONGSON]
Tom Longson, RDF Site Summary 1.0 Modules: Img, , Draft 0.6
<http://igargoyle.com/rss/1.0/modules/img/>
[BURTON]
Kevin A. Burton, RDF Site Summary 1.0 Modules: Image,
<http://www.peerfear.org/rss/proposed/image/mod_image.html>
[HANNA]
Jon Hanna, Tony Worrall, RDF Site Summary 1.0 Modules: Image, , Draft 0.1
<http://www.spin.ie/jon/mod_images.html>
[PHEED]
Pheed RSS Specification, , Pheed.com
<http://www.pheed.com/pheed/>