URI

URI

[36] URI (Uniform Resource Identifiers, 統一資源識別子) は、資源識別するための統一的な仕組みです。 簡単に言えば、色々なものに名前を付けるための仕組みです。 あるいは、その仕組みによる識別子をも URI と呼びます。 また、文脈で意味が曖昧でない場合には、識別子によって参照される資源のことすらも URI と呼ぶことがあります。

[37] 従来の情報システム・計算機システムは、 それぞれで資源を識別する仕組みや番地付けの仕組みを持っていました。 しかし、それらはあくまでそれぞれのシステムの範囲内でのみ有効な識別子システムでした。

ところが、1990年頃 TimBL が発明した WWW では、番地付けのために URI を採用しました。 URI は URI scheme によって命名システムを識別し、 URI scheme ごとにその中で更に具体的な資源を識別するという構造を持っています。 そのため、従来の情報システムの識別子を URI scheme として再定義することによってあらゆる資源を統一的に扱うことに成功したのです。

参考: そのような設計が採用された背景には、 当時様々な情報システムが提案されて割拠していたことがあります。 WWW は HTTP だけではなく、それら他のシステムも URI によって取り込むことで魅力的な情報システムになったのです。

[38] URI で識別される資源は、何も計算機で表現できるものに限りません。 urn:isbn: URI を使えば ISBN によって書籍を識別することができます。 物理的に存在するもの以外でも、 言葉や抽象概念などありとあらゆる資源を識別することが可能です。

[39] URI が元々 HTTPHTML番地付けのために使われてきたことから、 単にネットワーク資源の位置を表す住所のようなものと考えられることがよくあります。 しかし、 >>38 のように URI はネットワークで取出すことができないものであっても識別できます。 Webブラウザで画面に表示することはできないかもしれませんが、 それだけが URI の役割ではないのです。

URI の定義

[2000]URI」という言葉の定義は、URI を定義する仕様自体でも歴史的に変化していますし、 URI を参照する様々な仕様でも様々な意味に用いられています。 仕様内でもそうなのですから、それ以外の世界ではその意味は全く安定していないといっても過言ではありません。

[2001] 最も大きな定義上の混乱の1つは、 URIURI参照の違いです。 最新の URI の定義である RFC 3986 によると、相対参照URI参照ですが、 URI ではありません。その前の RFC 2396 の定義によると、素片識別子を含んだものは URI参照ですが、URI ではありませんでした。 仕様書以外の場面 (や多くの関連仕様!) では、「URI」というと URI参照を指すことが多くあります。 これらについては URI参照素片識別子の項をごらんください。

[2002] もう1つの最大の混乱は、利用可能な文字の種類に関するものです。 URI で本来認められない ASCII文字や、IRI では認められる非ASCII文字の扱いをめぐって、 多くの仕様がいろいろなものを「URI」と呼んでいます。 詳しくは IRI の項をご覧ください。

[2003] 前述の2つに比べれば細かい話ですが、 URI の構文や相対参照解決の方法は新しい仕様書が発行される度に変化しています。 特に最新の RFC 3986 とその1つ前の RFC 2732 あるいは RFC 2396 との関係は、 どちらがどちらの部分集合でも超集合でもありません。 URI を用いる色々な仕様がそれぞれ異なる版の URI を参照しており、 通常そのような仕様が多数組み合わせて用いられるので、 厳密に解釈すると URI の扱いは非常にややこしいことになります。

古い用語・概念

[42] URI 関係の古い用語:

[49] RFC 1868における定義:

URI
A Uniform Resource Identifier is a formatted string that serves as an identifier for a resource, typically on the Internet. URIs are used in HTML to identify the anchors of hyperlinks. URIs in common practice include Uniform Resource Locators (URLs)[URL] and Relative URLs [RELURL].

(名無しさん [sage])

[50] >>49 について、この定義ではURNURIに含まれていないのではないかと指摘する人がいますが、単にURLURIに含まれていることを述べているに過ぎず、URN (やURCやその他の何か) については何も言及していないと解釈するのが適当だと思います。 (名無しさん)

