熊本大学大学院教授システム学専攻
目次:
【第8回】URIとサーバ:SCP,FTP
第1章
第3章
第4章
現在の場所: ホームページ > [2]HTMLとCSS > 【第8回】URIとサーバ:SCP,FTP > 第4章 > 絶対URIと相対URI

絶対URIと相対URI

【本節の目的】
相対URIとは何か、そしてどんな特徴があるのかなどについて学習します。

相対参照と絶対参照では、どちらが便利?

相対参照に対して、皆さんは、以下のように感じていませんか?

  • 「./」や「../」など、抽象的な表現があって分りにくい
  • 起点フォルダ (注目しているフォルダ) によって、 対象となるファイルの参照名が変るので面倒

確かに、ファイルを絶対参照により特定すると、 表現が一通りしかないので、気持としてはスッキリしますね。 しかし、常に / (ルートディレクトリ) から、 対象となるファイルが格納されているところまでの フォルダをすべて書く必要があるので、 参照名が長くなりとても大変です。 常に、絶対参照でファイル名を表現することを想像すると、 いやになりませんか?

ところで、ファイルを操作するときには、 「今編集しているファイルと同じフォルダにあるXXXXというファイル」 とか、 単に「YYYYと言うファイル」などと、よく言っていませんか。 これでファイルが特定できているということは、 「常に着目しているフォルダがあり、そこを起点として相対的にファイルを見ている」 ということになります。 つまり、相対参照の方が多くの場合、自然な表現方法なのです。

皆さんは会話するとき、「隣町のパン屋さん」とか「9丁目のパン屋さん」 と言うのが普通で、 いつも「日本国熊本県熊本市黒髪9丁目のパン屋さん」とは言ったら変でしょう。 これも同じで、我々は日常的に相対的な呼び方をして、 きちんと一つを特定しており、こちらの方が一般的なのです。

また、相対参照しておくと、 着目しているフォルダ近辺の構造しか関係ないため、 上位階層のフォルダ名やフォルダの構成が変っても、 参照名の変更の必要がないことが多くなります。

例えば、何度も出て来た下図で、「w05」を「week05」に、また、 ソフトクリームのex1.htmを含むフォルダ名を「test」から「ice」に変更すると、 ソフトクリームのex1.html の参照名はどうなるでしょうか。

仮想世界1

熊太郎から見た相対参照では、「./ex1.html」のままで変りませんが、 絶対参照では、「/public_html/w05/test/ex1.html」から 「/public_html/week05/ice/ex1.html」に変ってしまいます。

この「相対参照で表記しておくと、 フォルダ構成等の変更による表記のへ影響が少ない」という特長は、 WWWサーバ上にWebページを構築していくとき、非常に有用になります。 それは、以下の理由からです。
一般的にWWWサーバ上には沢山のフォルダがあり、 事情によって、フォルダ名の変更やフォルダ構成の変更が行なわれます。 そのようなときに、 もし、HTMLファイル中に記述されいる参照ファイル名が絶対参照名であれば、 すべて変更しなければならなくなるからです。 そんなことは、誰もしたくないですよね。

ですから、みなさんも早く相対参照に慣れておいてください。 そうすれば、不必要な作業を強いられないようにになります。

(註) ただし、以下のような場合は、絶対参照の方が便利ですので、 必ず相対参照しなさいと言うわけではありません。
  • 現在着目しているフォルダから、 かなり離れているフォルダ内のファイルの参照
    この場合は、絶対参照した方が表現が短くなることがあります。
  • その時点では、まだ着目すべきフォルダが決まっていないとき
    このような時は、まず絶対参照で、 着目するフォルダを決めてから、次の動作に移る場合が多いです。

絶対URIと相対URI

これまで、絶対参照について、 「表現が一つしかない確実な特定方法である」と説明してきました。 ただし、良く考えてみるとこれは、一つのWWWサーバ上での話です。 もし、別のWWWサーバが同じフォルダ構成で、 同名のファイルが全く同じように格納されていたら、 この2つのサーバで統一的にファイルの特定ができるでしょうか?

