歡迎您光臨本站 註冊首頁
  
XML 是最理想的文檔編寫格式,可以用於多種文檔軟體包和生產環境。在本系列的第三篇文章中,我們將介紹如何創建可以以各種不同格式輸出的單一來源文檔。

什麼是單一來源文檔?

本系列的其他文章
  • 第 1 部分:利用 XML 發布文檔:用 XML 標準和開源工具創建、格式化和發布文檔
  • 第 2 部分:在 XML 文檔中重用信息:減少工作量、增加可用性和加強文檔重用的一致性

如我在本系列的 第 1 部分 所述,在文檔中使用 XML(及其前身 Standard Generalized Markup Language (SGML))可以將文檔的內容(文檔包含的實際文字和數據)與其表示(內容以特定輸出格式顯示的方式,或在特定輸出設備上顯示的方式)分離開來。這種分離使您能更多地關注文檔的內容,而不是信息最終是如何使用和表示的。第 2 部分 討論了將 XML 文檔組織成更小的信息單元(通常稱為塊)的各種機制,以創建更大的文檔,或通過串聯不同的信息塊或以不同的順序串聯同樣的信息塊創建面向不同受眾的文檔。

常用縮略詞
  • DITA:達爾文信息分類體系結構(Darwin Information Typing Architecture)
  • DTD:文檔類型定義(Document type definition)
  • HTML:超文本標記語言(Hypertext Markup Language)
  • PDF:可移植文檔格式(Portable Document Format)
  • URL:統一資源定位符(Uniform Resource Locator)
  • XML:可擴展標記語言(Extensible Markup Language)
  • XSL:可擴展樣式表語言(Extensible Stylesheet Language)

XML 作為與軟體無關的文檔環境加速了信息重用,隨之而來的是定製信息需求的增長,以便滿足不同的受眾或輸出格式。這種重用通常稱為單一來源文檔,因為一組輸入文件即可滿足多個受眾或輸出格式的需求。某些單一來源需求是由工具自動處理的,可以產生多種格式的輸出。例如,為包含到外部資源鏈接的 DocBook XML 文檔生成 PDF 格式的輸出(使用 <ulink> 元素),可以將超鏈接嵌入 該信息並在輸出中嵌入實際 URL,而生成來自同一 XML 文檔的 HTML 格式的輸出只需在該 HTML 輸出中嵌入鏈接即可。

以不同的方式將單一元素轉換為不同的輸出格式是向處理單一來源文檔的正確方向邁出的第一步,但它不支持超越文檔的表示要求來定製文檔的內容。能夠根據其目標輸出格式定製文檔實際內容是現代文檔的一個很常見的要求。幸運的是,這可以通過結合使用預處理和靈活的文檔格式(如 DocBook XML)設計功能輕鬆地實現。





DocBook 元素和屬性

XML 元素使用稱為屬性 的名稱-值對提供關於元素實例的信息。通常,屬性可以惟一地標識 XML 文檔中同一元素的不同實例或標識一個元素的不同實例的特殊化行為。屬性包含在元素範圍內並具有以下形式:

<attribute_name="value">  

舉個例子,最常見的 XML 元素屬性是 id 屬性,它可以惟一地標識 XML 元素的給定實例,如下例所示:

<section id="introduction">  

在 XML 文檔中,id 屬性通過 <xref> 和 <link> 之類的元素支持交叉引用。以下是對上例中使用的 <section> 元素引用的示例:

<xref linkend="introduction"/>  <link linkend="introduction">introduction to this document</link>  

標識元素的專門化行為的屬性示例是 <emphasis> 元素的 role 屬性:

<emphasis role="bold">example</emphasis>  

包括在 <emphasis> 元素之內的內容通常以斜體呈現,採用 PDF 或 HTML 之類的表示格式。指定 role="bold" 屬性會將該元素的呈現從斜體改為粗體。





其他文檔定製方法

過去,標記語言傾向於支持以某種程度定製所支持的元素集的文檔生成。創建可以以特殊方式在給定工具內使用的定製元素是最初的通用標記語言(Generalized Markup Language,GML)的功能(GML 是 SGML 的前身,有關更多信息,請參見 參考資料)。從兩者的縮略詞可以看出,GML 和 SGML 的主要不同在於出現在給定文檔類型定義中的元素集合是否標準化。

即使 SGML 以及稍後的 XML 文檔類型設計用於使用標準的、預定義的元素集合,還是可以通過引用定義這些元素的外部資源來添加自定義元素定義。但是將定製元素定義添加到現有 DTD 或模式通常不是一個好主意,原因很多,最主要是因為:

  • 使用非標準元素的文檔不符合標準的文檔類型,如 DocBook 或 DITA。
  • 擴展 DTD 或模式會給與其他使用默認 DTD 或模式的機構或公司交流文檔帶來不便。即使也會交流非標準元素的定義,但是成功的交流文檔還需要更多的定製工作。
  • 設計用於處理標準文檔類型的工具也要被擴展以支持新的元素。儘管對於開源工具而言,這個操作相對較容易,但是對於私有的閉源工具而言,這種擴展可能無法進行。

本文介紹了使用預處理步驟消除不適用於特定受眾或輸出格式的條件化文本。某些圖形 XML 文檔工具提供了類似的解決方案,使您能設置在生成輸出過程中使用的變數。本文重點介紹了更通用的預處理方法,可以為大量開源 XML 文檔工具所使用,而不是僅用於特定文檔工具支持的機制。





DocBook 元素的常用屬性

如您所料,不同的 XML 元素根據具體元素的類型和用途有不同的屬性。但是,XML 文檔模式和 DTD,如 DocBook 文檔類型(本系列文章關注的重點),還定義了常用的屬性集合(有關更多信息,請參見 參考資料),它們可以用於任何 XML 元素,通常用於標識給定元素的表示或目標的信息。這些屬性的常用示例包括:

  • arch:旨在標識某元素的給定實例內的內容應用於哪個計算機系統或處理器架構
  • audience:旨在標識某元素的給定實例內的內容應用於哪些受眾
  • condition:用於局部、特定於應用程序的內容定製
  • os:旨在標識某元素的給定實例內的內容應用於哪個計算機操作系統
  • revision:旨在標識某元素的給定實例內的內容應用於哪個特定的軟體或文檔修訂
  • vendor:旨在標識某元素的給定實例內的內容應用於哪個硬體或軟體供應商

為這些屬性中的任何一個定義一組有效值,然後實現預處理器,放棄該屬性中具有其他值的元素,可以輕鬆的條件化 您的文檔。對哪些屬性進行定製完全由您決定,但是通常會根據哪些屬性最適合您要條件化的內容的類型以及定製原因來確定。本文使用通用的 condition 屬性作為特定於給定輸出/表示格式的通用條件化的一個例子。

下面兩節介紹如何使用屬性(比如以上屬性)有條件地標識特定元素或元素內的內容片段。





[火星人 ] 在 XML 內生成文檔並重用信息,第 3 部分: 創建多個目標的 XML已經有413次圍觀

http://coctec.com/docs/linux/show-post-68772.html