[55] fragment identifiers from Roy T. Fielding on 2002-07-23 (www-tag@w3.org from July 2002) <http://lists.w3.org/Archives/Public/www-tag/2002Jul/0253.html> (名無しさん)

  • [16] URI の標準化はかなりいい加減で混乱気味の上に W3C/Martin Durest は IRI を進めていて、それも SP を認めるとか # もどうとか無茶苦茶なこと言ってたし、混乱は当分収まりそうにない。
  • [19] RFC 2396 は、絶対 URI だけを URI としており、相対 URI や素片識別子がついた URI も含めた名称を URI 参照としています。 (旧版の RFC 1808 も含めて) 旧来の仕様や慣習では絶対 URI と相対 URI の両方を URI と言っていましたし、素片識別子も仕様書には URI の一部ではないと書いてあるけど実際には曖昧に使われていた (古い URI 仕様書まで遡るとこちらも曖昧だった) という歴史的経緯がありまして、単に URI とだけ言われると厳密には何を指しているのだかわかったものではありません。たまに論争の火種になります(w
  • [20] XML 関連仕様書は URI という名前で IRI を指していたり、「URI と解釈されるもの」というわけのわからんのがでてきたりしますから混迷極まり (XML//URI 参照)。
  • [21] あと目立たないけど注意しておきたいのは、空文字列。 RFC 2396 的には URI 参照の一種ですが URI じゃないですし、相対 URI でもないかもしれません。 RFC 1808 から意味が変更されたものですから解釈は実装依存になってしまう。その上使えるかどうかは採用する規格に依存。 (URI 参照を使うと書かれている規格でも、よく見ると字数制限1文字以上で使えなかったりする。)
  • [22] 2396bis ではまた変わるみたいです。。。

標準化

[41] URI.NET <http://uri.net/>

ちょっと古いしちゃんと管理されていないみたい。 (名無しさん 2005-03-11 03:40:22 +00:00)

仕様書

.//仕様書参照。

構文とその意味に関して

Scheme

[1] URI の構造は、大きく scheme (識別方式), authority (命名権者), path (経路), query (照会), fragment (素片識別子) の5つに分けられます。

このうち、 schemeauthority, path, query の詳細な構文と意味を決定します。

URI では様々な scheme が定義・利用されています。 それぞれの URI scheme はその構文と、 誰が識別子を作ることができるのか、 その識別子がどんな意味を持つのか、 色々なプロトコル書式でどんな風に使うことができるのかなどを規定しています。

[2] このように URI scheme はそれぞれ独立した識別子の空間を作っています。 この独立性により、新しい資源の識別方法を URI に取り込むことが可能になっています。

[3] 詳しくは URI scheme の項をご覧下さい。

素片識別子

[6] URI の5大部品の一つが素片識別子 (fragment) です。素片識別子以外の URI が識別した資源の一部分・一表現を、 素片識別子は更に細かく識別します。

素片識別子は URI の一部ではないなどと呼ばれていた時代もありましたが、 現在では URI の一部分と考えられています。

[18] 詳しくは素片識別子の項をご覧下さい。

相対参照

[8] URI (絶対URI参照) は URI scheme の名前から始まり、一つの資源を識別するべく説明を加えていきます。 例えば http://www.example.com/foo/bar/baz は特定の baz という資源を識別するために、 http: URI scheme を使うこと、 命名権者www.example.com であること、 その中の foo の中の bar の中の baz が識別したい資源であることを順次説明しています。

しかし、このような説明は冗長なことがあります。 http://www.example.com/foo/bar/hoge が自分と同じ階層に存在する baz を指すためにわざわざ http: からはじめるのは面倒ですし、 不便なことも色々あります。

そこで、 URI の相対参照 (relative references) という表現が規定されています。 例えば baz が相対参照です。 ただし、 baz だけでは URI (絶対 URI 参照) ではありません。 http://www.example.com/foo/bar/hoge という文脈の情報 (基底URI (base URI) と言います。) があって始めて http://www.example.com/foo/bar/baz という URI (絶対 URI 参照) に解決 (resolve) されます。

参考: もし同じ相対参照 baz でも基底 URI が http://example.net/foo なら、 http://example.net/baz に解決されます。

[7] 詳しくは相対参照の項をご覧下さい。

安全性

[9] (TBW)

利用可能性・利用者親和性

[10] (TBW)

[47]

Martin
URI は元々人間が見るものじゃなかったんすよ。 <mid:6.0.0.20.2.20051107184759.06dd4750@localhost>
RoyF
んな阿呆な。 <mid:2f1b97034b715561e35a2b370ec13d19@gbiv.com>
Martin
いやね、 TimBL の旦那がそう言っとりましたよ。 1990年とかそこらの話だと思いやすけど。 <mid:6.0.0.20.2.20051108185959.06a21ec0@localhost>

(名無しさん 2005-11-10 08:39:02 +00:00)

[48] >>47 確かにそんなこと Tim が言ってたのを www-talk かどこかで見た記憶がある。

[61] スラッシュドット ジャパン | ユーザーの意識からURLが消滅する日は近い? <http://slashdot.jp/article.pl?sid=06/10/17/1950226&from=rss> (名無しさん 2006-10-20 00:27:03 +00:00)

設計

URLの決め方

知的財産権

著作権

[23] あまり意識されることはありませんが、 URI である文字列に対して著作権が主張される可能性があります。 単に資源の位置を表すに過ぎない URL 的な URI の類が著作物足る要件を満たすとは考えにくいですが、 ほとんどあらゆる種類のものが URI として表現し得ます。 特に、

のようなものは、著作物が URI の一部として入り込む可能性が高いといえます。 任意のデータが data: URI にした途端著作権が消滅するのはおかしいですから、 著作物たる data: URI が存在することは間違いありません。 また、 Bookmarklet などは創作性が高いと考えられますから、 簡単なものを除いて著作物だとの主張が認められる可能性が高いと思われます。

もちろん、百分率符号化などの仔細な表現上の違いは著作権が存在するかどうかの議論とは無関係です。

[24] URI が著作物足り得るかどうかの議論は、 ハイパーテキストにおけるリンクの自由性にも関わってきます。

[25] URI に著作権は及ばないという主張の例:

[31] URI に著作権が及ぶという主張の例:

[63] 葉っぱ日記 - ぼくはまちちゃん!(Hatena) - urlのポエム化 (2007-01-17 09:25:44 +09:00 版) <http://d.hatena.ne.jp/hasegawayosuke/20070117/p1> (名無しさん 2007-01-17 00:28:09 +00:00)

商標権

[40] URI として使用する文字列の一部が商標としてみなされることがあります。 特に URI に一部としてよく使われるドメイン名は頻繁に商標に関する係争が発生しています。 ドメイン名に限らず、商標を根拠に商標権者が URI の使用者に使用しないように主張する可能性があります。

応用

[51] プログラム言語EではURIが言語の構文に組み込まれている。

URI Expressions <http://www.erights.org/elang/io/uri-exprs.html>

(名無しさん [sage])

[52] 他にURIを積極的に言語そのものに取り入れたプログラム言語といえばWMLScriptがある。 (名無しさん [sage])

関連

URI もどき

[5] URI が使われる文脈で使われる、 URI でない (又はなさそうな, あってほしくない) ものたち

  • emacs-w3m
    • eiwa:, kokugo:, CODE[waei: に続けて語句を指定すると、その語句を辞書で検索する。
  • IRI ・・・URI の多文字拡張
  • SuikaWiki の URI もどき
    • IMG: (case-sensitive) 画像参照。
    • IW: (case-sensitive) InterWiki の接頭辞。 See <IW:SuikaWiki:InterWiki>
    • MAIL: (case-sensitive) 電子メイルの宛先。
    • 詳細は SuikaWiki/0.9 仕様書を参照。 これらは URI ではありません。
  • URL: URL の前につける。例: <URL:http://foo.example/>

[53] ResourceUtils (Spring Framework) <http://www.springframework.org/docs/api/org/springframework/util/ResourceUtils.html>

Javaパッケージを表すclasspath: pseudo URLがある。

JavaクラスのためのURI schemejava:など他にも複数ある。
2008年12月現在、 404

既存の識別子との関係

[43] URIURI を意識せずに作られた識別子体系でもそのまま取り込んでしまうことができます (もちろん相性のようなものはありますが)。 既に色々な識別子URI として使う方法が定義されています。

[44] 色々な識別子の体系を URI 1つにまとめると、 何かしたいときに各識別子体系それぞれに対してその方法を考える必要がなくなります。 例えば引用文献を記述する時に、引用する文献が Web頁 (URI) でも紙の書籍 (ISBN) でも両方 URI として扱えると便利になることがあります。 あるいは連絡先がインターネット電子メイル (電子メイル・アドレス) でも従来の電話 (電話番号) でも統一して扱えたりもします。

[45] 既存の識別子と URI の対応

既存の識別子体系URI備考
出版物
ISBNurn:isbn:
ISSNurn:issn:
公開識別子urn:publicid:
RFCurn:ietf:rfc:
ネットワーク番地
電話番号tel:
FTPftp:
インターネット電子メイルmailto:
ニュース組news:
チャットチャンネルirc:
言語・文化
言語札urn:x-suika-fam-cx:lang:
その他
UUIDurn:uuid:

[54] UriTesting - ESW Wiki <http://esw.w3.org/topic/UriTesting>

[62] Index of /uri (2007-01-05 15:38:16 +09:00 版) <http://skew.org/uri/> (名無しさん 2007-01-05 06:39:54 +00:00)

メモ