XML/XSLT
XMLSubsMatchを用いたカスタムタグ
XML を前にして、HTML でのマークアップを洗練されたものにするために、
Apache::ASP では、サブルーチンの引数として、Perl サブルーチンでは、
タグ記述子と含まれるテキストを持つ定義済のタグの実行操作を行うことができます。
(?)
このカスタムタグの技術で、目に見える形での<% %>
スタイルをコード記入することなしに、ダイナミックな形で、
Web 開発者が出来ることが広がります。
それでは、コンタクトのある従業員など(の情報)を、
テーブルに挿入したい場合を示します。
以下のような、タグをセットアップしてください。
<my:employee name="Jane" last="Doe" phone="555-2222">
Jane Doe は、1998 年以来、在職しています。
</my:employee>
カスタムタグを用いて変換したければ、Apache::ASP に、
サブルーチンを使ってのタグ変換するよう、構文解析させます。
PerlSetVar XMLSubsMatch my:employee
XML のカスタムタグでの ':' のコロンはすべて、
Perl パッケージの分離記号 '::' に変換され、
my:employee タグは、my::employee サブルーチンか、
my パッケージ内の、employee サブルーチンに翻訳されます。
my パッケージや、どんなパッケージでも my::employee サブルーチンは、
以下のように、作成します。
sub my::employee {
my($attributes, $body) = @_;
$Response->Include('employee.inc', $attributes, $body);
}
<!-- # employee.inc ファイルの別の記述 -->
<% my($attributes, $body) = @_; %>
<table>
<% for('name', 'last', 'phone') { %>
<tr>
<td><b><%=ucfirst $_ %></b>:</td>
<td><%=$attributes->{$_}%></td>
</tr>
<% } %>
<tr><td colspan=2><%= $body %></td></tr>
</table>
<!-- # employee.inc ファイルの終わり -->
$Response->Include() は、employee.inc ASP スクリプトに、
employee(従業員)ファイルを変換するよう、委ねます。
純粋に、XML を信奉する人は、
このようなXML関連のカスタムタグ技術は好まないかもしれませんが、
サイト技術者が、XSLT を使う以外にも、
熟慮深く、XML 文書をこの技術を用い、
正確なスタイルで、完全な形で、変換できることも真実なのです。
このように定義されたカスタムタグは、本体と一緒にか、
あるいは本体なしに定義された、XML タグとして使用できます。
<my:employee>...</my:employee>
同様に
<my:employee/>
です。
これらのタグは、以下のように通常の ASP ロジックを内包するのに、
非常に強力です。
<my:employee>
<!-- 通常の ASP ロジック -->
<% my $birthday = &HTTP::Date::time2str(time - 25 * 86400 * 365); %>
<!-- ASP を挿入する -->
この従業員は、<%= int(rand()*600)+1 %>秒間、オンラインで、
<%= $birthday %> 頃に、生れました。
</my:employee>
このカスタムタグの動作している実例は、
./site/eg/xml_subs.asp スクリプトを
調べてください。
同じ名前のタグは、お互いに流用不可という、
一つの限界があるのに対して、カスタムタグは、
他のカスタムタグでも利用できる事に注目!
XSLT 転換
XML は、うまいやり方ですが、何のために使いますか?
その原則は、データとスタイルを、
XML と XSL ファイルに分離させることにより、
後で、Web サイトのデータ再様式化が簡単であり、
データを多様な様式に変換できるので、サイトを、
PDA や携帯電話のブラウザへ変換することががとても容易です。
あなたがしなければならない事は、
転換を実施する正確な XSL スタイルシートを、
セットアップすることです(XSLT)。
XML/XSLT を
サポートした、最初のリリースで、ASP スクリプトは、
XSL ファイルが転換する XML データのソースとしており、
また、XSL ファイルそれ自体が、まずは、ASP スクリプトとして
実行されるものともしています。XSLT 転換は、
XML::XSLT ないし、XML::Sablotron を使って、操作されます。
./site/eg/xslt.xml XML スクリプトで、
動作の実例を確かめる事ができます。
【訳者追記】文字コードが UTF-8 で、XML::Sablotron を使った例を、
./site/eg/xslt_utf.xml に、示しました。
XSL スタイルシートを特定するには、以下のセッティングを使ってください。
PerlSetVar XSLT template.xsl
この設定では、template.xsl が、すべてのファイルに有効です。
デフォールトでは、XSLT は、すべての ASP スクリプトを転換しますので、
xml スクリプトを残り(のファイル)から分離させるには、
PerlSetVar XSLTMatch xml$
とします。これで、xml(の拡張子)で終わっているすべてのファイルに対して、
XSLT 転換が行われます。
XSLT は、XML::XSLT のインストールに依存しており、
XML::XSLT は、 順繰りには、XML::DOM と XML::Parse に依存している事に注目!
version 2.11 で、XML::Sablotron もセッティングに使用可能となり、
以下のように使ってください。
PerlSetVar XSLTParser XML::Sablotron
そして、Version 2.29 以上で、XML::LibXSLT を使うなら設定は、
PerlSetVar XSLTParser XML::LibXSLT
XML::Sablotron ないし XML::LibXSLT をインストールするなら、
Perl モジュールが使用するライブラリのインストールが必要です。
以下(のサイト)から入手可能です。
libxslt - Gnome 用の XSLT C ライブラリ
Sablotron - Ginger Alliance
Apache::ASP が利用するデフォールトの、XSLT エンジン、XML::XSLT については、以下をご覧ください。
XML::XSLT
XML:XSLT は、最初の XSLT エンジンで、純粋に Perl で書かれているので、
他のソリューション(解法)に比して遅くはありますが、
移植がやさしいという利点があります。
XSLT 転換をキャッシュしたいなら、以下の設定を強く推薦します。
PerlSetVar XSLTCache 1
キャッシュの設定は、設定 セクションの該当事項にある、XSLTCache の設定方法を見てください。
参照
XSLT についての詳細情報は、以下の標準規格をご覧ください。
http://www.w3.org/TR/xslt
XML を送り出す膨大な基盤つくりに努力するためにも、他のオープンソースプロジェクトにふれておく必要があります。
Cocoon - Java による、XMLベースの Web パブリッシング
AxKit - Apache & mod_perl を使った、XML web パブリッシング