OpenOffice.org中的XML應用



上一篇重點介紹了OpenOffice.org的技術體系結構。它的分層架構、UNO組件模型、基於IDL的API和SDK等等都是使OpenOffice.org獲得廣泛應用和好評的技術優勢所在。


OpenOffice.org中的另一大特點是完全公開並充分記錄的、可擴展和標準化的XML文件格式。該文件格式可以持久保存數據,用戶不虞擔心無法訪問年代久遠的文件,或者需要爲此付出高昂的代價。基於該文件格式的架構和應用,開發者也可以輕鬆實現支持客戶化的外部文件格式,與網絡服務等其他應用集成。


需求與目標

專有辦公軟件的困擾

隨着整個社會信息化程度的提高,辦公軟件已經成爲社會信息基礎設施的一部分。不論是個人消費者,還是企業、政府、和其它非盈利機構,都會或多或少地使用文字處理、電子表格、演示文稿、簡單繪圖和圖像處理這樣的功能,辦公軟件已經成爲計算機使用中的日常需求。對於辦公軟件的團體用戶來說,除了基本的辦公“生產力”應用外,他們還有其他一些需求:


能夠支持附加處理和集成功能:比如文件的歸檔和索引功能,校驗文件內容的合法性,支持與數據庫和工作流的集成,能夠批量處理文件等;


文件具有長期的可讀性:這對於那些需要處理歷史悠久的文件的大型團體(比如政府、博物館、大型企業等)分外重要;


文件獨立於應用程序,最好是獨立於提供者,這樣用戶就不會被鎖定在某個文件格式上而被迫延續使用;


文件格式統一,避免非結構化的、混亂的工作流和多種文件格式混雜。


而現在用戶所使用的專有辦公軟件無法輕易滿足以上的這些要求,這是因爲:專有辦公軟件可以提供對附加功能和集成的支持,可是這需要附加的許可證和高額費用。


專有辦公軟件的文件通常都是不公開的,甚至是附帶專利的,這樣早期軟件所支持的文件格式完全要期待軟件廠商在後續版本中提供支持,這些支持通常是需要付費的,由於軟件商的某些目標和企業行爲甚至是不可得的。


專有辦公軟件的文件通常都是依附於特定應用程序,甚至是特定版本的,這樣用戶就會爲了保持對以前文件的訪問而被鎖定在某個軟件上,這種代價通常是高昂的。


專有辦公軟件的文件通常都是自成體系,經常由於利益問題導致文件交換困難,從而多種格式並存。


用戶希望辦公軟件能夠在保持功能的基礎上開放文件格式,這樣團體用戶可以自己完成附加功能和集成工作;文件的長期可讀性也可以保證,因爲訪問文件的應用程序可以由第三方實現;而由此文件也獨立於軟件商和特定應用程序,用戶真正掌握了自己的數據和信息;文件格式也可以通過公開協商的方式實現統一。


客戶化與可擴展性

隨着辦公自動化和信息化,政府、企業等團體用戶在日常工作中的業務流轉已經逐步過渡到需要自動完成的階段,而辦公軟件通常會被團體用戶用來支持工作流(Workflow)(見1)。工作流中的一個重要內容就是實現工作文件在流程中恰當地運轉以完成整個業務,而這裏所指的文件很可能是團體用戶所在行業規範的文件,或者是用戶自定義的文件。實際上,在政府公文(見2)、法律文件(見3)、稅務記錄(見4)、專利管理(見5)、會議論文(見6)、科技文件(見7)、技術規範(見8)、電子書籍(見9)、盲人書籍(見10)、新聞稿件(見11)、投資研究(見12)、文字研究(見13)、人力資源(見14)、採購銷售、財務報表(見15)、醫療(見16)、保險(見17)、零售(見18)、金融(見19)等方面、甚至整個電子商務系統(見20),國際上有團體或者聯盟已經開始、甚至是完成了這些專用文件格式規範的制定。


中國政府也在基於XML着手製定《中文辦公軟件文件格式規範》(見21)和《基於XML的電子公文格式規範》(見22);國家知識產權局爲實現專利受理自動化而制定的《以電子文件形式提出的專利申請請求類文件類型定義[DTD](試行)》(見23)已經於2004年公佈,並開始接受專利電子申請;中國證監會參考XBRL12制定的《上市公司信息披露電子化規範》在2004年通過審批,上海證交所已經推出了相關的服務;稅務部門在某些稅種內已經開始施行了基於XML的數據表示方式。


這些爲特定目的定義的文件規範要求和定製好的結構化工作流緊密配合。對於專有辦公軟件來說,支持這些文件規範意味着要在保持傳統辦公軟件使用模式的基礎上,根據需要提供擴展功能。也就是要即能保證對市場中廣泛使用的文件的兼容性,又要提供附加工具支持對文件語義的操作,在通用格式和專用格式間轉換。要支持這樣的擴展功能,在沒有充分了解專有辦公軟件內封閉的文件格式的條件下是很難實現的。


