<!DOCUMENT HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html>

<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<link rel="stylesheet" type="text/css" href="../../default.css">
<title>XSLT と SSI を同時に使う</title>
</head>

<body>
<!--#include virtual="../../menu2.html"-->
<h1>XSLT と SSI を同時に使う</h1>

<h2>XSLT と SSI を同時に使う</h2>
<div>
<h3>概要</h3>
<p>SSIはコメントタグを使用するので、XSLT変換後のHTMLでSSIを使用するには少し工夫が必要です。
単純に &amp;lt; &amp;gt; ではうまくいきません。
変換後のHTMLにコメントタグとしての出力をしたいのですから、xsl:commentを使うのがひとつの答えです。</p>
<p>ただし、SSIはサーバが処理するので、実際にSSIの効果があるのは「変換後のHTML」だけです。
IEやMozillaなどの、XML＆XSLTがそのまま表示できるブラウザでXMLを見ているときには反映されません。
（もしかしたら、.htaccess の text/x-server-parsed-html に.xmlか.xslを加えることで、XML表示の際もSSIの効果を得られるかもしれません。）</p>

<h3>例</h3>
<p>
	最終更新時を表示したい場合は、以下のようなXSLTを書いておきます。
	timefmt はお好みで。
</p>
<div><code>
	&lt;xsl:comment&gt;#config timefmt=&quot;%Y/%m/%d&quot;&lt;/xsl:comment&gt;<br>
	&lt;xsl:comment&gt;#echo var='LAST_MODIFIED'&lt;/xsl:comment&gt;
</code></div>

<p>
	属性にSSIを埋め込みたい場合は、&amp;lt;!-- XXX --&amp;gt; が使えます。
	HTMLでは、属性内で &lt; &gt; を使うことを許されいるためです。
	例えば、meta Last-Modified を使うには以下のようなコードを書きます。
</p>
<div><code>
	&lt;meta http-equiv=&quot;Last-Modified&quot; content=&quot;&amp;lt;!--#echo var='LAST_MODIFIED'--&amp;gt;&quot;/&gt;
</code></div>
</div>

<h2>SSIの小ワザ</h2>
<div>
	<p>
		応用的な使い方として、更新日時によって自動的にリンク先ファイル名を変えることもできます。
		自分の場合、日記をつけるのに、&quot;diary.xml&quot; から &quot;年-月.html&quot; を生成する方法をとっています。
		この場合、月代わりで最新のHTMLファイルへのリンクパスが変わるのですが、以下のような方法で自動化しています。
	</p>
	<div><code>
		&lt;!--#config timefmt=&quot;diary%Y-%m.html&quot;--&gt;<br>
		&lt;a href=&quot;diary/&lt;!--#flastmod file=&quot;diary/diary.xml&quot;--&gt;"&gt;Diary&lt;/a&gt;
	</code></div>
</div>

<h2>付録：SSI</h2>
<div>
	<h3>コマンド</h3>
	<table border>
		<tr><th>コマンド</th><th>説明</th></tr>
		<tr>
			<td><code>&lt;!--#config timefmt=&quot;フォーマット&quot;--&gt;</code></td>
			<td>時刻表示フォーマットを設定する。<br>
				%c:標準, %y:年, %m:月, %d:日, %H:時, %M:分, %S:秒</td>
		</tr>
		<tr>
			<td><code>&lt;!--#echo var=&quot;環境変数&quot;--&gt;</code></td>
			<td>環境変数を挿入する。</td>
		</tr>
		<tr>
			<td><code>&lt;!--#exec cmd=&quot;./hoge.cgi&quot;--&gt;</code></td>
			<td>プログラムを実行する。</td>
		</tr>
		<tr>
			<td><code>&lt;!--#fsize file=&quot;target.zip&quot;--&gt;</code></td>
			<td>ファイルサイズを挿入する。</td>
		</tr>
		<tr>
			<td><code>&lt;!--#include virtual=&quot;../included.html&quot;--&gt;</code></td>
			<td>別のファイルを挿入する。<br>
				fileも使えるが、virtualだと上の階層のディレクトリにあるファイルもインクルード可能。</td>
		</tr>
	</table>
</div>

<div>
	<h3>環境変数</h3>
	<!--#config timefmt="%c"-->
	<table border>
		<tr><th>環境変数</th><th>説明</th><th>結果</th></tr>
		<tr>
			<td><code>DOCUMENT_NAME</code></td>
			<td>処理中のファイルの名前。</td>
			<td><!--#echo var="DOCUMENT_NAME"--></td>
		</tr>
		<tr>
			<td><code>DOCUMENT_URI</code></td>
			<td>処理中のファイルのURI。</td>
			<td><!--#echo var="DOCUMENT_URI"--></td>
		</tr>
		<tr>
			<td><code>DATE_LOCAL</code></td>
			<td>現在のローカル時刻。</td>
			<td><!--#echo var="DATE_LOCAL"--></td>
		</tr>
		<tr>
			<td><code>DATE_GMT</code></td>
			<td>現在のグリニッジ標準時刻。</td>
			<td><!--#echo var="DATE_GMT"--></td>
		</tr>
		<tr>
			<td><code>LAST_MODIFIED</code></td>
			<td>最終更新日時。</td>
			<td><!--#echo var="LAST_MODIFIED"--></td>
		</tr>
		<tr>
			<td><code>HTTP_REFERER</code></td>
			<td>ブラウザで直前に参照していたURL。</td>
			<td><!--#echo var="HTTP_REFERER"--></td>
		</tr>
		<tr>
			<td><code>HTTP_USER_AGENT</code></td>
			<td>ブラウザ情報。</td>
			<td><!--#echo var="HTTP_USER_AGENT"--></td>
		</tr>
		<tr>
			<td><code>REMOTE_ADDR</code></td>
			<td>クライアントのIPアドレス。</td>
			<td><!--#echo var="REMOTE_ADDR"--></td>
		</tr>
		<tr>
			<td><code>REMOTE_HOST</code></td>
			<td>クライアントのホスト名。</td>
			<td><!--#echo var="REMOTE_HOST"--></td>
		</tr>
		<tr>
			<td><code></code></td>
			<td></td>
		</tr>
	</table>
</div>

<hr>
<!--#config timefmt="%Y/%m/%d"-->
<p align="right"><!--#echo var='LAST_MODIFIED'--></p>

</body>
</html>
