<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hengheng123456789

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
     

    Docbook Beginning

    http://blog.csdn.net/mickeyrat/archive/2005/02/04/281050.aspx

    編寫技術(shù)文檔,我想誰都遇到過。很多人都用MS Word,不可否認Word的功能確實非常強大,但是用Word有一些缺點無法避免:

    1)
    寫文檔的時候,不得不兼顧文檔的格式,這是件很頭痛的事情,至少對我來說。經(jīng)常是最后不得不Review好幾遍,就是為了統(tǒng)一格式,即使使用模板也不能避免這個問題。

    2)
    無法進行有效的版本控制,因為Word保存的是二進制格式,這就不能使用CVS的版本控制功能,只能手工合并,這樣很容易出錯。雖然Word現(xiàn)在也可以保存成XML,但是看一下保存的文件就會發(fā)現(xiàn),格式和內(nèi)容混雜在一起,簡直沒法看。況且,版本控制的時候,我們注重的往往是內(nèi)容,現(xiàn)在卻不得不處理大量的格式信息,至少我沒興趣把時間花在這個上面。

    3)
    可移植性問題,畢竟Word只能運行在Windows平臺上,即使可以保存為XML或者HTML,在其他平臺上你又如何編輯和打印呢?

    4)
    用盜版還是正版的問題,公司不得不考慮知識產(chǎn)權(quán)這個比較嚴(yán)肅的話題。

    講到這里,很多人可能會自然而然的想到XML+XSLT+開源代碼。Docbook正是基于XSLT把內(nèi)容和形式分開的思想開發(fā)的,它可以解決上述的所有問題。

    那么到底什么是Docbook

    Docbook
    是一些標(biāo)準(zhǔn)和工具的集合。標(biāo)準(zhǔn)包括XMLDTDXSLXSL-FODocbook DTDDocbook的核心),工具則包括XSLT ProcessorXSL-FO Processor。這些標(biāo)準(zhǔn)和工具組成基于Docbook的發(fā)布系統(tǒng)。

    Docbook
    原本是為了編寫和發(fā)布技術(shù)文檔而開發(fā)的,O'Reily是發(fā)起者之一,但實際上它也可以用于其他類型的文檔,因為它所定義的結(jié)構(gòu)符合大部分現(xiàn)代書籍的格式。

    Docbook的核心是Docbook DTD,這個標(biāo)準(zhǔn)是由OASISDocbook小組維護的。這個標(biāo)準(zhǔn)對文檔的結(jié)構(gòu)進行了詳細的定義,譬如書(book元素)可以包含一個標(biāo)題(title),若干的段落(para)和若干的章節(jié)(chapter),等等。這些都符合常規(guī)書籍的出版格式。

    使用Docbook編寫文檔,實際上就是根據(jù)Docbook DTD編輯XML文件的過程。所有的內(nèi)容都用標(biāo)簽封裝起來,Docbook提供了十分詳盡的定義,幾乎任何內(nèi)容都可以根據(jù)其用途找到對應(yīng)的標(biāo)簽。在編輯文檔的過程中,作者只需要關(guān)心內(nèi)容,根本不會涉及到排版的問題。

    要發(fā)布Docbook文檔,必須使用XSLT。專為Docbook使用的XSLT不屬于Docbook的核心,任何人都可以編寫自己的XSLT。當(dāng)然,你不用真的自己寫(除非你有興趣),已經(jīng)有人做了這方面的工作,你可以在SourceForge找到Norman Walsh開發(fā)的Docbook樣式單,寫這篇文章的時候,最新版本是1.67.2

    如果最終發(fā)布Docbook文檔,自然需要用到XSLT ProcessorXSL-FO Processor這類的工具,可供選擇開源工具很多,像xsltprocXalanFOPPassiveTeX等等。這些工具實際上也是與Docbook無關(guān)的。因此不用浪費時間在網(wǎng)上找Docbook的專門工具,只要找到按標(biāo)準(zhǔn)實現(xiàn)的工具,就可以用來發(fā)布Docbook文檔。

    總的來說,Docbook的發(fā)布流程是這樣的:

    1)
    編寫XML文檔;

    2)
    使用XSLT ProcessorXML文檔轉(zhuǎn)換成HTML文檔,或者XSL-FO文檔;

    3)
    使用XSL-FO ProcessorXSL-FO文檔轉(zhuǎn)換為PDF或者PS文件。

    因此,Docbook有下列優(yōu)點:

    1)
    內(nèi)容與格式分離;

    2)
    內(nèi)容高度結(jié)構(gòu)化;

    3)
    平臺無關(guān);

    4)
    發(fā)布過程可以自動化;

    5)
    易于版本控制;

    6)
    可以生成多種形式的文檔。

    Docbook的缺點就是非WYSIWYG,編輯的時候不如Word那么直觀,直接編輯XML文件還是一件比較煩瑣的事情。但是這個問題并不嚴(yán)重,使用專門的XML編輯器就可以讓工作輕松很多,譬如Emacs就支持Docbook文檔的編輯。至于效果,使用工具生成最終文檔是非常快的。相對于它的優(yōu)點而言,這點缺點又算的了什么呢。

    參考資料:
    Docbook

    Docbook Publishing Model

    安裝配置Docbook工具

    使用Docbook發(fā)布文檔,需要安裝以下的工具:
        *DocBook DTD
        *DocBook XSL
    樣式單
        *XSLT
    處理程序
        *XSL-FO
    處理程序

    下面詳細介紹各個工具的安裝。

    1.安裝DocBook DTD

    Docbook DTD可以到OASIS的網(wǎng)站上下載,在這里你可以找到zip格式的壓縮包。目前的最新版本是4.2

    事實上可以不下載Docbook DTD。如果你的文檔DTD聲明這樣寫:

    <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"  "

    根據(jù)這樣的定義,大部分XML處理器能夠從網(wǎng)絡(luò)上獲取DTD。這樣做的好處是編輯的Docbook文檔移植性好,可以在沒有安裝Docbook DTD的機器上使用。不過由于Docbook DTD比較龐大,通過網(wǎng)絡(luò)獲取DTD會影響處理速度,在低速網(wǎng)絡(luò)或者網(wǎng)絡(luò)比較糟糕的情況下,影響尤為顯著。

    如果選擇使用本地DTD,文檔的DTD引用應(yīng)該這樣寫:

    Linux:
    <!DOCTYPE book SYSTEM "/usr/share/docbook-4.2/docbookx.dtd">

    Windows:
    <!DOCTYPE book SYSTEM "
    file:///C:/xml/docbook42/docbookx.dtd">

    Docbook提供了一種方式,讓用戶可以使用相同的DTD聲明,但可以在使用網(wǎng)絡(luò)獲取DTD和使用本地DTD之間切換,同時擁有兩者的優(yōu)勢。這就是catalog文件的作用。典型的catalog的聲明如下:

    <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
      <group id="DocbookDTD" prefer="public">
          <system 
             systemId="
    http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
             uri="
    file:///usr/share/xml/docbook42/docbookx.dtd"/>
      </group>
    </catalog>

    這個聲明把網(wǎng)絡(luò)DTD映射到本地DTD。如果使用支持CatalogXSLT Processor,它首先會查找本地文件,如果本地文件不存在,再查找網(wǎng)絡(luò)。

    2.安裝Docbook XSL樣式單

    http://docbook.sourceforge.net上可以下載到Docbook XSL樣式單,目前最新的版本是1.67.2

    解壓之后,有幾個比較主要的目錄:
     *common   -
    包含的是公用的模塊,諸如語言之類的文件都在這里。
     *extensions -
    針對特定的XSLT Processor編寫的擴展代碼。
     *fo             -
    生成XSL-FO文件所需的XSL樣式單。
     *html          -
    生成HTML文件所需的XSL樣式單。
     *images      -
    生成文檔時所需要的圖片。
     *doc          -
    有關(guān)XSL樣式單的文檔,同樣是Docbook文檔。

    其他還有像htmlhelp之類的目錄,但不是生成HTMLXSL-FO所必須的。

    3.安裝XSLT Processor

    目前有許多免費的XSLT Processor,最常用的是
     *Saxon    -
    使用Java實現(xiàn),http://saxon.sourceforge.net/
     *Xalan     -
    JavaC++版本,http://xml.apache.org/xalan-j/index.html
     *xsltproc -
    使用C實現(xiàn),是最快的處理程序,http://xmlsoft.org/XSLT/
     
    因為SaxonXalan都有Java版本,所以按照一般的Java程序的安裝方式安裝即可。下面介紹xsltproc的安裝,因為它速度快,是我比較喜歡的處理程序。

    如果你使用windows平臺,那么你有兩個方法可選:

     1) 直接下載windows平臺預(yù)編譯的版本。你需要下載libxml, libxslt, iconv,它們都是zip格式,解壓之后,在環(huán)境變量PATH中添加xsltproc.exe.dll文件的路徑。
     
     
    如果你不想編輯環(huán)境變量,一個簡單的辦法是把下面這些文件復(fù)制到C:"Windows"System32

      libxslt.dll
      libxml2.dll
      libexslt.dll
      iconv.dll
      xsltproc.exe

     這樣在命令行就可以直接找到這些文件了。完成之后,運行

     xsltproc -version

     
    打印出版本號則表明完成安裝。
     
     2)
    Cygwin下安裝,這是我選擇使用的方式。Cygwin是一個在Windows下模擬Linux Shell的應(yīng)用程序。如果你喜歡以Linux命令的方式來使用xsltproc下載Cygwin安裝程序。Cygwin的是通過網(wǎng)絡(luò)安裝的,首先你從它提供的包列表中選擇libxslt,然后安裝程序會根據(jù)依賴關(guān)系自動選擇libxml2,確定之后,安裝程序下載并安裝xsltproc。完成安裝之后,你就可以運行

     xsltproc -version

    來檢查是否安裝成功。
     
    3)
    如果使用Linux,很有可能系統(tǒng)已經(jīng)安裝了xsltproc。運行

    xsltproc -version

    檢查一下是否已經(jīng)安裝。如果運行命令失敗,或者版本太老,那么訪問下面兩個URL獲取最新的RPM包:

    http://rpmfind.net/linux/rpm2html/search.php?query=libxml2
    http://rpmfind.net/linux/rpm2html/search.php?query=libxslt

    然后切換到root權(quán)限,安裝新的包:

    rpm -Uv libxml2-2.6.17-2.i386.rpm
    rpm -Uv libxslt-1.1.12-4.i386.rpm

    完成之后,就可以運行

    xsltproc -version

    檢查安裝是否完成。

    安裝之后,就可以使用xsltproc來生成HTML或者XSL-FO文件。

    譬如,生成HTML

    xsltproc  --output myfile.html  docbook-xsl/html/docbook.xsl myfile.xml

    或者生成XSL-FO文檔:

    xsltproc --output myfile.fo docbook-xsl/fo/docbook.xsl myfile.xml

    http://xmlsoft.org/XSLT/xsltproc2.html上列出了所有xsltproc的命令行參數(shù),直接運行
    xsltproc
    也會打印出參數(shù)列表。

    如果你只要發(fā)布HTML文檔,那么到此為止。如果你還想發(fā)布PDF或是PS文檔,那么需要安裝XSL-FO處理程序。

    4. 安裝XSL-FO處理程序

    XSL-FO處理程序根據(jù)XSLT處理程序生成的XSL-FO文件生成PDF或者PS文件。目前可供選擇的XSL-FO處理程序遠不如XSLT處理程序那么多,這是因為:

        a. XSL-FO
    標(biāo)準(zhǔn)比XSLT標(biāo)準(zhǔn)的制訂晚兩年;

        b.XSL-FO
    標(biāo)準(zhǔn)及其龐大而復(fù)雜,該標(biāo)準(zhǔn)的作者也發(fā)現(xiàn)其實現(xiàn)上的難度,從而將該標(biāo)準(zhǔn)分為基本、擴展和完整三個級別。

    現(xiàn)在可用的免費的XSL-FO處理程序有:

        *FOP - 來自Apache XML項目。目前最新的版本是0.20.5,還在開發(fā)當(dāng)中,還有很多特性不支持,不過已經(jīng)可以滿足一般的使用。
       
        *PassiveTeX -
    來自Sebastian Rahtz (http://www.tei-c.org.uk/Software/passivetex/)一款基于TeXXSL-FO處理程序。同樣也在開發(fā)中,較FOP要復(fù)雜的多。

    另外有一些商業(yè)產(chǎn)品可供選擇,可能生成的文檔質(zhì)量要比開源代碼好,譬如:

        *XEP

        *XSL Formatter

    下面介紹如何安裝FOP

    4.1.首先需要安裝JDK,這個不用多說。

    4.2. 下載FOP,可以選擇tar或者zip壓縮包。下載之后解壓到本地。

    4.3. 下載圖形代碼庫。FOP自己不支持PNG之類的圖片,如果在你的文檔里會涉及到圖片,那么需要下載額外的代碼庫。可以選擇JAI,或者Jimi0.20.5之前的版本只能使用Jimi。下載之后,將jai_core.jarjai_codec.jarJAI),或者JimiProClasses.jarJimi)復(fù)制到FOP安裝目錄的lib目錄下,然后在fop.batWindows平臺)中添加

    set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%"jai_core.jar
    set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%"jai_codec.jar

    或是
    set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%"JimiProClasses.zip

    如果使用fop.shLinux平臺),會自動搜索。

    4.4. 添加擴展代碼。如果Docbook XSL樣式單有針對FOP的擴展代碼(目前沒有),像上面一樣把它們添加到FOP安裝目錄下lib目錄。

    現(xiàn)在就可以使用FOP來生成PDF文檔了。FOP提供兩個腳本fop.batWindows平臺)和fop.shUnixLinux平臺)以方便使用。生成PDF的命令行如下:

        Linux
    Unix
        fop.sh -xsl /docbook-xsl/fo/docbook.xsl -xml myfile.xml -pdf myfile.pdf
       
        Windows

        fop.bat -xsl /docbook-xsl/fo/docbook.xsl -xml myfile.xml -pdf myfile.pdf

    在處理過程中,可能會提示某些屬性不支持或尚未實現(xiàn),不用理會這些提示,因為FOP仍處于開發(fā)中,這并不影響生成PDF文檔。

    到此,一個Docbook發(fā)布系統(tǒng)配置完成,并可以用來發(fā)布文檔了。你完全可以在Linux上編寫任務(wù),通過該系統(tǒng)自動發(fā)布技術(shù)文檔。


    制作Docbook文檔

    1. 制作Docbook文檔需要了解的知識:

    1) XML - 這是最基本的,如果這個都不懂的話,最好先找本入門級的書看看;
    2) DTD -
    有助于你理解Docbook的結(jié)構(gòu);
    3) XSL -
    有助于定制自己的Docbook
    4) XSL-FO -
    最好了解一點,有助于更好的定制自己的PDF輸出。

    2. 制作Docbook文檔的最簡單的過程包括以下的步驟:

    1) 編輯XML文件;
    2)
    XML文件進行處理,生成HTML或者PDF文檔。

    2.1. 編輯XML文件

    如果使用純文本編輯器來完成這項工作,我敢打賭一天之后你就做不下去了,直接編輯XML可是一件苦差事。使用類似XMLSPY這樣的工具,提供自動填充功能,并且隨時可以進行有效性檢查,不容易出錯,可以讓工作輕松不少。

    Docbook文檔分兩類:書(book)和文章(article)。article就是一般的文章,不包含章(chapter),只有節(jié)(section)。book比較完整,可以包含前言(preface),部分(part),章(chapter),文章(article)等等。以上描述的都是Docbook DTD定義的元素,這里不可能給出詳細的說明,具體每個元素的結(jié)構(gòu)參見Docbook DTD

    讓我們先來看一個book類型文檔的典型定義:

                list 1. 典型的book類型文檔
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                   "
    http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
    <book>
     <bookinfo>
      <title>My Book</title>
      <author>
       <firstname>My First Name</firstname>
       <surname>My Last Name</surname>
      </author>
      <publisher>
       <publishername>CSDN</publishername>
      </publisher>
      <isbn>ISBN#</isbn>
      <copyright>
       <year>2005</year>
      </copyright>
     </bookinfo>
     <part>
      <title>My Part</title>
      <chapter>
       <title>My Chapter</title>
       <sect1>
        <title>My Section1</title>
        <para>This  is a demo of a book.</para>
       </sect1>
      </chapter>
     </part>
    </book>

    該文檔聲明使用的DTDhttp://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd,所有的內(nèi)容都包含在book元素中,bookinfo元素包含書名(title)、作者(author)、出版社(publisher)、書號(isbn)和版權(quán)(copyright)。接著part元素包含的內(nèi)容是該書的一個部分,下面有一章,接著有一節(jié)(sect1),當(dāng)然都有各自的標(biāo)題。

    怎么樣,各個元素的含義是不是很顯而易見,根據(jù)元素的名稱,你就能知道自己的內(nèi)容該包含在什么元素里面。

    在上面的例子里面,有些元素不是必須的。譬如bookinfo,可以沒有或者有一個,看Docbook DTD就可以知道。

    下面我以article類型的文檔為例子,說明Docbook文檔的制作過程。

    首先是XML聲明,說明文檔的一些基本信息:

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

    緊接著是文檔的DTD聲明,說明文檔使用的DTD還有根元素。典型的docbook文檔的DTD聲明如下:

    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                   "
    http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">

    這個聲明表明,文檔的根元素是<article>,使用外部DTD,該DTD用一個公共標(biāo)識符"-//OASIS//DTD DocBook XML V4.2//EN"標(biāo)識,該DTD位于網(wǎng)絡(luò)的某處。標(biāo)識符必須是全球唯一的,其形式為:

    prefix//owner-identifier//text-class text-description//language//display-version

    第一個prefix“+/-”“+”表示是已注冊的標(biāo)識,“-”則相反。其他各部分的含義自己對照。

    接著就可以添加內(nèi)容了。首先是根元素:

    <article>

    </article>

    article必須有一個標(biāo)題:

    <article>
        <title>My Article</title>
    </article>

    標(biāo)題之后必須有內(nèi)容,不可能有無內(nèi)容的文章:

    <article>
         <title>My Article</title>
         <sect1>
          </sect1>
    </article>

    這里我們添加一個小節(jié),“sect1”是小節(jié)的最頂層元素,其編排方式與MS Word“heading 1”類似。

    article相同,sect1也必須有標(biāo)題:

    <article>
         <title>My Article</title>
         <sect1>
            <title>My Section</title>
          </sect1>
    </article>

    sect1也不允許無內(nèi)容:

    <article>
         <title>My Article</title>
         <sect1>
            <title>My Section</title>
            <para>This is my first article.</para>
          </sect1>
    </article>

    正文的內(nèi)容一般用<para>元素封裝,para即段落(paragraph)的意思。

    現(xiàn)在就有了一個最簡單的Docbook文檔。list 2是完整的代碼。

                list 2. 一個簡單的article文檔
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
                   "
    http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
    <article>
         <title>My Article</title>
         <sect1>
              <title>My Section</title>
              <para>This is my first article.</para>
         </sect1>
    </article>

    編輯完成之后,保存為myarticle.xml,接著就可以生成HTML或者PDF了。

    2.2 生成HTML

    關(guān)于如何安裝配置工具,參見安裝配置Docbook”

    我使用cygwin下的xsltproc來生成HTML,在cygwinshell中輸入命令:

    xsltproc --nonet --output myarticle.html c:/docbook-xsl-1.67.2/html/docbook.xsl myarticle.xml

    --nonet表示我不希望從網(wǎng)絡(luò)獲取DTD,這樣可以節(jié)省時間。

    --output指定我希望輸出的文件名,這里指定的是myarticle.html

    緊接著是用來轉(zhuǎn)換XML文件的XSL樣式單,需要注意,使用的是html目錄下的XSL樣式單。

    最后是要處理的Docbook文檔。

    沒有意外的話,現(xiàn)在你就可以用瀏覽器打開myarticle.html看看效果了。

    2.3 生成PDF文件

    下面使用FOP生成PDF文件。關(guān)于如何安裝配置FOP,參見http://blog.csdn.net/mickeyrat/archive/2005/02/06/283471.aspx

    在控制臺輸入命令:

    fop -xml myarticle.xml -xsl C:"docbook-xsl-1.67.2"fo"docbook.xsl myarticle.pdf

    Linux的命令類似,注意docbook.xsl的路徑。

    -xml指定需要轉(zhuǎn)換的docbook文檔。

    -xsl指定使用的樣式單,注意,這里使用的fo目錄下的樣式單,這是專為轉(zhuǎn)換XSL-FO開發(fā)的。

    最后是輸出文檔的文件名。

    FOP處理過程中,會輸出許多諸如

    property - "background-position-horizontal" is not implemented yet.

    的信息。不用理會,這是因為FOP還在開發(fā)中,許多XSL-FO的特性都不支持。這樣的問題并不影響最終文檔的生成。

    快打開myarticle.pdf看看效果吧,是不是很專業(yè)的PDF文檔?

    是不是覺得制作docbook文檔很簡單呢?這么想可就錯了,本文剩余的部分介紹制作Docbook文檔的高級技巧。

    3. 定制自己的XSL樣式單

    當(dāng)你開始正式制作自己的docbook文檔之后,你會發(fā)現(xiàn)生成的文檔并不能完全滿足你對格式的要求,譬如章節(jié)號、頁碼、字體等等。這一節(jié)就告訴你如何定制自己的XSL樣式單,生成滿足特定需求的文檔。下面的內(nèi)容會涉及XSLXSL-FO

    有人可能會想通過修改Docbook DTD達到定制目的,但是這種方式是不建議采用的,因為修改Docbook DTD之后,你的文檔就不再是Docbook文檔。

    因為Docbook把內(nèi)容與樣式完全分開,所以修改XSL樣式單,就能夠改變輸出結(jié)果。

    為了修改樣式單,你需要有自己的定制層,也就是基于Docbook XSL樣式單之上開發(fā)自己的樣式單。千萬不要直接修改Docbook XSL樣式單,這樣做有兩個缺點:

    1) 不易維護:你的修改可能會分散在幾十個文件中,過幾天,你就會忘記自己修改過的地方。

    2) 不易升級:如果你想升級樣式到新的版本,你不得不把你所做的所有修改合并到新的版本中,合并的過程中肯定要處理大量的沖突,并且容易出錯。

    我想你應(yīng)該知道<xsl:include><xsl:import>的區(qū)別:使用<xsl:include>引入的元素,如果有重復(fù)定義的,第一次出現(xiàn)的有效;使用<xsl:import>引入的元素,最后一個有效。定制層其實是依賴于XSL這樣的一個特性,使用<xsl:import>引入Docbook XSL樣式單的起點文件,然后添加自己的修改。list 3給出一個定制層文件的框架。

                                 list 3 customization.xsl
    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="
    http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:import href="html/docbook.xsl"/>
        ...
        modifications
        ...
    </xsl:stylesheet>

    定制層是XSL文件,因此需要引入xsl的名字空間。在第三行,引入轉(zhuǎn)換HTMLXSL樣式單的起點文件docbook.xsl,如果是XSL-FO的定制層,起點文件在fo目錄下。然后就可以添加自己的修改了。

    定制分為兩類,一類是修改樣式單參數(shù),一類是修改模板。

    3.1 修改樣式單參數(shù)

    打開html/param.xsl或者fo/param.xsl,可以找到所有的樣式單參數(shù)。看下面這個例子

    <xsl:param name="section.autolabel" select="0"/>

    參數(shù)的名字是“section.autolabel”,值為“0”。這個參數(shù)的作用是控制生成文檔的時候是否對小節(jié)自動編號,譬如“1”“1.1”等等。“0”表示關(guān)閉自動編號。你可以看一下前面生成的文檔,是不是沒有章節(jié)號?

    要打開自動編號,只需要這樣修改:

    <xsl:param name="section.autolabel" select="1"/>

    你不是直接在param.xsl里面改的吧?如果是的話,趕緊改回來!千萬記得,所有的修改都寫在前面生成的customization.xsl。現(xiàn)在重新生成HTML

    xsltproc --nonet --output myarticle.html c:/docbook-xsl-1.67.2/customization.xsl myarticle.xml

    或生成PDF
    fop -xml myarticle.xml -xsl C:"docbook-xsl-1.67.2"customization.xsl myarticle.pdf

    注意,這個參數(shù)對HTMLXSL-FO都有效,但是你必須在customization.xsl中用<xsl:import>引入對應(yīng)的起點文件,否則會報錯。現(xiàn)在新的文檔是不是出現(xiàn)章節(jié)號了?

    再來一個。看你的PDF文檔,肯定沒有bookmark,因為在fo/param.xsl中,bookmark的功能被關(guān)閉了。在customization.xsl里添加:

    <xsl:param name="fop.extensions" select="1"/>

    這樣FOP在處理的時候就會生成bookmark。注意這個參數(shù)的名字,“fop.extensions”,表示這個參數(shù)屬于FOP的擴展,只對FOP有效。如果你使用PassiveTeX,那么需要設(shè)置“passivetex.extensions”

    再來一個復(fù)雜點的:

    <xsl:param name="formal.title.placement">
      figure after
      example before
      equation before
      table before
      procedure before
      task before
     </xsl:param>

    這個參數(shù)作用于文章中的圖、表等等元素的標(biāo)題,控制標(biāo)題的位置在前面(before)還是后面(after),param.xsl預(yù)定義的都是“before”,這里把figure的標(biāo)題放在圖的后面。這個參數(shù)對HTMLXSL-FO都有效。在你的文檔中添加<figure>元素,重新生成文檔,就可以看到效果。

    3.2 修改模板

    Docbook XSL提供很多的參數(shù)控制輸出的效果。但是有時候,僅僅修改參數(shù)并不能滿足所有的要求,這時,你就需要修改模板。

    我們來看一個很現(xiàn)實的例子。XSL-FO定義了一類以“keep-”開頭的屬性,譬如“keep-with-next”,表示前面的內(nèi)容與后面的內(nèi)容必須在同一頁,不能斷開在兩頁上。但是除了table
    FOP
    目前不支持這樣的屬性。所以當(dāng)文檔比較長的時候,在FOP生成的PDF文檔中,你會發(fā)現(xiàn)有某些小節(jié)的標(biāo)題在一頁的底部,而內(nèi)容卻在下一頁,其他有標(biāo)題的內(nèi)容,譬如圖,都會出現(xiàn)這樣的情況。這當(dāng)然是不合理的,可是無論你怎么添加“keep-”類的參數(shù),都無濟于事。

    對于這樣的情況,FOPFAQ告訴你的就是,對不起,我們還沒有實現(xiàn),至于什么時候?qū)崿F(xiàn),你別問,我也不知道

    所以只能采取一個變通的方式。前面我說過,FOP對于table支持這樣的屬性,那么是否可以考慮把這樣的內(nèi)容放在table里面呢?當(dāng)然可以,FOP有一個“blind table”的概念,這樣的表除了其中的內(nèi)容是不可見的,正符合我們的要求。現(xiàn)在的問題就是,Docbook XSL樣式單生成的是通用的XSL-FO文件,不會把像<sect2>這種元素的內(nèi)容放到“blind table”里面。那就只剩一條路了(其實還有一條,用商業(yè)產(chǎn)品^_^RenderXXEP支持“keep-”類屬性),修改樣式單模板。list 4的代碼把<sect2>的內(nèi)容放到一個“blind table”里面。
     
                           list 4. blindtable.xsl
    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl="
    http://www.w3.org/1999/XSL/Transform"
                          xmlns:fo="
    http://www.w3.org/1999/XSL/Format"
                            version="1.0">
        <xsl:import href="docbook.xsl"/>

        <xsl:template match="sect2">
            <xsl:variable name="id">
                <xsl:call-template name="object.id"/>
            </xsl:variable>
      
            <fo:table table-layout="fixed" width="100%">
            <fo:table-column column-number="1"/>
            <fo:table-body>
                  <fo:table-row keep-with-next="always">
                       <fo:table-cell id="{$id}" xsl:use-attribute-sets="section.level2.properties">
                           <xsl:call-template name="sect2.titlepage"/>
                       </fo:table-cell>
                   </fo:table-row>
                   <xsl:variable name="toc.params">
                      <xsl:call-template name="find.path.params">
                          <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
                      </xsl:call-template>
                      <xsl:if test="contains($toc.params, 'toc') and $generate.section.toc.level &gt;= 2">
                           <xsl:call-template name="section.toc"/>
                           <xsl:call-template name="section.toc.separator"/>
                       </xsl:if>
                   </xsl:variable>     
                   <fo:table-row>
                       <fo:table-cell>
                           <xsl:apply-templates select="*[2]"/>
                       </fo:table-cell>
                   </fo:table-row>
               </fo:table-body>
            </fo:table>
            <xsl:apply-templates select="*[position() > 2]"/>
        </xsl:template>
    </xsl:stylesheet>

    對于這段代碼就不多做解釋了,總的來說其作用就是覆蓋了sections.xsl中定義的名為“sect2”的模板,在生成XSL-FO文件的時候,把<sect2>的標(biāo)題和內(nèi)容分別放到一個單列表的兩行。因為這里用到了fo名字空間,所以在開始要引入fo名字空間。

    重新生成PDF文件:

    fop -xml yourarticle.xml -xsl C:"docbook-xsl-1.67.2"blindtable.xsl yourarticle.pdf

    你會發(fā)現(xiàn)所有<sect2>的內(nèi)容沒有標(biāo)題與內(nèi)容斷開在兩頁上的情況了。

    4. 總結(jié)

    到此為止,你已經(jīng)了解制作Docbook的完整過程:

    1) 編輯XML文檔;
    2)
    生成HTML/PDF
    3)
    定制XSL樣式單。

    定制XSL樣式單不能直接修改Docbook XSL樣式單,需要創(chuàng)建一個新的XSL文件作為定制層。

    XSL樣式單定制有兩類:

    1) 修改XSL參數(shù);
    2)
    修改XSL模板。

    總之Docbook是十分強大的工具,可以用來制作非常專業(yè)漂亮的技術(shù)文檔,甚至是其他文檔。

    posted on 2007-09-03 15:50 哼哼 閱讀(1008) 評論(0)  編輯  收藏 所屬分類: JAVA-Common
    主站蜘蛛池模板: 在线观看亚洲精品国产| 污污的视频在线免费观看| 自拍偷自拍亚洲精品第1页| 毛片免费vip会员在线看| 欧洲人免费视频网站在线| 日韩精品亚洲专区在线影视| 亚洲av无码一区二区三区天堂古代| 亚洲伊人久久大香线蕉综合图片| 国产精品自在自线免费观看| 免免费国产AAAAA片| 久久国产高潮流白浆免费观看| 51午夜精品免费视频| 直接进入免费看黄的网站| 国产亚洲中文日本不卡二区| 亚洲日本一区二区| 亚洲va久久久噜噜噜久久男同| 色www永久免费视频| 国产福利免费视频| 日韩精品亚洲专区在线影视| 亚洲色无码国产精品网站可下载| 亚洲国产综合自在线另类| 亚洲av鲁丝一区二区三区| 久久久久久久综合日本亚洲| 亚洲人成亚洲人成在线观看 | 久久精品国产亚洲av麻豆色欲| 中文字幕亚洲一区| 中文字幕人成人乱码亚洲电影| 亚洲?v无码国产在丝袜线观看| 免费在线观看亚洲| 免费a级毛片无码av| 日韩视频在线免费| 日韩在线看片免费人成视频播放| 好先生在线观看免费播放 | 亚洲精品无码av片| 亚洲色大网站WWW永久网站| 亚洲综合激情五月色一区| 亚洲日韩国产二区无码| 亚洲色成人WWW永久在线观看| 亚洲人成色777777精品| 亚洲.国产.欧美一区二区三区| 美女被爆羞羞网站免费|