書式は書式情報一式に手段と実行URIを結び付けた雛型です。書式情報一式は名前と値の組み合わせを並べたものになります。名前は書式入力要素のNAME属性で定義され、値は表記されたさまざまな書式の初期値か利用者の打ち込みが渡されます。書式情報一式の結果は、動作や手段の関数として情報サービスへの接続に使用されます。
書式要素は文書構造化要素と混在させることができます。例えば<PRE>要素に<FORM>要素を含めてもかまいませんし、<FORM>要素に<INPUT>要素を含んだ一覧を含めてもかまいません。これにより書式の意匠をたいへん柔軟に設計することができます。
書式の処理は第2水準での機能です。
書式要素は文書構造化要素に沿った一組の入力要素を含みます。属性は以下のとおりです:
<INPUT>要素は利用者が入力する欄を表わします。入力欄それぞれの違いはTYPE属性で区別します。
<INPUT>要素は数多くの属性を持っています。これに適用できる属性一式はTYPE属性の値によって変化します。
TYPE属性の値は省略すると`TEXT'になり、1行の記入欄を示します。(複数行の記入枠では<TEXTAREA>を使用します)
必要な属性は以下のとおりです:
追加できる属性は以下のとおりです:
`TYPE=PASSWORD'が入っている<INPUT>要素は、上記のものと同様の記入欄ですが、入力された値を隠して見えないようにします。(10,「防犯への配慮」参照)
<p>名前: <input name=login>
合言葉: <input type=password name=passwd>
`TYPE=CHECKBOX'が入っている<INPUT>要素はブール関数選択升を表わします。この要素で同じ名前を持つものを組み合わせると、多数の項目から複数の選択をさせることができます。必要な属性は以下のとおりです:
追加できる属性は以下のとおりです:
`TYPE=RADIO'が入っている<INPUT>要素はブール関数選択ボタンを表わします。この要素で同じ名前を持つものを組み合わせると、多数の項目からどれか一つを選択させることができます。各チェック欄にはNAME属性とVALUE属性が必要です。追加できる属性は以下のとおりです:
ラジオボタンのうちの一つはいつでもチェックされています。`CHECKED'で指定された<INPUT>要素がない場合には、利用代理者は最初のラジオボタンをチェックする必要があります。
`TYPE=IMAGE'を伴う<INPUT>要素は、表示する画像素材を指定し、画像から選択されるピクセルのX・Y座標の入力を可能にします。X値とY値のそれぞれに`.x'と`.y'をつけたものが座標の名前になります。`TYPE=IMAGE'は'TYPE=SUBMIT'の処理を含みます。つまり、ピクセルが選択された時に書式全体が送信(submit)されます。
NAME属性は他の入力欄のために必要です。<IMG>要素についてはSRC属性が必要で、ALIGN属性が追加できます(5.10,「画像:IMG」参照)。
`TYPE=HIDDEN'を伴う<INPUT>要素は隠し欄を表わします。利用者はこの欄に干渉できません。代わりにVALUE属性でこの欄の値を定めます。NAMEとVALUE属性が必要です。
`TYPE=SUBMIT'を伴う<INPUT>要素は入力選択スイッチ、一般的にはボタンを表わし、利用代理者に書式の送信を指示します。追加できる属性は以下のとおりです:
`TYPE=RESET'を伴う<INPUT>要素は入力選択スイッチ、一般的にはボタンを表わし、利用代理者に入力欄を元に戻すように指示します。VALUE属性が提示されていれば入力(ボタン)に名札を貼ります。
終了したらリクエストを送信します:
<input type=submit><br>
書式内容を消去し、元に戻します: <input type=reset>
<SELECT>要素は、入力欄を値の一覧のようにして表示させます。値は<OPTION>要素から渡されます。属性は以下のとおりです:
SELECTED属性がどの<OPTION>要素にも提示されていない場合には、初期状態は最初に選択されたものになります。
Option要素はSelect要素の中にのみ存在します。どれか一つを選択するもので、以下の属性があります:
<OPTION>要素の内容は項目の提示として利用者に提供されます。VALUE属性が存在しない場合はその内容が値として返されます。
<TEXTAREA>要素は複数行の記入枠を示します。属性は以下のとおりです:
<TEXTAREA>要素の内容は枠の初期値になります。
一般的にROWSとCOLS属性はその枠の表示可能文字数を決定します。枠は一般的に等幅活字で表示されます。HTML利用者代理はこの枠からはみ出す文章を必要に応じて巻き上げられるようにしてやることを条件とします。
HTML利用者代理は書式の処理を始めるに当たって、まず各欄が初期状態の文書を示します。利用者は充てがわれた記入欄を書き変えられるようになっています。利用者が(送信ボタンや画像入力などを使って)書式が送信されるよう指示したとき、書式情報一式はその手段や実行URI、符号形式にしたがって処理されます。
書式に一行の記入欄しかない場合、その欄での改行を書式送信の要求として受けることを条件とします。
書式の符号化は、設定を省略するとすべて`application/x-www-form-urlencoded'になります。この伝送種別では書式情報一式は以下のように表わされます。
書式の処理が(例えば持続的なはっきりした効果を持たないなど)単一効能的ならば、書式の手段が`GET'であることを条件とします。データベース検索は視覚的効果はありませんが、問い合わせ書式の理想的な実例となります。
実行URLがHTTP URLで手段が`GET'である書式を処理するには、利用者代理は実行URLを立ち上げ、上記`application/x-www-form-urlencoded'形式に則って、`?'と書式情報一式を付け足します。次に利用者代理はこのURIへの連鎖を錨のようにして辿ります(7.2,「超連鎖の動作」参照)。
(例えばデータベースの修正やサービスの申し込みなど)副次効果つきの書式の処理が結び付くサービスでは、書式の手段は`POST'にすることを条件とします。
実行URLがHTTP URLで、手段が`POST'である書式を処理するには、利用者代理は実行URIと上記'`application/x-www-form-urlencoded'形式のメッセージ本文を使って、HTTP POST処理を行います。利用者代理は上記HTTP GETからの応答を表示するのと同様に、HTTP POST交渉からの応答を表示することを条件とします。
以下の文書について考えてみましょう:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<title>HTMLフォーム送信の例</title>
<H1>質問例</H1>
<P>以下の質問にお答えください:
<FORM METHOD="POST" ACTION="http://www.w3.org/sample">
<P>あなたの名前: <INPUT NAME="name" size="48">
<P>男性 <INPUT NAME="gender" TYPE=RADIO VALUE="male">
<P>女性 <INPUT NAME="gender" TYPE=RADIO VALUE="female">
<P>家族の人数: <INPUT NAME="family" TYPE=text>
<P>自宅の所在地:
<UL>
<LI>ケント(Kent) <INPUT NAME="city" TYPE=checkbox VALUE="kent">
<LI>マイアミ(Miami) <INPUT NAME="city" TYPE=checkbox VALUE="miami">
<LI>そのほか <TEXTAREA NAME="other" cols=48 rows=4></textarea>
</UL>
ニックネーム: <INPUT NAME="nickname" SIZE="42">
<P>質問に答えてくださりありがとうございました。
<P><INPUT TYPE=SUBMIT> <INPUT TYPE=RESET>
</FORM>
書式情報一式の初期状態は以下のとおりです:
- name
- ""
- gender
- "male"
- family
- ""
- other
- ""
- nickname
- ""
ラジオボタンでの入力は初期値を持っていますが、チェック升では持たないことに注意してください。
送信される書式の記入欄や要求部分は利用者が書き換えるかもしれません。そこで、値を以下のようにしてみます:
- name
- "John Doe"
- gender
- "male"
- family
- "5"
- city
- "kent"
- city
- "miami"
- other
- "abc\ndefk"
- nickname
- "J&D"
すると利用者代理は`http://www.w3.org/sample'というURIを使ってHTTP POST処理を行います。メッセージ本文は以下のようになるはずです(改行は無視してください):