昨夜のメモで「人物のURIを記述するなら、ホームページなどのネットワーク上に実際に存在するリソースのURIではなく、何か別のURIを用いる必要がある」と書いたのは、RDFだからどうだということではなく、ウェブのアーキテクチャの基本的な問題だ。RDFやセマンティック・ウェブを意識しなければ別にいいでしょ、というものではないので、ここはよく理解しておきたい。
(1) Dublin Coreのcreator
は作者 (An entity primarily responsible for making the content of the resource
)を示すものである;(2) link
要素は、ウェブ文書がhref
属性値URIが示すリソースに対して、rel
属性値が示すタイプ(関係)のリンクを持つことを表す;この2つの帰結として、link rel="dc.creator"
と書いたら、href
の値は「作者を表すURI」となる。これはRDFとして解釈するかどうかを問わず、Dublin Coreと(X)HTMLのセマンティクスが定めていることだ。
ここで出てくるのが、「作者のホームページ」や「ユーザ情報ページ」のURIを人物を表すURIとして代用したっていいのでは、という考え方だろう。しかしこれは、Architecture of the World Wide Web, Volume OneがURIの衝突 (URI collision) と呼んでいる問題に陥る。
By design, a URI identifies one resource. Using the same URI to directly identify different resources produces a URI collision. Collision often imposes a cost in communication due to the effort required to resolve ambiguities.
(2.2.1. URI collision)
さらに、先日も紹介したhttpRange-14問題についての結論の1番目は、
、と述べている。サーバーがhttp
リソースがGET
リクエストに対して応答コード2xx
を返したら、そのURIで識別されるリソースは“情報リソース”である200
を返す、すなわちネットワーク上に実在する(取得できる)リソースのURIは、人物を表すものとしては適切とは言えないのだ。
とは言っても、(X)HTMLのlink
要素で作者情報を示すのに、そのリンク先がNot Foundでは役に立たないではないか、というのももっともな話だ。ではどうすればいいか。
ひとつの方法は、サーバーによるリダイレクトだ。httpRange-14の解決策の2番目にあるように、作者を表すURIに対してリクエストを受けたら、サーバーが応答コード303
でホームページなり作者情報ページのURIを返してやれば、link
要素をブラウザがたどったとしても有益な情報が得られ、かつURIの衝突は生じない。
もう一つは、「作者」を表すdc:creator
ではなく「作者のホームページ」を表す独自のプロパティ(スキームとrel
属性値)を定めて、そのhref
としてホームページURIを指定する方法だ。これはlink
要素でrev="made"
としてhrefにメールアドレスを記述するのと同様の考え方になる。これならば、URIは「作者を間接的に特定する」ものとして機能し、やはりURIの衝突は生じない。
href
の値を、http:
リソースではなく純粋なIDとしてのURI(urn:pin:
など)にするのでも、もちろん構わない(その場合、ブラウザはリンクを直接は利用できないが)。いずれにしても、ウェブの基本的な約束を踏まえた上で、意欲的な新提案が出てくるのが、みんなにとって望ましいことであるはずだ。
- 自分のURIを持とう:バーナーズ=リー推奨版 (2006-01-26)
- FavikiとタグとDBpedia (2008-05-28)
- 作者を表すURIとホームページのURI (2005-07-23)
- httpRange-14あるいはhttp:型URIの適用範囲 (2005-06-22)