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

WWWサーバ上のファイルの特定

【本節の目的】
WWWサーバ上でのフォルダやファイルを一意に特定する方法として、 絶対参照と相対参照について習得します。

(註)今回のテキストは「情報基礎A・B」の環境(サーバ名:www.stud.kumamoto-u.ac.jp、アップロードするためのソフトウェア:FFFTP)で説明しています。「基盤的情報処理論」の環境とは異なりますが、説明する内容に変わりはありません。サーバ名やソフトウェア名は自分の環境に合わせて適宜読み替えてください。

絶対参照と相対参照によるファイルの特定

フォルダ名を指定しても目的のファイル(物)が特定できないという、 前章での問題を解決する方法として2つの方法があります。 それは「ファイル名」あるいは「フォルダ名」を、

  1. 絶対参照
  2. 相対参照

で記述する方法です。

絶対参照

「絶対参照」とは、 「必ず存在し、かつ、ただ一つしかない トップフォルダ 」 (「ルート ディレクトリ」という呼び名が一般的です)を起点として、 対象とするファイル (もしくはフォルダ)を含むフォルダの名前を、 ルートディレクトリから順につないで表現する方法です。 起点が一つしかありませんから、確実に対象を特定することができます。

この方法は、人の名前を呼ぶときに、単に「総情先太」さんと言うのではなく、 「日本国熊本県熊本市黒髪2-39-3に住んでいる総情先太」さんと言うようなことです。 つまり、単に氏名を呼んだだけでは、 熊本市黒髪2-39-3に住んでいる総情先太さんなのか、 大阪に住んでいる総情先太さんなのか区別できませんが、 上記のように指定すれば唯ひとりを特定できますよね。

それでは、具体例を見てみましょう。もう一度、先に示した図を示します。

2つのtest/t0.html

上図中の「だんごのt0.html」と「ソフトクリームのt0.html」を、 絶対参照で表わしてみると、次のようになります。

  • /public_html/w04/test/t0.html ← だんごのt0.html
  • /public_html/w05/test/t0.html ← ソフトクリームのt0.html

これで、「testフォルダにある t0.htm」では区別できなかった、 「だんごのt0.html」と「ソフトクリームのt0.html」 がちゃんと区別されているのがわかりますね。

たとえば、上の「だんごのt0.html」の絶対参照表記は、 「ルートディレクトリの下 (中) にあるpublic_htmlフォルダの、 さらにその下 (中) にあるw04というフォルダの下 (中) にある、 testt0.html」を表わしていることになります。 相対参照で記述した表記と上記の日本語を、 改めて表で対応させると以下のようになります。

絶対参照表記中の要素 意味
/ ルートディレクトリの下 (中) にある...
public_html/ public_htmlフォルダの下 (中) にある...
w04/ w04というフォルダの下 (中) にある...
test/ testというフォルダの下 (中) にある...
t0.html t0.html

ここで重要なのは、 まず、フォルダの階層の一番上にあるルートディレクトリの名前が「/」 であるということです。 これは、熊太郎が初めにこの世界に入ったフォルダ(部屋)と、 それに対応するFFFTPのサーバ側の図を再び表示してみるとわかりますが、 下図のFFFTPのフォルダ バーに 「/」が表示されています。 これが、トップのフォルダ (ルートディレクトリ)の名前を表わしているわけです。

初期ホームディレクトリ 初期ホームディレクトリ

そのため、 ルートディレクトリからのフォルダの関係をすべて表わす絶対参照の先頭には、 必ず「/」がつくということになるのです。 言いかえると、 「先頭に / のついている(フォルダ名を含んだ)ファイル名は、 絶対参照で表記されたものである」 と言うことになります。

次に大切なのは、先頭の「/」(ルートディレクトリ)以外の「/」は、 それぞれのフォルダどうしの区切りを表わしている記号であるということです。 また、意味的には、「/」の直前についているフォルダ名と一緒になって 「(あれこれフォルダ) の」とか「(あれこれフォルダ)の下の」 とかいう接尾語的な働きをしているということもできます。
ただし、ルートディレクトリを表わしている先頭の「/」とは、 明確に区別して下さい。

