[小西ホームページ]   [目次・索引]   [前の授業]

情報処理IIA(HTML入門)第13回

目次 索引
13.1 HTTPとCGI
13.1.1 ポート番号
13.1.2 プロトコル
13.1.3 HTTP
13.1.4 CGIの仕組み
13.2 SGMLとDTD
13.2.1 HTMLドキュメントの構造
13.2.2 正当なHTMLドキュメント
13.3 成績評価について
13.4 アンケート13
CGI  DTD  HTTP  SGML  解析木  正当  内容  プロトコル  ポート番号  要素 

13.1 HTTPとCGI

13.1.1 ポート番号

以前の授業で、インターネットの構成要素を紹介した際、ホストとサーバを区別しました。 ホストはコンピュータ(ハードウェア)で、サーバはソフトウェアなので、確かに別物です。 しかし、区別する本当の理由は、通常一つのホストの上で複数のサーバが稼働しているからです。

パケットとは、インターネットで伝送されるデータの単位でした。 パケットは、制御データ(ヘッダとよばれる)と伝送データから構成されます。 ヘッダには、宛先のIPアドレスと、ポート番号とよばれる数値が含まれます。 ルータは、ヘッダの宛先IPアドレスを見て、パケットを適切なホストに向けて伝送します。 ポート番号port number )とは、サーバなどの伝送先ソフトウェアを区別する番号です。 ホストに届いたパケットは、ポート番号に従って、適切なソフトウェアで処理されます。 IPアドレスとポート番号によって、伝送先のホストとソフトウェアが決定されるのです。

13.1.2 プロトコル

IPアドレスのところで説明しましたが、 プロトコルprotocol )とは、通信規約のことです。 ホームページが見られるのは、HTTPとよばれるプロトコルに基づいて通信が行われているからです。 ただし、HTTP自身は、ホームページの内容を電気信号に置き換える規約ではありません。

プロトコルにはいくつかの階層があります。 最も上位の階層はアプリケーション層とよばれ、ソフトウェアに依存する部分の規約を定めています。 (HTTPはここのプロトコルです。) 最も下位の階層は物理層とよばれ、電気信号に関する規約を定めています。 アプリケーション層と物理層の間には複数の階層があり、パケットをやり取りするための規約が段階的に定められています。 それぞれの階層のプロトコルに従って、ホームページの内容がパケットに置き換わり、そして電気信号に置き換わるのです。

プロトコルを階層化する利点は、プロトコルの変更がしやすくなることです。 例えば、銅線ではなく光ファイバによる通信を開始する場合、光信号に置き換えるための物理層のプロトコルだけが用意されます。 アプリケーション層のプロトコルであるHTTPは、たとえ銅線から光ファイバに変わっても、そのまま使えるのです。

13.1.3 HTTP

さて、 HTTP (HyperText Transfer Protocol)とは、ブラウザとWWWサーバの間のプロトコルです。 HTTPの仕組みは単純です。

  1. ブラウザからWWWサーバへ、URLを表す文字列を転送する。
  2. WWWサーバからブラウザへ、ファイル情報を表す文字列と、(空行と、)指定されたファイルの内容を転送する。

これだけです。 このやり取りを何度か繰り返して、ブラウザはホームページの表示に必要なデータを集めます。

なお、ブラウザへ送られるファイル情報の中では、ファイルの種類が重要です。 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サーバとの間では、おおよそ次のようなやり取りが行われます。

  1. Netscapeは、DNSによってホストwww.usyd.edu.auのIPアドレスを知る。
  2. Netscapeは、そのIPアドレスとポート番号(HTTPは通常80)に対して、文字列GET /を転送する。
  3. WWWサーバはNetscapeに対して、Content-Type: text/htmlなどの文字列と、ファイルindex.htmlの内容を転送する。
  4. Netscapeは、転送されたファイルをHTML形式と見なし、画像の部分を空けて表示する。
  5. そのHTMLドキュメントの中には、
    <img src="images/logo.gif" ... >
    という画像ファイルの指定があるので、この相対URLを解決し、絶対URL
    http://www.usyd.edu.au/images/logo.gif
    を得る。
  6. Netscapeは、DNSによってホストwww.usyd.edu.auのIPアドレスを知る。
  7. Netscapeは、そのIPアドレスとポート番号に対して、文字列GET /images/logo.gifを転送する。
  8. WWWサーバはNetscapeに対して、Content-Type: image/gifなどの文字列と、ファイルlogo.gifの内容を転送する。
  9. Netscapeは、届いたファイルをGIF形式の画像と見なし、空けておいた部分にその画像を表示する。
  10. ....
  11. もとのHTMLドキュメントに指定されている画像がすべて届いたので、転送を終了する。

13.1.4 CGIの仕組み

ロボット系検索エンジンでは、検索語を入力しますと、しばらくして検索語に関するホームページが表示されます。 実は、検索語ごとにHTMLファイルがあらかじめ用意されているわけではありません。 検索エンジンのプログラムは、検索語などのデータを受け取りますと、データベースに基づいて検索語に関する情報を集め、その場でHTMLドキュメントを合成し、それをブラウザに転送しているのです。 このようなプログラムは、一般に CGI (Common Gateway Interface)スクリプトとよばれます。


13.2 SGMLとDTD

13.2.1 HTMLドキュメントの構造

これまでの説明で、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ドキュメントの構造をよく反映していることが分かると思います。 テキストにタグを入れることは、解析木で表されるような構造をドキュメントに与えることなのです。

13.2.2 正当な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に対する理解が非常に深まります。


13.3 成績評価について

レポート(アンケートも含む)の提出に関するスケジュールは次の通りです。

7月18日(木)
全員にレポートの提出状況をメールで知らせます。
7月31日(水)
レポートの最終締め切り日です。 これ以降提出されたレポートは採点しません。

この授業の成績は、レポートの評価とアンケートの提出(出席点)で決まります。

レポート(4/25, 5/2, 5/9, 5/16, 5/23)
A=8点、B=7点、C=6点、D=5点、Fおよび未提出=0点。
レポート(5/30, 6/6, 6/20, 7/4)
A=10点、B=9点、C=8点、D=7点、Fおよび未提出=0点。
アンケート(4/18, 6/13, 6/27, 7/11)
提出=5点、未提出=0点。

成績に関して次のような事情のある人はメールで連絡してください。 できる限り対処します。


13.4 アンケート13

情報処理センターのアンケートに答えてください。


[小西ホームページ]   [目次・索引]   [前の授業]

2002年7月11日更新
konishi@twcu.ac.jp
Copyright (C) 2002 Zenjiro Konishi. All rights reserved.