保護投資與標準化

團體用戶通常在採用某種文件格式存儲數據和信息後都希望能夠保存儘可能長的時間,並且保證文件格式的穩定、或者是受控地演化,這樣用戶才能保持爲此及相關係統的投資收益率並儘可能地降低總持有成本。而封閉的文件格式常常會導致丟失信息,或者是成本居高不下。


這個問題根本的解決之道在於文件格式的開放和標準化。只有文件格式開放了,才能夠實現充分競爭,由此降低成本;只有標準化了,文件才能夠穩定地演化,數據和信息才能更通暢地流轉,也能夠被更廣泛地支持,出現更多的工具,用戶纔會有更多的選擇。這是一個用戶和業界雙贏的途徑。


解決方案

爲了滿足如上用戶的需求,OpenOffice.org採用了可擴展標記語言(eXtensible Markup Language,XML)作爲本地文件格式規範(見24)的基礎。採用XML作爲辦公軟件的文件格式,能夠輕鬆實現各種集成和擴展處理。通過定義辦公軟件特定的標記,這種文件格式能夠支持所有的辦公軟件的功能,易於生成和處理文件,而且不會被某個軟件商或應用程序鎖定。爲了實現文件格式的標準化,OpenOffice.org還參與發起了OASIS開放辦公XML格式技術委員會(見25),目標就是制定開放辦公軟件XML文件格式規範。


設計原理

內容與樣式

辦公軟件文件格式同行業專用文件和頁描述文件格式有顯著的區別。


絕大多數的行業專用文件只定義了文件中具有特定邏輯的內容,文件的顯示樣式在外部獨立地實現,內容是它們的關注點。而頁描述文件(例如Adobe PostScript、PDF和其他小樣格式)通常是在特定頁中定義了內容的顯示方式,對於內容中的邏輯是不作規定的。


辦公軟件文件的內容通常具有一定的邏輯關係,例如章節和標題層次,而且也需要確定它的顯示樣式,例如字體字號和縮進等。那麼就有兩種實現方式:一種是將樣式和內容混合起來表示,樣式就嵌入在內容流裏;另一種是將樣式與內容分離開來表示,通過某種映射聯繫起來。前者的優點在於格式簡單,缺點是嵌入在內容中的樣式很難管理,而且由於重複樣式會產生很多的冗餘信息。後者正好與前者相反,格式相對複雜但層次較爲清晰,樣式單獨保存有利於提高數據表達信息的效率,並且方便對樣式和內容分別進行處理。


OpenOffice.org的XML文件格式採用的就是後一種實現方式。


文件打包

採用了樣式與內容分別處理的OpenOffice.org XML文件格式,需要處理的一個問題是:如何處理文件內的非文字內容(例如圖像、OLE對象和打印機設置信息),如何管理這麼多數據部分?


OpenOffice.org針對多部分的文件採用了壓縮打包26的方式。也就是說,將樣式、內容、設置信息、元數據、和圖像等非文字內容等採用通用壓縮算法打包,訪問時針對特定的部分進行解包和再打包。這樣做的好處是統一管理,單獨處理,文件尺寸更小,而且壓縮算法和打包的ZIP文件格式也是各平臺上都可得的,無專利隱患,並有開源軟件的支持。


對於某些需要嵌入在文字內容流中的非文字對象,OpenOffice.org XML文件格式採用Base64的編碼方式將其嵌入的。


標準化

OpenOffice.org XML文件格式從設計之初就非常注重標準化。爲了能夠更好地同其他信息格式交互,OpenOffice.org XML充分利用了現有的行業標準,不是“重新發明輪子”,而是在這些標準的基礎上組建自己的辦公軟件文件格式。比如它直接採用了MathML27、XLink、Dublin Core(見28),重複利用了XHTML、SVG(見29)、XSL-FO(見30)、CSS中的內容,在此基礎上融合創新而成OpenOffice.org XML文件格式。


在OpenOffice.org的實現架構中實際上還充分支持了XSLT(見31),下一版的OpenOffice.org 2.0還會支持剛發佈不久的XForms(見32)。


卓越的XML

OpenOffice.org XML文件格式,不僅僅是把現存的數據結構簡單地XML化,也不是進行某種“擁抱-擴展-消滅”(Embrace-Extend-Extinguish,EEE)(見33)的實踐。


OpenOffice.org XML文件格式完全遵從於XML及其命名空間規範,所有的信息都通過結構化的XML來保存。沒有信息存在於文件的物理表示方式中,沒有信息存在於註釋中,也沒有信息存在於特別的節點名或者值中,更沒有在值的“子格式”中保存信息。


爲了統一文件格式,OpenOffice.org中所有相同功能的模塊都採用同一概念和表示方式。這樣在應用中就有很多的通用格式模型可以重複使用,提高了數據表示信息的效率。


文件格式

結構框架

