『XMLベースのウェブサイトを構築する(1)』ではこのサイトの大まかな設計を例として挙げたが、XMLをベースに動的なページを作る際のスクリプト言語が介入するレイヤーをどこにするかは難しい問題だ。
XMLファイルを送信し、動的な部分はクライアントサイドスクリプトで操作するか、XMLファイルはあくまでデータとして扱いサーバサイドのPHPで動的な内容を生成するか。
XMLファイルをスクリプトで操作するのは旧来的な方法である。HTMLがXMLになっただけだ。XML+XSLTによるクライアントサイドでのXHTML生成が普及すれば、この方法は便利かもしれない。
しかし、なんとなくXMLファイル内に動的な内容を持たせるのは気が引ける。というのも、XMLファイルはあくまでデータのフォーマットの1つとして考えているからで、たとえばデータベース内のデータに動的な要素を持たせることがあまり無いのと同様に、XMLファイルには単なるデータとして存在してもらいたい。
例えば、ファイルの更新時刻をスクリプトで動的に表示するとして、XMLファイル内にそのスクリプトを書いてしまうと、データとしてのXMLファイルからすれば冗長部分がある事になる。そのXMLファイル(実際には.phpとなるが)が直接GETされるならばそれでも良いが、更新時刻自体はユーザの利便性のためのものであって、データでは無いからだ。
そうなると、データベースにPHPでアクセスするのと同様、PHPでXMLファイルを操作した方が良いような気がする。
なぜこんな事を悩んでいるかというとXML文章はデータファイルにも最終的な出力ファイルにも成り得てしまうからである。
HTMLは基本的に最終的な出力ファイルであって、掲示板のデータをHTMLで保存する様な事はまず無かった。ところが、XMLファイルの場合、掲示板のデータを保存することも出来るし、XSLTとセットにして最終的な出力ファイルとすることも出来る。
結論としてはPHPが扱うXMLファイルは単なるデータとして、直接GETするXMLファイルの動的部分はスクリプトで生成すれば良いということになるのだろうか。
このサイト内ではXMLファイルは基本的にデータとして扱っていて、サイト内共通部の生成は1つのPHPで生成している。そのためXHTMLとしての書式の変更が一気に出来る。HTML+CSSの関係がXML+PHPになっているとも言える。HTMLで冗長部だった所をさらに削ってXMLとし、それをPHPで復元している感じだろうか。
XML内にスクリプトを書いても良いが、その場合、物理マークアップされたHTMLファイルと同様、データの汎用性という面からすると純粋なXMLファイルよりは不利である。
クライアントサイドで使用するXSLファイルを動的生成する場合も考えられる。キャッシュされるのを防止さえすればもしかしたら実用的かもしれない。
さらに言えば動的な部分は実体参照にして、DTDを動的に生成する方法も考えられるが、さすがにDTDをコロコロ変えるのはまずい様な気がする。