XML, XSLT


「ローマコイン」のページを作るのに XML, XSLT, Sablotron, PHP を使っています。

なぜ XML を使ったのか

ローマコインのページでは沢山のローマ皇帝たちを扱っています。各ページにはコインの画像があり、その拡大画像へのリンクなども張っています。また、各皇帝へのインデックスも必要です。また、説明文はともかく主な内容については英語版のページも作りたいと思っていました。
当然、HTMLだけで書けますが、次のような問題点があります。 それに対して XML でデータを書くことにすれば、 だから、ページ数が増えるほどメリットは大きく感じられる。

どこでHTMLに変換するか

XMLをHTMLに変換しなければブラウザでの表示に困るわけだが、どこで変換すれば良いだろうか。これには3通りの方法が考えられると思う。
1. クライアントサイドで変換する。
IE の 5.0 以上であれば、XMLとXSLのファイルをサーバ上においておくことにより、ブラウザで HTML に直して表示させることが出来る。 Java Script と DOM を使っていろいろ複雑なこともさせることが出来る。 しかし、この方法には「ブラウザ依存」という大きな弱点がある。IE以外では表示できないし、IEであっても使っているのがMSXML3.0なのか4.0なのかで表示が異なってしまう。 IEのシェアは大きいとはいえ、「ブラウザ依存」はなるべくしない方が良いだろう。
2. サーバサイドで変換する。
これが最もXMLのメリットを引き出す方法だと思う。
サーバ側でHTMLに変換してやれば、クライアントのブラウザには依存しない。状況に応じて動的にページを作ってやることも可能。また、アップロードするファイルの数も少なくて済み、管理も楽だろう。
ただし、サーバに負荷がかかりすぎて遅くなることもあるかもしれないし、サーバ側に変換するための仕組みを用意できない環境では使えない。
3. 先にHTMLに変換してからサーバにアップロードする。
サーバ側での変換が出来ない環境ならば、サーバにアップロードする前にHTMLに変換しておくという手もある。
本サイトは 2002/8/12 まではこの方法を使っていた。 (以前の方法)

サーバサイドでXMLをHTMLに変換しよう

サーバサイドでXMLをHTMLに変換するときに使える変換エンジン(XSLT processor)にはいろいろなものがある。Windows のサーバで IIS を使っているのなら msxslが便利だろう。 他には SAXON, XT, Xalan などがある。 本サイトで使っているのが Sablotron というもので PHP から呼び出して使っている。
なぜ、Sablotron かと言うと理由は単純で、私が借りているサーバにインストールされているからである。(^^)
以下に Sablotron を呼び出すPHPスクリプトの例を挙げる。(エラーチェックなど省略しているのでそのままでは使えません。^^;)
<?
$xslData="aaa.xsl"; // スタイルシートの指定
$xmlData="bbb.xml"; // XMLの指定
$arg=array();
$param=array("param1"=>"value1"); // パラメータの指定
// 上の様にパラメータを指定するとスタイルシート内で <xsl:param name="param1"/> として参照することができる。
$xh=xslt_create();
$result=xslt_process($xh,$xml,$xsl,NULL,$arg,$param);
print $result;
xslt_free($xh);
?>

本サイトでの実際

本サイトで /coin/ZZ_default_j_trianus.html へアクセスしようとすると、 .htaccess の設定により、
/coin/_coin.php?sort=default&lang=j&p=trianus に Redirect される。 _coin.php は スタイルシート _coin_single.xsl を用いて、個別の皇帝のXMLファイルZZ_xml_trianus.xml を変換する。そのとき、sort=default, lang=j というふうに パラメータを渡す。

個別の皇帝のXMLファイルを作るには2段階の変換を行っている。 まず、coin.xml(皇帝たちのXMLファイル)、moneta.xml(コインのデータのXMLファイル)をエディターやコインのデータベースを使って作っている。 次に、これらを スタイルシート merge.xsl を使って、データをまとめた merge.xml に変換する。 さらに、perl を使ってパラメータを変えながら スタイルシート to_single.xsl を使って、 merge.xml から 個別の皇帝のXMLファイルを作っている。 この作業は perl のスクリプトを使っているのでワンクリックでOKになっている。なお、内容が変化しなかったファイルのタイムスタンプはそのままになるよう工夫している。

いろいろ

時間割表(jikan.lzh) xml で時間割を作ってみました。ソースを見るとメンテナンスが楽なのが分かると思います。(とっても単純だけど、学校関係者には役立つかもしれません。font 関係のところは必要に応じて修正して下さい。)
その xsl はここ

Copyright(C) augustus

古代ローマ(ローマの歴史とコイン)
古代ローマローマ帝国の歴史とコイン