跳轉到內容

XML - 管理資料交換/DocBook

來自 Wikibooks,開放世界中的開放書籍



上一章 下一章
VoiceXML SMIL




學習目標

[編輯 | 編輯原始碼]

完成本章後,您將能夠

  • 瞭解 DocBook 的基礎知識
  • 使用 DocBook XML DTD 建立 DocBook 文件
  • 將文字文件轉換為 DocBook 文件
  • 使用 XSL 樣式表將 DocBook XML 文件轉換為多種格式,例如 HTML、PDF 或簡報幻燈片。

DocBook 是一種通用 XML 和 SGML 詞彙表,特別適合書籍、文章和論文。它有一個龐大、強大且易於理解的文件型別定義 (DTD),其主要結構對應於構成書籍的一般概念。DocBook 是一個重要的主題,我們無法在幾頁紙內完全涵蓋。因此,在本節中,我們將討論使用 DocBook DTD 中的主要元素建立簡單的 DocBook 文件,以及釋出文件的詳細資訊,以便讓您對 DocBook 有所瞭解。如果您想進一步學習該主題,我們建議您參考本章末尾提供的參考資料。

什麼是 DocBook?

[編輯 | 編輯原始碼]
  • DocBook 使您能夠以與演示無關的格式創作和儲存文件內容,該格式捕獲內容的邏輯結構。
  • 它有一個易於理解且廣泛使用的 DTD。DocBook 標記的應用方式使其具有某種“常識”語義內容,至少對英語使用者而言是這樣。
  • 目前還沒有 DocBook W3C XML Schema 的官方版本。DocBook 技術委員會計劃在 DocBook V5.0 時間範圍內提供官方 Schema。本章提供的示例將使用當前官方 DTD。

DTD 與 Schema

[編輯 | 編輯原始碼]

DTD 是 XML 文件型別定義,它包含或指向標記宣告,這些宣告為一類文件提供語法。Schema 是一個共享詞彙表集,允許機器執行人們制定的規則。它提供了一種定義 XML 文件結構、內容和語義的方法。總之,Schema 是比 DTD 更豐富、更強大的描述資訊的方式。

表 1:這是一個簡單的 XML 文件

<author>
   <firstname>Rusen</firstname>
   <lastname>Gul</lastname>
 </author>


表 2:這是該文件的 DTD

