rdfweb-devではFOAFの新しい語彙の追加が議論されていて、その中心となっているのが、「このFOAFファイルは誰についてのドキュメントか」を明確に示すための仕組みです。FOAFには複数のPersonを記述できますが、RDFのモデルとしては、どのPersonが「主人公」であるとは断言できません。また(他人でも作れる)数あるFOAFの中で「私のFOAF」を示す手だてもありません。これをprimaryTopicプロパティとPersonalProfileDocumentクラスではっきりさせようというものです。
多くの場合、FOAFはPerson要素の中にその人が知っているPersonを入れ子の形で記述します。そこで、この一番外側のPersonが「主人公」であると考え、FOAFファイルはその人のプロフィールを記述したものと見なすという処理が使われることもあります(以下の例では、FOAFをデフォルト名前空間とします)。
(例)
<Person> <name>my name</name> <knows> <Person> <name>his name</name> </Person> </knows> </Person>
しかし、RDFとしては必ずしもこの入れ子構造をとる必要はなく、次のように2つのPersonを兄弟要素として並べて書くこともできます。
(例)
<Person rdf:nodeID="me"> <name>my name</name> <knows rdf:nodeID="him"/> </Person> <Person rdf:nodeID="him"> <name>his name</name> </Person>
こうなると、単純に外側のPersonが主人公だという解釈では、このFOAFファイルは誰のものなのかが分からなくなってしまいます。そこで、FOAFファイル自身を説明するDescriptionに、primaryTopicは誰であるかを記述して、主人公をはっきりさせようというわけです。
(例)
<rdf:Description rdf:about="">
<dc:title>My FOAF</dc:title>
<primaryTopic
rdf:nodeID="me"/>
</rdf:Description>
FOAFにはtopic
というプロパティがありますが、これはひとつのリソースにたいして複数存在しても構わないため、topicで「私」を指定しても、私が主人公であるかどうかは確定できません(脇役でもtopicにはなり得ます)。primaryTopicはOWLのFunctionalPropertyとして定義され、ひとつのリソースが複数のprimaryTopicを持つことは許されません。これにより、エージェントは文書のprimaryTopicが主人公であると結論づけることができるわけです。
PersonalProfileDocument(PPD)は、その文書が「作者自身のFOAF」であることを示すためのクラスです。FOAFは誰が誰についての文書を作っても構わないため(たとえば神崎正英がロジャー・ノリントンのFOAFをつくることもできる)、primaryTopicだけではいわゆる「私のFOAF」という概念を示すことができません。そこで、PPDにmakerが記述されていれば、それがその人の「私のFOAF」と理解できるようにしようというわけです。
(例)
<PersonalProfileDocument
rdf:about="">
<dc:title>My FOAF</dc:title>
<maker rdf:nodeID="me"/>
<primaryTopic rdf:nodeID="me"/>
</PersonalProfileDocument>
ここで、makerとprimaryTopicの値が同じになることに注意しておきましょう(なお、「私のFOAF」ファイルは1つだけとは限りません)。
この新しい語彙を巡っては、興味深い議論が交わされていますが、概ね収束して来週にも仕様に加えられる見込みです。議論の内容に関心のある方は、rdfweb-devの2月3日のDan Brickleyの投稿から始まるスレッドをご覧ください。
- FOAF仕様更新:主人公と投げ銭 (2004-03-14)
- FOAFスキーマ更新 - 'Pages about Things' Edition (2005-07-28)