目次 | 索引 |
---|---|
以前の授業で、インターネットの構成要素を紹介した際、ホストとサーバを区別しました。 ホストはコンピュータ(ハードウェア)で、サーバはソフトウェアなので、確かに別物です。 しかし、区別する本当の理由は、通常一つのホストの上で複数のサーバが稼働しているからです。
パケットとは、インターネットで伝送されるデータの単位でした。 パケットは、制御データ(ヘッダとよばれる)と伝送データから構成されます。 ヘッダには、宛先のIPアドレスと、ポート番号とよばれる数値が含まれます。 ルータは、ヘッダの宛先IPアドレスを見て、パケットを適切なホストに向けて伝送します。 ポート番号 ( port number )とは、サーバなどの伝送先ソフトウェアを区別する番号です。 ホストに届いたパケットは、ポート番号に従って、適切なソフトウェアで処理されます。 IPアドレスとポート番号によって、伝送先のホストとソフトウェアが決定されるのです。
IPアドレスのところで説明しましたが、 プロトコル ( protocol )とは、通信規約のことです。 ホームページが見られるのは、HTTPとよばれるプロトコルに基づいて通信が行われているからです。 ただし、HTTP自身は、ホームページの内容を電気信号に置き換える規約ではありません。
プロトコルにはいくつかの階層があります。 最も上位の階層はアプリケーション層とよばれ、ソフトウェアに依存する部分の規約を定めています。 (HTTPはここのプロトコルです。) 最も下位の階層は物理層とよばれ、電気信号に関する規約を定めています。 アプリケーション層と物理層の間には複数の階層があり、パケットをやり取りするための規約が段階的に定められています。 それぞれの階層のプロトコルに従って、ホームページの内容がパケットに置き換わり、そして電気信号に置き換わるのです。
プロトコルを階層化する利点は、プロトコルの変更がしやすくなることです。 例えば、銅線ではなく光ファイバによる通信を開始する場合、光信号に置き換えるための物理層のプロトコルだけが用意されます。 アプリケーション層のプロトコルであるHTTPは、たとえ銅線から光ファイバに変わっても、そのまま使えるのです。
さて、 HTTP (HyperText Transfer Protocol)とは、ブラウザとWWWサーバの間のプロトコルです。 HTTPの仕組みは単純です。
これだけです。 このやり取りを何度か繰り返して、ブラウザはホームページの表示に必要なデータを集めます。
なお、ブラウザへ送られるファイル情報の中では、ファイルの種類が重要です。 HTML形式のファイルを転送すときには、ファイル情報の中で
Content-Type: text/html
という文字列が送られます。 JPEG形式の画像のときには、
Content-Type: image/jpeg
という文字列が送られます。 ブラウザは、受け取ったファイル情報をもとに、テキストファイルの場合、画像ファイルの場合と、適切な処理を行います。
シドニー大学のホームページ
http://www.usyd.edu.au
の内容が、仮に
<html> <head> <title>The University of Sydney</title> </head> <body> <div> <img src="images/logo.gif" alt="The University of Sydney" width="500" height="50"> </div> ... </body> </html>
であるとします。 (実際はもっと複雑です。) Netscapeでシドニー大学のホームページを見た場合、Netscapeとシドニー大学のホストのWWWサーバとの間では、おおよそ次のようなやり取りが行われます。
という画像ファイルの指定があるので、この相対URLを解決し、絶対URL<img src="images/logo.gif"
...>
http://www.usyd.edu.au/images/logo.gifを得る。
ロボット系検索エンジンでは、検索語を入力しますと、しばらくして検索語に関するホームページが表示されます。 実は、検索語ごとにHTMLファイルがあらかじめ用意されているわけではありません。 検索エンジンのプログラムは、検索語などのデータを受け取りますと、データベースに基づいて検索語に関する情報を集め、その場でHTMLドキュメントを合成し、それをブラウザに転送しているのです。 このようなプログラムは、一般に CGI (Common Gateway Interface)スクリプトとよばれます。
これまでの説明で、HTMLファイルがネットワークを経由してブラウザに届くまでの仕組みが分かりました。 ブラウザはどのようにして、届いたHTMLドキュメントを表示しているのでしょうか。
例えば、次のようなHTMLドキュメントが届いたとします。
<html> <head> <title>File Formats</title> </head> <body> <h1>For Documents</h1> <ul> <li>PostScript</li> <li>PDF</li> </ul> </body> </html>
このときブラウザは、おおよそ以下の図で表されるようなデータを発生させます。
HTML | +--------+-------+--------+--------+ | | | | <html> HEAD BODY </html> | | +------+------+ +----+----+----+ | | | | | | | <head> TITLE </head> <body> H1 UL </body> | | | +-------+-------+ +------+------+ +---+---+---+ | | | | | | | | | | <title> #PCDATA </title> <h1> #PCDATA </h1> <ul> LI LI </ul> | | | | | +------+ +------+------+ +------+------+ | | | | | | | | "File Formats" "For Documents" <li> #PCDATA </li> <li> #PCDATA </li> | | | | | | "PostScript" "PDF"
そして、このデータに基づいて、文字列などの表示位置を順次計算し、計算が終わったらその位置に文字列などを表示するわけです。
なお、このような図(データ)は 解析木 ( parse tree )とよばれます。 根から反時計回りに葉をたどると、もとのHTMLドキュメントが得られることに注意してください。
解析木を理解するために、用語を二つ定義します。
まず、
<
tag
>
〜
</
tag
>
に囲まれた部分は、
tag
要素
(
element
)とよばれます。
tag
要素から開始タグと終了タグを取り除いた部分を、その
tag
要素の
内容
(
content
)とよびます。
例えば、
<ul> <li>PostScript</li> <li>PDF</li> </ul>
はul要素で、その内容は二つのli要素です。 また、はじめのli要素の内容は、単純な文字列PostScriptです。
tag 要素を表す解析木は、親が名前 tag (見やすいように大文字にしました)、子が開始タグ、内容、終了タグである木です。 上記の例ですと、まずul要素の内容が二つのli要素なので、
UL | +---+-+-+---+ | | | | <ul> LI LI </ul>
となり、li要素の内容がそれぞれ単純な文字列PostScript, PDFなので、「単純な文字列」を名前#PCDATAで表すことにしまして、
UL | +------+--------+---------+------+ | | | | <ul> LI LI </ul> | | +------+------+ +------+------+ | | | | | | <li> #PCDATA </li> <li> #PCDATA </li> | | | | | | "PostScript" "PDF"
となるわけです。
ここで、はじめの巨大な解析木に戻ってみてください。 解析木が、HTMLドキュメントの構造をよく反映していることが分かると思います。 テキストにタグを入れることは、解析木で表されるような構造をドキュメントに与えることなのです。
これまでに色々なホームページを作成してきました。 試行錯誤しながらHTMLファイルを編集し、大体思い通りに表示できれば完成といったところでしょうか。 しかし、ちゃんと表示されることと、それがHTMLの規格に合致していることとは別の問題です。 ブラウザは、規格に合っていないHTMLドキュメントでも、適当に表示してくれるからです。 ここでは、HTMLの規格について知り、より完全なHTMLドキュメントの作成を目指すことにします。
HTMLの定義は、まず SGML (Standard Generalized Markup Language)から始まります。 これは、マークアップ言語の枠組みを定める仕組みです。 ただし、これは枠組みにすぎませんので、実際のファイルがSGMLに合致するかどうかはなんとも言えません。 枠組みを埋めるのが、 DTD (Document Type Definition)です。 これがあってはじめて、実際のファイルが規格に合っているかどうかが判断できます。 HTMLは、SGML、およびHTML用のDTDによって規定される言語なのです。 HTMLドキュメントが規格に合致することを、 正当 ( valid )であるということにします。
HTMLのDTDは、主に次のようなことを定めています。
このうち、「どんな要素をそのタグで囲めるか」の部分が分かりにくいと思います。
例えば、
<ul>
タグに関しては、HTMLのDTDで
<!ELEMENT UL - - (LI)+>
と定められています。
これは、「
<ul>
タグは開始タグも終了タグも省略できない。
囲めるのは、li要素のひとつ以上の並び。」いう意味です。
したがって、
... <ul> <li>PostScript</li> <li>PDF</li> <p>and so on.</p> </ul> ...
は正当でないということが分かります。
上の例で見たように、DTDは人間にとってあまり読みやすいものではありません。 しかし、少しずつでも解読していけば、HTMLに対する理解が非常に深まります。
レポート(アンケートも含む)の提出に関するスケジュールは次の通りです。
この授業の成績は、レポートの評価とアンケートの提出(出席点)で決まります。
成績に関して次のような事情のある人はメールで連絡してください。 できる限り対処します。
情報処理センターのアンケートに答えてください。