Hatena::Groupweb

vantguarde

 | 

4.20

foaf:primaryTopic/foaf:isPrimaryTopicOf

| 15:58

前回の続き。個人の情報とそのファイルにつながりがないとはどういうことか、ってことを書こうと思ったんだけど、ちょっと理解不足かもということで、とりあえず解答を。逃げっ。

# http://example.com/foaf

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:vant a foaf:Person ;
  foaf:name "vant" ;
  foaf:weblog <http://web.g.hatena.ne.jp/vantguarde/> ;
  foaf:knows _:friend .

_:friend a foaf:Person ;
    foaf:name "friend" ;
    foaf:weblog <http://example.com/friend> .

さて、これだと僕のFOAFなのかfriendのFOAFなのか、RDF的にはっきりしないわけです。そこで登場するのが、このURLと僕を結びつけるプロパティ、foaf:primaryTopic又はfoaf:isPrimaryTopicOf。

foaf:primaryTopicは「主語のリソースが持つメインのトピックはこのリソース」というのを示すプロパティで、foaf:isPrimaryTopicOfはその反対「主語のリソースをメインとするリソース」を示すプロパティ。わかりにくいですね、というわけで例を。

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> foaf:primaryTopic _:vant .

_:vant a foaf:Person ;
  foaf:name "vant" ;
  foaf:weblog <http://web.g.hatena.ne.jp/vantguarde/> ;
  foaf:knows _:friend .

_:friend a foaf:Person ;
    foaf:name "friend" ;
    foaf:weblog <http://example.com/friend> .

<> foaf:primaryTopic _:vant .を入れただけ。<>は「この文書」という意味、つまりこの場合<http://example.com/foaf>と等価です。「http://example.com/foafのメイントピックはvantに関する情報だよ。」ということを言ってるわけです。

で、foaf:isPrimaryTopicOfを使うとこうなる。

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

_:vant a foaf:Person ;
  foaf:name "vant" ;
  foaf:weblog <http://web.g.hatena.ne.jp/vantguarde/> ;
  foaf:knows _:friend .

_:vant foaf:isPrimaryTopicOf <> .

_:friend a foaf:Person ;
    foaf:name "friend" ;
    foaf:weblog <http://example.com/friend> .

「vantに関する情報はhttp://example.com/foafのメイントピックだよ。」ということになります。主語と目的語が入れ替わってますが、同じ意味ですよね。二つのプロパティはowl:inverseで関係づけられてるので、どちらを用いても「誰がメイントピックか」を示せます。

ただRDF/XMLを考えると、foaf:isPrimaryTopicOfの方がいいかも。

<rdf:RDF xmlns...>
  <rdf:Description rdf:about="">
    <foaf:primaryTopic rdf:nodeID="vant"/>
  </rdf:Description>

  <foaf:Person rdf:nodeID="vant">
    <foaf:name>vant</foaf:name>
    <!-- のこり省略 -->
  </foaf:Person>
</rdf:RDF>

foaf:primaryTopicを使うと、rdf:Description要素をfoaf:Personの兄弟要素にしないといけない。で、FOAFをただのXMLとして解析するアプリがもしかしたらそれを上手く扱ってくれないかもしれないから。

<rdf:RDF xmlns...>
  <foaf:Person>
    <foaf:name>vant</foaf:name>
    <!-- のこり省略 -->
    <foaf:isPrimaryTopic rdf:resource=""/>
  </foaf:Person>
</rdf:RDF>

foaf:isPrimaryTopicOfだとfoaf:Personの子要素として収められるので、見た目を気にする人にもいいかも。

ただ、もう一つ問題が。それはメインのトピックが分かったからといって、誰がそれを言ったのか分からないこと。

 | 
Contact: @vant / lepetitcroissant@gmail.com.