ちょっとしたメモ

httpRange-14あるいはhttp:型URIの適用範囲

http:スキームのURIは、ウェブサーバーから取得できるリソースであるべきか、それとも任意のリソースを識別する役割を与えて良いのか―W3CのTAGで議論されてきた難題、いわゆるhttpRange-14に、一応の解決策が示された。URIの示すサーバーが返す結果コードによって、URIのリソースを解釈しようというものだ。

httpRange-14は、バーナーズ=リーが2002年にHTTP URIs (without "#") should be understood as referring to documents, not carsとしてTAGに提起した(起源はもっと古い)、URIの適用範囲を巡る問題。RDFでは、URI参照(URI+オプションの#フラグメントID)でリソースを識別するが、「人」や「作者」といったネットワークで取得できないリソースの場合、http:スキームの「URI本体」(#以下を含まない)のみで表現することが適切かどうかという議論だ。人間にURIを与えるとか、Musical Batonはファイルなのかといった話とも通じる問題でもある。

例えば、FOAFのPersonクラスは、次のように#を含まないURIで名前付けされている。

http://xmlns.com/foaf/0.1/Person

これは、このURIにアクセスしてリソースが取得できるようではないか。バーナーズ=リーは、URI本体はウェブページ(あるいはそれに準ずるリソース)を識別すべきだと主張する。そうでないとURIの意味が曖昧になったり、エージェントが混乱してしまう。

これに対し、たとえばWordNetのような何万ものクラス(リソース)を扱う語彙の場合、URI本体をスキーマファイルとしてその中に全てのクラス定義を列挙するのは非現実的なので、#を用いない形のURIの方が望ましいという意見もある…。長い議論の詳細は割愛するとして、今回のTAGによるhttpRange-14の解決策は次のようなものだ。

"http"リソースがGETリクエストに対して

  • 応答コード2xxを返したら、そのURIで識別されるリソースは“情報リソース”である

  • 応答コード303(他を見よ)を返すならば、そのURIで識別されるリソースは、どんなリソースであってもよい

  • 応答コード4xx(エラー)を返したら、そのURIで識別されるリソースは未知(unknown)である

foaf:Personのように#を含まないURIであっても、GETに対して303でスキーマ文書や説明ページにリダイレクトしたり(つまりリソース自身のURIと、UAがGETリクエストで取得するリソースのURIを分離する)、404などのエラーを返せば(つまりそのURIではUAは情報リソースを取得できない)、「人」や「作者」などを識別=名前付けするものとして使えるというわけだ。この解決策に対して、FOAFの語彙を管理しているDan Brickleyは、次のように答えている。

OK, this seems like nice progress. I'll fix the FOAF namespace to avoid 200 for RDF terms, for now. I think it might be possible to agree that RDF terms are a sort of information resource, but that's a separate debate, and one I'm happy to have on a more relaxed schedule.

情報リソースを巡ってまだいろいろがありそうだが、これで多少すっきりするかな。

なお、ここで議論されているのはhttp:スキームのURIの場合だけで、tag:のような名前解決を前提としないURIの場合は、こういうややこしい話は生じない。また、URI本体とフラグメント識別子を含むURI参照とは別物なので、たとえばhttp://example.org/termsへのリクエストが200を返したとしても、http://example.org/terms#Carで車を識別することは、メディアタイプが適切ならば問題ないとされる。

※注)ここでいう情報リソース(information resource)とは、Architecture of the World Wide Web, Volume Oneの 2.2. URI/Resource Relationships で次のように述べられているリソースを指す。

By design a URI identifies one resource. We do not limit the scope of what might be a resource. The term "resource" is used in a general sense for whatever might be identified by a URI. It is conventional on the hypertext Web to describe Web pages, images, product catalogs, etc. as "resources". The distinguishing characteristic of these resources is that all of their essential characteristics can be conveyed in a message. We identify this set as "information resources."

つまり、一般にウェブのリソースと称してきたものを「ネットワーク上のメッセージを通じてその主要な性質の全てが伝達できるリソース」と定義し、“情報リソース”と呼ぶわけだ。

関連メモ: