HTMLドキュメントヘッダの生成
■この章で解説するモジュール
CGI (start_html, end_html)
■この章でできること
・HTMLドキュメントヘッダを生成する
・HTMLのページタイトルを設定する
・HTMLの著作者を設定する
・HTMLのベースパスを設定する
・HTMLの使用言語を設定する
・HTMLのDOCTYPE宣言を設定する

 HTTPヘッダの生成ではHTTPヘッダの生成について解説しました。ほとんどのCGIは、HTTPヘッダを出力した後は、次にHTMLドキュメント、つまりWebページのソースを出力します。

 HTMLドキュメントは、大きく分けてヘッダ部と本体に分けられます。これらを自分で記述して出力することももちろんできますが、ここでは、CGIモジュールを使ってHTMLドキュメントのヘッダ部を生成する方法を解説します。

 HTMLヘッダを生成するには、CGI::start_htmlメソッドを使います。まずはサンプルから見てみましょう。

#!/usr/bin/perl

#############################################
# HTMLヘッダのサンプル1
# Author: "Perl Programming Tips"
#############################################

use CGI qw/:standard/;

print header();
print start_html(-title=>'HTML Header Sample');
print 'Sample';
print end_html();

 (実行結果はここをクリック)

 このコードが生成するHTMLドキュメントは次のようになります。

<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>HTML Header Sample</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
Sample
</body>
</html>

 start_htmlメソッドは、HTMLのヘッダ部と<body>タグの始まりを生成します。<body>タグの終わりはend_htmlメソッドで生成できます。

CGI::end_html
HTMLの終わり(</body></html>)を生成する
書式
end_html
引数
なし
 
戻り値
</body></html>

 では、start_htmlメソッドの詳細です。

CGI::start_html
HTMLヘッダを生成する
書式
start_html -title=>title, -author=>author, -base=>base, -xbase=>xbase, -dtd=>dtd, -lang=>lang, -target=>target;
引数
title:
<title>タグに指定するページタイトル
author:
<link rev="made" href="mailto:" />タグに指定するメールアドレス
base:
trueの場合、デフォルトのURLで<base href="" />タグを生成する
xbase:
指定したURLで<base href="" />タグを生成する
dtd:
<!DOCTYPE html PUBLIC "" "">タグに指定するDTDを配列へのリファレンスで渡す。
lang:
<html lang="">タグに指定する言語コード。デフォルトはen-US。空文字列を指定した場合はlang要素を生成しない。
target:
'_brank'など、リンクのターゲットフレームのデフォルト値を指定する。ただし、この機能は標準的なHTTPの機能ではなく、Netscapeでしか動作しない。
戻り値
HTMLヘッダ

 start_htmlのパラメータは全て省略可能です。標準的なパラメータは上で説明したものが全てですが、この他にさまざまな付加的なパラメータを指定することができます。これについては次章で解説します。ここでは標準的なパラメータについて解説します。

 まず、-titleですが、ここにはHTMLドキュメントのタイトルの指定します。<title>title</title>の形式でタグが生成されます。実際の使用例は上のサンプルを参照してください。

 -authorはメールアドレスを指定します。これを指定した場合、<link rev="made" href="mailto:author" />の形式のタグが生成されます。

 -baseと-xbaseは、相対リンクのベースになるパスを指定します。ページ内のリンクが相対パス形式の場合、ベースになるパスとしてこの値が使われます。-baseにtrueを指定した場合は現在のドキュメントのURLが使われます。-xbaseでは任意のURLを指定できます。いずれも、<base href="" />の形式のタグが生成されます。

 では、これらを使ったサンプルを次に示します。

#!/usr/bin/perl

#############################################
# HTMLヘッダのサンプル2
# Author: "Perl Programming Tips"
#############################################

use CGI qw/:standard/;

print header();
print start_html(-title=>'HTML Header Sample', 
    -author=>'webmaster@g-ishihara.com', -base=>'true');
print 'Sample';
print end_html();

 (実行結果はここをクリック)

 このコードが生成するHTMLドキュメントは次のようになります。

<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>HTML Header Sample</title>
<link rev="made" href="mailto:webmaster%40g-ishihara.com" />
<base href="http://cgi.g-ishihara.com/perl/cgi04_02.cgi" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
Sample
</body>
</html>

 次は-langですが、これは<html>タグの要素として指定する言語を指定します。デフォルトは「en-US」です。特にlang要素が必要ない場合には、-lang=>''として空文字列を指定します。また、-dtdパラメータでHTML2.0、3.2を指定した場合にはlang要素は生成されません。

 -dtdはDOCTYPE宣言の指定をします。HTMLのバージョンや従っている書式などの宣言をします。以降のHTML文書は、ここで宣言しているDTDに準拠していることを示すためのものです。指定しなかった場合でも適切に<!DOCTYPE>タグが生成されます。指定する場合は配列へのリファレンスを渡します。

 では、これらを使ったサンプルを次に示します。

#!/usr/bin/perl

#############################################
# HTMLヘッダのサンプル3
# Author: "Perl Programming Tips"
#############################################

use CGI qw/:standard/;

print header();
print start_html(-title=>'HTML Header Sample', -lang=>'ja-JP', 
    -dtd=>['-//W3C//DTD XHTML 4.01 Transitional//EN',
         'http://www.w3.org/TR/html4/loose.dtd']);
print 'Sample';
print end_html();

 (実行結果はここをクリック)

 このコードが生成するHTMLドキュメントは次のようになります。

<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN"
	 "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP" xml:lang="ja-JP">
<head>
<title>HTML Header Sample</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
Sample
</body>
</html>