Home

DocBook文書を日本語で書く

最終更新日: 2002年 1月 10日


はじめに

JBoss ManualにならってJBoss FANの文書をDocBook形式のXMLで書くことにしました。XMLで書いておけば、機械的にHTMLやXHTMLに変換したり、目次や索引を自動作成することができます。フリーのDocBookツールはいくつかありますが、Norman Walsh氏のDocBook XSLTスタイルシートを使うことにします。これとXalanのようなJava上で動作するXSLTプロセッサを組み合わせればJava版のDocBookツールができあがります。XSLTを使う理由はそのカスタマイズの容易さです。たとえば、各文書のフッタにコピーライトを入れるようなことをXSLTのテンプレートを書くことで実現できます。この文書では、DocBookの導入方法とDocbookで日本語文書を書くポイントをまとめてみます。

準備

DocBook XSLスタイルシートは、古いバージョンではlinkxrefが動作しないので、最新版の1.48を使います。XSLTプロセッサとしてはapacheプロジェクトのXalanを使います。XalanのリリースパッケージにはXercesが含まれているので、UTF以外にもXMLのencodingとしてShift_JISやEUC-JPなどを使うことができます。

表 1. 必要なツール一式

ツール名URL説明
docbook-xsl 1.48http://sourceforge.net/project/showfiles.php?group_id=21935DocBook用のXSLスタイルシート
xalan-j_2_2_D14http://xml.apache.org/xalan-j/index.htmlXSLTプロセッサ

DocBook文書を書く

DocBook DTDを満たすXML文書を書きます。次の例は2つのchapterから構成されるbookを表します。

<?xml version="1.0" encoding="UTF-8"?>
<book>
  <bookinfo>
    <title>EJBのコツ</title>
    <pubdate>最終更新日: 2001年 12月 13日</pubdate>
    <copyright>
      <year>2001</year>
      <holder>MINAMOTO Fusayuki</holder>
    </copyright>
  </bookinfo>

<chapter id="cmp">
  <title>CMPとは何か</title>
  <section>
    <title>CMPだと簡単</title>
    <para>
    本当ですか?
    </para>
  </section>
  <section>
    <title>CMPを使えばSQLいらず</title>
    <para>
    そんなことはない。
    </para>
  </section>
</chapter>

<chapter id="bmp">
  <title>BMPならどうだ</title>
  <section>
    <title>BMPだとチューニングができる</title>
    <para>
    でも面倒では?
  </para>
  </section>
</chapter>
</book>


DocBookがサポートするタグの種類は多いですが、通常よく使うものは限られています。DocBook DTDについてはDocBook XSL Stylesheet Documentationをご覧ください。

スタイルシートを書く

DocBook文書に対してXSLTで書いたスタイルシートを適用してHTML文書を生成することにします。DocBook XSLでは、HTML生成用にhtml/docbook.xslという汎用のスタイルシートが用意されています。私たちユーザは自前のXSLTスタイルシートにこれをimportして、カスタマイズするためのパラメタを上書きすればよいのです。次の例では、html/docbook.xslをimportしたのちに、CSSファイル名を指定しています。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version='1.0'>

  <xsl:import href="../../html/docbook.xsl"/>
  <xsl:param name="html.stylesheet">article.css</xsl:param>

</xsl:stylesheet>

DocBookで日本語を書く

DocBook形式のXML文書をUTF-8で書いて、XSLTで変換した結果をEUC-JPにする方法を書きます。

XMLファイルのエンコーディング指定

DocBook XMLファイルのエンコーディングを指定します。 encoding属性をEUC-JPにします。

<?xml version="1.0" encoding="UTF-8"?>

DocBookの地域化指定

DocBook XSLは地域化(localization)の対応がなされています。たとえば、日本語の対応をするには、XML文章のルートの要素で次のようにlang="ja"を指定すると、Chapter 1は「第1章」のように出力されます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book
  PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
<book lang="ja">
...
</book>

出力エンコーディングの指定

DocBook XSLTスタイルシートを修正します。 初期状態では、HTMLのスタイルシートhtml/docbook.xslでは出力エンコーディングにISO-8859-1を指定していますので、これをEUC-JPに修正します。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version='1.0'>

  <xsl:import href="../../html/docbook.xsl"/>
  <xsl:output method="html"
              encoding="EUC-JP"
              indent="no"/>

</xsl:stylesheet>

HTML文書の生成

HTML文書の生成はXSLTプロセッサであるXalanがおこないます。次の設定ではorg.apache.xalan.xslt.Processの引数として、XMLファイル名、XSLTスタイルシート名、結果のHTMLファイル名を渡しています。

XALAN_HOME=/home/minamoto/xalan-j_2_2_D14
CLASSPATH=$XALAN_HOME/bin/xerces.jar:$XALAN_HOME/bin/xalan.jar:$XALAN_HOME/bin/xalansamples.jar:$CLASSPATH
java -cp $CLASSPATH org.apache.xalan.xslt.Process -in docbook-intro.xml -xsl article.xsl -out docbook-intro.html

おわりに

この文書は実際にDocBookを使って書かれています(ソースはこちらです)。DocBook XSLのすべてのタグを使ったわけではありませんが、通常の文章を書くのに特に不自由はなさそうです。XSLTプロセッサとして当初はSaxonを予定していましたが、DocBookと組み合わせると日本語の出力がうまくゆかず断念しました。DocBookのスタイルシートの構造に慣れたら再チャレンジしてみたいと思います。

Home

Copyright © 2001,2002 MINAMOTO Fusayuki <minamoto@users.sourceforge.jp> All Rights Reserved.