4D Webサーバーでは、セミダイナミックページを使用することができます。
これらのページは4D HTMLタグを含んだHTML"テンプレート"であり、つまりスタティックなHTMLコードと、4DHTML、4DIF、または 4DINCLUDEなどの変換タグによって追加された4D参照を合わせたものです。これらのタグはHTML型のコメント(<!--#Tag Contents-->)としてHTMLソースコードに挿入されます。
注: 4DHTML、4DTEXT、4DEVALタグに関しては、これらをXMLに準拠させるため、特定の場合において$-ベースの代替シンタックスが使用されます。詳細な情報については、4DTEXT、4DHTML、4DEVALにおける代替シンタックスの章を参照して下さい。
これらのページがHTTPサーバーによって送信されると、そのページは解析され、中のタグは実行されてその結果のデータで置き換えられます。その結果、ブラウザで受信したページは、スタティックな要素と4Dからひっぱってきた値を合わせたものとなるのです。
HTMLオブジェクトのvalue フィールドに<!--#4DTEXT VarName--> を含めることによって、プログラミングによってHTMLオブジェクトにデフォルト値を与えることができます。このときVarName iがカレントWebプロセスで定義された4Dプロセス変数名となります。この名前は標準のHTML記法でコメントとして使用する<!--#...--> で囲います。
注: HTMLエディタによっては <!--#4DTEXT VarName--> をHTMLオブジェクトの value フィールドに許可しないかもしれません。この場合、HTMLコードに直接入力する必要があります。
<!--#4DTEXT --> タグを使用すればページに4D式 (フィールドや配列要素) を挿入することもできます。 このタイプのデータに対するこのタグの動作は、変数のそれと同じです。詳細はST FREEZE EXPRESSIONSを参照してください。
実際、シンタックス <!--#4DTEXT VarName--> は、HTMLページのどこにでも、4Dデータを挿入することを可能にします。例えば以下のように記述すると:
<P>Welcome to <!--#4DTEXT vtSiteName-->!</P>
4D変数vtSiteName の値がHTMLページに挿入されます。
例題:
vs4D:="4D4D"
SEND HTML FILE("AnyPage.HTM")
AnyPage.HTMのソースは以下のようなものです:
<html>
<head>
<title>AnyPage</title>
<script language="JavaScript"><!--
function Is4DWebServer(){
return (document.frm.vs4D.value=="4D4D")
}
function HandleButton(){
if(Is4DWebServer()){
alert("You are connected to 4D Web Server!")
} else {
alert("You are NOT connected to 4D Web Server!")
}
//--></script>
</head>
<body>
<form action="/4DACTION/WWW_STD_FORM_POST" method="post" name="frm">
<p><input type="hidden" name="vs4D" value="<!--#4DTEXT vs4D-->"</p>
<p><a href="JavaScript:HandleButton()"><img src="AnyGIF.GIF" border=0 align=bottom></a></p>
<p><input type="submit" name="bOK" value="OK"></p>
</form>
</body>
</html>
<!--#4DTEXT --> タグは送信したページに4D式(フィールド、配列要素、等)を挿入することもできます。このタグでのこのデータ型のオペレーションは、変数のオペレーションと同じです。また、4DHTML タグによって、HTMLコードを4D変数へと挿入することも可能です。4DIF などの他のタグは、実行されたコードの操作を可能にします。使用可能な全てのタグの詳細は、4D HTMLタグの章の中にあります。
4Dが送信するセミダイナミックページの内容解析は、WEB SEND FILE (.htm, .html, .shtm, .shtml) または WEB SEND BLOB (text/html タイプのBLOB) コマンドが呼び出された時、またはWEB SEND TEXTコマンドが呼び出されたとき、さらにはURLを使用してページが呼び出されたときに発生します。
しかし最後のケースでは、 最適化の目的で、“.htm” と “.html” 拡張子を持つページは解析されません。この場合ページの解析を強制的に行うには、拡張子を “.shtm” または “.shtml” (例えば http://www.server.com/dir/page.shtm) にします。
このタイプのページの例題はWEB GET STATISTICSコマンドの説明にあります。XMLページ(.xml、.xsl)とWMLページ(.wml)も、4Dによってサポートされ、常に解析されます(XMLとWMLサポートの章を参照してください)。
内部的に、パーサーはUTF-16で動作します。しかし、解析するデータは異なるコード体系かもしれません。タグ(例えば4DHTML)を含むテキストであるときや、文字セットが明示的に指定されているようなときには、4Dは必要に応じてデータを変換します。
4DがHTMLページに含まれるタグを解析して変換する全てのケースを以下の表にまとめます:
動作 | 送信ページ解析 | $シンタックスのサポートsyntax(*) | タグ解析時の文字セット動作 |
URL で呼び出されたページ | ○、ただし拡張子が“.htm” または “.html” のページを除く | ○、ただし拡張子が“.htm” または “.html” のページを除く | Content-Typeヘッダフィールドの指定に従う。それが無い時はMETA-HTTP EQUIVタグを探す。それも無ければHTTPサーバのデフォルト文字セットを使用。 |
WEB SEND FILE コマンド呼び出し | ○ | - | Content-Typeヘッダフィールドの指定に従う。それが無い時はMETA-HTTP EQUIVタグを探す。それも無ければHTTPサーバのデフォルト文字セットを使用。 |
WEB SEND TEXT コマンド呼び出し | ○ | - | 変換は不要 |
WEB SEND BLOB コマンド呼び出し | ○(BLOBが“text/html”型の場合) | - | レスポンスのContent-Typeヘッダフィールドの指定に従う。それが無い時にはHTTPサーバのデフォルト文字セットを使用。 |
<!--4DINCLUDE --> タグによる挿入 | ○ | ○ | ページのContent-Typeヘッダフィールドの指定に従う。それが無い時はMETA-HTTP EQUIVタグを探す。それも無ければHTTPサーバのデフォルト文字セットを使用。 |
PROCESS 4D TAGS コマンド呼び出し | ○ | ○ | テキストデータは変換無し。BLOBデータは互換性のためにMac-Romanから自動変換 |
(*) 4DHTML、4DTEXT、4DEVALタグにおいては代替の$-ベースシンタックスが利用可能です(の章を参照して下さい)。
4DはJavaScriptソースコードとJavaScript .js ファイル (例 <SCRIPT SRC="...")とをHTMLドキュメントに埋め込むことをサポートしています。
WEB SEND FILE や WEB SEND BLOBを使用すると、HTMLソースエディタで編集したHTMLソー スや4Dからディスクに保存したHTMLを送信します。両方のケースで、ページをフルコントロールできます。ドキュメントのHEAD部に JavaScriptスクリプトを挿入したり、FORMマークアップでスクリプトを使用したりできます。先の例題で、フォームに名前を付け、スクリプトか らそのフォームを参照しました。またフォームのマークアップレベルでサブミットを受け入れたり拒否したりできます。
注: 4DはJava applets transportをサポートしています。