XSLT と SSI を同時に使う

XSLT と SSI を同時に使う

概要

SSIはコメントタグを使用するので、XSLT変換後のHTMLでSSIを使用するには少し工夫が必要です。 単純に < > ではうまくいきません。 変換後のHTMLにコメントタグとしての出力をしたいのですから、xsl:commentを使うのがひとつの答えです。

ただし、SSIはサーバが処理するので、実際にSSIの効果があるのは「変換後のHTML」だけです。 IEやMozillaなどの、XML&XSLTがそのまま表示できるブラウザでXMLを見ているときには反映されません。 (もしかしたら、.htaccess の text/x-server-parsed-html に.xmlか.xslを加えることで、XML表示の際もSSIの効果を得られるかもしれません。)

最終更新時を表示したい場合は、以下のようなXSLTを書いておきます。 timefmt はお好みで。

<xsl:comment>#config timefmt="%Y/%m/%d"</xsl:comment>
<xsl:comment>#echo var='LAST_MODIFIED'</xsl:comment>

属性にSSIを埋め込みたい場合は、&lt;!-- XXX --&gt; が使えます。 HTMLでは、属性内で < > を使うことを許されいるためです。 例えば、meta Last-Modified を使うには以下のようなコードを書きます。

<meta http-equiv="Last-Modified" content="&lt;!--#echo var='LAST_MODIFIED'--&gt;"/>

SSIの小ワザ

応用的な使い方として、更新日時によって自動的にリンク先ファイル名を変えることもできます。 自分の場合、日記をつけるのに、"diary.xml" から "年-月.html" を生成する方法をとっています。 この場合、月代わりで最新のHTMLファイルへのリンクパスが変わるのですが、以下のような方法で自動化しています。

<!--#config timefmt="diary%Y-%m.html"-->
<a href="diary/<!--#flastmod file="diary/diary.xml"-->">Diary</a>

付録:SSI

コマンド

コマンド説明
<!--#config timefmt="フォーマット"--> 時刻表示フォーマットを設定する。
%c:標準, %y:年, %m:月, %d:日, %H:時, %M:分, %S:秒
<!--#echo var="環境変数"--> 環境変数を挿入する。
<!--#exec cmd="./hoge.cgi"--> プログラムを実行する。
<!--#fsize file="target.zip"--> ファイルサイズを挿入する。
<!--#include virtual="../included.html"--> 別のファイルを挿入する。
fileも使えるが、virtualだと上の階層のディレクトリにあるファイルもインクルード可能。

環境変数

環境変数説明結果
DOCUMENT_NAME 処理中のファイルの名前。
DOCUMENT_URI 処理中のファイルのURI。
DATE_LOCAL 現在のローカル時刻。
DATE_GMT 現在のグリニッジ標準時刻。
LAST_MODIFIED 最終更新日時。
HTTP_REFERER ブラウザで直前に参照していたURL。
HTTP_USER_AGENT ブラウザ情報。
REMOTE_ADDR クライアントのIPアドレス。
REMOTE_HOST クライアントのホスト名。