試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

DocBook文書について

ここでは、DocBook文書の概要などの抽象的な話と、文書例のみを扱い、変換ツールやその作業などについては触れない。

概要と特徴

色々なところに概要は載っている。

SGMLもしくはXML(今後はXMLのみ)というマークアップ言語の上で、DocBookの各要素(例: para)や属性(例: id)などを使用することでコード(DocBook文書)を書く。その際のルール*1は、文書型定義(DTD)に書かれているが、今後はRELAX NG(リラクシング)という言語を使用するのが主流になるようだ。
(2007/9/22)DTDRELAX NGのような、文書構造を定義する言語は「スキーマ言語」と言い、他に、XML Schemaという形式も使用される。

  • DocBook文書自体には論理構造のみを記述し、見栄えに関する記述は別のところで行う
  • 書かれたDocBook文書は、ツールで色々な形式に変換して出力することが可能
  • 書く上のルールは、(X)HTMLが理解できる程度であれば、それほど難しくない上、Emacs+nXML modeを使用していれば、自動的に文法チェックをしてくれたり、挿入可能な要素名や属性名の候補を出してくれたりするので、書きやすい
  • スタイルシート(SGMLの場合はDSSSL、XMLの場合はXSL)により、出力に関する幅広いカスタマイズが可能
  • (X)HTML形式へ出力するときには、見やすく、たどりやすいレイアウトになっている。独自のCSSを使用するようなコードを(DSSSLやXSLのスタイルシートに)書くことで、見栄えのカスタマイズもできる

今後はXML版が主流になるため、SGML版に関しては扱わない。

取り扱うバージョン

新しめで、かつ安定している、XML版のバージョン4.4を扱うことにする。

ルート(最上位)要素について

「book(本)」もしくは「article(記事)」をルート要素として構成することが多い(chapterなども可能)。「set」をルート要素として複数のbookを含めることもできるが、あまり使われていない?

要素の一覧、意味など

英語のみ。「Reference」以下に一覧がある。chm形式を落としてxchmGnoCHMで見るとたどりやすいかも。

要素や属性は膨大な数あるのだが、使用頻度の高いものは非常に限られるので、気にすることはないのではないかと思う。

bookの例
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
       "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">

<book lang="ja">
 <bookinfo>
  <title>タイトル</title>

  <author>
   <firstname>太郎</firstname>
   <surname>山田</surname>
   <affiliation>
    <address><email>taro@example.com</email></address>
   </affiliation>
  </author>

  <copyright>
   <year>2007</year>
   <holder>Copyright (C) Taro Yamada</holder>
  </copyright>

  <abstract>
   <para>この本の概要</para>
  </abstract>
 </bookinfo>

 <preface id="preface">
  <title>前書き</title>
  <para>前書きの段落</para>
  <para>前書きの2段落目</para>
 </preface>

 <chapter id="chap1">
  <title>はじめの章</title>
  <para>段落</para>
  <sect1 id="firstsect">
   <title>1段階目のセクション</title>
   <para>1段階目のセクションの段落</para>
   <sect2 id="secondsect.firstsect">
    <title>2段階目のセクション</title>
    <para>2段階目のセクションの中の段落</para>
   </sect2>
   <sect2 id="secondsect2.firstsect">
    <title>2段階目のセクションの2つ目</title>
    <para>2段階目のセクションの2つめの中の段落</para>
   </sect2>
  </sect1>
 </chapter>

 <chapter id="chap2">
  <title>2番目の章</title>
  <para>2番目の章の段落</para>
 </chapter>
</book>
articleの例
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
          "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">

<article lang="ja">
 <articleinfo>
  <title>タイトル</title>

  <author>
   <firstname>太郎</firstname>
   <surname>山田</surname>
   <affiliation>
    <address><email>taro@example.com</email></address>
   </affiliation>
  </author>

  <copyright>
   <year>2007</year>
   <holder>Copyright (C) Taro Yamada</holder>
  </copyright>

  <abstract>
   <para>この記事の概要</para>
  </abstract>
 </articleinfo>

 <sect1 id="sect1">
  <title>セクション1</title>
  <sect2 id="sect2">
   <title>セクション2</title>
   <sect3 id="sect3">
    <title>セクション3</title>
    <sect4 id="sect4">
     <title>セクション4</title>
     <sect5 id="sect5">
      <title>セクション5</title>
      <para>セクション5の段落</para>
     </sect5>
    </sect4>
   </sect3>
  </sect2>
 </sect1>

 <sect1 id="sect1-2">
  <title>2つめのセクション1</title>
  <para>2つめのセクション1の段落</para>
 </sect1>

</article>
setの例
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE set PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
       "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">

<set lang="ja">
<title>タイトル</title>
<setinfo>
 <abstract>
  <para>全体の概要</para>
 </abstract>
</setinfo>

<book id="book1">
 <bookinfo>
  <title>1冊目のタイトル</title>
  ...
 </bookinfo>
 ...
</book>

<book id="book2">
 <bookinfo>
  <title>2冊目のタイトル</title>
  ...
 </bookinfo>
 ...
</book>

関連記事:

*1:どのような意味・目的のどのような要素や属性が用意されているのか、ここで挿入できる要素はどれか、使用できる属性は何か、など