続々 Hatena ID Auto-Discovery

RFC: 続・Hatena ID Auto-Discovery の仕様 から引き続き Hatena ID を HTML に埋めこむという話。前回のエントリーでは、http://www.hatena.ne.jp/user/naoya など、ブラウザからアクセスしたときに 2xx を返さない URI を用意してきつつ、

<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
<link rel="DC.creator" href="http://www.hatena.ne.jp/user/naoya" />

と HTML に追記するというのでどうだろう、という提案だったのですが、コメントや id:tociyuki さんとのやりとりで上がって来たのが、DC.creator に複数のアカウントを定義したい場合はどうだろう、という点です。はてなのID以外に、例えばココログのアカウントを結びつけるとして、

<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
<link rel="DC.creator" href="http://www.hatena.ne.jp/user/naoya" />
<link rel="DC.creator" href="http://www.cocolog-nifty.com/user/naoya" />

としたとき、その文章を書いているのは伊藤直也という一人の人間なのに、dc:creator ではそれが

  • 一人で2つのアカウントなのか
  • 二人による共著なのか

の表現ができないという話。というよりも併記した場合は共著とみなされるのが Dublin Core の解釈なのではないかという点です。これは確かにその通りです。(これでも技術的には URIドメインでフィルタして自分に必要な情報だけを取得することはできますが。正規表現で hatena.ne.jp でアカウント表記っぽいところを引っ張ってくるとか。) また、id:tociyuki さん曰く RDF 的に考えた場合に少し微妙だ とのことでした。

そこで、dc:creator は使わずに

<link rel="hatena.schema" href="http://www.hatena.ne.jp/hatenans#" />
<meta name="hatena.id" content="jkondo" />

はどうか? と id:tociyuki さんや id:jkondo が提案しています。しかし、先の dc:creator + link の例でもそうなのですが、アカウントを管理しているサービス業者側が名前空間URIを用意しない限り、そのユーザーはメタデータとしてそれお埋め込むことができないという弱点が残ります。

  • 先の例では 303 リダイレクションを行う、自分角 URI と見立てた URI
  • 後の例では名前空間URI

を用意しないといけません。つまり、ココログのアカウント名を書きたくてもココログが対応した URI を定義してくれないといけない、ということになります。それよりは、自分のオンラインアカウントをメタデータとして自由に埋め込める方式の方がいいな、と思うようになりました。

二転三転な感じですが、そこで dc:creator の中身を FOAF にしてオンラインアカウントを表現するという方法を id:tociyuki:20050726:1122376587 にて教えてもらいました。

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns="http://xmlns.com/foaf/0.1/">
<rdf:Description rdf:about="http://tociyuki.cool.ne.jp/hoge.html">
  <dc:creator>
    <Person>
      <holdsAccount>
        <OnlineAccount>
          <accountServiceHomepage
            rdf:resource="http://www.hatena.ne.jp/"/>
          <accountName>naoya</accountName>
        </OnlineAccount>
      </holdsAccount>
    </Person>
  </dc:creator>
</rdf:Description>
</rdf:RDF>

といった具合です。この場合 HTML に RDF を埋め込むことになり Trackback Auto-Discovery と同じようにこれをコメントアウトする必要があります。

FOAF RDF + コメントという上記の方法では、特にサービス業者が URI を定める必要なく、自由にアカウントを記述していけそうです。(accountServiceHomepage のプロパティの値の URI をどう決定するか、というところに若干のあいまいさがありますが、サービスのトップページにしておけば問題なさそう。)

dc:creator の中身を一度 Person でくくって、その中にアカウントを記述していくので、たとえば一人でアカウントを2つもっていても一つの dc:creator 要素で済みますし、最初の問題点も回避できます。

あとは、Trackback Auto-Discovery のように RDF をコメントとして埋め込むのをよしとするか、というところですが、そこをちょっと調べています。

投げ銭システム(ポイント送信機能)はほぼ9割型できあがっていて、Auto-Discovery の仕様が固まれば、それをハンドリングするモジュールの実装を変更するだけでリリースできる段階にあります。なんとか早めに仕様を固めたいところです。

以下、追記。

TrackBack Technical Specification から引用。

TrackBack clients need a method of determining the TrackBack Ping URL for a particular URL or weblog entry. Server implementations should include embedded RDF in the pages they produce; the RDF represents metadata about an entry, allowing clients to auto-discover the TrackBack Ping URL.

(snip.)

Note: because current validators choke on RDF embedded in XHTML, if you want your pages to validate you may wish to enclose the above RDF in HTML comments:

    <!--
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    ...
    </rdf:RDF>
    -->

This is not a perfect solution, but it works as a temporary fix.

The dc: elements are standard Dublin Core elements; the trackback:ping element comes from the TrackBack Module for RSS 1.0/2.0 at http://madskills.com/public/xml/rss/module/trackback/

"This is not a perfect solution, but it workds as a temporary fix." だそう。これをよしとするかどうか、ってとこですね。