Describing and retrieving photos using RDF and HTTP
W3C Note 19 April 2002
by Ben Hammersley, author of Content Syndication with RSS 02/28/2003
The curse of metadata, once you get over the intractable issues of trust and standards and categorization, is that you never know how much to give. For the weblogging community, which produces masses of metadata, mostly without knowing it, this is especially true: we could be giving out so much more for others to play with, and with very little effort.
Take the default RSS 1.0 template within Movable Type. It looks like this:
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="<$MTBlogURL$>">
<title><$MTBlogName encode_xml="1"$></title>
<link><$MTBlogURL$></link>
<description><$MTBlogDescription encode_xml="1"$></description>
<dc:language>en-us</dc:language>
<dc:creator></dc:creator>
<dc:date><MTEntries lastn="1"><$MTEntryDate format="%Y-%m-%dT%H:%M:%S"
language="en"$><$MTBlogTimezone$></MTEntries></dc:date>
<admin:generatorAgent
rdf:resource="http://www.movabletype.org/?v=<$MTVersion$>" />
<MTBlogIfCCLicense>
<cc:license rdf:resource="<$MTBlogCCLicenseURL$>" />
</MTBlogIfCCLicense>
<items>
<rdf:Seq><MTEntries lastn="15">
<rdf:li rdf:resource="<$MTEntryPermalink encode_xml="1"$>" />
</MTEntries></rdf:Seq>
</items>
</channel>
<MTEntries lastn="15">
<item rdf:about="<$MTEntryPermalink encode_xml="1"$>">
<title><$MTEntryTitle encode_xml="1"$></title>
<link><$MTEntryPermalink encode_xml="1"$></link>
<description><$MTEntryExcerpt encode_xml="1"$></description>
<dc:subject><$MTEntryCategory encode_xml="1"$></dc:subject>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S"
language="en"$><$MTBlogTimezone$></dc:date>
</item>
</MTEntries>
</rdf:RDF>
This template works well, but it doesn't include all the information it could. RSS (especially RSS 1.0) feeds are made much more valuable with every extra piece of information we can put inside of them. The default template already uses the Dublin Core module, which allows us to point out subject and date and so on, but it doesn't go to the extremes that any self-respecting RSS provider would like.
So, let's look at the feed one section at a time, and add in what we
can. First, the <channel>
information: we're already giving quite a
considerable amount of information here, and there is really only one
element left to add in, the <admin:errorReportsTo>
.
This element holds your email address, so if someone using your feed finds something terribly wrong with it, they can contact you. With my own email address, I add this line to the template:
<admin:errorReportsTo rdf:resource="mailto:ben@benhammersley.com"/>
You'll want to use your own email address. Moving on, we
get to the <item>
s. In weblog RSS feeds, each <item>
contains
information about a single weblog entry. There is a lot to say about
weblog entries in Movable Type. We're already giving information about
the author, the creation date, and the category, but RSS 1.0 allows for
much more.
If we're allowing comments on the entry, the <annotate:reference>
element can point to the URL of the page where people can have their
say, and the <dc:contributor>
element can hold details of anyone who
has left a comment. In this way, aggregators that recognize this field,
such as NewsMonster, can display a list of
commentators, and perhaps provide aggregation based on items where your
friends have left comments.
Of course, you might turn off commenting for some entries, so we must
wrap the entire section of the template in an <MTEntryIfAllowComments>
tag.
<MTEntryIfAllowComments>
<annotate:reference rdf:resource="<$MTEntryPermalink encode_xml="1"$>" />
<MTComments>
<dc:contributor>
<foaf:person foaf:name="<MTCommentAuthor encode_xml="1">">
<foaf:homepage rdf:resource="<MTCommentURL encode_xml="1">" />
<foaf:email rdf:resource="<$MTCommentEmail encode_xml="1"$>" />
</foaf:person>
</dc:contributor>
</MTComments>
</MTEntryIfAllowComments>
You'll notice that we're providing details of the commentator inside of FOAF elements. FOAF, or Friend of a Friend, is an RDF vocabulary that gives us lots of scope for describing people. For more on that, see rdfweb.org.
Next up for Movable Type feeds comes details of TrackBacking. TrackBack is Movable Type's two-way linking system, which allows entries to refer to, and be referred to by, other posts on other weblogs, with the weblogging systems informing each other of the link.
As TrackBacking goes both ways, this is a great bit of metadata to include in one's feed. This template section here uses the TrackBack RSS 1.0 module by Justin Klubnik to detail which TrackBack pings have been sent from the entry in question.
<MTPingsSent>
<trackback:about rdf:resource="<$MTPingsSentURL encode_xml="1"$>"/>
</MTPingsSent>
And this template snippet deals with which pings have been received by
the entry in question, detailed with the <dcterms:isReferencedBy>
element, checking first to see if TrackBacking that entry has been
allowed, and if so, detailing the URL to ping to trackback to that
entry as well.
<MTEntryIfAllowPings>
<trackback:ping rdf:resource="<MTEntryTrackbackLink encode_xml="1">"/>
<MTPings>
<dcterms:isReferencedBy rdf:resource="<$MTPingURL encode_xml="1"$>" />
</MTPings>
</MTEntryIfAllowPings>
So now we have a feed that contains all of the data we can pull out of a standard Movable Type installation. For totally standards-compliant newsreaders, much of this detail could be displayed very easily, and the rest of it can be used for more advanced RDF applications. That there are few of these right now is not an excuse, of course: the 30 seconds it takes to replace the default template with the complete one below is a small investment to make when the data produced might allow for a new generation of RDF applications.
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns="http://purl.org/rss/1.0/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:annotate="http://purl.org/rss/1.0/modules/annotate/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
>
<channel rdf:about="<$MTBlogURL$>">
<title><$MTBlogName encode_xml="1"$></title>
<link><$MTBlogURL$></link>
<description><$MTBlogDescription encode_xml="1"$></description>
<dc:language>en-us</dc:language>
<dc:creator>Your Name Here</dc:creator>
<dc:date><MTEntries lastn="1"><$MTEntryDate format="%Y-%m-%dT%H:%M:%S"
language="en"$><$MTBlogTimezone$></MTEntries></dc:date>
<admin:generatorAgent
rdf:resource="http://www.movabletype.org/?v=<$MTVersion$>" />
<admin:errorReportsTo rdf:resource="mailto:your email here"/>
<MTBlogIfCCLicense>
<cc:license rdf:resource="<$MTBlogCCLicenseURL$>" />
</MTBlogIfCCLicense>
<items>
<rdf:Seq><MTEntries lastn="15">
<rdf:li rdf:resource="<$MTEntryPermalink encode_xml="1"$>" />
</MTEntries></rdf:Seq>
</items>
</channel>
<MTEntries lastn="15">
<item rdf:about="<$MTEntryPermalink encode_xml="1"$>">
<title><$MTEntryTitle encode_xml="1"$></title>
<link><$MTEntryPermalink encode_xml="1"$></link>
<description><$MTEntryExcerpt encode_xml="1"$></description>
<dc:subject><$MTEntryCategory encode_xml="1"$></dc:subject>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S"
language="en"$><$MTBlogTimezone$></dc:date>
<content:encoded><$MTEntryBody encode_xml="1"$><$MTEntryMore
encode_xml="1"$></content:encoded>
<MTEntryIfAllowComments>
<annotate:reference rdf:resource="<$MTEntryPermalink encode_xml="1"$>" />
<MTComments>
<dc:contributor>
<foaf:person foaf:name="<MTCommentAuthor encode_xml="1">">
<foaf:homepage rdf:resource="<MTCommentURL encode_xml="1">" />
<foaf:email rdf:resource="<$MTCommentEmail encode_xml="1"$>" />
</foaf:person>
</dc:contributor>
</MTComments>
</MTEntryIfAllowComments>
<MTPingsSent>
<trackback:about rdf:resource="<$MTPingsSentURL encode_xml="1"$>"/>
</MTPingsSent>
<MTEntryIfAllowPings>
<trackback:ping rdf:resource="<MTEntryTrackbackLink encode_xml="1">"/>
<MTPings>
<dcterms:isReferencedBy rdf:resource="<$MTPingURL encode_xml="1"$>" />
</MTPings>
</MTEntryIfAllowPings>
</item>
</MTEntries>
</rdf:RDF>
人気上昇中のウェブサイト『 http://www.fotolog.net/ フォトログ』が、高尚な文化と低俗な文化がぶつかり合う戦場と化している。
フォトログは、誰もがデジタル写真を日付順に掲載できるウェブログ兼フォトギャラリーで、その登場は比較的最近だ。他者の作品にリンクしたりコメントできる機能のおかげで、写真撮影に興じる人々の一大コミュニティーを急速に築きつつある。
しかし、新しいオンライン・コミュニティーの多くの例にもれず、考え方の全く異なるメンバーたちがフォトログの「魂」をめぐって戦いを繰り広げている。
一方では、志の高いアマチュアカメラマンが http://www.wired.com/news/images/0,2334,59149-7628,00.html 真面目な写真(写真)を発表しており、中にはルポタージュや芸術に迫る作品もある。もう一方では、10代のブラジル人少女たちが、ウェブカメラで撮った http://www.wired.com/news/images/0,2334,59149-7622,00.html 肌もあらわな自分の姿(写真)を掲載している。
フォトログの創設者の一人、アダム・サイファー氏は「ブラジル人の中には、コミュニティーでも指折りの素晴らしいカメラマンもいる。だが、ウェブカメラで自分の写真を撮る若者の数も多い」と話す。
芸術とセクシー写真の戦いが頂点に達したのは、フォトログが写真掲載時に多くの特典が得られる有料プログラムを設けた先週のことだ。最小限の機能は無料だが、それ以上の機能を利用しようとすれば1ヵ月当たり5ドルがかかるという知らせが、写真による多くの「 http://www.wired.com/news/images/0,2334,59149-7653,00.html 抗議(写真)」を呼んだ。その大部分は、3000人を超えるブラジルのメンバーから寄せられたものだ。
フォトログのサイトは、「われわれは払わない」、「 http://www.wired.com/news/images/0,2334,59149-7620,00.html フォトログを無料に(写真)」などと題された写真や大量の怒りのコメントであふれ返った。
「(ブラジル人は)課金への理解が最も乏しい。抗議の多くは彼らによるものだ」とサイファー氏。
サイファー氏は、とくにブラジル人が憤慨している理由はわからないと話す。しかし、フォトログのサイト上で飛び交う推測の多くは、ブラジル通貨がドルに対して弱い点を指摘している。
9日(米国時間)時点で、ブラジルはフォトログのメンバーが http://www.fotolog.net/browse_countries.html 最も多い国で、その数は3028人に上る。米国は3005人でわずかの差で2位、メンバーの合計は約1万1000人だ。
ウェブカメラで自分を撮るブラジルの少女たちと未来のウィージー[1930年代から40年代に活躍したフォトジャーナリスト]たちとの戦いに最初に目を留めたのは、ニューヨークに関連するテーマを扱うグループ・ウェブログ『 http://gothamist.com/ ゴッサミスト』の寄稿者、ジェイク・ドブキン氏だ。
ドブキン氏によると、フォトログ・サイトの構成も、高尚な文化と低俗な文化の戦いを煽っているという。
フォトログのトップページの片側には、もっとも新しく更新された6つのフォトギャラリーの写真が縦に並べられている。反対側の列には、サイト全体で最も人気が高い6枚の写真が並んでいる。
この数週間、人気の高い写真はほぼ真面目なもの一色だった。一方、ドブキン氏によると、反対の列はブラジルから投稿されたセクシー写真で占められていたという。
この現象が、単に真面目なカメラマンよりブラジル人の数が多いためか、それともブラジル人の投稿頻度が勝っているためか、ドブキン氏はわからないとしている。
「フォトログの魂の支配権をめぐる死闘で、勝利を収めるのはどちらだろう?」とドブキン氏は http://www.gothamist.com/archive/002530.php ゴッサミストの記事で記している。「答えを出してくれるのは時間のみだ。しかし、答えを暗示するものはある。このサイト『フォトログ・ネット』の本拠がニューヨークのチェルシー地区にあるにもかかわらず、フォトログのサイトは2000以上がブラジルにあり、ニューヨークには448しかないという事実だ」
オンライン・コミュニティーを本来あるべき姿に保とうする内部の争いは、これまでに何度も起こっている。たとえば、『 http://slashdot.org/ スラッシュドット』は、過剰なトラフィックを招く挑発的なメッセージや攻撃的なメッセージを減らす目的で、読者のコメントを評価するシステムを導入した。また、『 http://www.metafilter.com/ メタフィルター』では、急速すぎる成長でサイトダウンの危険が生じた際、新メンバーの登録を打ち切った。
テクノロジーの専門家である http://www.shirky.com/ クレイ・シャーキー氏によると、コミュニティーというものはオンライン上にあるか否かにかかわらず、既存のルールを大切にしない新メンバーが加わるようになるとどこも、成長にともなう痛みを経験するものだという。
コミュニティーの成長を調整するために、ルールを課したり、破壊的な分子を閉め出したりすることがよくあると、シャーキー氏は http://shirky.com/writings/group_politics.html 指摘している。
しかし、サイファー氏は、フォトログにはそのような計画はないと述べている。同氏はフォトログを誰でも自由に参加できるサイトにしたいと考えており、サイトの成長につれて、成熟した写真への興味が勝るようになると確信している。
サイファー氏によると、フォトログで最も人気がある新しい遊びの一つは、 http://www.fotolog.net/vert 緑色、ドイツ生まれの人形のおもちゃ『 http://www.fotolog.net/playmobil プレイモービル』といったテーマを決め、複数の参加者がグループギャラリーを作ることだという。
フォトログのメンバーたちが撮る写真は、サイトの使い方を覚えていくうちにどんどん洗練されたものになると、サイファー氏は述べる。最初は飼い猫や自分の子どものスナップ写真を掲載していた人々が、自分の周りにあるものを撮りはじめることも珍しくはない。
サイファー氏は、カメラ付き携帯電話やポケットサイズのデジタルカメラのおかげで、生活のあらゆる場面を記録することが非常に容易になったと説明している。
「人々はカメラの新しい使い方を考案しはじめている」とサイファー氏。
サイファー氏は自分が食べたものほぼすべてを毎日写真に収めており、1週間に約1万人が同氏の http://www.fotolog.net/cypher/ ギャラリーを訪れる。「私のような人間が毎日どのような食事をとっているかを世界中の人々が見たがっている。他人の生活を垣間見るのが興味津々のようだ」
サイファー氏によると、同氏の食事記録は個人によるジャーナリズムの一形態であり、サイト全体がジャーナリズム的な雰囲気に覆われることもあるという。米国東海岸を襲う猛吹雪や世界平和を祈る抗議運動など、大きな出来事が起こった場合には、その出来事を記録した一連の写真がフォトログに掲載されることだろう。
「フォトログのサイトは時折、きわめてジャーナリスティックな方向へと傾く」とサイファー氏。「誕生日パーティーを撮影する代わりに、人は人生におけるつかの間の一瞬を写真に収める。そうした瞬間がブックマークとして刻まれ……しかも、世界中の人々に強く訴えかける」