できます!! それは、ファイルの絶対参照と同時に、 注目する(対象となる)WWWサーバ名を指定すれば良いのです。

「あれ?これはどこかで使ったことがあるぞ」と、思いませんか? そうです、これが、「URI」なのです。URIは、 インターネット上のリソース (ファイル) を特定する記述方法ですが、 実は、先週から説明してきた絶対参照の拡張版だったのです。 (ただし、URIは更に拡張されていて、http に代表されるリソースを取扱う手順も、 規定していますね。)

URIの形式を思いだして下さい。

URI

実は、「サーバ部」が(WWW)サーバ名を表わし、 「パス部」が対象となるファイル (リソース) を絶対対参照で表記しているのです。 「/kiss/G/top.html」が、絶対参照表記であることは、 今の皆さんには理解できますよね。

URIは、Webブラウザのアドレスバーに直接書いたり、 HTMLの a要素のhref属性値としてリンクを張るのに利用しますね。 例えば、a要素のhref属性の値として、以下のように記述します。

 <a href="http://www.kumamoto-u.ac.jp/kiss/G/top.html"> 熊大学生のページ </a>

ところで、a要素のhref属性の値として、以下のように記述することもできましたね。

 <a href="./top.html"> 熊大学生のページ </a>

例えば、上のa要素が、 (絶対参照で)/kiss/G というフォルダにあるHTMLファイルに記述されているのであれば、 相対参照された「./top.html」というファイルは、 絶対参照表記では、「/kiss/G/top.html」となります。 その上更に、上記のa要素が書かれているHTMLファイルが、 wwww.kumamoto-u.ac.jp にあるとすると、 「./top.html」という表記と、 「http://www.kumamoto-u.ac.jp/kiss/G/top.html」は、 全く同じ物(ファイル、リソース)を表わしていることになります。 (ただし、取扱い(スキーム)は http で行なうことを前堤としています。)

つまり、「./top.html」のように、 単にファイルを相対参照した表記も、 href属性値などのように、URI を書くべきところに記述すると、 URIと同じ働きをするのです。 そのため、 このように使われたファイルの相対参照表記を、 「相対URI」と呼びます。 それに対して、これまでURIと呼んできた スキーム、サーバ部、パス部からなる 完全なURIを「絶対URI」と呼ぶことがあります。

図を挿入する img要素でも、下記のようにファイルを指定してきましたが、 実はこれも相対URIなのです。

 <img src="./animation.gif" alt="アニメーション">

ところで、これまで相対参照について、 「注目するフォルダを起点とした相対的位置による参照」のように説明してきました。 その際、注目するフォルダは、あるWWWサーバ上のフォルダとしてきました。 それでは、相対参照を用いる「相対URI」で指定するリソース (ファイル)が、 別のWWWサーバ上のものも可能でしょうか?

答は、「NO」です。
「相対URI」は、あくまでも、 その相対URIが記述されているHTMLファイルを格納している、 同じサーバ上のファイルしか参照できません。 なぜなら、相対URIでは、WWWサーバがその (相対URIが記述されているHTMLファイルを格納している同じ) サーバであると、 既に規定されているからなのです。 それゆえ、WWWサーバ名を省略できるのです。
つまり、URIを記述しているHTMLファイルが格納されているWWWサーバ 以外のサーバ上にあるリソースは、 一般的なURI (絶対URI) で指定する必要があります。

ただ、相対参照と絶対参照の節で述べたのと同様に、 相対URIで表記できるものは、 できる限り相対URI表記をするようして下さい。 そうすれば、HTMLファイルがPC上にあろうがが、WWWサーバにあろうが、 表記を変え無くてすみますし、 ディレクトリ構造がある程度変っても、URIの記述を変えなくてすむかもしれません。

Copyright (C) Kenichi Sugitani 2005, All Rights Reserved