如上所述,OpenOffice.org XML文件格式中引用了很多外部標準,比如XML 1.0、SVG 1.0、XML Namespace、XSLT 1.0、XPath 1.0、XLink 1.0、XSL-FO 1.0、HTML 4.01、ISO 8601(見34)、ISO 639(見35)、ISO 3166(見36)等。而OpenOffice.org XML文件格式爲了表示不同性質的內容,又爲不同性質的數據內容定義了15個命名空間以便於區別管理。比如表示公共信息的xmlns:office、表示樣式信息的xmlns:style、表示腳本的xmlns:script、表示文本的xmlns:text、表示元數據的xmlns:meta等。由於OpenOffice.org XML文件格式公佈時W3C XML Schema還沒有制定出來,所以它採用了傳統的DTD進行數據類型定義。




圖 1 OpenOffice.org XML文件根結點




圖1是OpenOffice.org的文件基本結構。辦公文件根結點<office:document>下包含的元素是:元數據<office:meta>、全局設置<office:setting>、腳本<office:script>、字體聲明<office:font-decls>、普通樣式<office:styles>、自動樣式<office:automatic-styles>、主樣式<office:master-styles>、內容體<office:body>。


打包格式

子文件名


根元素


子文件內容


meta.xml


<office:document-meta>


文件元信息(例如作者和創建時間):<office:meta>


styles.xml


<office:document-styles>


文件中使用的樣式:<office:font-decls>、<office:styles>、<office:automatic-styles>、<office:master-styles>


content.xml


<office:document-content>


文件內容及其使用的自動樣式:<office:script>、<office:font-decls>、<office:automatic-styles>、<office:body>


settings.xml


<office:document-settings>


全局設置(例如窗口大小和打印機設置):<office:setting>

子文件名

根元素

子文件內容

meta.xml

<office:document-meta>

文件元信息(例如作者和創建時間):<office:meta>

styles.xml

<office:document-styles>

文件中使用的樣式:<office:font-decls><office:styles><office:automatic-styles><office:master-styles>

content.xml

<office:document-content>

文件內容及其使用的自動樣式:<office:script><office:font-decls><office:automatic-styles><office:body>

settings.xml

<office:document-settings>

全局設置(例如窗口大小和打印機設置):<office:setting>


表 1 OpenOffice.org XML文件壓縮包結構


實際上在OpenOffice.org的文件壓縮包內,以上這幾個部分被分別存儲在相關的幾個子文件內,如表1中所示。


OpenOffice.org XML文件的兩個基本屬性是類型和版本。文件類型通過<office:document>或<office:document-content>根結點的屬性@office:class表示,可能的類型包括文字、主控文檔、電子表格、繪圖、演示文稿、圖表等。


其中的“主控文檔”是一類特殊的文字文件。主控文檔由若干子文件構成,每個子文件實際上都是完整且獨立的文件,鏈接到主控文檔的“區域”中來。在主控文檔中可以爲這些區域定義主控樣式,這些樣式會在主控文檔中應用到子文件上去。主控文檔特別適合多人著述時使用。不同的作者撰寫不同的章節,只要在主控文檔中應用同樣的樣式,所有的內容就都被統一排版了。這樣OpenOffice.org就能夠在著作層次上實現內容和樣式的分離管理。


OpenOffice.org XML文件中的校驗和向前兼容性處理由文件根結點的屬性@office:version控制。這個屬性保存文件的當前版本,這樣不同版本的OpenOffice.org訪問文件時,會調用不同版本的文檔模型。利用XML優秀的可擴展性,OpenOffice.org的不同版本能夠方便地訪問其他版本生成的文件,並最大程度上地保證兼容性。


壓縮包內各個文件的相關信息由一個專門的列單文件(META-INF/manifest.xml)存儲。它的主要內容包括:包內所有文件的列表、每個文件的媒體類型、包內被加密的文件所需要的解密信息。


樣式

OpenOffice.org XML文件格式採用的是樣式與內容分離管理的方式。而樣式實際上分爲三大類:


普通樣式:OpenOffice.org用戶界面上可以看到的表示格式的樣式,有時爲了與其他樣式區分稱爲普通樣式。普通樣式就是對OpenOffice.org XML文件格式不瞭解的用戶眼中的樣式。


自動樣式:用戶直接給對象(例如段落)設置的排版屬性包含於自動樣式。自動樣式由OpenOffice.org在文件輸出時自動生成。自動樣式只包含設定於特定對象的排版屬性。


主樣式:包含應用於文件內容並一起顯示的排版信息和附加內容的樣式。比如OpenOfficr.org Draw主頁中的圖像背景,又如OpenOffice.org Writer主頁中的頁眉和頁腳。主樣式又分爲普通主樣式和自動主樣式。


OpenOffice.org XML文件中的樣式間支持繼承關係,但被繼承者只能是普通樣式。在普通樣式和自動樣式中還根據包含的內容不同劃分爲不同的家族,例如段落、區域、文字、表格、圖表、圖形等,繼承也只能在同家族的樣式間進行。


