根據(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。如果使用支持Catalog的XSLT 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之類的目錄,但不是生成HTML或XSL-FO所必須的。
3.安裝XSLT Processor
目前有許多免費的XSLT Processor,最常用的是
?*Saxon??? - 使用Java實現(xiàn),http://saxon.sourceforge.net/。
?*Xalan???? - 有Java和C++版本,http://xml.apache.org/xalan-j/index.html。
?*xsltproc - 使用C實現(xiàn),是最快的處理程序,http://xmlsoft.org/XSLT/
?
因為Saxon和Xalan都有Java版本,所以按照一般的Java程序的安裝方式安裝即可。下面介紹xsltproc的安裝,因為它速度快,是我比較喜歡的處理程序。
如果你使用windows平臺,那么你有兩個方法可選:
?*第一,直接下載為windows平臺預編譯的版本,可以在
?ftp://ftp.zlatkovic.com/libxml/
?上找到。你需要下載libxml, libxslt, 和iconv,它們都是zip格式,解壓之后,在環(huán)境變量PATH中添加xsltproc.exe和.dll文件的路徑。
?
?如果你不想編輯環(huán)境變量,一個簡單的辦法是把下面這些文件復制到C:\Windows\System32:
? libxslt.dll
? libxml2.dll
? libexslt.dll
? iconv.dll
? xsltproc.exe
?這樣在命令行就可以直接找到這些文件了。完成之后,運行
?xsltproc -version
?打印出版本號則表明完成安裝。
?
?*第二,在Cygwin下安裝,這是我選擇使用的方式。Cygwin是一個在Windows下模擬Linux Shell的應(yīng)用程序。如果你喜歡以Linux命令的方式來使用xsltproc,可以到
?http://www.cygwin.com/
?下載Cygwin安裝程序。Cygwin的是通過網(wǎng)絡(luò)安裝的,首先你從它提供的包列表中選擇libxslt,然后安裝程序會根據(jù)依賴關(guān)系自動選擇libxml2,確定之后,安裝程序下載并安裝xsltproc。完成安裝之后,你就可以運行
?xsltproc -version
來檢查是否安裝成功。
?
*第三,如果使用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文件。
譬如,下面是根據(jù)Docbook文檔生成HTML的例子:
xsltproc? --output myfile.html? docbook-xsl/html/docbook.xsl myfile.xml
或者根據(jù)docbook文檔生成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標準比XSLT標準的制訂晚兩年;
??? b.XSL-FO標準及其龐大而復雜,該標準的作者也發(fā)現(xiàn)其實現(xiàn)上的難度,從而將該標準分為基本、擴展和完整三個級別。
現(xiàn)在可用的免費的XSL-FO處理程序有:
??? *FOP - 來自Apache XML項目(http://xml.apache.org/fop/)。目前最新的版本是0.20.5,還在開發(fā)當中,還有很多特性不支持,不過已經(jīng)可以滿足一般的使用。
???
??? *PassiveTeX - 來自Sebastian Rahtz (http://www.tei-c.org.uk/Software/passivetex/)一款基于TeX的XSL-FO處理程序。同樣也在開發(fā)中,較FOP要復雜的多。
另外有一些商業(yè)產(chǎn)品可供選擇,可能生成的文檔質(zhì)量要比開源代碼好,譬如:
??? *XEP(http://www.renderx.com)
??? *XSL Formatter(http://www.antennahouse.com)
下面介紹如何安裝FOP。
4.1.首先需要安裝JDK,這個不必多說。
4.2. 到http://www.apache.org/dyn/closer.cgi/xml/fop/下載FOP,可以選擇tar或者zip壓縮包。下載之后解壓到本地。
4.3. 下載圖形代碼庫。FOP自己不支持PNG之類的圖片,如果在你的文檔里會涉及到圖片,那么需要下載額外的代碼庫??梢赃x擇JAI(http://java.sun.com/products/java-media/jai/current.html),或者Jimi(http://java.sun.com/products/jimi/)。0.20.5之前的版本只能使用Jimi。下載之后,將jai_core.jar和jai_codec.jar(JAI),或者JimiProClasses.jar(Jimi)復制到FOP安裝目錄的lib目錄下,然后在fop.bat(Windows平臺)中添加
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_core.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\jai_codec.jar
或是
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\JimiProClasses.zip
如果使用fop.sh(Linux平臺),會自動搜索。
4.4. 添加擴展代碼。如果Docbook XSL樣式單有針對FOP的擴展代碼(目前沒有),像上面一樣把它們添加到FOP安裝目錄下lib目錄。
現(xiàn)在就可以使用FOP來生成PDF文檔了。FOP提供兩個腳本fop.bat(Windows平臺)和fop.sh(Unix和Linux平臺)以方便使用。生成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簡介:http://blog.csdn.net/mickeyrat/archive/2005/02/04/281050.aspx
DocBook XSL: The Complete Guide:http://www.sagehill.net/docbookxsl/index.html