OpenOffice.org 是一種成熟的、開放源碼的前台辦公應用程序套件,它的優點是一種基於開放 XML DTD 的已保存文件格式。這使得在處理 OpenOffice.org 產生的工作時,向用戶和開發人員提供了極大的靈活性和能力。在本文中,Uche Ogbuji 介紹了 OpenOffice 文件格式並說明了其優點。
當標記支持者嘗試向大眾證明象 XML 這樣的技術突破的價值時,他們幾乎總是提供專用的、二進制文件格式的示例 — 而最常用的示例是已保存的字處理器文件。對 XML 文件格式前身的討論通常會包括用逗號分隔的文件格式,這些格式極頻繁地用於電子表格和數據庫的導入和導出。由 前台辦公(或只是 辦公)工具 — 字處理器、電子表格、表示軟件、聯系人管理器等 — 產生的已保存文件保存了大量表示用戶知識的數據。您的筆記、備忘錄、提議、分析、計劃和組織化工具都是知識管理的主要內容。當您升級或遷移任何此類軟件時,一個主要問題就是新方案是否要導入舊文件。當執行備份時通常會從這些辦公文件入手。
供應商知道這一點並理解其中的微妙之處:使他們的專用文件格式足夠重要,這樣您不得不“忠誠”地使用他們的軟件,但同時又使他們的工具足夠靈活,可以接受由競爭對手的軟件產生的文件格式。但是標記支持者(尤其是 XML 支持者)指出您根本不必屈從於這種“貌似仁慈的囚禁”。有人提出主張,“您為什麼不 100% 地控制此類重要的數據?”又有人提出,“為什麼不可以用任何文本查看器輕松地打開文件,以理解內容呢?”於是提出了 XML 作為解決方案。XML 不但是純文本的,而且提供了一個工具箱,使不同 XML 格式之間能夠相互轉換。有了它,真是透明性和互操作性的福音。
正如人們所預料的,越來越多的辦公工具提供了 XML 輸出。最近,Microsoft 在其辦公套件的最新版本裡,對 XML 集成和導出能力進行了較大改進。OpenOffice.org 項目從 StarOffice 派生出完整的、開放源碼的辦公套件,該項目將 XML 用作其核心文件格式,而不是作為單獨的導出選項。OpenOffice 包括字處理器、電子表格、演示工具和圖形/圖表化工具。該工具已經問世很長時間(它大約出現在 1994 年),並具有您認為任何此類辦公套件應具有的優點和特性。
OpenOffice.org 的鐵桿支持者(OpenOffice.org 網站的志願參與者和用戶)都同意將 OpenOffice 文件格式做得盡可能開放和通用,他們都希望在眾多的辦公文件格式之間能夠有更大的互操作性和靈活性。除了這個目標之外,他們還將文件格式貢獻給結構化信息標准促進組織(Organization for the Advancement of Structured Information Standards,OASIS)的一個新技術委員會(TC)。我是該委員會的創始成員,我認為 OpenOffice 格式可以成為有價值的社區資源,用來將我們在工作和聯系中使用的人類可讀文檔與可增加這些文檔總體價值的各種元數據管理連接起來。在本文中,我將介紹 OpenOffice 文件格式。
XML 和辦公軟件交匯了,這是一個有趣的時刻。有許多關於最新的 Microsoft XDocs 技術的討論,以及關於它會不會跟 XForms(OpenOffice 格式)和其它此類項目形成競爭或相輔相成的討論。我不會在本文中論及任何相關主題 — 部分原因是篇幅不夠,還有部分原因是 XDocs 的詳細信息才剛披露。此外,在本文後面的部分中,我將使用名稱“OpenOffice”而不是使用完整的正式名稱“OpenOffice.org”。
整體格式
我啟動了 OpenOffice 1.0.1 for Linux(我很高興發現它是隨 Red Hat 8.0 一起提供的),然後創建了一個文檔,如 圖 1所示。
圖 1. OpenOffice 字處理器會話
如您所見,編輯界面很象任何其它 WYSIWYG(所見即所得)字處理器屏幕(OpenOffice 用戶界面不在本文討論范圍之內)。我將文件保存為 document.sxw。由於所有文件都是以 OpenOffice 本機格式保存的,所以這實際上是一個包括一組 XML 和其它支持文件的 ZIP 文件 — 一種稱為 OpenOffice 包格式的捆綁包。關於使歸檔文件約定標准化以打包多個相關的 XML 文檔及其支持文件的想法,是一種流行的和慣用的思想:XML 專家 Rick Jelliffe 開發了一種基於 ZIP 的 XML 應用程序歸檔(XML Application Archive,XAR)格式;還有“直接因特網消息封裝”(Direct Internet Message Encapsulation,DIME),它是一個因特網草案(Internet Draft),但要復雜得多,並且主要是針對消息傳遞和 Web 服務而不是通用的歸檔文件。OpenOffice 使用它自己的格式,接下來我將研究這種格式。請參閱 參考資料以獲取關於這些格式的更多信息。
document.sxw的 ZIP 內容如下:
$ unzip -v document.sxw
Archive: document.sxw
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
2946 Defl:N 965 67% 12-13-02 04:03 44fee85c content.XML
4638 Defl:N 1199 74% 12-13-02 04:03 791e906a styles.XML
1120 Stored 1120 0% 12-13-02 04:03 a921529c meta.XML
6183 Defl:N 1362 78% 12-13-02 04:03 c8586553 settings.XML
752 Defl:N 254 66% 12-13-02 04:03 11144701 META-INF/manifest.XML
-------- ------- --- -------
15639 4900 69% 5 files
“第一站”是 META-INF/manifest.XML,它在某種程度上擔任包中所有其它文件的中央目錄。 清單 1是來自我樣本文檔的清單文件。
清單 1:圖 1 中所示的已保存樣本文檔的清單
<?XML version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN"
"Manifest.dtd">
<manifest:manifest XMLns:manifest="http://openOffice.org/2001/manifest">
<manifest:file-entry manifest:media-type="application/vnd.sun.XML.writer"
manifest:full-path="/"/>
<manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.XML"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.XML"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.XML"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.XML"/>
</manifest:manifest>
所有 OpenOffice 格式都使用 DTD,我認為這樣很好,因為擁有一個模式,有助於強制格式的互操作性,並且選擇 DTD 還確保了對 XML 工具的最廣泛支持。警告:要用通用的 XML 工具處理這些文件,您要麼必須使用編目(catalog)以解析公用標識,將被指定為系統標識的 Manifest.dtd 文件復制到相同目錄中,要麼僅使用不讀取外部 DTD 子集的工具。OpenOffice 為所需的 DTD 和實體維護一個內部編目。可以在 OpenOffice 安裝的共享目錄中找到 OpenOffice DTD。例如,在我的 Red Hat 8.0 安裝中,它們位於 /usr/lib/openoffice/share/dtd/ 中,而清單 DTD 在 /usr/lib/openoffice/share/dtd/officedocument/1_0/ 中。您也可以在線從 OpenOffice 網站(請參閱 參考資料)下載或訪問這些 DTD。清單文件使用公共的 OpenOffice 名稱空間,並通常包括一個向每個文件提供因特網媒體類型(IMT)和相關 URL 的項元素列表。用於子文件夾的 media-type 屬性是空的(例如我示例中的 Pictures 文件夾),但通常會在這些子文件夾中包含任何嵌入圖形的圖形源文件。
meta.xml包括一系列具有文檔元數據的元素(如創建和最後編輯日期、已經花費在編輯該文檔上的總時間、字數、頁數、表數和圖數等元素)。您可以將 styles.xml看作 XML 格式中的級聯樣式表(CSS)和 XSL 格式化對象(XSL-Formatting Objects,XSL-FO)之間的交叉點。它定義了各種樣式,這些樣式可用於文檔的字體、間距、修飾、間隔、制表符停止位等方面編輯會話。它命名了所有樣式,因此您可以在其它文件中引用它們。 settings.XML記錄用戶對 OpenOffice 用戶界面的用戶首選項。這些涉及到用來編輯文檔的應用程序的細節,而不是文檔本身的任何細節。這個領域還需要完成一些工作以確保互操作性。總之,如果在多個應用程序(都使用 OpenOffice 格式)中編輯同一文檔,不能期望每個應用程序都維護同樣類型的設置 — 但即使如此,又如何防止它們發生沖突呢?
處理內容
文檔的核心(實際內容)在 content.xml中。遺憾的是,在文本編輯器中,乍看上去這個文件中的元素有點過於混亂,但是您可以用多種常見的 XML 工具(包括 XSLT)抽取出字符數據,允許使用空樣式表(請參閱 清單 2)。
清單 2:空 XSLT 樣式表
<xsl:stylesheet
XMLns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<xsl:output method="text"/>
</xsl:stylesheet>
這個空樣式表使用了所有缺省模板規則,其作用是將所有標記從 XML 文件中剝離。我指定文本輸出方法,以避免在輸出中獲得 XML 文本聲明。這個腳本可以和任何 XSLT 處理器一起使用:
$ 4xslt content.XML null.xslt
產生下列輸出:
This new column, Thinking XML, will cover the intersection of XML andknowledge architecture (KA). Knowledge architecture sounds likesomething tossed out by a jargon bot, but it's really just an umbrella termfor some very useful technologIEs that are emerging now that XML is enteringits adolescence. Metadata management, semantic transparency, and autonomousagents are hardly concepts unique to XML, but the promise of XML to unifythe syntax of structured and semistructured data helps turn the next-to-impossibleinto the feasible.請注意丟失的空格。看起來 OpenOffice 在依照用戶編輯模式標記文檔中的樣式這方面是相當嚴格的。下面的行有許多內容:
<text:s/><text:span text:style-name="T2">Knowledge architecture</text:span> sounds
like</text:p><text:p text:style-name="Standard">something tossed out by a jargon bot,
but it's really just an umbrella term</text:p>
(在先前的代碼樣本中,為了便於閱讀,代碼從單詞之間分隔開來,並在多個行上顯示。實際上,該代碼是很長的一行。)
該文本被劃分成多個元素,並且 OpenOffice 按需填充空格。XSLT 處理器不執行相同的補救措施,因此出現了您在上面的輸出中所看到的效果。您也可以對幾個簡單的 XSLT 模板做相同的操作,在元素范圍之間添加空格。但是此處的關鍵是可以用通用工具非常有效地處理這種文件格式。
結束語
在本專欄文章中,我對 OpenOffice 文本文件格式進行了概述,但該項目並不是生成一個文本格式然後就不管它了。OpenOffice 提供了內容豐富的工具箱,用來集成 XML 工具,並且第三方工具的隊伍也在日益壯大。這些工具包括 SAX 過濾器、XSLT 插件,甚至包括低級別 Java API。該社區的開發人員已經使用這些工具來增加 OpenOffice 的能力,這些能力包括裝入和保存 Docbook、Html、TeX、純文本以及 PalmOS 和 PocketPC 所用的文檔格式。
XMerge 項目用於在諸如 PDA 和移動電話之類的小型設備上處理 OpenOffice 內容。XMerge 開發工作進展相當迅速,供應商(如 Nokia)已經決定參與該項目。由此可見 OpenOffice 所秉承的開放原則的另一個巨大優勢。它鼓勵了來自各種廣泛來源的貢獻,甚至是來源於商業利益,誰都知道開放帶來公平競爭,而使用專用格式則相反。XMerge 使用 XSLT 插件進行文檔轉換,這也確保了跨平台支持。
在 Open Office XML format TC(開放辦公 XML 格式技術委員會)(請注意拼寫上的差異)中,我們將繼續改進這些文件格式,並時刻關注著互操作性的更進一步增強。這是一個帶有開放郵件列表的開放過程,任何 OASIS 成員都可以正式加入。我鼓勵所有對管理前台辦公文檔感興趣的人都來參與,包括那些傾向於輕松愉快地使用任何他們所熟悉的工具來處理 OpenOffice 文件的人。畢竟,它只是 XML。