OpenOffice.org XML文件格式中的樣式也支持條件映射,也就是說可以在滿足特定邏輯判斷條件下映射爲另一樣式。這些條件映射還可以進行組合。


OpenOffice.org XML文件格式中的頁樣式(最常見的主樣式),實際上由兩部分組成:頁主樣式<style:page-master>和主頁樣式<style:master-page>。頁主樣式隸屬於自動樣式,主要描述頁的物理和幾何屬性,例如頁大小、頁邊距、頁眉和頁腳高度等。而主頁樣式是文件中的頁模板,位於主樣式<office:master-styles>結點內。它包含一個指向頁主樣式的引用,以及頁上顯示的靜態信息,例如靜態的頁眉頁腳和背景等。


OpenOffice.org XML文件格式中也爲數據定義了豐富的樣式,時間、日期、貨幣、數值、科學計數、百分數、分數等數據格式類型定義到了最小元素,完全不存在表達特定含義的編碼子元素與字符串。在表示語言的ISO-639標準和表示國家地區的ISO-3166標準的基礎上,支持近百種locale組合的數據表示方法。


文字處理

OpenOffice.org XML文件格式中的文字內容主要由段落、標題、列表、表格、目錄、索引、參考書目等構成,其中最基本的元素是段落。


段落用<text:p>表示,章節標題<text:h>可以看作是被標記爲標題的特殊段落,它的特性大抵與段落相同。段落又由行內文本元素(Inline Text Element)構成。行內文本元素指的是文字區跨<text:span>和文本、腳註、尾註、書籤、引用、鏈接錨、域和其他文字標記等,而文字區跨<text:span>所包含的也是行內文本元素。所以,從文件格式上講文字區跨<text:span>是可以嵌套的,但是實際上OpenOffice.org輸出的XML文件並不包含嵌套的文字區跨,因爲這樣的結構會更加複雜。段落內文字間的軟回車<text:line-break>、空格符<text:s>和橫向製表符<text:tab-stop>都是用元素來表示的,所以直接嵌在文本中的排版控制符號是不被OpenOffice.org識別的。


OpenOffice.org XML文件格式中的列表分爲無序列表<text:unordered-list>和有序列表<text:ordered-list>兩種。無序列表指的是由標記符號或圖片引導的列表,而有序列表通常由各種數字或其本地語言文字表示引導。列表由若干列表頭<text:list-header>和列表項<text:list-item>組成,而列表項又可包含段落、章節標題、無序或有序列表。被任意列表項包含的無序或有序列表實際上就是該列表項所在列表的子列表,或者說次級列表。OpenOffice.org就是這樣通過列表嵌套來實現多級列表的。


電子表格

表格<table:table>主要由表列組<table:table-columns>、表頭行組<table:table-header-rows>和錶行組<table:table-rows>構成,其中各組又分別包含單個表列、表頭行和錶行。表頭行<table:table-header-row>表示在每頁重複的表頭,而錶行<table:table-row>表示普通的表格內容。表頭行和錶行都由表單元格<table:table-cell>和<table:covered-table-cell>組成,後者表示表單元格合併後被覆蓋的單元格。表單元格可以包含子表、段落/章節標題、列表和其他圖形對象。表格的內容主要由錶行包含的表單元格控制。


OpenOffice.org XML文件格式中的Writer和Calc應用都包含表格,所以它們採用了統一的定義。但是它們之中的表格在實施上還是有一些區別的:


Calc中的錶行和表列具有相對豐富的特性,比如隱藏、合併等功能,而在Writer中則沒有;


Calc中沒有表頭行的概念,表列與錶行在概念上是平等的,表單元格只是依附於錶行表示;而Writer中有可重複出現的表頭行,錶行是主要內容結點,表列是次要結點,只有橫表頭行而沒有縱表頭列,所以只支持縱向表;


Calc中的表單元格是表格的原子單位,不能拆分、只能合併;而Writer中的表單元格既能拆分又能合併,但是縱向合併表示爲子表<table:sub-table>,由於以錶行爲主要內容結點,所以縱向合併實際上存在某些限制;


Calc中有表源<table:table-source>和表方案<table:table-scenario>的概念,還有命名區域、條件格式、公式計算、篩選、排序、合併計算、彙總、大綱等數據處理功能,以及豐富的數據樣式;而Writer中的表格功能就非常有限。


因爲OpenOffice.org Calc是專用的表格化數據處理應用,而OpenOffice.org Writer中的表格只是實現了部分簡單的表格功能,所以兩者在OpenOffice.org XML文件格式中的表格部分具有比較明顯的區別,Writer中的表格相對簡單,但是具有一些文字處理方面的特性。


圖形

OpenOffice.org中的圖形應用是指繪圖(Draw)和演示文稿(Impress),而實際上無論功能還是XML文件格式,繪圖都是演示文稿的子集。演示文稿應用中具有一些繪圖沒有的功能,比如放映設置等。圖形內容也可以插入到Writer和Calc中。


