他の人のAccount Auto-Discovery用RDF

Account Auto-DiscoveryとTrackBack Auto-Discoveryを合わせるの記事を書いた時、既に以下の2記事で同様の試みがされていたのですが、そこに書かれていたRDFについては少し気になるところがあったため、改めて自分なりに書いてみることにしたのでした。

以下、その気になったところについて述べてみます。

のりさんが書かれていたRDFには、TrackBack Auto-Discovery用のRDFには必須ではない、dc:creatordc:dateの値が書かれていました。ソースの要点を記すとこのような感じ:

<rdf:Description
  rdf:about="http://diary.noasobi.net/2005/08/diary_050810a.html"
  ...
  dc:creator="のり"
  dc:date="2005-08-10T00:00:00+09:00">
  <foaf:maker rdf:parseType="Resource">
  ...
  </foaf:maker>
</rdf:Description>

RDF/XMLとしては問題無いと思います。

ただ、dc:creatorfoaf:makerが別個に書かれていて、それぞれ関連が無いように見えるのが惜しい気がしたのでした。rdf:aboutの値で示してあるところのリソースを作った人の名前を記述するのであれば、foaf:makerが指すノードのプロパティとして記述した方がよさそうに思います。

というわけで、以下のようにすればいいのではと考えました。

<rdf:Description
  rdf:about="http://diary.noasobi.net/2005/08/diary_050810a.html"
  ...>
  <foaf:maker rdf:parseType="Resource">
    <foaf:name>のり</foaf:name>
    <foaf:holdsAccount>
    ...
    </foaf:holdsAccount>
  </foaf:maker>
</rdf:Description>

これもRDF/XMLとしては問題無い(筈)ですが、Account Auto-Discovery仕様の策定時には、「XHTMLにコメントしないで埋め込んだ時にそのメタデータがブラウザ等でレンダリングされないようにする」ということが考慮されていました(naoyaのはてなダイアリー - Accout Auto-Discovery 仕様修正案)。してみるとfoaf:nameの値は要素内容としてではなく属性値として記述した方がよさそうであり。

で、どう書けば属性値として書けるのものかと調べたところ、rdf:parseType="Resource" により省略されていたノード要素を復活させて、

<rdf:Description
  rdf:about="http://diary.noasobi.net/2005/08/diary_050810a.html"
  ...>
  <foaf:maker>
    <foaf:Person foaf:name="のり">
      <foaf:holdsAccount>
      ...
      </foaf:holdsAccount>
    </foaf:Person>
  </foaf:maker>
</rdf:Description>

……とすればよさそうです。

* * *

あと、おのひろきさんが書かれていたRDFについてなのですが、ソースの概要を書くとこんな感じになっていました。

<rdf:RDF ... >

  <rdf:Description rdf:about="http://onohiroki.cycling.jp/"
    ... />

  <foaf:maker rdf:parseType="Resource">
    <foaf:holdsAccount>
    ...
    </foaf:holdsAccount>
  </foaf:maker>

</rdf:RDF>

rdf:Description要素が空要素になっており、それと別にfoaf:maker要素が独立して書かれているので、リソースのURIと作者との関連が外れた状態になっています。rdf:Description要素でfoaf:maker要素を囲うようにした方がよいように思います。

※ ちなみにこの記述だと、rdf:parseType属性が書けない位置に書かれている、ということでパースエラーになるようです。

* * *

……といったことをここ最近考えていたのですが、自分自身RDFに関してはまだあまりよく知らない状態なので、間違いがありましたらご指摘頂けると有難いです。

参考リンク