ページテンプレート

概要

ページテンプレートはページのソースファイルです。ほぼXHTMLに準拠した形で記述します。

後のセクションに挙げた特殊属性をタグに追加することで、ページテンプレートからページ出力を作成する途中でプログラムコードを呼び出したり、特殊な動作を行わせることができます。

span タグと、独自タグである extend タグは他のタグと若干扱いが異なり、ext: が先頭についていない属性が他にない場合はタグ自体が出力されません。

キャラクタセット識別

ページテンプレートと出力結果に使うキャラクタセットの判定を以下のように行います。

種類 判定方法
ページテンプレート テンプレート先頭の<?xml version="1.0" encoding="キャラクタセット "?>があればそれを使います。なければコンフィグレーション設定のテンプレートキャラクタセット指定を使います。
出力結果 ※WebCoreのみ (SilverGear単体では変換の必要がないため)
テンプレートの中で ext:set="HTTP-HEADER" の指定による Content-Type の charset 指定があればそれを使います。なければコンフィグレーション設定の出力キャラクタセット指定を使います。

出力結果のHTML/XHTMLフォーマット振り分け

ページテンプレートにDOCTYPEの記述をしておくと、出力のHTML/HTMLフォーマットが自動的に振り分けられます。

種類 記述例
HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
XHTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
エラー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
XMLテンプレートとして不正であるためエラーとなります。

タグの特殊属性

タグにつけることができる特殊属性は以下のとおりです。

属性 配置可能タグ 摘要
ext:comment すべて タグとその下の構造の出力を抑制します。
ext:use すべて 値がtrueのとき、タグとその下の構造を出力します。
falseのとき、タグとその下の構造を出力を抑制します。
ext:loop すべて フォーマットは"コレクションキー[,要素キー]"です。リクエストコンテキストマップに対しコレクションキーで参照したコレクションオブジェクトを要素キーに結び付けてマップに登録し、下の構造を出力します。要素キーは省略できます。
ext:wrap すべて 値がtrueのとき、タグとその下の構造を出力します。
falseのとき、下の構造だけを出力します。
ext:include span|extend 値が示すファイルが示すページテンプレートを読み込んで出力します。
ext:language span|extend 値に指定した言語IDに対応するスクリプトドライバを読み込みます。必ずext:target属性と組にして使います。
ext:target span|extend 値が示すファイルに書かれたコードを実行します。必ずext:language属性と組にして使います。
ext:set span|extend SilverGear 単体では値に"DEF"のみが指定できます。
WebCoreとの組み合わせでは"INCLUDE-ONLY"または"HTTP-HEADER"を指定できます。

ext:setの設定値

ext:setに指定できる値とその意味は以下のとおりです。"ライブラリ"は、その機能を提供しているライブラリ名を指しています。

extendタグの子要素の部分については、これが記述されているソースをウェブブラウザで直接開いてみるとそのまま表示されますが、これを嫌う場合は、コメントで囲ってもかまいません。ブラウザからは見えなくなりますが、中の設定は認識されます。

意味 ライブラリ 説明
DEF 値の設定(DEFINITION) SilverGear リクエストコンテキストマップを変数プールとし、以下のようなLISP風の記述によって若干の変数操作ができます。
<extend ext:set="DEF">
  (define flag "true")
  (define num (* 200 num))
</extend>
          
HTTP-HEADER HTTPヘッダへの値の設定 WebCore この記述をページに設定すると、ページの出力がウェブブラウザに返される直前でその設定をHTTPヘッダに反映します。複数の箇所で重複する設定をした場合は上書きされ、後で設定したほうがより有効になります。重複しないものについては前の設定も有効になります。
<extend ext:set="HTTP-HEADER">
  Content-Type: text/html; charset=UTF-8
  Pragma: no-cache
</extend>
          
Content-Type についてはcharsetの後ろのキャラクタセット指定が監視されており、デフォルトのキャラクタセットよりも優先して反映されます。
INCLUDE-ONLY 直接呼び出しの拒否 WebCore この記述があるページをウェブブラウザから指定すると、ステータスコード404が返されます。存在しないページへのリクエストと同様の動作になります。

ページテンプレートの中に${}で括られた文字列を記入すると、式として評価された結果に置き換えられて出力されます。${}を置ける場所の例は以下のとおりです。

場所
テキスト <td>テキスト${text}</td>
コメント <!-- ${comment} コメント -->
属性値 <span ext:include="${include}"/>

置けない場所は以下のようなところです。

場所
タグそのもの <${tag}>contents</${tag}>
属性そのもの <hr ${noshade-attribute}/>

式の形式は以下のようになります。

"${" キー [ "." 参照記述 ]* [ "|" "NOESCAPE" ] [ ";" コメント ] "}"
    

記述例

${data}
${user.detail.name.0}
${config.parameter; コンフィグパラメータを取得}
${script.body | NOESCAPE ; 結果の中の文字列をエスケープしません}
    

式を構成する要素の意味は以下のとおりです。

要素 摘要
キー マップから値を参照する場合のキー文字列です。
参照記述 値が配列またはリストの場合、整数値を指定して要素を取り出します。
値がマップの場合、get( key ) メソッドで値を取り出します。
その他のオブジェクトの場合は getXXXXX() メソッド(XXXXXは参照記述文字列)で値を取り出します。

シングルクォート、ダブルクォート、セミコロンを含む参照記述が必要とならないように工夫してください。使用すると動作がわかりにくくなります。
空白がある場合には data.'version number' といった具合に参照記述をシングルクォートで囲ってください。
NOESCAPE 評価した結果を出力する場合に&、<、>、&nbsp;をエスケープしない場合に指定します。
コメント 属性値のにおいてはダブルクォート(")で属性値の記述が終了します。また、閉じ中括弧(})で式が終わるのでうっかり入れてしまわないようにしてください。