相対参照

それでは、もう一つのファイルの特定方法である「相対参照」とは どういうものでしょう?

「相対参照」とは、 任意のフォルダを起点として、 対象とするファイル (もしくはフォルダ)を含むフォルダの名前を 順につないで表現する方法です。

先に説明した「絶対参照」では、 熊太郎のいる世界全体を横から見てファイル名を特定していましたが、 「相対参照」では、熊太郎の目から見える様子だけで、 ファイルを特定することになります。

例えば、熊太郎が下図のように、 /public_html フォルダにいる状況を考えてみましょう。

初期ホームディレクトリ

この場合、熊太郎には以下のように見えているはずです。

初期ホームディレクトリ

つまり、熊太郎に見えているのは次のものです。

  1. 現在注目しているフォルダ (熊太郎のいる部屋) にある ex1.htmlファイル(ケーキ)
  2. 現在注目しているフォルダの下 (熊太郎のいる部屋の床下) にあるフォルダ(部屋)の入口(緑の星と紫の星)と、 それらの名前であるw04とw05
  3. 現在注目しているフォルダの上位 (熊太郎のいる部屋の天井の上) にあるフォルダ(部屋)の入口(赤の星)

このとき、 「現在注目しているフォルダ (熊太郎のいる部屋)」を、 「. (ドット)」と書くことにし、 「現在注目しているフォルダの上 (熊太郎のいる部屋の天井の上) にあるフォルダ(部屋)の入口(赤の星)」を「.. (ドット ドット)」 と書くことにします。
更に、絶対参照で用いたルートディレクトリ以外の「/」を同じように利用すると、 「./」は、 「現在注目しているフォルダ (熊太郎のいる部屋) にある...」 という意味になりますし、 「../」は、「現在注目している(熊太郎のいる)フォルダの上位 (部屋の天井の上) にあるフォルダ(部屋)の入口(赤の星)の向こう側にある...」 と言う意味になります。

これらの記述規則を利用すると、熊太郎に見えているのは、 次のように簡単に書くことことができます。

  1. ./ex1.html (ケーキ)」
  2. ./w04 (紫の星) と ./w05 (緑の星)」
  3. .. (赤の星)」

このとき、注目しているフォルダ (熊太郎のいる部屋) が、 現在「/public_html」ですので、この情報と「./ex1.html」を合わせると、 ケーキである ex1.html を一意に特定することができますね。

このように、現在注目しているフォルダと、 そこからの相対位置でファイルを特定するのが「相対参照」なのです。 ですから、「現在注目しているフォルダにある...」を表わす 「./」が重要な役目をするわけです。

プリンの ex1.html や オムライスの ex1.html も同様にして、 以下のように特定することができますね。

  • ./w04/ex1.html」 ← プリンの ex1.html
  • ./w05/ex1.html」 ← オムライスの ex1.html

プリンである ex1.htmlの相対参照記述中の要素と、 それらの意味を表にしてみると以下のようになります。

相対参照表記中の要素 意味
./ 現在注目しているフォルダにある...
w04/ w04フォルダの下 (中) にある...
ex1.html ex1.html ファイル (プリン)

上の表の「相対参照表記中の要素」の列を上から順につないだものが「相対参照での表記」ですし、 「意味」の列を上から順に読んだものが「相対参照での表記の意味」になります。

今度は、熊太郎が下図のように、 /public_html/w05 フォルダにいる場合を考えてみましょう。 フォルダやファイルは、先の図と全く同じです。 ただし、各フォルダ(部屋)にあって その上位のフォルダ(天井上の部屋)の入口を表わす赤い星には「..」という名前がついていることが分りましたので、 それも表記してあります。

初期ホームディレクトリ

今回は、熊太郎には以下のように見えているはずです。

初期ホームディレクトリ