OpenOffice.org XML文件格式中的圖形應用也具有主樣式,通過主頁樣式、頁主樣式和傳單主樣式<style:handout-master>來確定。而圖形內容主要通過內容體下的繪圖頁<draw:page>來表示。繪圖頁中可以包含衆多的繪圖元素,例如矩形、直線、折線、多邊形、路徑、圓、橢圓、連接線、標註、頁縮略圖、圖元組等等。繪圖頁還可包含命名空間xml:dr3d下的3維圖形容器元素:3-D場景<dr3d:scene>。3-D場景可以容納的元素包括:光線、立方體、球體、多邊形拉伸體、多邊形旋轉體等。


OpenOffice.org Impress特有的設置是通過其他一些元素來定義的。比如內容體中表示演示設置的<presentation:settings>、繪圖頁中表示演示筆記的<presentation:notes>和表示演示動畫的<presentation:animations>等。


OpenOffice.org的其他應用,比如文字處理和電子表格中同樣可以包含繪圖內容。在這些應用中不需要繪圖頁這樣的專用繪圖容器元素,各種繪圖元素可以直接放置於段落、文字區跨、表單元格、甚至內容體之內。


窗體與控件

OpenOffice.org XML文件格式支持窗體(form)與控件(control),窗體是指包含與用戶交互的控件的容器,所有的控件必須要處於某個窗體內部。


窗體集<office:forms>位於內容體之內,並可包含若干窗體<form:form>。每個窗體可包含窗體屬性<form:properties>、關聯事件<office:events>、若干控件<form:control>、甚至嵌套窗體。控件的種類也很多,包括文字、文字區域、固定文字、文件選擇、密碼、格式化文字、按鈕、圖片、檢驗盒、列表盒、單選盒、組合盒、控件框、圖片框、隱藏控件、數據表格、和泛控件等。


控件是數據可感知的,若干控件組合起來可以方便地表示數據源中的數據。控件還可以和各種事件關聯起來,通過宏或者其他方式實現數據的自動處理。


OpenOffice.org XML文件格式中的窗體和控件未來會遷移到W3C XForms標準上來。


圖表內容

OpenOffice.org XML文件格式中的圖表<chart:chart>總是位於內容體之下。圖表支持線條、平面、圓、環、散列、放射、柱、條等類型及其3-D形式,還支持add-in的外部繪圖方式。


圖表包含若干元素,標題<chart:title>、子標題<chart:subtitle>、圖例<chart:legend>、繪圖區域<chart:plot-area>等。如果數據源和圖表在相同文件內,則通常用繪圖區域的屬性@table:cell-range-address來表示;如果數據源和圖表不在同一文件內,則用繪圖區域內的元素<table:table>來表示數據源。繪圖區域包含的其他元素有2-D/3-D圖表的牆體<chart:wall>、3-D圖表的地板<chart:floor>、座標軸<chart:axis>、數據序列<chart:series>、數據類別標識<chart:categories>和3-D光線<dr3d:light>等。


索引

OpenOffice.org XML文件格式中支持多種索引,並且可以通過模板來修改這些索引的表現形式。


這些索引內容都位於內容體內,包括:內容目錄<text:table-of-content>、插圖索引<text:illustration-index>、表格索引<text:table-index>、對象索引<text:object-index>、字母順序索引<text:alphabetical-index>、參考文獻目錄<text:bibliography>、以及用戶自定義索引<text:user-index>等。


用戶界面與對話框

OpenOffice.org XML文件格式規範中也定義了用戶界面和對話框的XML表示,它們是基於可擴展用戶界面語言(Extensible User Interface Language,XUL)制定而成的。


OpenOffice.org的用戶界面定義實際上是保存在文件內部,或者是位於全局用戶配置包內的。每個OpenOffice.org組件都有其特有的菜單條<menu:menubar>、加速鍵列表<accel:acceleratorlist>、狀態條<statusbar:statusbar>、工具條<toolbar:toolbar>的配置,它們都可以保存在全局配置包的子文件內。用戶界面配置還包括與操作相關的事件<event:event>響應設置,以及爲了標識工具條按鈕和菜單項的圖片。這裏所有的內部圖片<image:entry>和外部圖片<image:externalentry>都必須保存在圖片容器<image:imagecontaineer>內。


OpenOffice.org XML中的對話框同樣也是基於XUL制定的。對話框<dlg:window>包含樣式<dlg:style>、作爲控件容器的公告板<dlg:bulletinboard>、以及與其關聯的事件<script:event>和<script:listener-event>。公告板容器<dlg:bulletinboard>可以包含的控件種類也非常多,例如按鈕、檢查盒、單選組、組合盒、菜單列表、標題盒、文字域、文字、文件控件、圖片、日期域、時間域、數字域、貨幣域、模式域、格式域、進度條、滾動條、固定線等等。對話框中的控件與文件內容中的控件是屬於不同的XML命名空間的。


