ちょっとしたメモ

FOAFのprimaryTopicとPersonalProfileDocument

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の投稿から始まるスレッドをご覧ください。

関連メモ:
genre: foaf. at