ホーム  > X-plus >  XML & 開発

この記事を送る はてなブックマークに追加する
テキストリンクコードを取得する

XSL-FOを理解する ~XSL-FOのキホン~

2009年07月15日作成 

M.A.

はじめに

 印刷物は実に多種多様です。新聞、雑誌、書籍、広告といった商業印刷物や、社内文書、写真付き年賀状、クラス便りといったパーソナルな印刷物があります。特に商業印刷物は身近にたくさんありますが、実際にどのようにして出来上がるのかその長い長い製作過程は意外と一般人のあずかり知らないものです。そんな発見も交えながらXSL-FO(※ 1)について調べたことをまとめて行きたいと思います。

 ※1)XSL-FOは正式名称はXSLですが、XSLという言葉は構造変換を指定するスタイルシート(言語)と混乱するのでXSL-FOと呼ばれることが多いようです。

XSL-FOとは?

 XSL-FOとは「XMLをきれいに印刷する目的で自動組版を行う方法」を定めた規格です(※ 2)。W3Cで2006年12月5日に規格として勧告されており正式名称は「Extensible Stylesheet Language (XSL) Version 1.1」です。規格本体は非常に量が多く(A4で印刷して500ページ程)一般向けではなく開発者向けに書かれています。一応、日本語版がJISにあり閲覧だけなら無料です(TS X0088拡張可能なスタイルシート言語(XSL)1.1)。

内容は、「ページ組版プロセスの概念」、「レイアウト・モデル」、「組版の対象になる段落・リスト・表などのXSL-FO要素」、「サイズなどを指定するプロパティについて」等です。この規格を実装したものが組版ソフト(組版エンジン)です。

  ※2)仕様書を確認したい 殊勝な 方はW3Cのページから確認できます。

 XSL-FOを利用して原稿が印刷物になるまでの一般的な流れを図にすると以下の通りです。

原稿が印刷物になるまで

原稿が印刷物になるまで(クリックで拡大)



 原稿がHTMLやXHTMLで存在するとして、XSL-FOによる自動組版の第一歩は、まず原稿をXML形式にすることです。このXMLを、スタイルシートと一緒にXSLTプロセッサにかけてFO形式に変換します。XSLTとは、XMLツリーを構造変換するための仕様で、やはりW3C勧告になっています。

※ここでいうスタイルシートはHTMLなどで見栄えを整えるために使われるCSSのスタイルシートとは違います。これは、XML形式で構造変換を指定するための、XSLTの規格に乗っ取ったスタイルシートです。XSLスタイルシートといった方が誤解がなくて良いかもしれません。

組版の意味

 組版という言葉のイメージをつかんでおきたいと思います。組版はもともと活版印刷の用語で文字通り活字を並べて版を組むことですが、コンピュータを使った印刷では文字や図などを紙面に配置していく工程のことを指します。というとDTPを思い浮かべる方もいらっしゃるでしょう。DTPの定義はいろいろあるようですが、大まかに言ってコンピュータを使って一人のオペレータが原稿作成、画像編集、レイアウトを行うことです。DTPと自動組版はどう違うのかとはっきりと区別するのは難しいですが、作業の仕方でいえば、DTPは画面上でレイアウトをプレビューしながら視覚的対話的に作業しますが、XSL-FO自動組版ではテキストエディタなどを使って
   <fo:simple-page-master margin="2cm" page-width="21.0cm" page-height="29.7cm" master-name="A4-portrait">
   (余白は2cm、用紙は横21.0cm×縦29.7cm、この設定に”A4-portrait”という名前をつける)
というようにすべて言葉で指定していくという違いがあります。

 社内的な報告書をワードで作るような場合でも、用紙サイズや余白を設定したりあるいは段落や見出しを作ったりします。出版されている書籍は、表紙、目次、前書き、本文、用語集、索引など、基本的な組み方の違うページが数種類組み合わさってできています。また、1ページの中には、縦書き、横書き、タイトル、多言語混在、表、ランニングヘッド、脚注、ページ番号などいろいろな要素が含まれています。このように様々なレイアウトを設定していく作業は、XSL-FOによる自動組版ではスタイルシートの作成によって行います。

レイアウトの例と部分の名称

レイアウトの例と部分の名称

XSL-FO自動組版の第一歩~FOPでHello,World!

 XSL-FOによる自動組版がどういう動きをするのかを実際に体験してみましょう。組版ソフトは、同じコラムの記事「Apache FOPを使ってみる~XSL-FOを使った自動組版その1」で紹介されているFOPを使ってみます。

 FOPをApacheのサイトからダウンロードしたら、解凍したフォルダをCドライブなど適当な場所に置きます。フォルダ名は「fop-0.95」というようなバージョン名が入ったものになっているはずです。FOPを使ってXMLファイルからFOとPDFを作る手順は以下の通りです。(PC環境はWindowsXPで、fopは0.95をダウンロードしました。)

1.C:\fop-0.95-bin\fop-0.95フォルダを開く

2.スタートからコマンドプロンプトを起動する

3.C:\fop-0.95-bin\fop-0.95フォルダに移る(cd C:\fop-0.95-bin\fop-0.95)

4.テキストエディタで次の2つのファイルを作って同じフォルダに置く。name.xmlのname要素には自分の名前を入れてください。

 1)name.xml

<name>Minobu</name>

 2)xml2fo.xsl

<div id="code">
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <xsl:output method="xml" indent="yes"/>
 <xsl:template match="/">
  <fo:root>
   <fo:layout-master-set>
    <fo:simple-page-master master-name="A4-portrait"
          page-height="29.7cm" page-width="21.0cm" margin="2cm">
      <fo:region-body/>
    </fo:simple-page-master>
   </fo:layout-master-set>
   <fo:page-sequence master-reference="A4-portrait">
      <fo:flow flow-name="xsl-region-body">
        <fo:block>
           Hello,<xsl:value-of select="name"/>
        </fo:block>
      </fo:flow>
   </fo:page-sequence>
  </fo:root>
 </xsl:template>
</xsl:stylesheet>

5.コマンドプロンプトで以下を入力してEnter

fop –xml name.xml –xsl xml2fo.xsl –foout name.fo

 

 フォルダにname.foというファイルができます。これがFOです。中身はXMLです。

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master margin="2cm" page-width="21.0cm" page-height="29.7cm" master-name="A4-portrait">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body">
<fo:block>
           Hello,Minobu</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>

6.コマンドプロンプトで以下を入力してEnter

fop –xml name.xml –xsl xml2fo.xsl –pdf hello.pdf

 フォルダにname.pdfというファイルができます。これがname.xmlファイルをxml2fo.xslの指定に基づいて自動組版した印刷物のPDFファイルです。このPDFファイルをAdobeReaderなどのPDF閲覧ソフトで開くとこんな感じです。name.xmlファイルで要素に入れた名前が入った印刷物になっています。

fo-3.jpg

 いかがでしょうか、XMLが印刷物になりました(ちょっと寂しいですが)。もっともこれは一番単純な例です。

まとめ

 上の例で使ったxml2fo.xslというXSLスタイルシートには、元になるxmlファイルのツリー構造(今回は構造という構造はありませんが)の各ノードに対応してFOを作り上げていくための指示がルールに従って記述されていますが、このXSLスタイルシートを書くにはXSLTと印刷の両方に関する深い理解が必要とされています。これから数回に分けて説明していきたいと思います。よろしくお願いします。



この記事と関連の高い記事

関連キーワード:Apache FOP


関連キーワード:XML


関連キーワード:XSL-FO




ページトップへ戻る