文件安全性

OpenOffice.org XML文件格式規範也包括對文件安全性的考慮,現在主要體現在文件加密方面。加密是以密碼保護方式實施的,具體步驟如下:


由用戶鍵入的密碼創建20字節長的SHA1(見37)摘要,並傳遞給打包組件;


打包組件根據當時的機器時間啓動隨機數發生器,爲每個子文件產生一個隨機的8字節初始向量和16字節的“鹽”;


這個“鹽”與用戶密碼的20字節長的SHA1摘要一起爲每個文件產生128位的密鑰,產生這個密鑰的算法是迭代次數爲1024的PBKDF2(見38)算法;


這個產生的密鑰和初始向量一起用在密碼反饋(Cipher Feedback,CFB)模式下的Blowfish(見39)算法中給文件加密。


OpenOffice.org. XML文件格式規範並不滿足於這已經很強大的128位密鑰保護。在OpenOffice.org的下一版本中,會對W3C XML 簽名(見40)和加密(見41)規範提供支持(見42)。如此以來,不但可以對整個文件進行多次簽名和加密,還可以對文件中的若干片斷進行復合簽名和加密;不但可以在OpenOffice.org及其衍生軟件內保證文件的安全性,而且還可以在其外保證安全性。


OpenOffice.org XML文件格式的內容實際上非常豐富,這裏只是比較概略的介紹。詳細內容讀者可以參閱《OpenOffice.org XML文件格式1.0技術參考手冊》(見43),和OpenOffice.org XML文件格式DTD(見44)。


基於XML的文件過濾器

XML組件

OpenOffice.org XML文件的輸入、輸出是通過與XML相關的組件來實現的。如圖2所示,從結構上看OpenOffice.org運行時程序內部依然是二進制文檔模型,這有利於提高效率。當文件從磁盤或其他文件系統讀入時,基於XML的過濾器會將其轉換成OpenOffice.org XML格式的數據流,再由實現ImportFilter服務的組件通過SAX方式導入內部的文檔模型。其中基於XML的過濾器和實現ImportFilter服務的組件一起封裝成文件輸入過濾器,基於XML的過濾器通過調用XDocumentHandler方法來生成XML數據流。






圖 2 OpenOffice.org 基於XML的文件輸入過濾器


如圖3所示,文件輸出過程與輸入過程基本上相反。實現XML ExportFilter服務的組件將OpenOffice.org XML的數據流傳遞給基於XML的過濾器,該過濾器處理XML SAX事件,並將數據以合適的格式存儲爲磁盤或其他文件系統上的文件。實現XML ExportFilter服務的組件和基於XML的過濾器一起封裝成文件輸出過濾器。





圖 3 OpenOffice.org 基於XML的文件輸出過濾器


類似的,如果可以把基於XML的輸入過濾器與輸出過濾器“串聯”起來,實際上就能夠實現脫離OpenOffice.org二進制文檔模型而獨立運行的文件轉換工具。圖4中就演示了這樣的一個從其他格式文件轉換到OpenOffice.org XML文件的工具。與圖2相比,區別就在於原先實現XML ImportFilter服務的模塊現在是XML Writer組件。如此以來,僅僅實現一個基於XML的輸入過濾器我們就能夠實現一個獨立的文件轉換工具了。






圖 4 OpenOffice.org XML文件獨立轉換工具


實際上現在OpenOffice.org社區裏已經出現了許多與其他文件格式相互轉換的獨立工具,例如Writer與LaTex的轉換(見46)、WordPerfect與Writer間的轉換(見47)、OpenOffice.org與OpenSHORE(見48)文件之間的轉換等。


OpenOffice.org還有一個XMerge(見49)過濾器項目,這是爲了實現與Palm、PocketPC和Nokian等手持設備上的嵌入式辦公軟件(比如Palm中的AportisDoc和MiniCalc、Pocket Pc中的Pocket Word和Pocket Excel)進行通訊和同步的工具。XMerge採用Java實現,能夠導入並將手持設備上相對簡單的文件合併進OpenOffice.org XML文件中來,這對於提高移動用戶的工作效率是很有幫助的。


基於XSLT的文件過濾器

XMerge項目具有優秀的可擴展性,它能夠利用Java來提供對基於XSLT的文件過濾器50的支持,這就爲OpenOffice.org支持第三方和客戶化的XML文件格式提供了廣闊的空間。






圖 5 OpenOffice.org XML文件流處理


圖5是將圖2中的OpenOffice.org基於XML的文件輸入過濾器進一步分解的流處理過程。該輸入過濾器被進一步分解成XML解析器和XSLT處理器兩部分。存儲於磁盤或其他文件系統上的客戶化XML文件,經過實現XDocumentHandler接口的XML解析器解析後,進入XML邏輯轉換單元。在此,客戶化XML數據流被XSLT處理器轉換爲OpenOffice.org XML數據流。該XSLT處理器由於也實現了XDocumentHandler接口,所以可以被實現了XML ImportFilter服務的組件通過SAX方式導入OpenOffice.org內部文檔模型。基於XSLT的文件輸出過濾器的流程與輸入基本相反。