<!ELEMENT author(firstname, lastname)>
<!ELEMENT firstname(#PCDATA)>
<!ELEMENT lastname(#PCDATA)>

表 3:這是 SCHEMA

<xs:element name="author">
   <xs:complexType>
     <xs:sequence>
       <xs:element name="firstname" type="xs:string"/>
       <xs:element name="lastname" type="xs:string"/>
     </xs:sequence>
   </xs:complexType>
</xs:element>

DocBook 的輸出格式

[編輯 | 編輯原始碼]

XSL(可擴充套件樣式語言)樣式表可以將 DocBook XML 轉換為以下格式

  • HTML
  • HTML 幫助(用於 Windows 幫助)
  • Java 幫助
  • XHTML
  • XSL 格式化物件 (FO)
  • PDF

DSSSL(文件樣式語義和規範語言)樣式表可以將 DocBook SGML 轉換為以下格式

  • HTML
  • MIF
  • RTF
  • TeX

簡要歷史

[編輯 | 編輯原始碼]

DocBook 由 HaL Computer Systems 和 O'Reilly & Associates 創立於 1991 年左右。它最初是為儲存 UNIX 文件的 troff 轉換結果而開發的,以便能夠交換這些檔案。現在它由 OASIS 維護。DocBook 的官方網站是 http://www.oasis-open.org/docbook/

DocBook 用於

[編輯 | 編輯原始碼]
  1. 印刷/商業出版的書籍。許多作者使用 DocBook 來編寫各種型別書籍,包括世界各地的各種印刷和線上格式。一些例子包括
  2. 文章、論文和學位論文
  3. 維護網站
  4. 製作簡報幻燈片、印刷手冊和白皮書
  5. 商業軟體和硬體的文件

DocBook 工具

[編輯 | 編輯原始碼]

DocBook 正式以 DTD 的形式提供給 XML 和 SGML。您可以在 OASIS 的 DocBook 官方網站上下載最新的 DocBook XML DTD 和 DocBook SGML DTD。本章提供的示例將使用 DocBook XML DTD。一些實驗性的 DocBook 模式可以在 sourceforge.net 上獲得。DocBook 受許多商業和開源工具的支援。易於定製和擴充套件的“標準”DocBookStylesheets 可從 DocBookOpenRepository 獲得,以及其他免費的開源工具。有關更完整的商業和開源工具列表,請參閱 DocBook Wiki 上的 DocBookTools

其他免費工具

[編輯 | 編輯原始碼]
  1. XSLTProc: 最知名和最快的處理器之一。可在 http://xmlsoft.org/XSLT/ 獲得。
  2. Apache FOP: XSL-FO 實現。可在 http://xmlgraphics.apache.org/fop/ 獲得。
  3. Xt: 最初的 XSLT 處理器之一。現在使用頻率較低。可在 www.jclark.com 獲得。
  4. DocBook2x: 將 DocBook 轉換為 man 和 Texinfo 頁面。可在 Sourceforge 獲得。
  5. Refdb: 從 DocBook 建立參考資料庫和參考文獻。可在 Sourceforge 獲得。

商業工具

[編輯 | 編輯原始碼]
  1. Arbortext Epic: 編輯和處理工具的綜合套件。可在 Arbortext 網站 獲得。
  2. RenderX XEP: FO 到 PDF 渲染引擎。可在 RenderX 網站 獲得。
  3. Antenna House XSL Formatter: FO 到 PDF 渲染引擎。可在 Antenna House 網站 獲得。

SGML 與 XML

[編輯 | 編輯原始碼]

SGML 和 XML DTD 的語法非常相似,但並不完全相同。DocBook SGML DTD 和 XML DTD 之間的最大區別在於 SGML DTD 在某些內容模型中包含 SGML 排除。

示例:SGML DTD 將 <footnote> 排除為 <footnote> 的後代,因為在腳註中包含腳註在實踐上沒有多大意義。XML DTD 不能包含排除項,因此,如果您使用 DocBook XML DTD 創作,則可能會生成包含一些有效但不合邏輯的標記的文件,例如腳註中的腳註。

建立 DocBook 文件

[編輯 | 編輯原始碼]

為了開始,您需要

  • 一個 XML 編輯器。如果您還沒有下載,請下載 NetBeans IDE
  • DocBook XML DTD。雖然使用 DTD 是可選的,但當您希望驗證文件以檢查它是否符合它聲稱符合的 DTD 時,DTD 會很有用。因此,DocBook DTD 可用於驗證據稱的 DocBook 文件。DocBook XML 4.2 是 DocBook DTD 的當前版本。在 DocBook 官方網站 上下載。
  • DocBook XSL 樣式表主要由 Norman Walsh 維護。有兩套樣式表:XSL 和 DSSSL。在 Sourceforge.net 上下載最新的 XSL 1.65.1 版本。
  • 一個 XSLT 處理器(在後面的部分中介紹)

表 4:一個簡單的 DocBook 書籍,“book.xml”

 <?xml version="1.0"?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <book>
  <bookinfo>
   <title>XML  Managing Data Exchange</title>
   <author>
    <firstname>Rusen</firstname>
    <surname>Gul</surname> 
   </author> 
  </bookinfo>
  <chapter> 
   <title>Introduction</title>
   <sect1>
    <title>First Section</title>
    <para>This is a paragraph.</para>
   </sect1>
   <sect1>...</sect1>
  </chapter>
  <chapter>...</chapter>
  <chapter>...</chapter>
  <chapter>...</chapter>
  <appendix>...</appendix>
  <appendix>...</appendix>
 </book>

表 5:一個簡單的 DocBook 文章,“article.xml”

 <?xml version="1.0"?>
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
 <article>
  <articleinfo>
   <title>A Simple Approach To DocBook</title>
   <author>
    <firstname>Rusen</firstname> 
    <surname>Gul</surname> 
   </author> 
  </articleinfo>
  <para>This is the introductory paragraph of my article.</para>
  <sect1>
   <title>First Section</title>
   <para>This is a paragraph in the first section.</para>
  <sect2>
   <title>This is the title for section2.</title>
   <para>This is a paragraph in section2.</para>
  </sect2>
  <sect2>...</sect2>
  <sect2>...</sect2>
  </sect1>
  <sect1>This is a high level section</sect1>
  <sect1>...</sect1>
  <sect1>...</sect1>
 </article>

讓我們檢查一下典型 DocBook 文件的詳細資訊。DocBook XML 檔案的標準標頭是 DocType 宣告

標準標頭

<!DOCTYPE name FORMALID "Owner//Keyword Description//Language">

這告訴 XML 操作工具正在使用的 DTD。名稱是文件中根元素的名稱。FORMALID 被替換為 PUBLICSYSTEM 識別符號或兩者。PUBLIC 標識文件符合的 DTD。SYSTEM 透過 URI(統一資源指示符)明確宣告文件中使用的 DTD 的位置。PUBLIC 識別符號在 XML 文件中是可選的,雖然 SYSTEM 識別符號在 DOCTYPE 宣告中是強制性的。

標頭示例

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

所有者:Oasis
關鍵字描述:DTD DocBook XML V4.2
語言:EN - 英語

注意!如果您不線上,您需要將 URL 系統識別符號更改為 DTD 安裝的位置

<?xml version="1.0"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"/usr/share/sgml/docbook/xml-dtd-4.2/docbookx.dtd">

將文件分解為物理部分

[編輯 | 編輯原始碼]

在開始之前,這裡有一個有用的提示!為了方便和效能,您可以考慮將文件分解為物理塊,並分別處理每個塊。如果您有一本書包含三個章節和兩個附錄,您可能建立一個名為 book.xml 的檔案,如下所示

表 6:物理分隔的書籍,“dividedbook.xml”

 <?xml version="1.0"?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN"
 [<!ENTITY chap1 SYSTEM "chap1.xml">
 <!ENTITY chap2 SYSTEM "chap2.xml">
 <!ENTITY chap3 SYSTEM "chap3.xml">
 <!ENTITY appa SYSTEM "appa.xml">
 <!ENTITY appb SYSTEM "appb.xml">]
 <book>
  <title>A Physically Divided Book</title>
  &chap1;
  &chap2;
  &chap3;
  &appa;
  &appb;
 </book>

然後,您可以方便地在單獨的檔案中編寫章節和附錄。這就是 DocBook 非常適合大型內容的原因。請注意,這些單獨的檔案沒有也不應該有文件型別宣告。

例如,第 1 章可能以如下方式開始

<chapter id="ch1">
<title>My First Chapter</title>
<para>My first paragraph.</para>…
……………………………………………………………

將文件分解為邏輯部分

[編輯 | 編輯原始碼]

這是一個 DocBook 元素的快速參考指南:http://www.docbook.org/tdg/en/html/ref-elements.html

有數百個 DocBook 元素。這就是使 docBook 非常強大的原因。我們將嘗試在這裡介紹主要的元素,讓您自己檢視其餘部分。首先,進行分類;DocBook 元素可以大致分為以下幾類

集合 書籍的集合
書籍 書籍
分割槽 將書籍分成部分
元件 將書籍或分割槽分成章節
部分 細分元件
元資訊元素 包含有關其他元素的資訊
塊元素 出現在段落級別
內聯元素 用於標記執行文字

主要的 DocBook 元素

[編輯 | 編輯原始碼]

集合:書籍的集合

[編輯 | 編輯原始碼]

集合 是 DocBook 結構層次結構的頂層。沒有任何東西包含 集合

一些子元素:Book、SetIndex、SetInfo、Subtitle、Title、TitleAbbrev、ToC(目錄)。

參考頁面:http://www.oreilly.com/catalog/docbook/chapter/book/set.html

表 7:<set> 元素,“lordoftherings.xml”

 <!DOCTYPE set PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <set>
  <title>Lord of the Rings</title>
  <setinfo>
   <author>J.R. Tolkien</author>
  </setinfo>
  <book><title>The Fellowship of the Ring</title> ... </book>
  <book><title>The Two Towers</title> ... </book>
  <book><title>Return of the King</title> ... </book>
 <set>


書籍:一本書

[編輯 | 編輯原始碼]

書籍 可能是文件中最常見的頂級元素。DocBook 對書籍的定義非常寬泛和一般。它沒有強加嚴格的元素排序,讓您自由發揮。

一些子元素:Appendix、Article、Bibliography、BookInfo、Chapter、Colophon、Dedication、Glossary、Index、LoT、Part、Preface、Reference、SetIndex、Subtitle、Title、TitleAbbrev、ToC。

參考頁面:http://www.oreilly.com/catalog/docbook/chapter/book/book.html

<small>Table 8: <book> element, "xmlbook.xml"</small>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <book>
  <title>XML  Managing Data Exchange</title>
  <titleabbrev>XML</titleabbrev>
  <bookinfo>
   <legalnotice><para>No notice is required.</para></legalnotice>
   <author><firstname>Rusen</firstname><surname>Gul</surname></author>
  </bookinfo>
  <dedication>
   <para>This book is dedicated to MIST 7700 class of 2004 at UGA.</para>
  </dedication>
  <preface>
   <title>Forword</title>
   <para>The book aims to fulfill the need for an introductory XML
   textbook. It contains the basics of XML as well as several tools
   using XML.</para>
   </preface>
  <chapter>
   <title>Introduction</title>
   <para>At least one chapter, reference, part, or article is required.</para>
  </chapter>
  <appendix>
   <title>Optional Appendix</title>
   <para>Appendixes are optional but handy.</para>
  </appendix>
 </book>


分割槽:部分和參考的集合(可選)

[編輯 | 編輯原始碼]

分部 是在 Book 下的第一個層次結構級別。

子元素:Part(包含元件)、Reference(包含 RefEntrys)

元件:Book 或 Part 中類似章節的元素

[編輯 | 編輯原始碼]

這些包括前言、章節、附錄、詞彙表、參考書目和文章。元件通常包含塊級元素 - 或節,一些可以包含導航元件和 RefEntrys。

表 9:<Bibliography> 元素,“references.xml”

 <!DOCTYPE bibliography PUBLIC "-//OASIS//DTD DocBook 4.2//EN">
 <bibliography>
  <title>References</title>
  <bibliomixed>
   <bibliomset relation=article>
    <surname>Watson</surname>
    <firstname>Richard</firstname>.
    <title role=article>Managing Global Communities </title>
   </bibliomset>
   <bibliomset relation=journal>
    <title>The World Wide Web Journal</title> 
    <volumenum>2</volumenum>
    <issuenum>1</issuenum>.
    <publishername>O'Reilly &amp; Associates, Inc.</publishername> and
    <corpname>The World Wide Web Consortium</corpname>.
    <pubdate>Winter, 1996</pubdate>
   </bibliomset>.
  </bibliomixed>
 </bibliography>


節:幾個分節元素

[編輯 | 編輯原始碼]

a. Sect1…Sect5 元素 - 最常見的分節元素,可以在大多陣列件級元素中出現。這些編號的節元素必須正確巢狀(Sect2s 只能出現在 Sect1s 內部,Sect3s 只能出現在 Sect2s 內部,依此類推)。

b. Section 元素 - 作為編號節的替代方案,Section 是遞迴的,這意味著您可以根據需要將它們巢狀到任何深度。

c. SimpleSect 元素 - 一個終端節,可以在任何級別出現。SimpleSect 不能在其內部巢狀任何其他分節元素。

d. BridgeHead 元素 - 沒有包含節的節標題

e. RefSect1…RefSect3 元素 - RefEntrys 中的編號節元素 f. GlossDiv、BiblioDiv 和 IndexDiv 元素 - 不巢狀

請參閱表 4 和表 5 以獲取示例。

參考頁面: http://www.oreilly.com/catalog/docbook/chapter/book/section.html

元資訊元素 – 包含書目資訊

[編輯 | 編輯原始碼]

所有節級別及以上的元素都包含一個包裝器,用於提供有關內容的元資訊。元包裝器的示例:BookInfo、ArticleInfo、ChapterInfo、PrefaceInfo、SetInfo、GlossaryInfo。

表 10:<bookinfo> 元素

 <!DOCTYPE bookinfo PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <bookinfo>
  <title>XML  Managing Data Exchange</title>
  <authorgroup>
   <author>
    <firstname>Richard</firstname>
    <surname>Watson</surname>
   </author>
   <author>
    <firstname>Hendrik</firstname>
    <surname>Fischer</surname>
   </author>
   <author>
    <firstname>Rusen</firstname>
    <surname>Gul</surname>
    <affiliation>
     <orgname>University of Georgia</orgname>
    </affiliation>
   </author>
  </authorgroup>
  <edition>Introduction to XML - Version 1.0 </edition>
  <pubdate>1997</pubdate>
  <copyright>
   <year>1999</year>
   <year>2000</year>
   <year>2001</year>
   <year>2002</year>
   <year>2003</year>
   <holder> O'Reilly &amp; Associates, Inc. </holder>
   </copyright>
   <legalnotice>
     <para>Permission to use, copy, modify and distribute the DocBook 
     DTD and its accompanying documentation for any purpose and without
     fee is hereby granted in perpetuity, provided that the above
     copyright notice and this paragraph appear in all copies.
     </para>
    </legalnotice>
 </bookinfo>


塊級元素與內聯元素

[編輯 | 編輯原始碼]

段落級元素有兩類:塊級內聯

塊級元素通常在它們之前和之後使用段落分隔符。大多數塊級元素可以包含其他塊級元素,許多塊級元素可以包含字元資料和內聯元素。塊級元素的示例包括:段落、列表、側邊欄、表格和塊級引用。

內聯元素通常沒有明顯的斷點。內聯元素最常見的區別標誌是字型更改,但內聯元素可能根本沒有視覺區別。內聯元素包含字元資料,可能還包含其他內聯元素,但它們絕不包含塊級元素。它們用於標記資料。一些示例包括:交叉引用、檔名、命令、選項、下標和上標以及詞彙表術語。

塊級元素 - 段落級元素

[編輯 | 編輯原始碼]

塊級元素出現在元件和分節元素的正下方。

CalloutList 一個標記列表,通常編號,並且通常在圖形或逐字環境及其描述上。
GlossList 詞彙表術語及其定義的列表。
ItemizedList 無序(帶專案符號)列表。
OrderedList 編號列表。
SegmentedList 一組重複的命名項。例如,州及其首府的列表可以用 SegmentedList 表示。
SimpleList 一個未修飾的專案列表。
VariableList 術語及其定義或描述的列表。

表 11:<segmentedlist> 元素,“statecapital.xml”

 <!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <para>The capitals of the states of the United States of America are:
  <segmentedlist>
   <title>State Capitals</title>
   <segtitle>State</segtitle>
   <segtitle>Capital</segtitle>
   <seglistitem>
    <seg>Georgia</seg>
    <seg>Atlanta</seg>
   </seglistitem>
   <seglistitem>
    <seg>Alaska</seg>
    <seg>Juneau</seg>
   </seglistitem>
   <seglistitem>
    <seg>Arkansas</seg>
    <seg>Little Rock</seg>
   </seglistitem>
  </segmentedlist>
 </para>

表 12:“statecapital.xml” 輸出


美國各州的首府為

州府

州:佐治亞州

首府:亞特蘭大

州:阿拉斯加州

首府:朱諾

州:阿肯色州

首府:小石城


 <small>Table 13: <orderedlist> element, "mashpotatoe.xml"</small>
 <!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <para>
  <orderedlist numeration="upperroman">
   <listitem>
    <para>Preparation</para>
    <orderedlist numeration="upperalpha">
     <listitem><para>Chop tomatoes</para>
     </listitem>
     <listitem><para>Peel onions</para>
     </listitem>
     <listitem><para>Mash potatoes</para>
     </listitem>
    </orderedlist>
   </listitem>
   <listitem>
    <para>Cooking</para>
    <orderedlist numeration="upperalpha">
     <listitem><para>Boil water</para>
     </listitem>
      <listitem><para>Put tomatoes and onions in </para></listitem>
      <listitem><para>Blanch for 5 minutes</para>
     </listitem>
    </orderedlist>
   </listitem>
  </orderedlist>
 </para>

表 14: “mashpotatoe.xml” 輸出


I.準備
    A.切碎番茄
    B.剝洋蔥
    C.搗土豆泥
II.烹飪
    A.燒水
    B.放入番茄和洋蔥
    C.焯水 5 分鐘


有五種型別的警告:警告、重要提示、注意、提示和警告。

<small>Table 15: <caution> element, "caution.xml"</small>
 <!DOCTYPE caution PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <caution>
  <title>This is a caution</title>
  <para>Be careful while opening the box!</para>
 </caution>

特定行環境

[編輯 | 編輯原始碼]

特定行環境 保留空白和換行符。


Address 實際地址,通常是郵政地址
LiteralLayout 一段文字,其中換行符和空白將被忠實地複製
ProgramListing 程式的全部或部分的逐字列表
Screen 使用者在計算機螢幕上看到或可能看到的文字
ScreenShot 使用者在計算機螢幕上看到或可能看到的螢幕的表示形式
Synopsis 一個用於表示命令或函式語法的通用元素

表 16:<literallayout> 元素,“If_by_Kipling.xml”

 <!DOCTYPE blockquote PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <blockquote>
  <attribution>Rudyard Kipling,
   <citetitle>If</citetitle>
  </attribution>
  <literallayout>
      If you can force your heart and nerve and sinew
 To serve your turn long after they are gone,
 And so hold on when is nothing in you
 Except the Will
 which says to them:
      Hold on!
  </literallayout>
 </blockquote>


常見的塊級元素

[編輯 | 編輯原始碼]

常見的塊級元素 包括示例、圖形和表格。正式元素和非正式元素的區別在於,正式元素有標題,而非正式元素沒有標題。

Example、InformalExample

表 17:<example> 元素

 <!DOCTYPE example PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <example>
  <title>Sample code</title>
  <programlisting>print "Hello, world!"</programlisting>
 </example>


Figure、InformalFigure

表 18:<figure> 元素

 <!DOCTYPE figure PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
 <figure>
  <title>Revenues for Q1</title>
  <mediaobject>
   <imageobject>
    <imagedata fileref="q1revenue.jpg" format="JPG"/>
   </imageobject>
  </mediaobject>
 </figure>


Table、InformalTable

表 19:<table> 元素

<!DOCTYPE table PUBLIC "-//OASIS//DTD DocBook V4.2//EN"><br>
<table frame="frametype">
 <title>frame="frametype"</title>
 <tgroup cols="1">
  <thead>
   <row>
    <entry>row 1, cell 1</entry>
    <entry>row 1, cell 2</entry>
    <entry>row 1, cell 3</entry>
   </row>
  </thead>
  <tbody>
   <row>
    <entry>row 2, cell 1</entry>
    <entry>row 2, cell 2</entry>
    <entry>row 3, cell 3</entry>
   </row>
  </tbody>
 </tgroup>
</table>

段落 是 Para、SimPara(簡單段落可能不包含其他塊級元素)和 FormalPara(正式段落有標題)。段落是最常用的高階元素,可以包含塊級元素,例如 itemizedlist 和 Mediaobject,並且可以包含幾乎所有內聯元素。

參考頁面: http://www.docbook.org/tdg/en/html/para.html

表 20:<para> 元素,“Nietzsche.xml”

<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook V4.2//EN">
<para> 
 <quote>Behold the superfluous. They are always sick. They vomit their gall and call it a newspaper.</quote> 
 -Friedrich Wilhelm Nietzsche,  
 <citetitle>Twilight of the Idols</citetitle> 
</para>

方程式

[編輯 | 編輯原始碼]

Equation 和 InformalEquation(無標題)

表 21:<informalequation> 元素在 <para> 元素內部

<!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook V3.1//EN"> <para>
  The equation
  <informalequation>
   <alt>e^(pi*i) + 1 = 0</alt>
   <graphic fileref="figures/epi10"></graphic>
  </informalequation>
is delightful because it joins together five of the most important mathematical constants.
</para>

InlineGraphic、MediaObject、InlineMediaObject

這些元素可以包含影片、音訊、影像和文字資料。單個媒體物件可以包含幾種備用形式,從中演示系統可以選擇最合適的物件。

請參閱表 18 以獲取示例。

內聯元素 – 用於標記執行文字

[編輯 | 編輯原始碼]

在已釋出的文件中,內聯元素通常會導致字型更改或其他細微更改,但不會導致行或段落斷開。

Abbrev 縮寫,尤其是帶句號的縮寫。
Acronym 通常可發音的單詞,由名稱或短語的首字母(或選定字母)組成。
Emphasis 強調的文字。
Footnote 腳註。腳註元素的位置標識腳註的第一次引用的位置。可以使用 FootnoteRef 插入對同一腳註的額外引用。
短語 一段文字。
引用 內嵌引用。
商標 商標。
引用 對另一齣版作品的內嵌參考文獻。
詞彙術語 詞彙術語。
連結 超文字連結。
ULink 透過 URL(統一資源定位符)定位目標的連結。
交叉引用 對文件其他部分的交叉引用。
外語短語 文件主要語言之外的單詞或短語。
計算機輸出 計算機顯示或呈現的資料,通常是文字。
標記 文字中要逐字表示的格式化標記字串。
可替換 使用者可以或必須替換的內容。
使用者輸入 使用者輸入的資料。
字面量 內嵌文字,是某個字面量。
命令 可執行程式或其他軟體命令的名稱。
訊息文字 訊息集中訊息元件的實際文字。
可選 可選資訊。
電子郵件 電子郵件地址。
資料庫 資料庫或資料庫部分的名稱。
檔名 檔案的名稱。
標記 資訊單元。
型別 值的分類。
應用程式 軟體程式的名稱。

特殊字元的實體

以下實體用於特殊字元

字元 實體
< & lt;
> & gt;
& & amp;
" & quot;
' '

釋出 DocBook 文件

[編輯 | 編輯原始碼]

DSSSL 與 XSL 樣式表

文件樣式語義和規範語言(DSSSL) 是一種適用於列印和線上呈現的樣式表語言。它主要用於與 SGML 協作。

可擴充套件樣式表語言(XSL) 是一種用於表達用 XML 編寫的樣式表的語言。它包含格式化物件語言,但引用單獨的文件來表示轉換語言和路徑語言。在本章中,我們將使用 XSL 樣式表,因為它們功能更強大,您已經熟悉它們,並且它們用於與 XML 協作。

步驟 1:獲取標準樣式表

[編輯 | 編輯原始碼]

DocBook 嚴格區分文件的內容和外觀。DocBook 文件只解釋文件的語義,而不是其格式或外觀。為了釋出您的 DocBook 文件,您需要使用一組描述格式的 DSSSL 或 XSL 樣式表,以及一個 XSL 處理器。

如果您認為編寫自己的 XSL 樣式表會很費力,您是對的。好訊息是您不必這樣做。對於 DocBook,有大量免費提供的標準 XSL 樣式表,主要由 Norman Walsh 維護。

請確保您從 Sourceforge.net - 樣式表庫 下載這些樣式表的最新版本。樣式表分發包含一組模組化 XSL 檔案,這些檔案被組裝成幾個完整的 XSL 樣式表。有一個樣式表用於生成單個 HTML 檔案,還有一個樣式表用於從單個 DocBook 文件生成多個較小的 HTML 檔案。有用於列印輸出、XHTML 輸出、HTML 幫助輸出和 JavaHelp 輸出的樣式表。由於所有主要計算機型別都有 XSL 處理器,您可以在 Unix、Linux、Windows 和 Macintosh 計算機上使用 DocBook。透過使用安裝在系統上的這些預設樣式表,建立自定義樣式表非常容易。但是請記住,自定義樣式表的常用方法是建立自定義層,而不是直接編輯它們。

步驟 2:下載 XSLT 處理器

[編輯 | 編輯原始碼]

要從 XML 文件釋出 HTML,您需要一個 XSLT 引擎。要列印,您需要一個 XSLT 引擎來生成格式化物件 (FO),然後必須使用 FO 引擎處理這些物件以生成 PostScript 或 PDF 輸出。有各種 XSLT 引擎可用。以下是一些您可以考慮的免費/開源引擎。請注意,xsltproc 和 Saxon 目前是唯一推薦與 DocBook 一起使用的 XSLT 引擎。

XSLT 引擎

[編輯 | 編輯原始碼]
  1. Xsltproc: 一個用 C 編寫的免費處理器,作為 Gnome 開發專案提供的開源 libxml2 庫的一部分。它被認為是最快的處理器之一,並且高度符合規範。從 http://xmlsoft.org/XSLT/ 下載。
  2. Saxon: 一個用 Java 編寫的免費處理器,可以在任何具有現代 Java 直譯器的作業系統上執行。它在內部使用 Aelfred XML 解析器,該解析器有一些錯誤,因此許多人用 Xerces 解析器代替。從 http://saxon.sourceforge.net/ 下載。
  3. Xalan: Xalan 是 Apache XML 專案的一部分。它有使用 Java 和 C++ 編寫的版本,兩者都是免費的。Java 版本高度可移植並且開發得更完善。通常,Xalan 與 Xerces XML 解析器(Java 或 C++)一起使用,也可以從 Apache XML 專案獲得。從 http://xml.apache.org/ 下載。

您對 XSLT 引擎的選擇可能很大程度上取決於您執行引擎的環境。許多需要或想要非 Java 應用程式的 DocBook 使用者使用 xsltproc。它非常快,並且開發人員對錯誤報告和問題響應非常快。但是 xsltproc 目前的侷限性之一是它還不支援 Norm Walsh 的 DocBook 特定 XSLT 擴充套件函式。

Saxon 是 Java 環境中最流行的引擎。它還支援 Norm Walsh 的 DocBook 特定 XSLT 擴充套件函式。

NetBeans IDE 是我們一直在使用的用於其他章節練習的 XML 編輯器,預設情況下,它內建了使用 XALAN 解析器的 XSLT 處理器。NetBeans IDE 不僅允許您驗證 XML 文件,而且還可以在 IDE 中直接執行 XSL 轉換。它足夠滿足本章的用途。不過,它沒有提供任何 XSLT 除錯功能,因此您可能需要為嚴肅的 XSLT 工作獲取一個不錯的 XSL IDE(例如,XML Spy 或 Xcelerator)。

FO 引擎

[編輯 | 編輯原始碼]

對於從 FO 檔案生成列印/PDF 輸出,有兩個免費/開源的 FO 引擎

  1. PassiveTeX: 可在 http://www.tei-c.org.uk/Software/passivetex/index.xml.ID=body.1_div.1 獲取。下載和安裝資訊在 http://www.tei-c.org.uk/Software/passivetex/index.xml.ID=body.1_div.3 獲取。
  2. FOP: Apache XML 專案的基於 Java 的處理器,可在 http://xml.apache.org/fop/ 獲取。

步驟 3:自定義 XSL 樣式表

[編輯 | 編輯原始碼]

輸出到 HTML

[編輯 | 編輯原始碼]
  • 標準樣式表的主要優勢是它們易於自定義。
  • 在 params.xsl 中找到的引數
  • 呼叫您的自定義層,而不是標準樣式表

表 22:自定義 XSL 樣式表,“myxsl1.xsl”

 <?xml version="1.0"?>
   <!-- Customization layer -->
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <nowiki><!-- Use 'chunk.xsl' in line below to chunk files. --></nowiki>
 <xsl:import href="/usr/share/sgml/docbook/docbook-xsl-1.51.1/html/docbook.xsl"/>
 <xsl:param name="chapter.autolabel" select="1"/>
 <xsl:param name="section.autolabel" select="1"/>
 <xsl:param name="section.label.includes.component.label" select="1"
 doc:type="boolean"/>
   <!-- Insert more parameters here. -->
 </xsl:stylesheet>


  • 除了設定引數外,您還可以修改 XSLT “模板”來覆蓋預設行為
  • 您至少需要了解 XSLT 的基本知識

表 23:自定義 XSL 樣式表,“myxsl2.xsl”

 <xsl:template match="emphasis">
 <xsl:choose>
 <xsl:when test="(@role='strong') or (@role='bold')">
   <xsl:call-template name="inline.boldseq"/>
 </xsl:when>
 <xsl:otherwise>
   <xsl:call-template name="inline.italicseq"/>
 </xsl:otherwise>
 </xsl:choose>
 </xsl:template>


輸出到 PDF

[編輯 | 編輯原始碼]

它通常需要一個兩階段過程

  1. 從 XML 生成 FO
  2. 從 FO 生成 PDF

表 24:用於生成 FO 的 XSL 樣式表,“myxsl3.xsl”

xsltproc -o sample.fo  $DB/fo/docbook.xsl sample.xml
fop.sh -fo sample.fo -pdf sample.pdf

擴充套件

[編輯 | 編輯原始碼]

a. 幻燈片文件型別

  • 從 DocBook XML 建立簡報幻燈片
  • 您可以建立 HTML(帶或不帶框架)和 FO
  • 在特定層次結構框架中使用 DocBook 元素
  • 可從 SourceForge 上的 DocBook 開放式儲存庫下載

表 25:“slides.xml”

<!DOCTYPE slides SYSTEM "/usr/share/sgml/docbook/xsl-slides-1.1/slides.dtd">
<slides>
 <slidesinfo>
  <title>A Simple Approach to DocBook</title>
 </slidesinfo>
 <foil>
  <title>My first slide</title>
  <itemizedlist>
   <listitem><para>...</para></listitem>
   <listitem><para>...</para></listitem>
   <listitem><para>...</para></listitem>
  </itemizedlist>
 </foil>
 <foil>
  <title>My second slide</title>
  <para>... </para>
 </foil>
</slides>

b. 網站文件型別

  • 從 DocBook XML 檔案集合建立網站
  • 在特定框架中使用大多數 DocBook 元素。它有單獨的檔案來控制頁面導航和層次結構。
  • 可從 SourceForge 上的 DocBook 開放式儲存庫下載。

表 26:“website.xml”

<!DOCTYPE webpage SYSTEM "../website.dtd" [
<!NOTATION XML SYSTEM "xml">
<!ENTITY test1a SYSTEM "test1a.xml" NDATA XML>
<!ENTITY test3 SYSTEM "test3.xml" NDATA XML>
<!ENTITY about.xml SYSTEM "about.xml" NDATA XML>]>
<webpage id="home">
    <config param="desc" value="The Test Home Page"/>
    <config param="rcsdate" value="$Date: 2001/11/08 20:44:20 $"/>
    <config param="footer" value="about.html" altval="About..."/>
    <head>
        <title>Welcome to Website</title>
        <summary>Introduction</summary>
        <keywords>Rusen Gul, XSL, XML, DocBook, Website</keywords>
    </head>
    <para> This website demonstrates the DocBook.</para>
   <webtoc/>
        <section>
            <title>What is a Website?</title>
               <para>A website is a collection of pages organized, for the purposes of navigation, into one or more hierarchies. In Website, each page is a separate XML document authored according to the Website DTD, a customization of <ulink url="http://www.oasis-open.org/docbook/">DocBook</ulink>.</para>
        </section>
</webpage>


為什麼要使用 DocBook?

[編輯 | 編輯原始碼]

這看起來確實工作量很大,不是嗎?你說得沒錯。那我們為什麼要費心使用 DocBook 呢?

  • 它具有可移植性!用 DocBook 標記編寫的文件可以輕鬆快速地轉換為 HTML、PostScript、PDF、RTF、DVI、純 ASCII 文字,而且不需要任何昂貴的工具。
  • 它很靈活!它能夠輸出多種格式,包括 HTML、PDF、幻燈片等等。
  • 它將內容與格式分開!DocBook 只關注文件的結構。它使作者不必擔心文件的格式和佈局。
  • 它易於理解!大多數 DocBook 元素都是自解釋的。
  • 它可以處理大量內容。你可以將文件在物理上分成不同的檔案,並分別方便地對它們進行處理。
  • 它是免費的!有很多免費的開源工具可用於處理 DocBook。

DocBook 很適合任何定期維護和釋出的技術文件集。多個作者可以貢獻到一個文件中,並且他們的內容可以輕鬆合併,因為所有作者都使用高度結構化的標準標記語言。只需要記住一點:由於 DocBook 文件的格式是嚴格由樣式表完成的,因此 DocBook 不太適合高度設計的佈局驅動內容(如雜誌)。

建立 DocBook 系統肯定需要一些時間和精力。回報將是一個高效、靈活且廉價的釋出系統,它是迭代的,並且可以隨著你的需求而增長。因此,它是值得努力的!

DocBook 過濾器 - 使用 OpenOffice.org 讀取和寫入 DocBook XML

[編輯 | 編輯原始碼]

該專案的目的是使用 OpenOffice.org 作為 XML 內容的所見即所得編輯器,使用樣式編輯結構化文件。匯出時,這些樣式將被轉換為 XML 標記。本節將向你展示如何啟用和使用 DocBook 過濾器。以下是可用於下載最新轉換的樣式表的連結。

在 OpenOffice.org 1.1 Beta 2/RC 中啟用 DocBook XSLT

[編輯 | 編輯原始碼]

有三種不同的方法可以啟用 DocBook 過濾器。

  1. 下載 DocBook XSLT 樣式表和 OpenOffice.org 樣式模板
    • 使用這種方法將確保使用最新的樣式表和 OpenOffice.org 樣式模板來匯入和匯出。需要下載以下內容才能在 OpenOffice.org 中匯入、匯出和修改 DocBook 文件。
    • 用於 XML 轉換的相關 XSLT 樣式表 (全部可在此處獲取)
    • 一個 OpenOffice.org 樣式模板,其中包含對應於 DocBook 標記的自定義樣式 (在此處獲取)

最新的樣式表支援匯入和匯出以 article 或 chapter 作為頂級標記的 DocBook 文件。以下列出了每個操作所需的不同的樣式表。

用於 Article 和 Chapter 文件的 OpenOffice.org 模板

  • DocBookTemplate.stw

建立新的 DocBook 過濾器

  • 轉到工具 -> XML 過濾器設定...
  • 將過濾器名稱和檔案型別名稱設定為 DocBook(Chapter)
  • 轉到轉換選項卡
  • 將 DocType 設定為 <chapter>
  • 對於匯出 XSLT,請瀏覽到 chapter 匯出樣式表 (docbooktosoffheadings.xsl)。
  • 對於匯入 XSLT,請瀏覽到 chapter 匯入樣式表 (sofftodocbookheadings_chapter.xsl)。
  • 對於匯入模板,請瀏覽到樣式模板 (DocBookTemplate.stw)。
  • 單擊確定,並關閉 XSLT 過濾器設定對話方塊

要建立 DocBook Article 過濾器,可以重複上述步驟,將 chapter 替換為 article。

  1. 下載 DocBook XSLT Jar 包(用於 Article 或 Chapter)

這種方法更方便,但不能保證使用的是最新的樣式表和 OpenOffice.org 模板。

  1. 僅下載 DocBook UNO 元件(用於 Article)

DocBook UNO 元件為保留未解析的 XML 實體添加了過濾器支援。

  • 下載 DocBookFilter
  • 將它解壓縮到 <OOo 安裝目錄>/
  • 在 <OOo 安裝目錄>/program 目錄中執行 pkgchk
  • 現在,DocBook Article 過濾器將以 OpenOffice.org 設定變數的形式匯入 DocBook 未解析實體。

如何匯入 DocBook 文件

[編輯 | 編輯原始碼]

現在可以使用檔案 -> 開啟對話方塊開啟 DocBook article 或 chapter 文件。

  • 轉到檔案 -> 開啟...
  • 瀏覽到 DocBook 文件。
  • 單擊確定

DocBook XSLT 過濾器應該會自動確定文件的根元素,並使用匹配的 XSLT 過濾器匯入它。或者,也可以在檔案 -> 開啟對話方塊的檔案型別組合框中手動瀏覽到所需的 DocBook 過濾器。

如何匯出 DocBook 文件

[編輯 | 編輯原始碼]

也可以使用檔案 -> 另存為對話方塊匯出 DocBook 文件。

  • 轉到檔案 -> 另存為...
  • 瀏覽到要儲存文件的位置
  • 單擊儲存

同樣,DocBook XSLT 過濾器應該會自動確定檔案型別,並使用匹配的 XSLT 過濾器進行匯出。或者,也可以在檔案 -> 另存為對話方塊的檔案型別組合框中手動瀏覽到所需的 DocBook 過濾器。

使用 OpenOffice.org 標題和樣式表示不同的 DocBook 標記

[編輯 | 編輯原始碼]

使用 OpenOffice.org 樣式表示 DocBook 標記 樣式模板提供了當前支援的所有自定義樣式。將 DocBook 文件匯入 OpenOffice.org 後,可以使用樣式表檢視可用的 DocBook 特定樣式。匯入時,每個支援的 DocBook 標記都將對映到格式化的 OpenOffice.org 內容。同樣,要修改匯入的 DocBook 文件,可以使用 OpenOffice.org 文字樣式來表示標記文字的 DocBook 標記。注意:可以透過開啟 DocBookTemplate.stw 在 OpenOffice.org 中建立一個新的 DocBook 文件。然後可以將該文件儲存為 DocBook 文件,新內容將被表示為 DocBook 標記。如何建立新的 DocBook 內容

  • 按 F11 顯示樣式表
  • 在樣式表組合框中選擇自定義樣式
  • 單擊字元樣式圖示(樣式表中從左側數起的第二個圖示)
  • 雙擊 SubScript 樣式
  • 在 OpenOffice.org 文件中輸入文字
  • 匯出為 DocBook 時,格式為 SubScript 自定義樣式的文字將用 DocBook 標記 <subscript> 標記。

如何建立 DocBook 部分:最初,DocBook 專案使用 OpenOffice.org 部分來強制 DocBook 部分的巢狀。反饋表明,作者希望使用常見的文字處理樣式,例如 Heading1、Heading2 等。以下說明描述瞭如何建立包含 <sect2> 的 <sect1>。

  • 按 F11 顯示樣式表
  • 在樣式表組合框中選擇所有樣式
  • 單擊段落樣式圖示(樣式表中從左側數起的第一個圖示)
  • 雙擊 Heading 1 樣式
  • 輸入要作為 <sect1> 標題的文字
  • 此標題下方的所有文字現在將成為 DocBook <sect1> 的內容
  • 輸入其他 DocBook 樣式、表格等
  • 輸入要包含在 <sect1> 中的其他 DocBook 樣式、表格等
  1. 雙擊 Heading 2 樣式
  2. 輸入要作為 <sect2> 標題的文字
  3. 此標題下方的所有文字現在將成為 DocBook <sect2> 的內容
  4. 輸入要包含在 <sect2> 中的其他 DocBook 樣式、表格等
  • 使用 OpenOffice 標題巢狀 DocBook sect 可以一直到 <sect4> / Heading 4

在文件中導航:如果希望檢視 DocBook 部分是如何作為 OpenOffice.org 標題巢狀的,請使用 F5 鍵顯示導航器視窗。展開標題標記,以顯示文件中標題的佈局。可以透過雙擊某個 DocBook 部分/OpenOffice.org 標題,跳到該部分/標題的開頭。

  1. http://www.oasis-open.org/docbook/xml/ 下載最新的 DocBook DTD。將本書第 2 章的學習目標部分轉換為 DocBook 文件。檢查它是否格式正確且有效。
  2. Sourceforge.net 下載 DocBook XSL 樣式表。使用 HTML 資料夾中的 docbook.xsl 樣式表,將您在第一個練習中建立的 DocBook 文件轉換為 HTML 檔案。
[編輯 | 編輯原始碼]
  1. DocBook 官方網站
  2. DocBook: The Definitive Guide,作者 Norman Walsh 和 Leonard Muellner,由 O'Reilly & Associates 出版,1999 年 10 月 http://www.docbook.org/
  3. Sourceforge - DocBook 開放儲存庫
  4. 安裝和使用 DocBook - 版權所有 2002,伯明翰大學
  5. 使用 DocBook XSL 樣式表 - http://www.sagehill.net/docbookxsl/index.html
  6. 為 Windows 和 Unix 設定免費的 XML/SGML DocBook 編輯套件
  7. http://lists.oasis-open.org/archives/docbook-apps/
  8. http://www.dulug.duke.edu/~mark/docbookmarks/
  9. http://www.linuxdoc.org/LDP/LDP-Author-Guide/
  10. http://www.nwalsh.com/docs/
  11. http://www.e-smith.org/docs/docprocess.html
  12. http://www.lodestar2.com/people/dyork/talks/docbook/
  13. DocBook 郵件列表:mailto:docbook@lists.oasis-open.org
  14. http://xml.openoffice.org/xmerge/docbook/
華夏公益教科書