DocbookをHTMLに変換するには
Docbookで書かれたXMLをHTMLに変換するのは簡単です。
なぜなら、
DocBook-XSL
というDocbookをいろいろな形式に変換するためのスタイルシート集があるからです。
DocBook XML documents into other DocBookOutputFormats, such as HTML, PDF, Microsoft HTML Help, and man pages.
ただし、デフォルトで生成される出力はかなり素朴なものなので、 多くの場合、 商用で使うには、スタイルシートをカスタマイズする必要があるのではないでしょうか。
DocBook-XSLのスタイルシート集は結構巨大なので、どこからどうカスタマイズに手をつけたらいいか、わからないのですが、 DocBook XSL:The Complete Guide というすばらしいドキュメントがあるので、これを読んでいけば、DocBook-XSL が想定しているカスタマイズ範囲ならば かなり短期間でカスタマイズ対応ができそうです。
今回は、 デフォルトで生成される List of Tables を消す、というカスタマイズをやってみたのでメモとして残します。
とりあえず変換 DocBook をHTMLに変換するには...
事前に xsltproc コマンドと DocBook-xsl をインストールしておきます。 ここでは、Cygwinで作業しています。 Ubuntu等のLinuxで作業する場合は、スタイルシートへのパスなどは適宜読みかえてください。
Cygwin
Cygwinでは、docbook-xsl パッケージをインストーラで選択するだけでインストールできます。 インストール先は /usr/share/docbook-xsl/ 以下でした。
Ubuntu
apt-get install docbook-xsl docbook-xsl-doc-html でインストールしました。 スタイルシートがインストールされた先は、 /usr/share/xml/docbook/stylesheet/nwalsh/ でした。
その上で、
$ xsltproc /usr/share/docbook-xsl/html/docbook.xsl mydocbook.xml > single.html
とすれば、シングルページのHTMLに変換されます。
また、Chunkと呼ばれる複数ページからなるHTMLには、以下のコマンドで変換できます。
$ xsltproc /usr/share/docbook-xsl/html/chunk.xsl mydocbook.xml
出力ファイル名は指定しません。 デフォルトで、index.html とその他HTMLが生成されます。index.htmlがスタートページになります。
List of Tables を削りたい
デフォルトで用意されているスタイルシートで変換すると Table of Contentsのあとにテーブル一覧が作成される(List of Tables)。 これは不要なので削りたい。どうカスタマイズすればいいか、という話。
STEP1 該当するテンプレートを探す
/usr/share/docbook-xsl/html/autotoc.xsl 内の
<xsl:template name="make.lots">
...
</xsl:template>
make.lots という名前のテンプレートで List of Tables を生成しているようです。
STEP2 カスタマイズレイヤーの用意
今回は chunk 方式でhtmlを出力するので、まずは以下のようなカスタマイズ用 my.xsl を用意。
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="/usr/share/docbook-xsl/html/chunk.xsl" />
</xsl:stylesheet>
※chunk.xsl をインポートしただけ。
カスタマイズ方法は、 Docbook XSL: Complete guide の CustomizationLayer項目 を参照のこと。
STEP3 my.xsl に STEP1で見つけておいたテンプレートをコピー
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="/usr/share/docbook-xsl/html/chunk.xsl" />
<xsl:template name="make.lots">
...
</xsl:template>
</xsl:stylesheet>
※make.lots のテンプレートを単純にコピーしただけ。
STEP4 STEP3でコピーしたテンプレート make.lots をカスタマイズ
make.lots テンプレート内に
<xsl:if test="contains($toc.params, 'table')">
...
</xsl:if>
というxsl命令がある。
どうやらここで、table が含まれている場合、List of Tables に該当する情報を
作り出されているようなので、単純にここをコメントアウトします。
<!--
<xsl:if test="contains($toc.params, 'table')">
...
</xsl:if>
-->
STEP5 my.xsl スタイルシートを使って変換
$ xsltproc my.xsl mydocbook.xml
※カスタマイズした内容を反映するには、 スタイルシートに /usr/share/docbook-xsl/html/chunk.xsl でなく、my.xsl を使います。