在這個文件流處理過程中,基本上只要實現客戶化XML文件與OpenOffice.org XML文件間的轉換邏輯,也就是XSLT腳本,並設定與文件和過濾器類型相關的配置信息就能增加一種客戶化XML文件的支持。

OpenOffice.org軟件內已經加入了好幾種這樣基於XSLT的文件過濾器,比如支持DocBook、XHTML、Microsoft Word/Excel 2003 XML格式的過濾器。OpenOffice.org社區內也出現了一些對獨立XML文件格式的支持,例如HTML/WML(見51)和TEI XML文件。而實際上在團體用戶的工作流中,很多已經制定好的或者正在制定的行業XML文件格式規範都可以通過這種方式使OpenOffice.org提供對它們的支持。比如XBRL、UBL、Open eBook、NewsML、RIXML、中文辦公軟件文件(UOF)、中國專利電子申請文件(SIPO XML)等等,OpenOffice.org都可以作爲它們的優秀的著作工具。對行業XML文件格式規範的支持能力,再輔以功能強大的SDK,可以說OpenOffice.org在這些行業的工作流和內容管理系統環境中具有廣闊的應用前景。現在已經有了一些這方面的解決方案和成功案例。

OASIS Open Office

結構化信息標準促進組織(OASIS)是從早期的SGML Open組織發展而來,它是爲了推動開發、統一和採用電子商務標準而建立的全球性非盈利聯盟。OASIS的技術委員會主要針對的領域包括網絡服務、電子出版、水平電子商務架構、安全、公共領域、垂直工業應用等等。爲了促進產業共識並聯合各方努力,OASIS爲技術委員會特別設計了簡單、開放的流程。


OASIS開放辦公XML格式技術委員會(見52)成立於2002年11月,目標就是爲了建立一個開放的、基於XML的辦公軟件文件格式規範,該規範以OpenOffice.org XML文件格式規範爲基礎着手製定。現在這個技術委員會的成員包括辦公軟件提供者Sun、IBM、Corel和KOffice(見53),企業出版和內容管理提供商Arbortext(見54)、SpeedLegal(見55)、Stellent(見56)、Blast Radius(見57)等,IT諮詢公司CSW集團(見58)、Propylon(見59)、ISOGEN(見60)、Toolsmiths(見61)等,以及波音公司和澳大利亞國家檔案館(見62)等企業和用戶組織。在經過了一年多的討論之後,OASIS Open Office XML格式1.0的委員會草案採用RELAX-NG63和W3C XML Schema於2004年3月公佈,面向全世界徵集意見。這個草案雖然從總體結構上與OpenOffice.org XML文件格式差別不大,但是也進行了一些更改和提高。爲了保持規範的獨立性,它還採用了全新的XML命名空間定義。


OASIS開放辦公XML格式技術委員會從成立之初就受到了世界各地的廣泛關注和稱讚,不斷地獲得了更多的支持。KOffice組織於2003年8月宣佈會將本地文件格式遷移到OASIS Open Office XML文件格式上來,並於該技術委員會草案公佈後的第二個月就提供了對該文件格式的初步支持。未來發布的OpenOffice.org 2.0也將會將OASIS格式做爲本地文件格式。GNOME Office暫時還沒有參加這個技術委員會,但是他們表示會根據用戶的需要來提供對該文件格式的支持。與此同時,有用戶通過公開信64的形式呼籲Corel也將OASIS Open Office XML格式作爲WordPerfect的本地文件格式。



通過本文,相信讀者可以對OpenOffice.org XML文件格式規範本身,及其由來、現狀和未來的發展方向有了一個初步的瞭解。OpenOffice.org XML是迄今爲止功能最完善、開放性、標準化程度最高的可擴展的辦公軟件文件格式,並且還將繼續向開放、可擴展和標準化的方向前進。瞭解了OpenOffice.org技術架構和XML文件格式規範,就具有了一定的進行OpenOffice.org開發和應用的技術基礎。


然而對於開放源碼社區內的OpenOffice.org來講,擁有技術基礎只是必要條件。爲了能夠更通暢地同開源社區的成員交流,更快捷方便地獲取最準確的技術資料,能夠爲OpenOffice.org開源社區做出更大的貢獻,同時也爲開發者自身的技術工作創造更廣闊的舞臺,瞭解OpenOffice.org開源社區的組織結構、行爲規範、和文化風格,及其與其他若干開源社區的聯繫與協作方式,也是很有必要的。


總之,優秀的軟件只能從優秀的軟件開發實踐中來,優秀的軟件開發者也只能從不斷的軟件開發實踐過程中鍛鍊而不斷提高。希望國內的軟件開發者能夠積極主動地參與國際開放源碼社區的建設,提高自己,貢獻社會。


附錄:


