<?xml-stylesheet?>処理命令

歳をとればもう仕事に文句なんて言っていられないです.ともかく稼がねばなりません.何を間違えたか4月から移動で、開発と同時に会社の扱っているソフトのサポート担当もやる羽目になりました.サポートなんて今の会社が作り始めた組版ソフトの初期の頃、もう10年以上前ですが海外サポートを経験したことがあります.その頃はまだ売り出すのに必死で、国内なんてXMLがやっと注目され始めた頃でしたから、サポートもほとんどが海外なのでした.今回のサポートは日本のお客様だけです.
 
サポートはすべてメールなのですが、メールでサポートの回答を送っているだけだと同じような質問が来たときは二度手間です.是非FAQのページを作ろうと提案したら、前任者がXHTMLで作ってくれました.HTMLをコーディングするなんてもう何年ぶりなので、最初はそれを引き継いでシコシコ書いていたんですが、ともかくXHTMLでは生産性が悪すぎます.どこでそう感じたのかというと、
 
1.HTMLはスタイルとコンテンツが混在しています.ここはコンテンツ、ここはスタイルと頭の整理がつきません.
 
2.会社の決まりで特定のヘッダーとサイドメニューを共通に入れなければならないんですが、これが一個一個のHTMLに分散されます.もし共通項目が変わったら全部のHTMLを直さねばなりません.
 
3.文書の構造がわかりません.まあこれは前任者がXHTMLでスタイルを整えたいところは全部<br/>を入れまくり、リストの行頭文字も自分で打っているという有様で全然構造化していなかったのが悪いのですが...
 
4.実体定義/参照が使えません.長ったらしい製品名など、&xx;で済ませたいのですがHTMLではこれができません.
 
5.CDATAセクションが使えません."<"や">"なんかを煩雑につかうので使いたいのですがダメなのです.
 
6.FAQのページは、「問の目次」があって、そのあとにリンクされた「問+回答」が続くという構造をしています.「目次」から「問+回答」にリンクしなければならないのですが、リンク先idを書くのも全部手仕事です.また問は同じ内容を二回書かねばなりません.
 
こんなのXML+XSLTXHTMLでやらせるのが当たり前でしょう.
 
そこで、昔やったようにXMLでスラスラとコンテンツを書いて、<?xml-stylesheet type="text/xsl" href="xxx.xsl" ?>でスタイルシートを紐付けし、XHMLに変換してブラウザ表示させようということにしました.
さてやり方ですが、XHTMLからどんどんいらない要素を削除して、コンテンツのみにします.リストなんかもちゃんと<ol>や<ul>を使います.そうすると実にすっきりして文書構造も把握しやすくなります.あとはこれをXHTMLに戻すためのXSLTスタイルシートを書いてやればおしまいです.
こんな例は例えば次のようなWEBサイトに基本テクニックとして紹介されています.
 
 
これでバッチリ完成と思ったのですが、やはりお客様に見ていただくためには、主要なブラウザでテストしなければなりません.そこでやってみた結果ですが、オドロキでした.
まず、IE9FireFoxはさすがにちゃんとXMLをURLに入れると<?xml-stylesheet ?>を解釈してXHTMLに変換して表示してくれます.ところが、ChromeはURLにXMLを入れると何も表示をしてくれません.ガッカリ!Operaに至っては、なんとかXSLTを実行しているらしいのですが、結果はグッチャングッチャンで、<ol>の行頭番号はダブっているは、同じテキストが2回表示されるはと散々な結果でした.
 
ということで、止むなくクライアントでXSLTを手作業で実行してXHTMLを作って、これをサーバーにアップしました.さすがにXHTMLなら、どのブラウザでも表示はバッチリです.
 
世の中HTML5だCSS3だと騒いでいる割りに、私からすれば基本的な<?xml-stylesheet ?>なんてChromeOperaもちゃんとサポートしてくれていないのですね.でも良く考えてみると、スマートフォンタブレットが普及している今日、マルチデバイス対応のページを作るのには、クライアントサイドでXSLTプロセッサを動かすという考え方自身が古いのかもしれません.例えばこのQ&AのページはPCのブラウザから見ることを前提としていますが、携帯にも対応させようとしたらやはりデバイスに応じてXSLTをサーバーサイドで動かすのが妥当でしょう.Chromeの見事なまでのXML無視は、このようなGoogleの考え方を如実に表しているのかもしれません.
 
ちょうど会社のサーバーはWindows Serverだったはずです.ASP.NETを使えば、こんなサーバーサイド処理はお手の物でしょう.
 

連休が明けたら会社で.aspxを提案してみたいと思います.