この状況で、3つのex1.htmlを相対参照で記述すると、 以下のようになります。

  • 「./ex1.html」      ← オムライス ex1.html
  • ../ex1.html」     ← ケーキの ex1.html
  • ../w04/ex1.html」 ← プリンの ex1.html

例えば、プリンの ex1.htmlへの相対参照は、次のように考えてみました。
このフォルダ(部屋)からは、プリンの ex1.htmlは見えませんので、 一旦、上位のフォルダ (天井の上の部屋)へ上がります。 それ以外に、道はありません。その際、「このフォルダ(部屋)から、 上位のフォルダ(部屋)の名前(public_html)は見えていず(分らず)、単に、 上位のフォルダへの入口(赤い星)が見えているだけ」ということに注意して下さい。 そのため、参照をするときには、 (その時点では分らない)上位のフォルダ名ではなく、 「上位のフォルダへの入口の向こう側にある...」という意味の 「../」を使う必要があるのです。
次に、上位のフォルダへ上がると、プリンの ex1.htmlがある w04のフォルダが見えますので、 「w04フォルダの下 (中) にある」と言う意味の「w04/」が続きます。 そして、最後に目的の(プリンである)ex1.htmlを示せば完成です。

前の例のように対応関係を表にしますので確認して下さい。

相対参照表記中の要素 意味
../ 現在注目しているフォルダの上位のフォルダにある...
w04/ w04フォルダの下 (中) にある...
ex1.html ex1.html ファイル (プリン)

オムライスの ex1.htmlと、プリンの ex1.htmlは、 隣どうしのフォルダ(部屋)であるのにもかかわらず、相対参照では、 一旦、 上の階層 (天井の上にある部屋)を経由してしか参照できないことに注意して下さい。

ファイルの特定に関するまとめ

これまでの学習で、 「ex1.htmlファイル」とか「testフォルダ」などというのは、 「どこにあるかは分らない」、あるいは、 「どこにあるかは関係ない (気にしない)」 抽象的な呼び方であることが分ったと思います。 もちろんこれは、一般的なファイルやフォルダを表わすときには重要な表記方法です。

更に、抽象的な呼び方ではなく、一意に特定する呼び方には、 絶対参照と相対参照の2通りがあることも分ったと思います。

そこで、ここでは、これらの表記の相異点 (見分け方?)を表にしておきます。

表記方法 表記の意味的特徴 表記上の相異点 表記例
抽象表記 存在場所を限定しない 先頭に特別な記号がつかない ex1.html, test/t0.html
絶対参照 存在場所をルートディレクトリから指定する 先頭に「/」がつく /ng.html, /public_html/test/t0.html
相対参照 注目しているフォルダを決め、そこを起点に指定する 先頭に「./」もしくは「../」がつく ./ex1.html, ./w05/ex1.html, ../images/apple.jpg, ../../dameyo/ng.html
(註) 実は困ったことに、相対参照で利用する「./」は、 多くの場合 省略しても良いということになっています。 ただ、「./」を省略すると、抽象的なファイル名なのか、 相対参照のファイル名なのか自他ともに不明瞭になります。 そのため、皆さんは相対参照をしているときには、省略しないように心掛けて下さい。 少なくとも、基盤的情報処理論では、相対参照で「./」を省略するのはやめて下さい。 (省略したら、確認テストでは間違いになりますし、課題では減点します。)

今回は、一つのサーバの世界でのファイルの特定について学習しましたが、 多数のサーバが存在する実際の世界での、ファイルの特定ついての話は、 次回にしたいと思います。

ファイルの特定に関するサンプル

ファイルの特定に関するサンプルを掲載しますので、 自分で確認して下さい。

初期ホームディレクトリ

上図で、「だんごのt0.html」を、絶対参照と、熊太郎から見た相対参照で記述すると以下のようになります。

表 記 方 法 (だんごの) t0.htmlの表記
絶対参照 /public_html/w04/test/t0.html
(/public_html/w05/testから見た)相対参照 ../../w04/test/t0.html
Copyright (C) Kenichi Sugitani 2005, All Rights Reserved