1工作流管理聯盟,http://www.wfmc.org/
2OASIS電子政務技術委員會,http://www.oasis-open.org/committees/egov/
3OASIS法律XML技術委員會,http://www.legalxml.org/
4OASIS稅務XML技術委員會,http://www.oasis-open.org/committees/tax/
5世界專利組織的XML專利文件格式標準,http://www.wipo.int/pct-safe/epct/xml_world_standard.htm
6會議論文XML,http://www.gca.org/
7DocBook,http://www.docbook.org/
8W3C技術規範的文件規範,http://www.w3.org/2002/xmlspec/
9Open eBook論壇,http://www.openebook.org/
10盲人書籍聯盟,http://www.daisy.org/
11國際新聞通信理事會,http://www.iptc.org/
12投資與金融研究信息XML,http://www.rixml.org/
13文字編碼促進會聯盟,http://www.tei-c.org/
14人力資源XML聯盟,http://www.hr-xml.org/
15商業報表XML,http://www.xbrl.org/
16Health Level 7,http://www.hl7.org/
17國際保險業合作研發協會,http://www.acord.org/
18零售技術標準協會,http://www.nrf-arts.org/
19SWIFT金融機構交流協會,http://www.swift.com/
20OASIS通用商務語言技術委員會,http://www.oasis-open.org/committees/ubl/
21中文辦公軟件文件格式XML標準研究,http://www.ec.org.cn/2004-05/09/content_1458956.htm
22基於XML的電子公文格式規範,http://www.egs.org.cn/upload/WG1.pdf
23中國電子申請類專利文件DTD(試行),http://www.sipo.gov.cn/sipo/ztxx/zldzsqxt/t20040408_27707.htm
24OpenOffice.org XML項目,http://xml.openoffice.org/
25OASIS Open Office XML Format TC,http://www.oasis-open.org/committees/office/
26OpenOffice.org XML文件打包,http://xml.openoffice.org/package.html
27W3C MathML規範,http://www.w3.org/Math/
28Dublin Core元數據促進會,http://dublincore.org/
29W3C SVG規範,http://www.w3.org/Graphics/SVG/
30W3C XSL規範,http://www.w3.org/TR/xsl/
31W3C XSLT規範,http://www.w3.org/TR/xslt/
32W3C XForms規範,http://www.w3.org/MarkUp/Forms/
33維基百科對“擁抱-擴展-消滅”的註解,http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish
34互聯網上的日期時間,http://www.hermetic.ch/cal_stud/newman.htm
35語言名稱表示國際標準,http://www.oasis-open.org/cover/iso639a.html
36國家地區名稱表示國際標準,http://www.oasis-open.org/cover/country3166.html
37SHA1算法,http://www.itl.nist.gov/fipspubs/fip180-1.htm
38RFC2898,http://www.ietf.org/rfc/rfc2898.txt
39Blowfish算法論文,http://www.schneier.com/paper-blowfish-fse.html
40W3C XML簽名工作組,http://www.w3.org/Signature/
41W3C XML加密工作組,http://www.w3.org/Encryption/
42OpenOffice.org XML數字簽名和加密規範,http://specs.openoffice.org/appwide/security/Electronic_Signatures_and_Security.sxw
43OpenOffice.org XML文件格式1.0技術參考手冊,http://xml.openoffice.org/xml_specification.pdf
44OpenOffice.org XML文件格式DTD,http://xml.openoffice.org/source/browse/xml/xmloff/dtd/
45基於OpenOffice.org XML文件格式的過濾器,http://xml.openoffice.org/filter/
46Writer2LaTex項目,http://www.hj-gym.dk/~hj/writer2latex
47libwpd項目,http://libwpd.sourceforge.net/
48OpenSHORE項目,http://sourceforge.net/projects/openshore/
49OpenOffice.org XMerge項目,http://xml.openoffice.org/xmerge/
50OpenOffice.org XSLT文件過濾器規範,http://ui.openoffice.org/proposals/XMLFilterSpec.sxw
51OpenOffice.org sx2ml項目,http://xml.openoffice.org/sx2ml/
52OASIS Open Office XML格式技術委員會,http://www.oasis-open.org/committees/office/
53KOffice,http://www.koffice.org/
54Arbortext,http://www.arbortext.com/
55SpeedLegal,http://www.speedlegal.com/
56Stellent,http://www.stellent.com/
57Blast Radius,http://www.blastradius.com/
58CSW集團,http://www.csw.co.uk/
59Propylon,http://www.propylon.com/
60ISOGEN,http://www.isogen.com/
61Toolsmiths,http://www.toolsmiths.se/
62澳大利亞國家檔案館,http://www.naa.gov.au/
63RELAX-NG規範,http://www.relaxng.org/
64給Corel的一封公開信,http://software.newsforge.com/software/04/06/21/1547230.shtml
65創作共用協議的完整法律文本,http://www.creativecommons.cn/licenses/by-nd-nc/1.0/legalcode
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章