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]など)、ある程度知られた一般語彙を使えるものなら、それに越したことはありません。標準的な語彙ならば、画像専用ソフトでなくてもそのメタデータ(の一部)を処理することができ、より共有性・相互運用性が高まるからです。ここでは、比較的良く知られているFOAF、RSSおよび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が示すリソースのプロパティで、要素内容のテキストがそのプロパティ値です。
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@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>
ここまでとりあげた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と結びつけてやれば、画像のメタデータを広い範囲に公開、共有することが可能になってきます。
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:depicts
とfoaf: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
がこの位置にあると、写真の撮影日ではなくページの作成日を意味することになるので、必要に応じて置き換える(あるいは両方に記述する)ことになるでしょう。作者などほかのプロパティについても同様です。
この方法は、基本はウェブページの記述であり、画像メタデータは間接的に言及される形になります。画像メタデータのデータベースとして機能させるには、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.はギャラリーページになっています。
これらのメタデータは、FOAFの語彙を用いているので、ちょっと手を加えるとFOAF対応ツールでも処理できるようになります。多くのFOAFツールは、foaf:Person
を出発点にしてデータを解析するので、RSSに次のような断片を加えてやりましょう。
[例11]
<foaf:Person> <foaf:name>Masahide Kanzaki</foaf:name> <foaf:mbox rdf:resource="mailto:webmaster@kanzaki.com"/> <foaf:made
rdf:resource="http://www.kanzaki.com/art/photoindex.rdf
"/> </foaf:Person>
foaf:made
プロパティでチャンネルのURIを示しておくことで、この人物とRSSが結びつけられ、FOAFツールはそのチャンネルの示す画像データも処理できるわけです。上記のRSSを、FoaF Explorerで表示させてみると次のようになります。
- A. 画像自身をアイテムとするRSSのFoaF Explorer表示とSyndication Subscription Serviceの表示
- B. ウェブページに焦点を当てたRSSのFoaF Explorer表示とSyndication Subscription Serviceの表示
RSSとFOAFを介することで、いろいろなメタデータを連動させられることがイメージできるでしょうか。
参考リソース
- [PICDIARY]
- Picture Diary ,
- <http://www.picdiary.com/>
- [LIBBY-RSS]
- Libby's photos rss channels ,
- <http://swordfish.rdfweb.org/discovery/2003/03/rssphotos/photos.html>
- [MATT-MAIL]
- To rss-dev about picdiary, , hackdiary ,
- <http://www.hackdiary.com/archives/000001.html>
- [MATT-XE2003]
- A Semantic Web shoebox - annotating photos with RSS and RDF, , hackdiary ,
- <http://www.hackdiary.com/archives/000020.html>
- [DANBRI]
- WhyWordnetIsCool, , FOAF Wiki ,
- <http://rdfweb.org/topic/WhyWordnetIsCool>
- [LIBBY-JS]
- An image annotation tool written in javascript ,
- <http://swordfish.rdfweb.org/discovery/2003/06/codjsform/shell.html>
- [LONGSON]
- RDF Site Summary 1.0 Modules: Img, , Draft 0.6 ,
- <http://igargoyle.com/rss/1.0/modules/img/>
- [BURTON]
- RDF Site Summary 1.0 Modules: Image, ,
- <http://www.peerfear.org/rss/proposed/image/mod_image.html>
- [HANNA]
- 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/>