SummerWind

Web, Photography, Space Development.

URIとURLの違いとは?

以前からURIとURLの違いを「URLはURIの部分集合である」程度にしか理解できていなかったのですが、今日その違いについてきちんと調べる必要があったので、ようやく自分なりに違いを理解することができました。

URIとは

URIとはUniform Resource Identifierの略で、RFC 3986で規定されています。そこで実際にRFC 3986を見てみると、1.1.3. URI, URL, and URNにURIとURLの関係が書かれています。

A URI can be further classified as a locator, a name, or both. The term "Uniform Resource Locator" (URL) refers to the subset of URIs that, in addition to identifying a resource, provide a means of locating the resource by describing its primary access mechanism (e.g., its network "location").

これはつまり、URLはURIの部分集合であり、リソースの場所を示すものであるとしています。したがって、URIもリソースの場所を示すものであると考える事ができます。では、URIとURLは一体どこが違うのでしょうか。上で示した行の続きに次のように書かれています。

The term "Uniform Resource Name" (URN) has been used historically to refer to both URIs under the "urn" scheme [RFC2141], which are required to remain globally unique and persistent even when the resource ceases to exist or becomes unavailable, and to any other URI with the properties of a name.

つまりURLの他にURNというリソースの名前を示すものがあり、これもURIの部分集合であるということです。

URNとは

ここで、URNって何よ?と思ったので調べてみたところURN (Uniform Resource Name) について– ごく簡単なHTMLの説明で分かりやすく説明されていました。この説明によるとURNはUniform Resource Nameの略であり、urn:スキームを用いてリソースの名前を示すことができるとのころです。例えばCSS Zen Garden Bookをuri:スキームとISBN番号を用いて示すと次のようになります。

urn:isbn:4-8399-1796-5

このようにurnスキームを用いて名前を記述することで、リソースを特定できるというわけですね。URLと同様にURNもURIの部分空間ですから、上のURNもURIと言えるわけです。

まとめ

以上の事から、URIはURLとURNを含む言葉であり、リソースの場所や名前を示すものだと分かりました。また、URLはURIのうちの主にリソースの場所を示す部分集合であるということも分かり、URIとURLの違いを理解できました。よって、リソースを識別するための言葉として用いるならば、より上位に位置するURIを用いたほうが適切ではないかと思います。

微妙にまとまっていない気もしますが、とりあえずは理解できたということで。なお、解釈の間違いなども有り得ますので、ツッコミ等も募集中です。

追記

特にこのエントリーに関しての反応は期待していなかったのですが、.rest//星火燎原 – よく分かんないけど、モヒカンじゃないからどっちでもいいやがよくまとまっていて分かりやすいので紹介。「URIを用いたほうが適切」と書いたのは、単純にURLとURNの両方をひっくるめて扱えるからという理由からです。実際はURNなんて滅多に使わないし、URLという名称を使う人も多いので、それぞれ言葉の違いをきちんと理解した上で好きな言葉を使えばいいとは思いますけどね。

Moto Ishizawa

Moto Ishizawa
プラットフォームエンジニア。HTTP/2 などのネットワークプロトコルや、サーバーサイド JavaScript などに強い興味を持つ。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。