XMLサーバ/Cocoon自由自在!
第3回 XML文書をiモードとPalmに対応させる


スタイルシート切り替えの仕組みは?

 スタイルシートの切り替えで、1つのXML文書をPC用にもiモード用にも変換できることがお分かりいただけたら、次はそのスタイルシートをCocoonで切り替える方法について紹介します。

スタイルシートを指定するプロセッシングインストラクション

 リスト1のXML文書に、スタイルシートを適用するためのプロセッシングインストラクションを記述します(リスト6)。

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="hello-mozilla.xsl" media="mozilla5" ?>
<?xml-stylesheet type="text/xsl" href="hello-imode.xsl" media="imode" ?>
<?cocoon-process type="xslt"?>


<message>
Hello, world!
</message>
リスト6 スタイルシートの切り替えを指定

 前回の例題と異なり、スタイルシートが2種類指定されている点と、それぞれにmedia属性が指定されている点に注意してください。このmedia属性の値が、Webブラウザの種類に対応しています。ここにどんなWebブラウザを指定することができるのか、ざっと表1にまとめておきました。

media属性の値 Webブラウザの種類
explorer Internet Explorer
pocketexplorer Pocket Internet Explorer
imode iモード携帯電話
lynx Lynx
mozilla5 MozillaおよびNetscape6.x
netscape Netscape
表1 media属性で指定できる主なWebブラウザの一覧

 もう詳しい説明は不要かと思いますが、CocoonはアクセスしてきたWebブラウザの種類とmedia属性を比較し、適用すべきスタイルシートを選択します。

 意外に簡単ですね。実際の出力例を、それぞれ画面1と画面2にあげておきますので確認してみてください。

画面1 Mozillaでメッセージを出力
画面2 iモードでメッセージを出力

スタイルシート切り替えの原理

 さて、表1を見て少し物足りなく感じた方もいるのではないでしょうか? Internet Explorer(IE)やMozillaなど、有名どころのWebブラウザは含まれていますが、もしかするとあなたのお気に入りのWebブラウザは見当たらないかもしれません。

 ご安心ください。単に、デフォルトでは未サポートというだけの話ですので、きちんと設定してやれば問題ありません。ここではどうやってその設定を行うのかについて見ていきたいと思いますが、そのためにはまず、HTTPリクエストの「USER-AGENTヘッダ」について知る必要があります。

 WebブラウザとHTTPサーバ間の通信は、HTTPリクエストおよびレスポンスのやりとりが繰り返されることにより行われています。このHTTPリクエストには、URLをはじめクライアント側のさまざまな情報が含まれています。そのうちの1つが「USER-AGENTヘッダ」と呼ばれる、クライアントの種別を表す情報です。

 例えばMozillaだと以下のような文字列がUSER-AGENTヘッダの値としてサーバに送信されています。

Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.5) Gecko/20011011

 同様に、IEでは以下のような文字列がUSER-AGENTヘッダの値としてサーバに送信されています。

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

 ただし、利用しているWebブラウザのバージョンにより、これらの値は微妙に異なる可能性があります。

 また、これらの情報は、ServletをはじめとするHTTPサーバ上のプログラムからアクセス可能になっています。ここでピンときた方も多いかと思いますが、Cocoonもこのヘッダ情報を利用しているのです。

 Cocoonの設定ファイルに、このヘッダ情報に関する定義が含まれています。cocoon.propertiesをオープンして、リスト7のような記述を探してみてください。

browser.0 = explorer=MSIE
browser.1 = pocketexplorer=MSPIE
browser.2 = handweb=HandHTTP
browser.3 = avantgo=AvantGo
browser.4 = imode=DoCoMo
browser.5 = opera=Opera
browser.6 = lynx=Lynx
browser.7 = java=Java
browser.8 = wap=Nokia
browser.9 = wap=UP
browser.10 = wap=Wapalizer
browser.11 = mozilla5=Mozilla/5
browser.12 = mozilla5=Netscape6/
browser.13 = netscape=Mozilla
リスト7 Webブラウザの定義

 それぞれの行が、media属性で用いることのできるWebブラウザを定義しています。説明するまでもないかもしれませんが、それぞれの行は以下のような形になっています。

browser.数字 = media属性で指定する識別子=USER-AGENTに含まれる文字列

 さて、ここまできたらもう説明を加える必要はないでしょう。もし、あなたのお気に入りのWebブラウザがCocoonでサポートされていないなら、ここに定義を追加してやればよいのです。

 ここでは例として、Palm用のWebブラウザXiinoの設定を付け加えてみます。まず、XiinoのUSER-AGENTヘッダですが、以下のような値に設定されています(PalmVで利用している場合)。

Xiino/1.0.5J[ja](v.3.5.0; 153x130; g4)

 Xiinoという文字列がUSER-AGENTヘッダに含まれていれば、Xiinoからのアクセスであると判断してもよさそうです。以下に示すような定義をcocoon.propertiesに付け加えてやりましょう。

browser.14 = xiino/Xiino

 これで、media属性の値としてxiinoを指定できるようになりました。

注文リストをiモード用とPalm用に変換してみる

Index
XMLサーバ/Cocoon自由自在!
第3回 XML文書をiモードとPalmに対応させる
  スタイルシートの切り替えに挑戦
スタイルシート切り替えの仕組みは?
  注文リストをiモード用とPalm用に変換してみる

「XMLサーバ/Cocoon自由自在!」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間