ハトネコエ Web がくしゅうちょう

プログラミングとかAndroid

URI, URL, URN とは? 違いは?

例えば JavaScriptメソッドにこういうのがあります。

console.log( encodeURI("http://ドメイン.com") );  // "http://%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3.com" と出力される

URI 形式に直してくれる encodeURI メソッドです。

また、Android のプログラミングでは URI オブジェクトが存在します。

URI という言葉に謎を残しつつも URL と同じものと考え頭で処理していたのですが、
URN というものがあることを最近知って、いよいよ気になってきましたので
ちゃんと調べてみることにしました。

参考 : URN (Uniform Resource Name) について-- ごく簡単なHTMLの説明
以下は、この参考記事を読んで自分なりに理解したことを
ざっくりと書いているものですので、しっかり知りたい方は上の参考記事をご覧ください。

1. URI = URL + URN

まず、URI について。
URI には2種類あります。
それが、URLURN です。

両者の違いはこのあとで説明するとして、
ふつう私たちが想像する URI は URL の方です。
URN の表現形式をすぐに想像したらなかなかの変態です。

この URI は、インターネット上にあるファイルの場所を示すための文字列です。
URLURN では、その表現方法が明確に変わっていきます。

ちなみに Wikipediaさんによると
Uniform Resource Identifier の略で、日本語に直すと『統一資源識別子』だそうな……。謎の日本語だ。

2. URL は相対的な場所

URL はご存知の通り、Webブラウザに打ち込むアレです。
http://, https://, mailto://, ftp://, などなど、いろんなプロトコルがありますね。

例えば http://mycompany.com/about.html にあった about.html を、
hello ディレクトリの下に置いたとしたら、そのファイルにアクセスする URL は
http://mycompany.com/hello/about.html と変わります。

URL はこのように、サーバー内でどこにあるかの位置を示す文字列です。

Uniform Resource Locator の略で、日本語に直すと『統一資源位置指定子』だそう。もっといい訳し方なかったんですか……。

3. URN はファイルにIDを与える考え方

URN は Uniform Resource Name の略です。

URL では、ファイルの位置によって URI文字列が変わっていましたが、
これはどの位置にファイルがあっても URI文字列の変わらない形式です。
そのために、インターネット上のファイルにIDを与え、そのIDを使用して URI 文字列を作ります。

URI 文字列は例えば以下のようになります。
urn:namespace:the:id:for:file

urn: から始まるのがポイント。もしかしたら、Google の OAuth2 認証関連で
urn:ietf:wg:oauth:2.0:oob という文字列を見たことがある人もいるかもしれませんね。

これは urn:ietf とある通り、IETF という機関が、そのファイルの存在と場所を保証してくれている URN となります。
見方はよくわかりませんが、実際に、IETF が管理してる wg/oauth の記事群も確認できます。

もしかしたら昔はこの文字列でWebブラウザからアクセスできるようにする構想もあったかもしれませんが、
現在のブラウザはURLにしか対応していませんね……。

というわけで、ざっくりとですが、
URI, URL, URN の違いについての説明でした。