Index > DocbookをHTMLに変換するには
Sun, August 30, 2009

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 を使います。

 Twitter
follow me on Twitter
 Categories