級別: 初級
Uche Ogbuji, 首席顧問, Fourthought, Inc.
2003 年 1 月 01 日
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。
參考資料
關于作者