<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.2//EN"[
  <!ENTITY author.joe.mail "oldgen@pchome.com.tw">
  <!-- 本 HOWTO 的中譯 作者的 email url -->
  <!ENTITY source.sgml.url "">
  <!-- 本 HOWTO 的中譯 SGML 格式來源檔案的路徑字串 -->
  <!ENTITY source.sgml.filename "doctrans.sgml">
  <!-- 本 HOWTO 的中譯 SGML 格式來源檔案名稱 -->
  <!ENTITY % module.sgmlshare.path "/usr/local/share/sgml">
  <!ENTITY system.sgmlshare.path "/usr/local/share/sgml">
  <!-- localhost 的 SGML 相關分享檔案路徑 -->
  <!ENTITY % module.sgmlcat.path "/etc/sgml">
  <!ENTITY system.sgmlcat.path "/etc/sgml">
  <!-- localhost 的 SGML catalog 設定檔案路徑 -->
  <!ENTITY system.docbookshare.path "%module.sgmlshare.path;/docbook">
  <!-- localhost 的 DocBook DTD 檔案路徑 -->
  <!ENTITY system.docbookcat.path "%module.sgmlcat.path;/docbook">
  <!-- localhost 的 DocBook catalog 設定檔案路徑 -->
  <!ENTITY system.docbookexec.path "/usr/local/lib/openjade">
  <!-- localhost 的 DocBook 解譯器工具檔案路徑 -->
]>
<article>
  <articleinfo>
    <title>DocBook XML/SGML Processing Using OpenJade</title>
    <authorgroup>
      <author>
        <firstname>Saqib</firstname>
        <surname>Ali</surname>
        <affiliation>
          <address> <email>saqib@seagate.com</email> </address>
        </affiliation>
      </author>
      <author>
        <othername>老貢生</othername>
        <affiliation>
          <address> <email>&author.joe.mail;</email> </address>
        </affiliation>
      </author>
    </authorgroup>
    <revhistory>
      <revision>
        <revnumber>v1.0.0</revnumber>
        <date>2003-11-19</date>
        <revremark>將 TLPD HOWTO 站原文 v2.2.8 版翻譯成繁體中文版，並首次在網路公開散佈。</revremark>
      </revision>
    </revhistory>
    <abstract><title>譯文介紹</title>
      <para>Mr. Ali 的這篇介紹如何建立設定 docbook 格式文件執行環境的文章，寫得非常簡潔明白，對我個人在接觸 docbook 初期的環境安排幫助很大，所以翻譯成中文，希望對有志學習者有所幫助。但由於某些本 HOWTO 所談到的執行套件已有新的改版，照著 Mr. Ali 的原方法反而無法執行順利，因此我擅自做了一些修正，並加入了一些繁體中文特有的問題說明，所以如果你希望看到完全忠實的原文，請到 TLDP：HOWTO 原文的大本營，去找 <ulink url="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/DocBook-OpenJade-SGML-XML-HOWTO.html">DocBook XML/SGML Processing Using OpenJade</ulink> 這篇文章。如果是對譯文本身有修正補充意見，請 E-Mail <email>&author.joe.mail;</email> 譯文作者。</para>
    </abstract>
  </articleinfo>
  <sect1 id="intro">
    <title>簡介</title>
    <para>術語縮寫:</para>
    <orderedlist>
      <listitem>
        <para>SGML - Standard Generalized Markup Language(一般標準標記語言)</para>
      </listitem>
      <listitem>
        <para>XML - Extensible Markup Language(可延伸標記語言)</para>
      </listitem>
      <listitem>
        <para>RTF - Rich Text Format(MS Windows 系統的格式化文件)</para>
      </listitem>
      <listitem>
        <para>HTML - HyperText Markup Language(超文字標記語言)</para>
      </listitem>
      <listitem>
        <para>PDF - Portable Document Format(可攜式格式文件)</para>
      </listitem>
    </orderedlist>
    <para>本文主題在討探，如何安裝設定 OpenJade 這個解譯器，來把 DocBook 3.1 和 4.2 這些由 SGML 和 XML 格式語言定義出來的文件，轉換成 HTML,RTF,PDF 這些其他輸出格式的文件。</para>
    <sect2 id="copyright">
      <title>版權與許可</title>
      <para>這段因為是適用美國法律上的意涵，所以不敢隨便亂翻，大意是說 Mr. Sagib Ali 准許你複製包裝改寫此文件，但你必須受 GPL 公共授權條款的約束，也就是基於此文衍生的文件，應使用同樣的授權方式給他的使用者。但一切法律上的解釋應依原文字句的意義，而非翻譯者中譯的解釋。(譯者註：也因為如此，此份中譯文件，也與 Mr. Sagib Ali 的原文一樣授權方式，准許你複製包裝改寫此文件。)</para>
      <para> This document is Copyright 2001 by Saqib Ali. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is available at <ulink url="http://www.gnu.org/copyleft/fdl.html">http://www.gnu.org/copyleft/fdl.html</ulink>. </para>
    </sect2>
    <sect2>
      <title>感謝</title>
      <itemizedlist>
        <listitem><para>當然最先要感謝原文作者 Mr.Sagib Ali 和協助他完成本文的朋友(包括真主阿拉在內)，因為沒有他的原文，當然也就沒有這篇譯文。</para></listitem>
        <listitem><para>其次是要感謝透過網路建立交流管道的朋友，不管你曾經給予寶貴建議，給我很多啟發，或者只是單純的閱覽此篇文章而已，當缺少注目和掌聲，一切就會缺乏意義而不必持續了，所以你們才是一切翻譯的原動力。</para></listitem>
        <listitem><para>結尾總是要感謝我娘，那個享受不到任何奉養，還整天要貼老本維持兒子三餐起居的可憐老婦人。她永遠搞不懂為何每天我都很忙卻賺不進一毛錢，但她沒有抱怨，只要我活的快樂就好。我，總是揮霍她的慷慨，很任性的追求我自己的意義。</para></listitem>
      </itemizedlist>
    </sect2>

    <sect2>
      <title>DocBook 是什麼</title>
      <para> DocBook 是一種文件型態的定義(document type definition:簡稱 DTD)，而 DTD 的主要作用就是定義一個文件的語法。DocBook 敘述了一種適用於技術文件上的結構和形式，他有利於普及化的原因是使用簡單而又功能完整。</para>
      <para>一個 DTD 就如同一本文法書一般定義了一個文件應有的語法，藉由一組標籤和屬性的設定，來描述一個文件各類別不同的資料。所以 Docbook 也就是一本文件寫作的文法書，每個在文件中使用的標籤，都必須在 DTD 中明確而正式的被定義。</para>
    </sect2>
    <sect2>
      <title>DSSSL 是什麼</title>
      <para>我們稱一個文件樣式語法規格的語言為 DSSSL (Document Style Semantics and Specification Language)， DSSSL 定義了如何將一個 SGML 文件(譯者註:這裡是指 Docbook 文件)，轉換成方便人們閱讀的格式，例如 HTML, RTF 和 PDF 等等。</para>
    </sect2>

    <sect2>
      <title>我們需要那些工具</title>
      <para>設定 OpenJade 轉換 SGML 和 XML 格式文件的工具有:
     <variablelist>
      <varlistentry><term>必要工具</term>
      <listitem><para>執行格式轉換工作絕對不能缺少的基本工具:
        <itemizedlist>
           <listitem>
             <para>OpenJade(SGML 的解析器和轉譯器)</para>
           </listitem>
           <listitem>
             <para>DocBook DTDs(Docbook 的格式定義文件)</para>
           </listitem>
           <listitem>
             <para>ISO Entities(外部插入實體的設定文件)</para>
           </listitem>
           <listitem>
             <para>Norman Walsh's DSSSL(敘述如何轉換成其他格式的樣式文件)</para>
           </listitem>
         </itemizedlist>
       </para></listitem>
     </varlistentry></variablelist>
     <variablelist>
      <varlistentry><term>選項工具</term>
      <listitem><para>能和 openjade一起合作，轉換成更多種格式的執行程式和樣式表:
        <itemizedlist>
        <listitem>
          <para>HTMLDOC(能把 HTML 文件轉換成 PDF 文件的程式)</para>
        </listitem>
        <listitem>
          <para>LDP DSL(LDP 組織特別為 Docbook SGML 格式的 HOWTO 文件設計的樣式表，你如果要寫 Linux 的 HOWTO 文件，應該用 LDP DSL 取代 Norman Walsh's DSSSL的預設選項。)</para>
        </listitem>
       </itemizedlist>
       </para></listitem>
     </varlistentry></variablelist>
     </para>
      <note>
        <title>備註</title>
        <para>所有的工具組件都可以在網路上自由下載使用，下一章就是為大家介紹如何下載這些工具組件。</para>
      </note>
      <note>
        <title>譯者備註</title>
        <para>很多 Linux 的發行版都已經設定好了 Docbook 文件的轉換格式工作執行環境，利用你發行版為你設定好的 Docbook 轉換工具，會比使用本文安裝方式更為便利。所以譯者在附錄加了 <link linkend="distro-docpkg">各 Linux 釋出版的 DocBook 安裝套件</link> 一節。你應該先前往該節，檢查你使用的系統是否已有 docbook 工具。除非你確定系統中沒有這些工具，或者不滿意原來的設定，否則不必多此一舉，增加自己無謂的負擔。</para>
      </note>
    </sect2>

    <sect2>
      <title>基本假設</title>
      <para>本文是假設你的機器中已有下列基本的程式已安裝完備:</para>
      <itemizedlist>
        <listitem>
          <para>gzip(解壓縮工具） - available from <ulink url="http://www.gnu.org/directory/">http://www.gnu.org/directory/</ulink></para>
        </listitem>
        <listitem>
          <para>gcc and GNU make(C 語言編譯工具組) - available from <ulink url="http://www.gnu.org/directory/">http://www.gnu.org/directory/</ulink></para>
        </listitem>
        <listitem>
          <para>unzip(解壓縮工具） - available from <ulink url="http://www.info-zip.org/pub/infozip/">http://www.info-zip.org/pub/infozip/</ulink></para>
        </listitem>
        <listitem>
          <para>Standard Unix utilities - tar, mkdir, mv ...(標準的基本系統工具)</para>
        </listitem>
      </itemizedlist>
    </sect2>
  </sect1>

  <sect1 id="requirements">
    <title>下載必要的檔案</title>
    <para>你真正需要編譯的只有 OpenJade 這個套件，本文將解釋編譯的過程，讓你很輕易的就能從原始碼把工具給安裝起來。而我們需要的工具包，大部分可以在<ulink url="http://www.tldp.org/authors/index.html#resources">The Linux Documentation Project (TLDP)</ulink>網站找到。</para>
    <sect2>
      <title>前置手續</title>
      <para>建立一個目錄 <filename class="directory">/tmp/downloads</filename> ，我們需要使用這目錄來放置下載回來的各個工具組。</para>
    </sect2>

    <sect2>
      <title>下載 OpenJade and OpenSP</title>
      <para>Mr.Ali 的原文只有下載 OpenJade 一個工具套件而已，那是因為舊的版本 OpenSP 是包括在 OpenJade 裡的，但到了 OpenJade 1.3.2 把 OpenSP 和 OpenJade 分成了兩個工具組，OpenSp 負責底層的函式庫，提供文件解析的呼叫公用函式，而由 OpenJade 依照 DSSSL 樣式表的敘述來轉換 Docbook 到其他格式文件。所以你到 <ulink url="http://openjade.sourceforge.net/">http://openjade.sourceforge.net/</ulink> 下載 OpenJade 時，別忘了把 OpenSP 一起下載。</para>
      <para>譯者翻譯時，釋出版是 OpenJade-1.3.2.tar.gz，OpenSP 釋出版是 OpenSP-1.5.tar.gz 。</para>
    </sect2>

    <sect2>
      <title>下載 DocBook DTDs</title>
      <para>Mr. Ali 在原文中說所有的 DocBook DTDs 檔案都可以在 Linux 的 LDP 網站 <ulink url="http://www.tldp.org/authors/index.html#resources">http://www.tldp.org/authors/index.html#resources</ulink> 找到，其實不盡然，那只是幾個 Linux 下最常被用到的 Docbook 版本格式而已。真正所有使用 XML or SGML 定義出來的 Docbook 各版本 DTD 還是要到 OASIS-open.org 去找。
      <itemizedlist>
        <listitem><para>SGML DTD 請到 <ulink url="http://www.oasis-open.org/docbook/sgml">http://www.oasis-open.org/docbook/sgml</ulink> 。</para></listitem>
        <listitem><para>XML DTD 請到 <ulink url="http://www.oasis-open.org/docbook/xml">http://www.oasis-open.org/docbook/xml</ulink> 。</para></listitem>
      </itemizedlist></para>
      <para>由於 Linux LDP 網站上列舉的 DTD 壓縮包都是目前很通行的 Docbook DTD ，所以你該通通下載下來，但如果你拿到了一份 Docbook ，他在第一行的 DTD 宣告不是 LDP 所列舉的版本，你還是必須到 OASIS-Open.org 去下載與 Docbook 文件相符的 DTD 來轉換你的 Docbook 文件。</para>
      <note><title>譯者註</title>
      <para>建議先只安裝 LDP 建議的 DTD ，等到整個安裝完成測試無誤後，再視需要加入其他的 DTD 。</para></note>
    </sect2>

    <sect2>
      <title>下載 ISO Entities</title>
      <para> <ulink url="http://www.tldp.org">The Linux Documentation Project</ulink> 將所有要用到的插入實體檔 (Entities) 包裹成一個壓縮包放在 <ulink url="http://www.tldp.org/authors/tools/entities.tar.gz">http://www.tldp.org/authors/tools/entities.tar.gz</ulink> ，讓使用者很方便的使用，真要感謝 TLDP 為大家做的這些。</para>

      <note><title>譯者註</title>
      <para>SGML 格式定義常會使用到一些特殊符號，這些符號在不同的系統，不同的文件格式下有不同的表示方法，為了避免溝通的混亂，所以在 SGML 中使用實體這樣的概念來表示。也就是為每個特殊符號取一個統一名稱，當系統從文件中的實體名稱得知顯示特殊符號的需求時，再以合適的表現法表示之。本來是可以把他也算做 DTD 的一部分，但因為這些實體是由 ISO 組織負責在制定的，OASIS 的 DTD 只是遵照沿用 ISO ENTITY 的規定而已。所以 OASIS 的 DTD 只定義了 Docbook 相關部份，ISO ENTITY 要另外安裝。</para></note>

    </sect2>

    <sect2>
      <title>下載 Norman Walsh's DSSSL</title>
      <para>你可以從 <ulink url="http://sourceforge.net/project/showfiles.php?group_id=21935">http://sourceforge.net/project/showfiles.php?group_id=21935</ulink> 處得到這個 Docbook 的樣式定義檔案組，譯者在撰文時 DSSSL 的是出版是 docbook-dsssl-1.78 。</para>
      <note><title>譯者註</title>
      <para>DSSSL 不是只有一個樣式表，而是一組樣式表，OpenJade 就是由 DSSSL 樣式表得知該如何將 Docbook 轉換成其他格式文件的，所以想要把 Docbook 轉換成那種格式文件，就需要透過參數來告訴 OpneJade 參考那張樣式表來進行轉換工作。</para></note>
    </sect2>

    <sect2>
      <title>下載 LDP 設計的 DSL 樣式表</title>
      <para> LDP DSL 是 <ulink url="http://www.tldp.org">The Linux Documentation Project (TLDP)</ulink> 網站設計出來，統一輸出各式說明文件的樣式表。它是 Norman Walsh's DSSSL 的延伸利用，增加了一些像背景和表格的強化風格輸出。你可以在 <ulink url="http://www.tldp.org/authors/tools/ldp.dsl">http://www.tldp.org/authors/tools/ldp.dsl</ulink> 下載他。</para>
      <para>ldp.dsl 需要搭配 Normal Walsh's DSSSL 樣式組的使用，如果你想為 TLDP 寫 HOWTO 文件，應該下載 ldp.dsl。</para>
    </sect2>

    <sect2>
      <title>下載 HTMLDOC</title>
      <para>如果你想產生 PDF 檔，可以先把 Docbook 轉成 HTML ，再使用 HTMLDOC 轉成 PDF ，你可以在 <ulink url="http://www.easysw.com/htmldoc/software.php">http://www.easysw.com/htmldoc/software.php</ulink> 處下載 HTMLDOC。</para>
    </sect2>
  </sect1>

  <sect1 id="inst-openjade">
    <title>安裝執行工具組 - OpenJade</title>
    <para>這一節我們要介紹如何把 OpenJade 相關工具放到適當的路徑下。Mr. Ali 原文是建議放 <filename class="directory">/usr/local/dbtools/</filename> 路徑下，但譯者不認為這是一個好辦法。因為按照 Linux FHS 2.0 檔案協定的精神，與機器碼無關的檔案應放 <filename class="directory">/usr/share/</filename> 或者 <filename class="directory">/usr/local/share/</filename> 路徑下。而機器碼與函式庫則放 <filename class="directory">/usr/lib/</filename> 或者 <filename class="directory">/usr/local/lib/</filename> 較妥當，而且 FHS 2.0 也非常不鼓勵在 <filename class="directory">/usr/</filename> 或 <filename class="directory">/usr/local/</filename> 下任意加入其他路徑名稱。因此本文將把 OpenSP 和 OpenJade 工具組放 <filename class="directory">&system.docbookexec.path;</filename> 下，而把 DTD,ISO ENTITY,DSSSL 這些東西放 <filename class="directory">&system.docbookshare.path;</filename> 。這表示 docbook 的資料不僅供 OpenJade 使用，也可以供其他 SGML or XML 解析轉譯器使用。所以請你執行下面建立路徑的指令:</para>
    <screen>
      <command># mkdir -p &system.docbookexec.path;</command>
      <command># mkdir -p &system.docbookshare.path;</command>
    </screen>

    <sect2>
      <title>安裝 OpenSP</title>
      <para>新版的 OpenJade 必須先裝 OpenSP ，否則 OpenJade 會因為缺少必要的函括檔而無法編譯，所以我們現在就把 OpenSP 裝起來吧。</para>
      <orderedlist>
        <listitem><para>首先把路徑切換到 <filename class="directory">/tmp/downloads.</filename></para>
        <screen><command># cd /tmp/downloads</command></screen>
        </listitem>
        <listitem><para>解開 OpenSP 的壓縮包: </para>
        <screen><command># tar -zxvf OpenSp-1.x.tar.gz</command></screen>
        </listitem>
        <listitem><para>切換到 OpenSP 路徑下: </para>
        <screen><command># cd OpenSp-1.x</command></screen>
        </listitem>
        <listitem><para>設定 OpenSP 的編譯選項: </para>
        <screen><command># ./configure --prefix=&system.docbookexec.path;</command></screen>
        </listitem>
        <listitem><para>編譯程式模組: </para>
        <screen><command># make</command></screen>
        </listitem>
        <listitem><para>把執行程式，放到指定的 <filename class="directory">&system.docbookexec.path;</filename> 路徑下。 </para>
        <screen><command># make install</command></screen>
        </listitem>
      </orderedlist>
    </sect2>

    <sect2>
      <title>安裝 OpenJade</title>
      <para>安裝 OpenJade 的手續大抵上和安裝 OpenSP 沒有什麼差別，所以我們下面就只列出指令方法，不再多作重複說明:</para>
<screen><command>
# cd /tmp/downloads
# tar -zxvf openjade-1.3.x.tar.gz
# cd openjade-1.3.x
# ./configure --prefix=&system.docbookexec.path;
#make
#make install
</command></screen>
      <para>安裝 OpenJade 比 OpenSP 要多一個手續是要把 OpenJade 附屬的轉換樣式表 <filename class="directory">dsssl</filename> 目錄從 <filename class="directory">/tmp/downloads/openjade-1.3.x 複製到 &system.docbookexec.path; 路徑下。</filename></para>
<screen>
<command># cp -dpR dsssl &system.docbookexec.path;/</command>
</screen>
    </sect2>

    <sect2>
      <title>安裝 Norman Walsh's DSSSL</title>
      <para>Norman Walsh's DSSSL 是一組利用 SGML 樣式表語法設計，把 Docbook 轉換成其他格式依據的設定文件，所以要把它們擺到適當位置，讓 OpneJade 可以找到他們。由於 DSSSL 檔案都是純文字格式，因此不需要去編譯，只要把他們解壓縮到適當路徑即可。</para>
      <orderedlist>
        <listitem>
          <para>切換路徑到 <filename class="directory">/tmp/downloads</filename></para>
          <screen>
	<command># cd /tmp/downloads</command>
	</screen>
        </listitem>
        <listitem>
          <para>解壓縮檔案</para>
          <screen>
	<command># tar -zxvf docbook-dsssl-1.7x.tar.gz</command>
	</screen>
        </listitem>
        <listitem>
          <para>把相關檔案移到 <filename class="directory">&system.docbookshare.path;</filename>.</para>
          <screen>
	<command># mv docbook-dsssl-1.7x &system.docbookshare.path;/ </command>
	</screen>
        </listitem>
        <listitem>
          <para>為了了簡化搜尋路徑並使用統一好記的名稱，我們做一個符號連結檔 <filename class="directory">dsssl</filename>.</para>
          <screen>
	<command># ln -s &system.docbookshare.path;/docbook-dsssl-1.7x &system.docbookshare.path;/dsssl</command>
	</screen>
        </listitem>
      </orderedlist>
    </sect2>
    <sect2>
      <title>安裝 DocBook DTDs</title>
      <para>希望你還記得 DTD 是幹嘛用的，總之每個 Docbook 都需要提供一個相對應的 DTD 給 OpenJade ，OpenJade 才知道怎樣正確的理解文件的內容。所以只要 Docbook 的文件格式宣告他是遵照那個 DTD 製作的，在你的系統裡就必須有那份 DTD，必且被 OpenJade 找到。現在，就請依照這原則把所有需要的 DTD 解壓縮到適當的路徑位置。</para>
      <orderedlist>
        <listitem>
          <para>切換路徑到你設定的 docbook 資料共享目錄 <filename class="directory">&system.docbookshare.path;</filename>.</para>
          <screen>
	<command># cd &system.docbookshare.path;</command>
	</screen>
        </listitem>
        <listitem>
          <para>依照你下載的 DTD 類別和版本分別建立相對應的目錄，譬如：由 XML 標記語言定義出來的 DTD 就取名叫 xml-dtd ，SGML 定義的就叫 sgml-dtd，然後最後加上版本名稱，如：xml-dtd-4.1.2 or sgml-dtd-4.2，這樣做的目的是可以一目了然，免得日子一久你就搞混了。</para>
          <screen>
	<command># mkdir xml-dtd-4.1.2</command>
	<command># mkdir sgml-dtd-4.2</command>
	</screen>
        </listitem>
        <listitem>
          <para>切換路徑到 <filename class="directory">xml-dtd-4.1.2</filename>.</para>
          <screen>
		<command># cd xml-dtd-4.1.2</command>
		</screen>
        </listitem>
        <listitem>
          <para>解壓縮 DocBook XML v4.1.2 到設定路徑下。</para>
          <screen>
		<command># unzip /tmp/downloads/docbkx412.zip</command>
		</screen>
        </listitem>
        <listitem>
          <para>切換路徑到 <filename class="directory">sgml-dtd-4.2</filename>.</para>
          <screen>
		<command># cd ../sgml-dtd-4.2</command>
		</screen>
        </listitem>
        <listitem>
          <para>解壓縮 DocBook SGML v4.2 到設定路徑下。</para>
          <screen>
		<command># unzip /tmp/downloads/docbk42.zip</command>
		</screen>
        </listitem>
        <listitem>
          <para>上面只是舉兩個例子，你從網路上抓下多少的 Docbook DTD 壓縮包，就必須一一為他們設定位置後解壓縮。當所有解壓縮完成後，你必須到每一個 DTD 目錄裡去整理一下檔案。因為所有的 DTD 都是一組檔案，然後用一個 CATALOG FILE 去把他們連在一起的，有點討厭的是這些 CATALOG FILE 在不同的 DTD 版本下會用不同的名稱，有的直接叫 catalog ，有的卻叫 docbook.cat ，這常常導致你在要引用某個 DTD 時，還要去回想這個版 DTD 的 CATALOG FILE 叫什麼名字。因此我們要到每個 dtd 目錄下去查，把所有叫 docbook.cat ，通通加個 catalog 的 link，這樣以後引用，就一律使用 catalog 來呼叫，而不用管他原來叫什麼了。(原來就叫 catalog  的就什麼都不做) </para>
          <screen>
		<command># cd ../xml-dtd-4.1.2</command>
		<command># ln -s docbook.cat catalog</command>
		<command># cd ../sgml-dtd-4.2</command>
		<command># ln -s docbook.cat catalog</command>
		</screen>
        </listitem>
      </orderedlist>
    </sect2>

    <sect2>
      <title>安裝 ISO Entities</title>
      <para>就如前面提到的，其實你可以把 ISO Entities 當作整個 DTD 的一部分，只因為是兩個組織訂定的標準，所以才分作兩個壓縮包，要分別安裝。所以安裝 ISO Entities 的方法就是把這些 Entities 檔案放到和 DTD 同一個目錄就好了。譬如我們現在把 ISO Entities 放到 SGML DTD 4.2 裡:</para>
      <orderedlist>
        <listitem>
          <para>切換路徑到 <filename class="directory">&system.docbookshare.path;/sgml-dtd-4.2</filename>.</para>
         <screen>
	<command># cd &system.docbookshare.path;/sgml-dtd-4.2</command>
	</screen>
        </listitem>
        <listitem>
          <para>解壓縮 <filename>/tmp/download/entities.tar.gz</filename> 到設定路徑。</para>
          <screen>
	<command># tar -zxvf /tmp/download/entities.tar.gz .</command>
	</screen>
        </listitem>
      </orderedlist>
      <para>原則上是有多少個 DTD 就該重複多少次這動作，但有下列例外:</para>
      <orderedlist>
        <listitem>
          <para>XML 類型的 DTD 不需要，因為他們已經將 ISO Entities 統整在 DTD 結構下了。</para>
        </listitem>
        <listitem>
          <para>Docbook SGML DTD 4.2 版因為他的 catalog 宣告裡又加了個 XML DTD 4.2 的宣告，所以除了前面的方式加入 ISO Entities 外，還要把 XML DTD 裡的 <filename class="directory">ent/</filename> 子目錄檔案複製過來。</para>
<screen>
  <command># cd &system.docbookshare.path;/sgml-dtd-4.2</command>
  <command># cp -dpR &system.docbookshare.path;/xml-dtd-4.2/ent ./</command>
</screen>
        </listitem>
        <listitem>
          <para>Docbook SGML DTD 4.1 和 3.1 版，LDP 計畫工作者都幫你把 ISO Entities 裝在一個 DTD 裡了，不需再行安裝。</para>
        </listitem>
      </orderedlist>
      <para>所以我們要有個概念，Docbook DTD 要包括 ISO Entities 才算完整，已經有的就不必加，沒的才加。其實，有了再加一遍也沒啥妨礙，只是有可能變毫無作用的垃圾而已，至於 ISO Entities 包括那些檔案，你把<filename>/tmp/downloads/entities.tar.gz</filename> 解壓縮到一個暫存路徑即可觀察。</para>
    </sect2>

    <sect2>
      <title>安裝 LDP DSL</title>
      <para>做完前面的步驟，其實整個 OpenJade 必要的檔案就算完整了，下面的安裝，則是功能選項，有需要就可以加裝。首先是 LDP DSL ，它是 Linux LDP Project 的工作者為了統一輸出格式，用 DSSSL 語法設計的樣式輸出表，如果你想要為 LDP 寫作和翻譯 HOWTO 文件，你應該安裝這個樣式表。</para>
      <orderedlist>
        <listitem>
          <para>切換到 <filename class="directory">/tmp/downloads</filename> 目錄。</para>
          <screen>
	<command># cd /tmp/downloads</command>
	</screen>
        </listitem>
        <listitem>
          <para>複製 <filename>ldp.dsl</filename> 檔案到 <filename class="directory">&system.docbookshare.path;/dsssl/print/</filename> 目錄。</para>
          <screen>
	<command># cp ldp.dsl &system.docbookshare.path;/dsssl/print/</command>
	</screen>
        </listitem>
        <listitem>
          <para>複製 <filename>ldp.dsl</filename> 檔案到 <filename class="directory">&system.docbookshare.path;/dsssl/html/</filename> 目錄。</para>
          <screen>
	<command># cp ldp.dsl &system.docbookshare.path;/dsssl/html/</command>
	</screen>
        </listitem>
      </orderedlist>
    </sect2>

    <sect2>
      <title>安裝 HTMLDOC</title>
      <para>HTMLDOC 可以幫你把 HTML 格式文件轉換成 PDF 格式文件，如果你需要，可以安裝他。</para>
      <para>切換到下載檔案目錄。</para>
      <screen>
	<command># cd /tmp/downloads</command>
</screen>
      <para>將 HTMLDOC 原碼檔解壓縮。</para>
      <screen>
	<command># tar -zxvf htmldoc-1.8.xx-source.tar.gz </command>
	<command># cd htmldoc-1.8.xx</command>
</screen>
      <para>設定,編譯,安裝:</para>
      <screen>
	<command># ./configure --prefix=/usr/local/lib/htmldoc</command>
	<command># make</command>
	<command># make install</command>
</screen>
      <note><title>譯者註</title>
         <para>Mr. Ali 在原文說 HTMLDOC ver 1.8.20-1 ，編譯時可能會產生字型的錯誤而導致編譯終止，但譯者使用的是 1.8.23 版，非常順利，一路到底。所以，如果你在編譯時產生錯誤，請查閱原文的 <ulink url="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/DocBook-OpenJade-SGML-XML-HOWTO.html#AEN431">Installing HTMLDOC</ulink> 這一小節。</para>
      </note>
    </sect2>
  </sect1>

  <sect1>
    <title>使用 OpenJade</title>
    <para>在這一節裡我們將介紹如何使用 OpenJade ，把遵照 SGML/XML docbook DTD 規則寫做的文件，轉換成 HTML, RTF, 和 PDF 的其他格式文件。</para>

    <sect2><title>製作一份測試用的 docbook 文件</title>
      <para>雖然網路上有各式各樣的 Docbook 文件，但因充滿個人化的色彩，常需要增加許多其他的相關支援模組才能執行。為了避免一開始就掉入複雜的設定中，我們只要使用一個最簡單形式的 Docbook 文件，來測試前階段安裝的 OpenJade 是否能運作正常即可。所以下面就是我們用 shell 指令做的最簡單的 Docbook 文件。</para>

      <sect3><title>製作 SGML 語言定義的 Docbook 文件</title>
         <para>由於現今有 XML/SGML 兩種標記語言都製作出 Docbook DTD ，也都在網路上流傳使用。他們標籤用法大抵相同，但文件開頭的格式宣告卻有些小小的差異，所以我們要分別做出 XML 和 SGML 兩種不同的 Docbook 文件，來測試 OpenJade 是否在兩方面都運作正常。首先我們先把下面這整段敘述複製，在終端機下貼上執行，就會得到一個名為 <filename>/tmp/downloads/test.sgml</filename> 的 SGML Docbook 文件。</para>
<screen>
<![CDATA[
cat << EOF > /tmp/downloads/test.sgml
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
<book>
  <bookinfo>
    <author>
      <firstname>docbook 初學者</firstname>
    </author>
    <abstract>
      <para>本文件作為測試 Docbook 轉換運作環境是否順暢之用途
            ，歡迎複製,改寫,散佈使用。</para>
    </abstract>
  </bookinfo>
  <chapter><title>這是本文</title>
    <para>Docbook 主要文件內容所在。</para>
  </chapter>
  <appendix><title>這是附錄</title>
    <para>補充及參考資料。</para>
  </appendix>
</book>
EOF
 ]]>
</screen>
      </sect3>

      <sect3><title>製作 XML 語言定義的 Docbook 文件</title>
        <para>我們利用前面製作出 SGML Docbook 文件，將首行的文件型態宣告稍微改一下，就可以變成 XML Docbook 文件。</para>
        <orderedlist>
          <listitem>
            <screen><command># cp /tmp/downloads/test.sgml /tmp/downloads/test.xml</command></screen>
          </listitem>
          <listitem>
            <screen><command># vi /tmp/downloads/test.xml</command></screen>
          </listitem>
          <listitem>
            <screen>
<![CDATA[
刪除第一行 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 ]]>
            </screen>
          </listitem>
          <listitem>
            <screen>
<![CDATA[ 
將
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN">
加到文件開頭
 ]]>
            </screen>
          </listitem>
        </orderedlist>
      </sect3>
    </sect2>

    <sect2 id="jade-exec-envset"><title>設定 OpenJade 的函式庫及環境變數</title>
      <para>前面一個段落我們安裝了許多 SGML 的檔案轉換工具和相關的 DTD,ISO Entity,DSSSL 檔案，接著我們就必須做一些系統設定，把所有相關檔案做一個結合，打造一個 DocBook 轉換的執行平台。</para>

      <sect3><title>設定 OpenJade 的外部聯結函式庫</title>
        <para>在 <filename class="directory">&system.docbookexec.path;/lib</filename> 路徑下，有 OpenSP 和 OpenJade 提供的外部連結函式庫，我們應該把它們加到系統的外部連結函式登錄資料庫中。</para>
<screen>
<command># cp /etc/ld.so.conf /etc/ld.so.conf.bak</command>
<command># echo "&system.docbookexec.path;/lib" >> /etc/ld.so.conf</command>
<command># ldconfig</command>
</screen>
      </sect3>

      <sect3><title>設定系統的 DocBook catalog 檔案路徑</title>
        <para>OpenJade 在執行 DocBook 文件的格式轉換時需要許多外部的含括檔案，不管這些檔案是在你自己的主機上，還是在網路伺服器上，你都必須把它們的路徑位置詳細的寫在 DocBook 的 catalog 檔案中，這樣 OpenJade 才能順利的開啟它們並順利執行，所以我們必須在主機上設定一個路徑來放置我們的 catalog 檔。
</para>
<screen>
<command># mkdir -p &system.docbookcat.path;</command>
</screen>
      </sect3>

      <sect3><title>編輯各版本 DocBook 文件所需的 catalog 檔</title>
        <para>在前面的 DTD 檔案安裝時，我們就提到 DocBook 每個版本的 DTD 群組檔案裡，都有一個 catalog 檔案，規定了該版本的 DocBook 所有執行時所需要含括進來的檔案，他們在系統中的檔案路徑為何。但光有與 DocBook 文件相符的 DTD catalog 還不夠，一個 DocBook 完整的 catalog 資料應該包括下列幾個部份：
          <orderedlist>
            <listitem><para>與 DocBook 文件型態宣告版本相符的 DTD catalog，以 DocBook 4.2 為例，路徑位置是 <filename>&system.docbookshare.path;/sgml-dtd-4.2/catalog</filename> 。 </para></listitem>
            <listitem><para>OpenJade 本身提供的 DSSSL catalog ，路徑位置是 <filename>&system.docbookexec.path;/dsssl</filename> 。 </para></listitem>
            <listitem><para>Norman Walsh's DSSSL 所提供的 DSSSL catalog ，路徑位置是 <filename>&system.docbookshare.path;/dsssl</filename> 。 </para></listitem>
          </orderedlist>
        </para>
        <para>所以一個適合於 DocBook SGML 4.2 版的 catalog 似乎應該是這樣設定：
<screen>
CATALOG "&system.docbookshare.path;/sgml-dtd-4.2/catalog"
CATALOG "&system.docbookexec.path;/dsssl/catalog"
CATALOG "&system.docbookshare.path;/dsssl/catalog"
</screen>
你的編輯檔案命令應該是：
<screen>
<command>#vi &system.docbookcat.path;/sgml-4.2.cat</command>
</screen>
        </para>
        <para>每個系統中不同 DocBook 版本的 catalog 檔都需要分別設定，基本原理都相同，但要做檔名的區別，以及 catalog 內容的第一項，要符合下載的 DTD 群組路徑。例如現在改作 DocBook xml-4.1.2 版的 catalog ，那檔名可改作 <filename>&system.docbookcat.path;/xml-4.1.2.cat</filename> ，而其內容的第一項，應由<screen>CATALOG "&system.docbookshare.path;/sgml-dtd-4.2/catalog"</screen>改為<screen>CATALOG "&system.docbookshare.path;/xml-dtd-4.1.2/catalog"</screen></para>
      </sect3>

      <sect3><title>統整所有的 catalog 的檔案位置</title>
        <para>由上面段落的為每個不同 DocBook 版本撰寫 catalog 檔可知，catalog 檔本身可以包含其他的 catalog 檔，最後形成一個樹狀階層結構，只要含括檔路徑寫在某個階層的 catalog 檔中，經由上層 catalog 的讀取，OpenJade 一樣最後能找到此含括檔的位置。所以在我們為不同版本的 DocBook 寫好個別的 catalog 後，可以用一個總 catalog 把不同版本的 catalog 都含括進來。那麼你為 OpenJade 指定 catalog 路徑時，就不需因 DocBook 文件宣告不同的版本而做不同的指定，你可以用一個總 catalog 來含括所有不同版本的 catalog 。</para>
        <para>你可以用這樣的編輯命令：
<screen><command>#vi &system.sgmlcat.path;/catalog</command></screen>
        </para>
        <para>內容是各不同版本 DocBook 的 catalog 檔路徑：
<screen>
CATALOG "&system.docbookcat.path;/sgml-4.2.cat"
CATALOG "&system.docbookcat.path;/sgml-4.1.cat"
CATALOG "&system.docbookcat.path;/sgml-3.1.cat"
CATALOG "&system.docbookcat.path;/xml-4.2.cat"
CATALOG "&system.docbookcat.path;/xml-4.1.2.cat"
</screen>
        </para>
      </sect3>

      <sect3 id="enviroment-set"><title>設定系統的 DocBook 執行環境變數</title>
        <para>你必須把 <filename class="directory">&system.docbookexec.path;/bin</filename> 路徑加到 PATH 環境變數中，以方便啟動 OpneJade 。此外 OpneJade 需要參考 SGML_CATALOG_FILES 環境變數，來找到前面我們為 Docbook 編寫的那個總 catalog 檔。為了避免每次執行前都要打一長串環境變數設定指令，我們可以考慮把他們寫在 <filename>/etc/profile</filename> 或 <filename>$HOME/.bash_profile</filename> 指令檔的最尾端，以便一登入就可以自動執行。下面這一段就是使用 bash shell 適用的 script 範例。</para>
<screen>
# 加入 OpenJade 執行檔路徑
PATH=$PATH:&system.docbookexec.path;/bin
# 加入 HTMLDOC 執行檔路徑
PATH=$PATH:/usr/local/lib/htmldoc/bin
# 加入系統最上層 catalog 檔路徑
SGML_CATALOG_FILES=&system.sgmlcat.path;/catalog

export PATH SGML_CATALOG_FILES
</screen>
      </sect3>

    </sect2>

    <sect2 id="trans-docbook">
      <title>轉換 SGML Docbook 文件</title>
      <para>一路執行指令到此，可以說基本的 Docbook 轉換工具和相關設定都已經做好了，你可以先登出，再以一個一般 user 帳號登入，來讓先前的 script 設定生效，或者直接在目前的程序中執行:
<screen><command># source /etc/profile</command></screen>
</para>
      <para>OpenJade 是一個幫 SGML/XML 格式文件轉換輸出的工具，理論上只要提供正確的 DTD 和 StyleSheet ，OpenJade 就可以運作，而並非只限於 Docbook 而已。所以使用 OpenJade 工具時，如何指定合適的命令參數，就是成功轉換格式文件的關鍵。還記得我們剛剛製作的 <filename>test.sgml</filename> 和 <filename>test.xml</filename> 嗎，下面就讓我們用這兩個檔案來做，各種格式文件轉換的試驗。</para>
      <sect3>
        <title>SGML 到 HTML(多頁式)</title>
        <screen>
<command># cd /tmp/downloads</command>
<command># openjade -t sgml -d &system.docbookshare.path;/dsssl/html/docbook.dsl test.sgml</command>
<command># mozilla book1.htm || netscape book1.htm || lynx book1.htm</command>
</screen>
        <para>指令及參數解說:</para>
        <itemizedlist>
          <listitem><para>openjade : 轉換工具名稱</para></listitem>
          <listitem><para>-t sgml : 文件型態是 sgml</para></listitem>
          <listitem><para>-d pathstring : 指定使用哪一個樣式轉換表(同樣的一份文件可以因選擇不同的樣式表而有不同的輸出樣貌)</para></listitem>
          <listitem><para>test.sgml : 需要被轉換的 docbook 來源檔</para></listitem>
        </itemizedlist>          
        <para>你或許會很奇怪，DTD 宣告怎麼沒加在命令參數裡？其實 OpenJade 在做 Docbook 文件解析時，會依照文首的 DTD 版本宣告，到環境變數 SGML_CATALOG_FILES 中去找適合他版本的 catalog ，然後找到他所有需要的相關 DTD 檔案。這也就是在前一小節設定環境變數時，要設定 SGML_CATALOG_FILES 的緣故。</para>
</sect3>
      <sect3 id="single-webpage"><title>SGML 到 HTML(單頁式)</title>
        <para>一般預設 Docbook 轉換到 HTML 格式，會依章節區分作多頁輸出，如果你希望只輸出成一頁以方便傳送，指令是:</para>
        <screen><command># openjade -V nochunks -t sgml -d &system.docbookshare.path;/dsssl/html/docbook.dsl test.sgml > book1.htm</command></screen>
        <para>這指令較上一個多出的是:</para>
        <itemizedlist>          
          <listitem><para> -V nochunks : 指定不分頁輸出</para></listitem>
          <listitem><para> &gt; book1.htm : 不分頁輸出會直接輸出到標準輸出(電腦螢幕)上，因此利用重導符號把輸出轉向到檔案。</para></listitem>
        </itemizedlist>          
      </sect3>

      <sect3>
        <title>SGML 轉到 RTF</title>
        <screen><command># openjade -t rtf -d &system.docbookshare.path;/docbook/dsssl/print/docbook.dsl test.sgml </command>
</screen>
        <para>這個指令串和前面不同的是:</para>
        <itemizedlist>          
          <listitem><para> -t rtf : 指定檔案型態</para></listitem>
          <listitem><para> -d pathstring : 和剛剛輸出成 HTML 使用 <filename>html/docbook.dsl</filename> 不同的是這裡使用 <filename>print/docbook.dsl</filename> 樣式表，選擇樣式表不同，輸出結果也不同。</para></listitem>
        </itemizedlist>
        <note><title>譯者註</title>
          <para>上面的指令會得到一個能在 MS Windows 系統顯示的 RTF 格式文件檔，只是很多 unix 文件轉換成所謂可列印格式文件時(rtf,ps,pdf) ，都會產生中文字型無法順利移植到新文件的困擾，這份 test.rtf 亦復如此。或許你願意參考附錄的 <link linkend="code-problem">列印格式文件轉換的中文字型顯示問題</link> 一節，了解一下別種比較理想的處理方式。</para>
        </note> 
      </sect3>
      <sect3><title>輸出成 LDP 計畫的 HOWTO 格式網頁</title>
        <para>希望你還記得我們曾從 TLDP 網站下載了一個他們設計的樣式表 <filename>ldp.dsl</filename> ，放在 <filename class="directory">&system.docbookshare.path;/dsssl</filename> 路徑下，現在要利用它來使我們寫的 Docbook 輸出成有 HOWTO 風格的網頁。</para>
<screen>
<command># openjade -t sgml -i html -d &system.docbookshare.path;/dsssl/html/ldp.dsl#html test.sgml</command>
<command># mozilla index.html || netscape index.html || lynx index.html</command>
</screen>
        <para>這個命令串比前一個 HTML 輸出的差別是:</para>
        <itemizedlist>          
          <listitem><para> -i html : 因為 ldp.dsl 是利用原 Norman Walsh's DSSSL 的樣式表加以加工而成的，所以必須以 -i html 指定要含括 <filename class="directory">/docbook/dsssl/html</filename> 路徑裡的其他 dsl。</para></listitem>
          <listitem><para> -d $SGML_SHARE/dsssl/ldp.dsl#html : 指示 ldp.dsl 做 HTML 輸出。</para></listitem>
        </itemizedlist>
      </sect3>
    </sect2>

    <sect2>
      <title>轉換 XML Docbook 文件</title>
      <para>剛剛 SGML 文件用 test.sgml 轉換，這會當然就要用 test.xml 當測試工具囉。</para>
      <sect3>
        <title>XML 轉換成 HTML</title>
        <screen>
<command># openjade -t xml -d &system.docbookshare.path;/dsssl/html/docbook.dsl &system.docbookshare.path;/dsssl/dtds/decls/xml.dcl test.xml</command>
<command># mozilla book1.htm || netscape book1.htm || lynx book1.htm</command>
</screen>
        <para>這個指令串和 SGML 轉換不同的是:</para>
        <itemizedlist>          
          <listitem><para> -t xml : 檔案型態是 XML</para></listitem>
          <listitem><para> xml.dcl : XML 型態文件轉換前要先經過 xml.dcl 宣告</para></listitem>
        </itemizedlist>
      </sect3>
      <sect3>
        <title>XML 轉換到 RTF</title>
        <screen>
<command># openjade -t rtf -d &system.docbookshare.path;/dsssl/print/docbook.dsl &system.docbookshare.path;/dtds/decls/xml.dcl test.xml</command>
</screen>
        <para>除了多加個 xml.dcl 的參考外，其他參數和 SGML 轉換到 RTF 並無不同，結果也差不多，中文字型無法移轉，在 RTF 中呈亂碼狀態。</para>
      </sect3>
    </sect2>
    <sect2>
      <title>HTML 轉換到 PDF </title>
      <para>HTMLDOC 這個格式文件轉換工具可以幫助產生 PDF 格式文件，但他只能轉換 HTML 為來源格式的文件，所以我們先用 OpenJade 產生個不分頁的 HTML 文件。</para>
      <screen>
<command># openjade -V nochunks -t sgml -d &system.docbookshare.path;/dsssl/html/docbook.dsl test.sgml > input.html</command>
</screen>
      <para>執行 HTMLDOC 產生 PDF 文件</para>
      <screen>
<command># htmldoc -f outfile.pdf input.html</command>
</screen>
      <note><title>譯者註</title>
        <para>如同 RTF 格式轉換一樣，中文顯示仍然是個問題。</para>
      </note>
    </sect2>
  </sect1>

  <sect1>
    <title>建立 DocBook 4.1.2 XML 俟服器</title>
    <note><title>譯者註</title>
      <para>因為這節牽涉到如何設定網頁伺服器，伺服端指令稿伺服器，以及 DocBook 間相互配合的問題，已經不是單純的文件格式轉換了。像這種 DocBook 格式文件延伸利用，我覺得已足夠單獨用一個專題來探討，附加在這篇文章下，不僅不完整，而且也與主題有所偏離。所以譯者將這一節略過不譯，有興趣的讀者請自行閱覽 TLDP 網站中 DocBook XML/SGML Processing Using OpenJade 一文的 <ulink url="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/DocBook-OpenJade-SGML-XML-HOWTO.html#AEN512">Serving DocBook 4.1.2 XML</ulink> 章節的原文。</para></note>
  </sect1>

  <sect1>
    <title>進階資訊</title>
    <para>這節將提供一些網路上相關的 DocBook 討論研究資料。</para>
    <note><title>譯者註</title>
      <para>原文作者 Mr. Ali 希望如果你有更多 DocBook網路資源訊息，可以寫信到 <email>saqib@seagate.com</email> 告訴他。</para>
    </note>
    <sect2>
      <title>相關的公共討論組(News Group)</title>
      <orderedlist>
        <listitem>
          <para>comp.text.sgml (easily accessible from <ulink url="http://groups.google.com/groups?group=comp.text.sgml">Google! Groups</ulink>)</para>
        </listitem>
        <listitem>
          <para>comp.text.xml (easily accessible from <ulink url="http://groups.google.com/groups?group=comp.text.xml">Google! Groups</ulink>)</para>
        </listitem>
        <listitem>
          <para>htmldoc.general (server - <ulink url="nttp://news.easysw.com">news.easysw.com</ulink>)</para>
        </listitem>
      </orderedlist>
    </sect2>
    <sect2>
      <title>相關的郵寄通訊論壇(Mailing Lists)</title>
      <orderedlist>
        <listitem>
          <para>制定 DocBook 格式的 OASIS 組織自己維護的郵寄通訊論談 <ulink url="http://www.oasis-open.org/committees/docbook/mailinglist/index.shtml">http://www.oasis-open.org/committees/docbook/mailinglist/index.shtml</ulink> </para>
        </listitem>
        <listitem>
          <para>TLDP 網站維護的郵寄通訊論壇 <ulink url="http://www.tldp.org/mailinfo.html">http://www.tldp.org/mailinfo.html</ulink> </para>
        </listitem>
        <listitem>
          <para>xml-doc @ Yahoo Groups. Visit <ulink url="http://groups.yahoo.com/group/xml-doc/">http://groups.yahoo.com/group/xml-doc/</ulink> for more info.</para>
        </listitem>
      </orderedlist>
    </sect2>
    <sect2>
      <title>聊天室 (IRC)</title>
      <orderedlist>
        <listitem>
          <para>DocBook IRC Channel. #docbook on <ulink url="irc://irc.openprojects.net">irc://irc.openprojects.net</ulink></para>
        </listitem>
      </orderedlist>
    </sect2>
    <sect2>
      <title>提供 DocBook 介紹探討的網站</title>
      <orderedlist>
        <listitem>
          <para><ulink url="http://www.oasis-open.org/">http://www.oasis-open.org/</ulink> 的官方網站</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.xml-dev.com/blog/">http://www.xml-dev.com/blog/</ulink> XML / XHTML WebLog</para>
        </listitem>
        <listitem>
          <para><ulink url="http://docbook.org/wiki/moin.cgi/">http://docbook.org/wiki/moin.cgi/</ulink> The DocBook Wiki</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.docbook.org/tdg/en/">http://www.docbook.org/tdg/en/</ulink> 官方版的 DocBook 格式定義線上文件</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.bureau-cornavin.com/opensource/crash-course/index.html">http://www.bureau-cornavin.com/opensource/crash-course/index.html</ulink> Writing Documentation Using DocBook: A Crash Course，一個非常適合初學者入門的 DocBook 文件撰寫指導。</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www-106.ibm.com/developerworks/library/l-docbk.html">http://www-106.ibm.com/developerworks/library/l-docbk.html</ulink> 一個通盤介紹 DocBook 格式文件的短文。</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.tldp.org/LDP/LDP-Author-Guide/index.html">http://www.tldp.org/LDP/LDP-Author-Guide/index.html</ulink> ，介紹如何用 DocBook 文件來寫 LDP 的 HOWTO 。</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.tldp.org/authors/index.html#resources">http://www.tldp.org/authors/index.html#resources</ulink> 由 TLDP 網站整理的 DocBook 相關資源下載處。</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.tldp.org/HOWTO/DocBook-Demystification-HOWTO/">http://www.tldp.org/HOWTO/DocBook-Demystification-HOWTO/</ulink> 一篇介紹 DocBook 格式發展演變過程的文章。</para>
        </listitem>
        <listitem>
          <para><ulink url="http://www.xml-dev.com:8080/cocoon/mount/docbook/">http://www.xml-dev.com:8080/cocoon/mount/docbook/</ulink> 教你如何用 Tomcat + Cocoon + DocBook 做出一個 DocBook 伺服站的範例。</para>
        </listitem>
      </orderedlist>
    </sect2>
    <sect2>
      <title>XML 寫作及模型軟體</title>
      <note>
        <title>備註</title>
        <para> <emphasis role="strong">你可以在 <ulink url="http://www.xml-dev.com/blog/#19">http://www.xml-dev.com/blog/#19</ulink> 找到許多好用的 XML 編輯器。</emphasis></para>
      </note>
      <orderedlist>
        <listitem>
          <para>eXchaNGeR - XML 瀏覽及編輯器 <ulink url="http://xngr.org/">http://xngr.org/</ulink></para>
        </listitem>
        <listitem>
          <para>XERLIN - XML 模型程式 <ulink url="http://www.xerlin.org/">http://www.xerlin.org/</ulink></para>
        </listitem>
        <listitem>
          <para>DocPro by Command Prompt, INC. <ulink url="http://www.commandprompt.com/entry.lxp?lxpe=2">http://www.commandprompt.com/entry.lxp?lxpe=2</ulink></para>
        </listitem>
        <listitem>
          <para>YAWC Pro by XML Workshop LTD. <ulink url="http://www.yawcpro.com/">http://www.yawcpro.com/</ulink> 能夠把 MS Word 文件轉換成簡單的 DocBook XML 格式的工具。</para>
        </listitem>
        <listitem>
          <para>Logictran RTF Converter. <ulink url="http://www.logictran.com/">http://www.logictran.com/</ulink>. Word/RTF to HTML/XML.</para>
        </listitem>
        <listitem>
          <para>MajiX - Word 到 XML 的轉換器 <ulink url="http://tetrasys.dhs.org/">http://tetrasys.dhs.org/</ulink></para>
        </listitem>
        <listitem>
          <para>XMETAL by SoftQuad <ulink url="http://www.softquad.com/">http://www.softquad.com/</ulink> </para>
        </listitem>
        <listitem>
          <para>Tagless Editor by i4i (DocBook DTD not supported) <ulink url="http://www.i4i.com/">http://www.i4i.com/</ulink></para>
        </listitem>
        <listitem>
          <para>XML 編輯器 by XMLmind <ulink url="http://www.xmlmind.com/xmleditor/">http://www.xmlmind.com/xmleditor/</ulink></para>
        </listitem>
        <listitem>
          <para>upCast and downCast by Inifinity Loop <ulink url="http://www.infinity-loop.de/en/products.html">http://www.infinity-loop.de/en/products.html</ulink></para>
        </listitem>
        <listitem>
          <para>W2XML by DocSoft <ulink url="http://www.docsoft.com/w2xmlv2.htm">http://www.docsoft.com/w2xmlv2.htm</ulink></para>
        </listitem>
        <listitem>
          <para>XMLWrite by Wattle Software <ulink url="http://xmlwriter.net/">http://xmlwriter.net/</ulink></para>
        </listitem>
        <listitem>
          <para>oXygen XML 編輯器 - 在 Java 虛擬機器上執行的 <ulink url="http://www.oxygenxml.com/">http://www.oxygenxml.com/</ulink></para>
        </listitem>
        <listitem>
          <para>Xeena by IBM <ulink url="http://www.alphaworks.ibm.com/tech/xeena">http://www.alphaworks.ibm.com/tech/xeena</ulink></para>
        </listitem>
        <listitem>
          <para>Excosoft XML 使用者介面 <ulink url="http://www.excosoft.se/eweb/site/exc_pd.html">http://www.excosoft.se/eweb/site/exc_pd.html</ulink></para>
        </listitem>
        <listitem>
          <para>Timelux Xpress <ulink url="http://www.timelux.lu/html/Xpress2001.html">http://www.timelux.lu/html/Xpress2001.html</ulink></para>
        </listitem>
        <listitem>
          <para>Morphon <ulink url="http://www.morphon.com/">http://www.morphon.com/</ulink></para>
        </listitem>
        <listitem>
          <para>Conglomerate <ulink url="http://conglomerate.org/">http://conglomerate.org/</ulink></para>
        </listitem>
      </orderedlist>
    </sect2>
  </sect1>
  <appendix id="appendix"><title>譯者補充資料</title>
    <sect1 id="distro-docpkg"><title>各 Linux 釋出版的 DocBook 安裝套件</title>
      <para>就如同本文一開始就建議的，你應該先試著查詢你所使用的 Linux 發行版，是否已有規劃好的 DocBook 工具套件。如果有，你該優先使用你發行版規劃的方式，因為那將更容易，功能也更完整。</para>
      <sect2><title>Red Hat 9.0</title>
        <orderedlist>
          <listitem><para>docbook-utils : 將 SGML DocBook 轉換成其他格式文件的工具。</para></listitem>
          <listitem><para>xmlto : 將 XML DocBook 轉換成其他格式文件的工具。</para></listitem>
        </orderedlist>
        <para>Red Hat 都是用 RPM 套件來構成他的系統的，所以你當然該使用 rpm 指令來查詢你套件的安裝狀況:</para>
<screen>
<command>$ rpm -qa | grep -i docbook-utils </command>
<command>$ rpm -qa | grep -i xmlto </command>
</screen>
        <para>不管是 docbook-utils 和 xmlto 都有相依的問題，請依照 Red Hat 的 RPM 指示安裝相依套件，使用方法請參考套件自己的說明檔。</para>
      </sect2>
      <sect2><title>Mandrake 9.1</title>
        <para>與 Red Hat  9.0 使用的基本工具大抵相同，也是使用 docbook-utils 相關組件，查詢方式亦如 Red Hat ，但 Mandrake 似乎不提供 xmlto 這個工具包。</para>
      </sect2>
      <sect2><title>Slackware 9.0</title>
        <para>他的下載 ISO 檔好像並未包括 DocBook 的相關工具，只是在 extra 路徑下，有另外的 sgml-tools-1.0.9 的套件包和 source 包。有需要的使用者大概需要另外到 Slackware 相關安裝網站，下載回來安裝在主機上，應該即可建立 DocBook 解譯轉換環境。</para>
      </sect2>
      <sect2><title>其他 Linux 的發行版</title>
        <para>Linux 各發行板眾多，每個系統規劃和工具選用各有不同，大抵上使用 docbook-utils 或 sgml-tools 工具組件，都能建立 DocBook 的執行環境，所以不妨從這兩個方向查詢你目前使用發行版的系統狀況。如果還是毫無頭緒，就參照本文的敘述方法，從下載 source 來建立 DocBook 執行環境。或者也可以參考另一篇 HOWTO 提供的，DocBook 執行環境建立的方法 <ulink url="http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/DocBook-Install.html">DocBook Install mini-HOWTO</ulink> 。</para>
      </sect2>
    </sect1>

    <sect1 id="code-problem"><title>列印格式文件轉換的中文字型顯示問題</title>
      <para>一般在處理 DocBook 文件格式轉換時，會將輸出格式分為線上和列印兩大類。線上是指像 HTML,TXT 這種，主要是直接在螢幕上觀看瀏覽的文件格式。而列印是指像 PS,RTF,PDF 這種，用作排版列印的文件格式。</para>
      <para>OpenJade 在做線上文件格式轉換時，能正確的轉譯處理中文相關字集。但在列印格式文件轉換上，卻每每遭遇中文字型無法移轉，造成轉換後的文件中，中文字變成亂碼顯示的問題。下面會列出一些其他 linux 先進在處理列印格式文件中文字集顯示的經驗，供大家做個參考。</para>
      <sect2><title>由網頁開始</title>
        <para>雖然由 DocBook 直接轉換至 RTF,PDF,PS 等格式列印文件，因為中文字型的獨特問題，顯得問題重重。但 DocBook 的同宗親戚，HTML 網頁文件，現在早已是大家共同支援的標準，不管是中文支援或再轉換成其他格式列印文件，都不會有問題。因此，如果 DocBook 轉成 HTML 是沒問題，那麼就讓我們利用 HTML 這個敲門磚，去打開通往其他列印格式文件轉換之路。</para>
      <para>首先，讓我們參考<link linkend="single-webpage">SGML 到 HTML(單頁式)</link>的作法產生一個不分頁的單獨 HTML 文件，為了確保這份 HTML 文件在被各式各樣編輯器載入時，中文編碼會被正確處理，最好在 HTML 的 META 區有正確 charset 的敘述。譬如我們使用台灣地區最通行的 big-5 編碼，那麼你該檢查一下是否有下列敘述，沒有的話，手動加上他。
<screen>
<![CDATA[
<html><head>
<META HTTP-EQUIV="Content-Type" content="text/html;charset=big5">
<!-- 一定要有這一行 -->
......
</head>
......
]]>
</screen></para>
        <para>好了，現在你已經有了一個包含了你所有 DocBook 訊息的單一 HTML 檔案，譬如我們把他取名叫 <filename>output.html</filename> ，現在就可以利用他做其他格式的轉換。</para>
        <variablelist><title>從網頁到其他列印格式</title>
          <varlistentry><term>mozilla 的解決方案</term>
            <listitem><para>譯者測試使用的版本是 mozilla-1.2.1-26
            <orderedlist>
              <listitem><para>在 mozilla 中載入 output.html</para></listitem>
              <listitem><para>在 mozilla 上方功能表中執行
<screen>
<command>檔案(F)/列印(P...)/列印到檔案</command>
</screen>
              </para></listitem>
              <listitem><para>將 HTML 網頁轉換成 PostScript 列印格式檔案(副檔名 *.ps)。</para></listitem>
            </orderedlist></para></listitem>
          </varlistentry>
          <varlistentry><term>OpenOffice 的解決方案</term>
            <listitem><para>譯者測試使用的版本是 OpenOffice-1.0.2-4
              <orderedlist>
                <listitem><para>啟動 OpenOffice 功能表
<screen>
<command>檔案(F)/開啟舊檔(O)</command>
</screen>
                </para></listitem>
                <listitem><para>在對話窗中，檔案類型選網頁，檔案名稱選 <filename>output.html</filename>，然後按開啟舊檔按鈕。</para></listitem>
                <listitem><para>載入後如果是亂碼，表示你 <filename>output.html</filename> 的 META charset 沒有設定正確。正確的是顯是中文或中文呈現空白，如果中文空白，請執行
<screen>
<command>編輯(E)/全部選取(A)</command>
</screen>
然後在字型選擇列示盒裡選擇一個中文字型。</para></listitem>
                <listitem><para>在 OpenOffice 中調整一下版面設定，作成你喜歡的樣子。</para></listitem>
                <listitem><para>執行：
<screen>
<command>檔案(F)/列印(P)</command>
</screen></para></listitem>
                <listitem><para>在列印對話盒選取列印成檔案功能， OpenOffice 就會讓你選擇 PostScript or PDF 的輸出，按列印就可以得到我們的列印格式檔案。</para></listitem>
                <listitem><para>執行：
<screen>
<command>檔案(F)/另存新檔(A)</command>
</screen>
可以存成其他格式文件，譬如說 MS Word or RTF 。</para></listitem>
              </orderedlist></para></listitem>
          </varlistentry>
        </variablelist>
      </sect2>
      <sect2><title>純文字檔轉列印格式</title>
        <para>如果你的系統中沒有像 mozilla 或 OpenOffice 這種龐然大物，也不希望去動用他們，那麼有許多文字編輯器如 KDE 環境的 kwrite,kate，都可以將中文的純文字檔轉換成 PostScript 或 PDF 格式。</para>
        <para>可不要以為純文字檔格式單純最好做格式轉換，事實上由 DocBook 轉到 HTML 反而最單純，因為彼此格式大同小異，轉到文字檔要牽涉行寬字數，縮排字元計算，空白行保留等。所以我們下載的一組 DSSSL 樣式表裡，竟沒有一個樣式表方便做 DocBook 對 text 轉換的。所以我們將借用文字型態的網頁瀏覽器 lynx 的 dump 功能，將 output.html dump 成純字檔，再載入到 kwrite 處理。</para>
        <orderedlist>
          <listitem><para><command>lynx output.html</command></para></listitem>
          <listitem><para>在 lynx 中按 P 鍵執行 P)rint 功能</para></listitem>
          <listitem><para>選擇 Save to a local file</para></listitem>
          <listitem><para>在 Enter a filename: 提示字串旁輸入 <filename>output.txt</filename></para></listitem>
          <listitem><para>按 Q 鍵執行 Q)uit 功能</para></listitem>
          <listitem><para><command>kwrite output.txt</command></para></listitem>
          <listitem><para>在 kwrite 中執行 檔案(F)/列印(P...)</para></listitem>
          <listitem><para>在列印對話盒選擇列印到文件(PDF)或列印到檔案(PostScript)</para></listitem>
        </orderedlist>
      </sect2>
      <sect2><title>其他支援中文格式列印的轉換方法</title>
        <para>除上所列，還有一些比較專門的解決辦法。但由於並非一般使用者常用的工具，其執行環境建立及操作技巧比較複雜，所以不在此一一詳述，只列出相關參考文件位址，有興趣的讀者可以自行前往瀏覽。</para>
        <orderedlist>
          <listitem><para>自由軟體元件細圖中的<ulink url="http://www.softwareliberty.org.tw/project/software-map/v1.01/node111.html">中文輸出</ulink>相關章節，中華民國軟體自由協會著。</para></listitem>
          <listitem><para>FreeBSD Chinese HOWTO <ulink url="http://freebsd.sinica.edu.tw/zh-tut/print.html">Chapter 9. 中文的列印</ulink> ，作者 Shen Chuan-Hsing 。</para></listitem>
          <listitem><para>酷學園技巧心得一章 <ulink url="http://www.study-area.org/tips/latex/chpdf.html">由 TeX/LaTeX 製作中文 PDF 檔</ulink> ，作者 李果正 Edward G.J. Lee。</para></listitem>
          <listitem><para>酷學園技巧心得一章 <ulink url="http://www.study-area.org/tips/latex/pdftex.html">使用 pdfTeX/pdfLaTeX 讓 pdf 檔內嵌中文 TTF/TTC</ulink> ，作者 李果正 Edward G.J. Lee。</para></listitem>
        </orderedlist>
      </sect2>
    </sect1>
    <sect1><title>與 DocBook 有關的中文參考資料</title>
      <para>本小節列出譯者曾在網路上看到的中文 DocBook 資料，如果你知道有其他完整的，清楚的 DocBook 中文資源，沒在這裡列出來的，請請寄信到 <email>&author.joe.mail;</email> ，來信主旨欄請註明 Docbook question ，我將十分感謝您的協助。</para>
      <orderedlist><title>中文 DocBook 參考資料列表</title>
          <listitem><para>用Open Source工具開發軟體<ulink url="http://www.study-area.org/tips/opentools/opentools/doc.html">Chapter 2. 製作文件工具</ulink> ，作者 黃郁熙。本篇雖然是把 DocBook 當作結構文件的一種加以綜合介紹，但仍舉出了一些 DocBook 的簡單寫作範例以供參考。</para></listitem>
          <listitem><para>本 HOWTO 譯文的原始格式文件 <ulink url="&source.sgml.url;&source.sgml.filename;">&source.sgml.filename;</ulink> ，沒錯，還有什麼比用 DocBook 來詮釋 DocBook 更貼切呢？</para></listitem>
      </orderedlist>
    </sect1>

    <sect1><title>DocBook 疑義問答</title>
      <qandaset>
        <qandaentry><question><para>我不想使用 docbook-utils 規劃的執行模式，卻想直接操作 OpenJade ，該怎麼做？</para></question>
        <answer><para>一般 Red Hat or Mandrake 發行版的使用者，系統中都會安裝 docbook-utils 套件可以執行 DocBook 文件的格式轉換工作。如果你不喜歡 docbook-utils 為你設定的執行方式，而想像本 HOWTO 一樣直接操作 OpenJade ，那麼你必須做幾件事：
<variablelist>
  <varlistentry><term>確定 openjade 路徑有在 $PATH 變數中</term>
    <listitem><para>你可以用
<screen><command># which openjade</command></screen>來測試，如果顯示出錯誤訊息，那你就必須執行
<screen><command># rpm -ql openjade</command></screen>來找出 openjade 被安裝到那個路徑下，然後把這路徑加到 $PATH 環境變數中。</para></listitem>
  </varlistentry>
  <varlistentry><term>找到系統中的最上層 catalog 檔</term>
    <listitem><para>通常他們的路徑和本 HOWTO 一樣，是 <filename>&system.sgmlcat.path;/catalog</filename> 。</para></listitem>
  </varlistentry>
  <varlistentry><term>設定 $SGML_CATALOG_FILES 環境變數</term>
    <listitem><para>你可以使用下列的指令讓 $SGML_CATALOG_FILES 立即生效。
<screen><command># export SGML_CATALOG_FILES=&system.sgmlcat.path;/catalog</command></screen>
    </para></listitem>
  </varlistentry>
</variablelist>
如果你無法找到供 openjade 使用的 catalog 階層設定檔及相關結構，就只有請參考<link linkend="jade-exec-envset">設定 OpenJade 的函式庫及環境變數</link>一節，自己手動編寫 catalog 檔了。當你完成了這些程序，你就可以按<link linkend="trans-docbook">轉換 SGML Docbook 文件</link>的方式使用 OpenJade 。</para></answer></qandaentry>
        <qandaentry><question><para>openjade:file.xml:22:0:E: could not get "/xml/4.1.2/docbookx.dtd"...</para></question>
        <answer><para>如果你常從網路上抓 XML 語法格式定義的 DocBook 文件，回來本機執行格式轉換時，卻發覺在 OpenJade 環境下，會出現這種找不到含括檔的錯誤，問題是明明你系統中 XML DTD 設定是完整的，版本也對啊，為何會這樣呢？</para>
        <para>其實這多半是 XML 文件宣告時，SYSTEM ID 惹的禍。因為 SGML 格式的文件宣告多半只是：</para>
<screen>
<![CDATA[
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1.2//EN">
]]>
</screen>
        <para>就解決了，真正的 DocBook DTD 路徑要到 catalog 裡找。但合法的 XML 文件宣告卻常是：</para>
<screen>
<![CDATA[
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
                         "http://docbook.org/xml/4.1.2/docbookx.dtd">
]]>
</screen>
        <para>依據文件設定優先於系統設定的原則，OpenJade 會去網路上找 <filename>http://docbook.org/xml/4.1.2/docbookx.dtd</filename>，而不是你系統中的設定。萬一網路上的該 URL 有任何更動或你的使用權限問題，導致你無法取得 <filename>docbookx.dtd</filename> ，當然就是產生錯誤，連帶的也讓後續的檔案含括通通失敗，終至轉換格式終止。</para>
        <para>所以你在 XML 型態的 DocBook 文件格式轉換產生上列的錯誤訊息時，最簡單的方法是就是把那個 DOCTYPE 標簽中的 URL SYSTEM ID 字串拿掉，讓這份文件使用你系統中 catalog 中設定的 <filename>docbookx.dtd</filename> 。當然這不是全無壞處，因為 DocBook 是個可客製化的標記語言，萬一製作此 DocBook 文件的組織採用了特別客製的 DocBook DTD ，那一定和你系統中的 DTD 不同，你用你系統中的 DTD 取代，還是無法得到正確的轉換。不過一般這樣的例子不多，大部分都是 URL 取得錯誤的烏龍事件而已。</para>
      </answer></qandaentry>
      </qandaset>
    </sect1>

  </appendix>
</article>
