XSL仕様とXSL Formatter

2000年5月10日
アンテナハウス株式会社

XMLファイルと表示・印刷

XMLファイルは、テキスト・データにタグで論理的な意味を付けています。このため、そのまま見たのでは意味が理解しづらくなっています。タグの論理的な意味に、レイアウト指定することで、テキスト・データを整形して、視覚的・聴覚的な表現にします。

XMLファイルの意味を人間が理解するためには、XMLファイルを表示・印刷するプログラムと切り離して考えることができません。

表示・印刷する方法

XMLファイルを人間に理解できるように表示するには、次のような方法があります。

  1. 専用のビューアで表示する
  2. CSSを使ってWebブラウザで表示、印刷する
  3. HTMLに変換してWebブラウザで印刷する
  4. XSL Formatting Object(FO) ツリーに変換して、XSL FO ツリーを組版プログラム(XSL Formatter)で組版して表示・印刷する

専用のビューアの例

XMLファイルを表示する方法の一つに専用のビューアを作る方法があります。グラフィックス、数式、化学式等については専用のビューアが公開されています。

  1. SVG(Scalable Vector Graphics)--AdobeがBrowser用のプラグイン・ビューア(β版)を出している。
  2. MathML(Mathmatical markup Language)-- W3C Math ホームページ(http://www.w3.org/Math/)を参照。既に多数の専用ソフトウエアが出ている。
  3. CML(Chemical Markup Language)--JumboBrowser

これらはそれぞれXMLで表現するための独自の仕様(DTD)が提案されています。DTDで、使えるタグを規定しているので、タグの意味が固定です。

論理的内容が、タグで複雑に構造化されていますので、汎用のビューアで表示するのは困難です。

汎用のXMLビューアを作ったとして、SVGを表示するには、汎用XMLビューアからSVG表示モジュールを呼び出して表示することになるでしょう。

WebブラウザでXMLを表示する

テキストを中心とするXMLドキュメントをブラウザで表示する方法としては、CSSを使って表示する方法、およびXSLTプロセサを使ってHTMLに変換して表示する方法が使われています。

XSLTによる変換処理は、サーバ側で行う場合とクライアント側で行う場合があり、両方とも既に実際に使えるようになっています。

クライアントサイドの変換はIE5などの既存のブラウザが対応していることもあり、今後は、XSLTをつかってHTMLに変換して表示する方法が普及しそうです。

この、XMLをHTMLに変換する方法は、XSL Formatterを用いる方法の有力なライバルです。

XSL仕様

XSLは、任意に構造化されたXMLファイルを、デザイナーの意図に沿って表現するための言語仕様です。

W3Cで仕様作成作業が進んでいます。仕様書の名前とURLは次の通り。

Extensible Stylesheet Language (XSL)Version 1.0
http://www.w3.org/TR/2000/WD-xsl-20000327/

上記は最終ドラフトになっており2000年4月30日がコメントの最終期限でした。既に、最終期限を過ぎていますので、寄せられたコメントにもよると思いますが、順調ならば近く正式仕様になると思われます。仕様書は数百ページに渡る膨大なものです。

当初は、ソースXMLをFOツリーに変換するためのXSLTの仕様とXSLの仕様が一緒に検討されていましたが、1999年4月に分離しました。XSLTの仕様の方は既に昨年正式仕様になっており、XSLTプロセサは市場に出回っています。ここでいう、XSLはXSLTとは別のものです。

XSLによる表示・印刷プロセス

XSLを処理するプログラム(XSL プロセサ)は、概念的に、次の2段階の処理を行います。

トランスフォーメーション
ソースのXMLにXSLスタイルシートを適用して、FOツリーに変換します。
フォーマッティング
FOツリーを、紙やディスプレイ、音声などのメディア上に表現します。

なお、この通りにプログラムを分ける必要はありません。例えば、前半に専用のコンバータを開発しても構いません。

XSLTによるトランスフォーメーション

トランスフォーメーションでは、ソースXMLファイルから目次を生成したり、ソースのXMLデータを並び替えて、ソートした表にしたり、あるいは、FOツリーにソースにない情報を追加するなどの柔軟な処理もできます。

なお、XMLからHTMLへの変換もXSLTとスタイルシートで行いますが、HTMLに変換するスタイルシートとFOツリーを作るためのスタイルシートとは全く異なります。

フォーマッテイングの概念

XSL仕様の実装のために提示されている、フォーマッティングの概念的モデルは何段階にもなっていますが、かいつまんで言いますと、次のようになります。

Formatting Object(FO)ツリーから領域ツリー(AreaTree)を作りだし、AreaTreeをレンダリング(装置に表示)する。

XSL仕様では段落、表などフォーマッテイングの対象になる要素をFormatting Objectと呼びます。これが、XMLエレメントです。

ページのサイズやインデント、文字間・単語間のスペースの量などの属性値をFormatting Property といいます。XMLエレメントの属性になります。

Formatting Objectの内容がXMLエレメントの内容となります。

ページネーション関連Formatting Object

XSL Formatterがページを作成するのに使うFOのツリー

「Extensible Stylesheet Language (XSL)Version 1.0」
6.1.4.6Pagination Tree Structureを引用

ページレイアウトモデル

simple-page-masterで、ページの中で並行して進む複数の本文領域とヘッダ、フッタ、サイドバーを定義します。ページの中の領域には名前を付けます。

FOツリーの中のスタイル付けした内容を、simple-page-masterの領域名に対応付けます。

フォーマッタは、simple-page-masterに内容を配置していき、ページのシーケンスを自動的に作ります。場合によっては、simple-page-masterの並びを明示的に指定しておき、そこに内容を割り付けていきます。

XSLのメリットはなにか?

XSLは、CSS等と比べて非常に複雑です。理解するのも、使うのも数倍は大変です。では、その複雑さを補うメリットがあるのでしょうか?

  1. スタイルのソースXMLからの切り離しとスタイルの使い回し(CSSでも可)
  2. 組版の表現力が高い
  3. 元文書からの変換処理で、いろいろできる
  4. 国際化:縦書など、文字の進み順と行の進み順を自由に指定できます。

スタイルシートの使いまわし

XMLで表現と構造を分離したことによって、スタイル指定を内容から分離することで、内容を書く著者とレイアウト指定するデザイナの作業の分離と、デザイン指定=スタイルシートの使い回しができることは基本的なメリットになります。

文書のDTDに対応するスタイルシートを蓄積すれば、スタイルシートを資産化することができるでしょう。

組版の表現力が高い

XSLは、ページネーションを導入していますので、Webブラウザのように単純にスクロールするというものとは根本的に異なります。なお、XSLでは、Webブラウザのフレームベースの構造も提供できます。

元文書からの変換処理

XSLTとXPathにより元文書の文脈により強調したり、色を変えたりする処理ができます。

例えば、マイナスの数値を赤で、プラスの数値を黒で表示するように作ることもできます。

XSLの問題点

最近、日本語が出版された「XMLアプリケーションズ」(翔泳社刊)の中に次のような文章がありました。

(以下、同書p.288から引用)

XSLの最終仕様は不朽の作となることでしょう。仕様の作成者は、CSSとDSSSLの機能をすべて組み合わせることを最低限の目標としています。従って、最終的に非常に強力で複雑なツールができあがるであろうことはいうまでもありません。
ただし、次のような課題もあります。

  • この仕様をサポートする安価なソフトウェアができるか。
  • 普通のXMLプログラマがCSSよりも簡単に使えるようなものになるか。

どちらか一方の答えでも「いいえ」ならば、XSLは、その存続を望むファンをわずかに持つ、単なるプログラミング言語の1つにしかならないでしょう。

現状

この本は、原著が1998年ですので既に相当古くなっています。最近の進捗は。。

  1. 当初仕様の中で、XSLTプロセサは既に実用になっています。
  2. XSL Formatterは、我々が実装し、安価に提供することをお約束します(他にもやっている人は居ると思いますが)。
  3. 従って、残りはXSLをどうやって簡単に使えるようにするかということになります。

XSLの普及のための課題

XSLスタイルシートを簡単に書くことができるようにするのは相当な難問ですが、大体、次のようなステップで進めて行きたいと考えています。