2005-06-01

FOAFの情報を明確に記述しよう!

一昨年7月FOAF語彙を用いて私のFOAF変換版)を作成してから約2年、内容が殆ど当時のまま(foaf:interestプロパティーに設定していた「福岡ダイエーホークス」を買収に伴い「福岡ソフトバンクホークス」に修正した程度の変更)なので、現状に合わせて更新(手直し)しました。

FOAFでは、対象となる人物をfoaf:Personという要素で表し、プロパティー要素でその人物の情報を記述します。このプロパティー要素には、名前(foaf:name)やメールアドレス(foaf:mbox)、その人ホームページ(foaf:homepage)情報などを表す語彙が各種用意されています。

例を簡単に示すと次のようになります。(注意:例の人物や情報は実際には存在しません。

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xml:lang="ja">
  <foaf:Person>
    <foaf:mbox rdf:resource="mailto:yoshitune@genji.com"/>
    <foaf:name>源義経</foaf:name>
    <foaf:nick>九郎判官</foaf:nick>
    <foaf:homepage rdf:resource="http://www.yositune.or.jp/"/>
    <foaf:knows>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>静</foaf:name>
      </foaf:Person>
    </foaf:knows>
    <foaf:knows>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>武蔵坊弁慶</foaf:name>
      </foaf:Person>
    </foaf:knows>
    <foaf:knows>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>源頼朝</foaf:name>
        <foaf:homepage rdf:resource="http://www.genji.com/"/>
      </foaf:Person>
    </foaf:knows>
    <foaf:knows>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>平清盛</foaf:name>
        <foaf:homepage rdf:resource="http://www.heike.com/"/>
      </foaf:Person>
    </foaf:knows>
  </foaf:Person>
</rdf:RDF>

これは源義経の(架空の)FOAFであるが、次いで Eric Vitiello's 氏が提案する Relationship module を用いると、次の様に表すこともできます。

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xmlns:rel="http://purl.org/vocab/relationship/"
  xml:lang="ja"
  >
  <foaf:Person>
    <foaf:mbox rdf:resource="mailto:yoshitune@genji.com"/>
    <foaf:name>源義経</foaf:name>
    <foaf:nick>九郎判官</foaf:nick>
    <foaf:homepage rdf:resource="http://www.yositune.or.jp/"/>
    <rel:engagedTo>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>萌</foaf:name>
        <rel:parentOf>
          <foaf:Person>
            <foaf:name>河越太郎重頼</foaf:name>
          </foaf:Person>
        </rel:parentOf>
      </foaf:Person>
    </rel:engagedTo>
    <rel:spouseOf>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>静</foaf:name>
      </foaf:Person>
    </rel:spouseOf>
    <rel:worksWith>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>武蔵坊弁慶</foaf:name>
      </foaf:Person>
    </rel:worksWith>
    <rel:siblingOf>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>源頼朝</foaf:name>
        <foaf:homepage rdf:resource="http://www.genji.com/"/>
      </foaf:Person>
    </rel:siblingOf>
    <rel:parentOf>
      <foaf:Person>
        <foaf:mbox_sha1sum>...</foaf:mbox_sha1sum>
        <foaf:name>平清盛</foaf:name>
        <foaf:homepage rdf:resource="http://www.heike.com/"/>
      </foaf:Person>
    </rel:parentOf>
  </foaf:Person>
</rdf:RDF>

このように Relationship module は、foaf:knowsを置き換えるだけで、人物の関係をより明らかに表すことができます。

ところで、私の古いFOAF(2003年7月に作成したもの)では、後述のように私自身を表すfoaf:Personクラスのプロパティーのひとつとして、foaf:logoプロパティーを用いて本サイトのサイトバナーを提示していました。これが今になって「おや?」と疑問を感じた訳なのですが、これって明らかに変ですよね?当時の私が何も疑問を抱かずにいたことがとても不思議に思います。

<foaf:Person xml:base="http://purl.org/net/osamurai/">
  ...
  <foaf:nick>らいおさむ</foaf:nick>
  <foaf:homepage rdf:resource="" dc:title="らいおさむのお屋敷"/>
  <foaf:logo rdf:resource="images/rai-type1.png"
    dc:title="「らいおさむのお屋敷」のサイトバナー"/>
  ...
</foaf:Person>

重複しますが、FOAFでは、対象となる人物をfoaf:Personという要素で表し、プロパティー要素でその人物の情報を記述します。つまり、このfoaf:logoによって表される情報(ここでは、サイトバナー)は、対象となる人物(私)のロゴマークではありません。よくあるタレントグッズ等に描かれるタレント本人を表す様なロゴであればこの記述で問題ないでしょうし、私が「否や、これは私自身を表すロゴだ!」と頑として言い張ればそうなのかも知れません。しかしこれは明らかにfoaf:homepageを対象とした「らいおさむのお屋敷」のロゴ(サイトバナー)な訳ですから、正しくは次のように表す必要があるのです。

<foaf:Person xml:base="http://purl.org/net/osamurai/">
  ...
  <foaf:nick>らいおさむ</foaf:nick>
  <foaf:homepage>
    <foaf:Document rdf:about="">
      <dc:title>らいおさむのお屋敷</dc:title>
      <foaf:logo rdf:resource="images/rai-type1.png"
        dc:title="「らいおさむのお屋敷」のサイトバナー"/>
    </foaf:Document>
  </foaf:homepage>
  ...
</foaf:Person>

これで、サイトバナーはその対象がホームページであると、正しく表現できるでしょう。これは、サイトバナーの画像をfoaf:logoだけではなくfoaf:depictionなどで示す場合、他のプロパティ記述でも同様のことでしょう。

さて、今回約2年ぶりに現状に合わせて私のFOAF変換版)を手直ししました。この2年の間に新たに追加されたクラスやプロパティーもあるので、それらも活用して現状に合うように修正した訳なのですが・・・、内容の変化は殆どありません。foaf:knowsに至っては、身近な周囲にFOAFが(それどころか正しいマークアップすらも)浸透していないのが現実だし、ネットを通した交流の無い私では、これからも増えそうにありません。

ん~、ちょっぴり哀しい・・・。誰か連鎖して頂けませんか?(オイオイ)

注釈

私が公開している uri-parser.xsl を使用すると、XML Basexml:base)を用いた資源の相対パスを解消するのに便利です。このXSLファイルは、ご自由にご利用頂けます。