唐 燕,田英愛,李 寧,劉旭紅
(1.網(wǎng)絡(luò)文化與數(shù)字傳播北京市重點實驗室,北京100101;2.北京信息科技大學(xué)計算機(jī)學(xué)院,北京100101)
在信息化建設(shè)發(fā)展的過程中,作為信息主要載體的文檔,成為我們工作生活中不可或缺的一部分,其中對基于XML格式的流式辦公文檔的應(yīng)用最為廣泛[1]。目前世界主流的流式辦公文檔格式主要有3種:標(biāo)準(zhǔn)為ISO/IEC 26300:2006的開放文檔格式(open document format,ODF)[2]、標(biāo)準(zhǔn)為ISO/IEC 29500:2008的OOXML(office open XML)[3]以及標(biāo)準(zhǔn)為GB/T20916-2007的標(biāo)文通(uniform office format,UOF)[4]。這3種流式文檔格式都基于XML,相應(yīng)的處理技術(shù)也由原來的VBA、宏等方式逐漸過渡到利用XML相關(guān)技術(shù)進(jìn)行處理。
在早期,用戶對流式文檔的操作,主要基于辦公文檔處理軟件,并可以使用VBA、宏等方式擴(kuò)展對辦公文檔的處理。帶來的問題是,傳統(tǒng)的方式效率低,速度慢,所能處理的文檔格式單一,因其過分依賴辦公軟件產(chǎn)品,使之對于不同格式的流式文檔而言,無法通過同一個辦公軟件實現(xiàn)操作互通,給用戶帶來不便。
流式辦公文檔采用基于XML的格式之后,對XML文檔的各種訪問技術(shù)也被用于對流式辦公文檔的處理。針對基于XML格式的文檔,出現(xiàn)了很多XML數(shù)據(jù)訪問技術(shù),如:XPath、XSLT、DOM和SAX、XQuery、LINQ、相應(yīng)格式的API/SDK、UOML、ODQ等。
本文針對流式文檔處理的需求,對XQuery、DOM、相應(yīng)格式的API/SDK、ODQ這4種流式文檔處理技術(shù)進(jìn)行了較細(xì)致的研究,并從基本查詢功能、處理流程、格式無關(guān)性、查詢粒度等多方面進(jìn)行了分析比較。
隨著對流式辦公文檔應(yīng)用領(lǐng)域的不斷擴(kuò)展,對其訪問與操作的需求也呈現(xiàn)了多樣化的趨勢,具體如下:
(1)格式無關(guān)性需求。由于目前存在的流式辦公文檔格式不統(tǒng)一,對文檔內(nèi)容的訪問與操作都要依賴于支持相應(yīng)格式的辦公軟件產(chǎn)品,無法實現(xiàn)離線文檔操作。因此需要有一種統(tǒng)一的方式,能夠?qū)Ω鞣N格式文檔進(jìn)行相應(yīng)的訪問與操作,以屏蔽文檔底層存在的格式差異,實現(xiàn)文檔格式的互操作;
(2)文檔訪問查詢粒度適中性需求。對于流式辦公文檔而言,用戶常常希望能夠以段落、列表、表格、圖片等基本元素,即文檔的功能點[5]進(jìn)行訪問與操作,而目前對于流式辦公文檔的訪問操作,要么是利用文檔中提供的元數(shù)據(jù)對整個文檔實現(xiàn)獲取,粒度較粗糙,無法很好地從文檔真實的內(nèi)容中準(zhǔn)確獲得數(shù)據(jù),很多流式文檔的數(shù)據(jù)資源無法得到有效的共享和利用;要么就是利用XML的相關(guān)技術(shù),訪問文檔的結(jié)構(gòu)粒度過于細(xì)致,效率不高的同時,也不利于流式文檔上下文環(huán)境內(nèi)容理解。因此,流式辦公文檔訪問查詢粒度的適中性,也成為流式文檔得以進(jìn)一步應(yīng)用的阻礙;
(3)文檔操作的簡便實用性需求。利用XML技術(shù)對流式文檔進(jìn)行訪問,無論是專業(yè)開發(fā)人員還是普通用戶,都需要學(xué)習(xí)復(fù)雜的語言及編程思想,編寫繁瑣的代碼,并且,對文檔邏輯結(jié)構(gòu)要有一定的了解,訪問方式不夠簡單。此時,迫切需要一種簡便實用的流式文檔訪問技術(shù)。
訪問流式辦公文檔的處理需求的增加,使得相應(yīng)的處理技術(shù)變得非常關(guān)鍵。這里給出XML數(shù)據(jù)訪問技術(shù)的簡要介紹:
(1)XPath。W3C的XPath主要是對XML文檔底層元素和屬性等節(jié)點直接進(jìn)行操作的技術(shù),它是直接針對XML的樹形結(jié)構(gòu)的路徑表達(dá)式導(dǎo)航來定位XML文檔中的各個節(jié)點。表達(dá)直觀,但表達(dá)式構(gòu)造復(fù)雜容易出錯,如果不借助其它工具,則需要手工編寫完成,耗時耗力[6]。
(2)XSLT。XSLT是以XPath為基礎(chǔ)發(fā)展起來的,是利用XPath獲取所需節(jié)點,并進(jìn)行相應(yīng)處理,但表達(dá)能力有所限制,不夠靈活。
(3)DOM和SAX。DOM技術(shù)是利用樹型結(jié)構(gòu)來對XML文檔中的各個元素(節(jié)點)進(jìn)行處理,使對XML的文檔處理更為靈活,但DOM處理需一次將整個XML文檔載入內(nèi)存,尤其是對于規(guī)模較大的XML文檔,其處理速度較慢[7];為避免DOM加載慢的問題,SAX技術(shù)被提出來,利用SAX處理時,不是一次性把整個文件加載到內(nèi)存中,而是對XML文件按其對應(yīng)節(jié)點的訪問次序,將文件的一部分加載入內(nèi)存[8],相比DOM處理速度大大提升。
(4)XQuery技術(shù)。XQuery的查詢描述能力較強(qiáng),相比其它訪問方式來說,可支持多文檔聯(lián)合查詢[9],但語言過于復(fù)雜,普通用戶不易完全掌握。
(5)LINQ技術(shù)。隨著對文檔訪問技術(shù)的簡化需求增加,微軟在Visual Studio 2008中引入了LINQ,其關(guān)鍵技術(shù)包括LINQ to XML,該技術(shù)提供了一套比DOM更輕量的API,相比使用以往的操作方法,使得處理XML更為容易[10]。
(6)相應(yīng)格式的API/SDK。目前主流的流式辦公文檔格式ODF,OOXML以及UOF,都提供了相應(yīng)的API或SDK,那么,利用API或SDK來對流式文檔的訪問就可以直接針對文檔的功能點進(jìn)行直接獲取并進(jìn)行各種操作,便于實現(xiàn)對文檔的進(jìn)一步應(yīng)用或二次開發(fā)。
(7)UOML。UOML是OASIS的正式標(biāo)準(zhǔn),是電子文件領(lǐng)域針對基于XML的版式文檔的接口標(biāo)準(zhǔn),它定義了一整套非結(jié)構(gòu)化文檔的操作規(guī)范[11],可以很方便地對版式文檔進(jìn)行訪問與操作,屏蔽底層細(xì)節(jié)問題,能夠?qū)崿F(xiàn)不同格式文檔的互相讀寫。
(8)ODQ。ODQ是一種專門針對流式辦公文檔的訪問技術(shù)[12],它從用戶使用需求出發(fā),能夠脫離辦公軟件,利用較為通俗的語句,對不同格式的文檔直接獲取其局部內(nèi)容并進(jìn)行相應(yīng)的操作,方便用戶使用;同時對開發(fā)人員來說,能夠屏蔽底層的操作細(xì)節(jié),使之更專注于上層應(yīng)用開發(fā)。
目前,流式辦公文檔多采用文件打包形式,例如ODF、OOXML以及UOF都支持zip打包結(jié)構(gòu),因此對流式文檔進(jìn)行訪問查詢時,首先必須對其進(jìn)行解壓,生成多個XML文件,此外,由于流式辦公文檔中除了包含呈現(xiàn)給我們的具體邏輯內(nèi)容(文字、表格、圖片等)外,還有諸多的顯現(xiàn)式樣信息和頁面版式信息,這些信息都分散在流式文檔解壓后的各個XML文件中,在對流式文檔訪問處理時,就必須先識別即將訪問的信息在流式文檔中的哪個XML文件中,這就要求處理人員具有一定的專業(yè)知識。
本節(jié)以XQuery、DOM、相應(yīng)格式的API/SDK這3種對流式辦公文檔的主流查詢方法為例,分析各自查詢的實現(xiàn)機(jī)制以及在訪問流式文檔方面的不足之處。
DOM是跨平臺、與語言無關(guān)的,訪問XML的標(biāo)準(zhǔn)接口。在利用DOM處理XML文檔時,文檔模型以樹型的數(shù)據(jù)結(jié)構(gòu)映射到內(nèi)存中,并將文檔中的元素、屬性等看作樹結(jié)構(gòu)的各個節(jié)點。那么,開發(fā)人員對文檔中各個對象的訪問操作,就可以通過DOM解析器中提供的相應(yīng)接口來實現(xiàn)動態(tài)訪問和更新XML文檔中的各個節(jié)點。DOM解析器在解析文檔的時候可以遍歷到樹的任意節(jié)點,還可以通過添加、刪除或更新樹中的節(jié)點把源文檔轉(zhuǎn)換為其它結(jié)構(gòu)的文檔[7],以實現(xiàn)對文檔中各個對象的操作。
當(dāng)利用DOM對流式文檔進(jìn)行訪問時,首先,需要將辦公文檔解壓并生成多個XML文件,必要時還需要將解壓后的多個XML文件進(jìn)行合并,生成一個較大的XML文件;其次,需要根據(jù)用戶的需求,由編程開發(fā)人員明確所要訪問的文檔對象在哪些具體XML文件或合成文件的哪些部分中,并且確定所要獲取的對象包括了XML文件中哪些具體的節(jié)點;第三,構(gòu)造DOM解析器,將確定的XML文件中的內(nèi)容分成獨立的元素、屬性和注釋等[13],裝入內(nèi)存;第四,實例化XML文件的XmlDocument類,在內(nèi)存中生成描述XML文件的類,同時生成包含所有節(jié)點的樹狀結(jié)構(gòu),通過調(diào)用DOM提供的各種接口,遍歷訪問結(jié)構(gòu)樹中的節(jié)點,讀取節(jié)點值并進(jìn)行相應(yīng)操作。DOM對流式文檔的查詢過程如圖1所示。
圖1 DOM查詢過程
通過以上對處理過程的分析并在編程實踐中發(fā)現(xiàn),利用DOM對流式辦公文檔訪問和處理時,存在一些問題,主要體現(xiàn)在以下幾個方面:
(1)在對流式辦公文檔的訪問處理時,用戶通常直接針對文檔的功能點進(jìn)行訪問處理,這些功能點不但包括了文檔的邏輯內(nèi)容,還包括修飾文檔邏輯內(nèi)容的式樣信息或頁面版式信息,這些信息會不規(guī)則地散布在文檔中的各個部分,那么對于文檔的某個具體功能點而言,其操作就不僅僅是XML文件的某個局部的節(jié)點信息,還可能需要處理和獲取多個文檔或文檔的多個部分。這就需要開發(fā)人員對文檔內(nèi)部結(jié)構(gòu)有深入的了解,并能夠識別具體需要訪問的內(nèi)容在哪個文件中或文件的哪個部分,不能以較簡單的方式直接訪問文檔。
(2)DOM方式中,每一次對普通XML文檔內(nèi)容的定位都是獲取或修改文檔中的節(jié)點,這些屬于細(xì)粒度的操作。對于操作流式文檔的用戶來說,大多需要的是針對文檔功能點的操作,如獲取文檔段落、圖形、表格、式樣信息等。文檔功能點在XML描述時,需要用多個元素和屬性進(jìn)行描述,若用DOM方式進(jìn)行訪問操作時,則需多次調(diào)用DOM的各種接口,給編程帶來復(fù)雜性。
(3)流式文檔中,若要使邏輯內(nèi)容和式樣內(nèi)容分離,文件結(jié)構(gòu)中必然會存在大量的引用關(guān)系。需要根據(jù)所要訪問的對象找到其關(guān)于式樣的引用標(biāo)識符,再通過標(biāo)識符定位到所需式樣,這時,可能需要重新遍歷,或者再去尋找其它XML文件,對于專業(yè)開發(fā)人員來說,需要編寫復(fù)雜的程序代碼以獲取所需信息。
還有一種與DOM類似的方法SAX,它不會一次性讀取全部文檔中的數(shù)據(jù),而是將所需部分讀入內(nèi)存[14],是一種快速讀寫XML數(shù)據(jù)的方式。SAX訪問方式盡管比DOM處理速度快,但仍然沒有辦法避免DOM在處理流式文檔時存在的缺點。
XQuery是基于一種XML結(jié)構(gòu)的表達(dá)式語言,其查詢被描述成簡單的或是嵌套的表達(dá)式。XQuery應(yīng)用XPath和FLWR表達(dá)式進(jìn)行查詢,建立在XPath規(guī)范之上[15],其核心是能夠通過XPath表達(dá)式獲取和操作文檔中的節(jié)點序列,這也正是訪問處理流式文檔功能點的本質(zhì)所在。這一點,XQuery比DOM方式更適合流式文檔查詢。在解析XML文檔時,用一段XQuery表達(dá)式,通過XQuery處理器進(jìn)行分析和計算,返回一個序列的值寫入到XML文件中作為查詢結(jié)果。
XQuery和DOM語言類似,對于一個流式文檔的查詢,都需要先將整個流式辦公文檔解壓生成多個XML文件,并且對所要獲取的數(shù)據(jù)是邏輯內(nèi)容文件還是式樣內(nèi)容文件進(jìn)行文檔結(jié)構(gòu)的識別。但是,對于編寫的用于訪問與操作的XQuery語句,需要單獨保存于后綴名為.xquery的文件中。其次,啟動XQuery處理器,以生成內(nèi)部可解釋代碼,通過程序調(diào)用外部.xquery文件,解析出其中包含的查詢條件、查詢對象、查詢結(jié)果格式;最后,執(zhí)行查詢語句并返回結(jié)果。一個基本的XQuery訪問流式文檔的處理過程如圖2所示。
圖2 XQuery查詢過程
XQuery方法訪問流式文檔,也有其明顯的不足之處:
(1)同樣地,隨著對通用XML文檔操作功能需求的增加,XQuery方式也顯示出訪問粒度過細(xì)的問題,與文檔功能點的訪問處理粒度不符;
(2)W3C對XQuery不斷進(jìn)行更新,從最初的支持XML數(shù)據(jù)更新功能到支持動態(tài)網(wǎng)頁開發(fā)和分布式軟件開發(fā),其功能正日益強(qiáng)大。但由于XQuery的嵌套和多關(guān)鍵字排序特性,使得其查詢處理的復(fù)雜度增加[16]。此外,如前文所述,和DOM方式中存在的引用問題一樣,專業(yè)開發(fā)人員需要編寫復(fù)雜的程序代碼;
(3)開發(fā)人員也是需要明確了解待查XML文檔的內(nèi)部結(jié)構(gòu),訪問方式不夠簡單化。
為了能更有針對性的對流式辦公文檔的各個功能點進(jìn)行提取,并以此進(jìn)行更多的二次開發(fā)和擴(kuò)展應(yīng)用,各大標(biāo)準(zhǔn)組織機(jī)構(gòu)和辦公軟件廠商都提供了對其相應(yīng)格式文檔功能點進(jìn)行訪問操作的API,如主流辦公文檔格式ODF、OOXML、UOF均設(shè)計了比較完善的應(yīng)用編程接口。API將對XML文件的操作進(jìn)行封裝,為辦公軟件用戶提供獨立的文檔操作功能,常用的是對文檔內(nèi)容的增、刪、改、查操作,還包括一些基本式樣的修改等操作,可以直接對辦公文檔的功能點進(jìn)行操作。對于大多數(shù)API方法來說,處理步驟如下:
(1)創(chuàng)建一個代表整個文檔的文檔對象;
(2)利用API中相應(yīng)的代表文檔功能點的類定義所要訪問的文檔功能點對象;
(3)通過(1)中創(chuàng)建的文檔對象調(diào)用API中提供的獲取段落集、列表集等函數(shù),返回代表指定文檔所要訪問的功能點對象的集合,用(2)中定義的對象接收這個集合;
(4)利用(3)中的對象獲取到所要訪問的功能點;
(5)取出功能點的值并返回結(jié)果。
API是直接面向流式文檔各個功能點而設(shè)計的接口,使文檔的應(yīng)用不再依賴具體的辦公軟件產(chǎn)品,用戶無需了解復(fù)雜的文檔底層結(jié)構(gòu)便可直接訪問流式文檔的各功能點,且訪問較高效、簡潔快速。此外,還方便了辦公文檔的在線處理以及文檔的協(xié)作處理,為文檔和其它應(yīng)用的集成奠定基礎(chǔ),比DOM和XQuery更適合流式辦公文檔的查詢處理。但是API方法仍表現(xiàn)出如下缺點:
(1)目前許多格式的API依賴于自身的產(chǎn)品。如ODF的API有其專門的UNO架構(gòu),OOXML的API則需要VBA/.NET和Windows環(huán)境,避免不了平臺和語言的相關(guān)性[1]。3種文檔格式的差異,導(dǎo)致相應(yīng)格式的API只能針對各自的格式文檔進(jìn)行訪問,格式的互操作問題存在障礙;
(2)雖然避免了對XML文檔內(nèi)部邏輯結(jié)構(gòu)的直接操作,但仍需要專業(yè)開發(fā)人員具備一定的編程能力,且針對不同格式的文檔訪問需要了解不同的API或相應(yīng)格式的SDK。
目前對流式辦公文檔格式互操作要求提高,對文檔功能點需要能夠直接獲取和操作,針對這類需求,本課題組在文獻(xiàn)[12]中提出了ODQ,它是一種主要針對流式辦公文檔的新型查詢語言,建立在三大主流辦公文檔格式對應(yīng)API之上,是一種更高層次的API,對不同格式的文檔可以直接獲取其局部內(nèi)容并進(jìn)行相應(yīng)的操作。目前,關(guān)于ODQ的需求分析、流式文檔模型的構(gòu)建、ODQ的形式化描述都已完成。
對于流式文檔的主要功能點,用該方法可以實現(xiàn)概念級別的查詢和操作,即類似元數(shù)據(jù)、段落、表格、圖片這類的訪問對象。不僅符合用戶的使用習(xí)慣,也方便開發(fā)人員對所需內(nèi)容數(shù)據(jù)的提取和進(jìn)一步操作。
本節(jié)中,將圍繞ODQ對其進(jìn)行查詢示例、架構(gòu)及處理過程的描述。
在ODQ設(shè)計中,定義了抽象的文檔模型,將文檔分為多個對象,對應(yīng)于不同的文檔功能點,對流式文檔功能點的訪問,都可看為是對這些對象及屬性的操作。ODQ基本語法主要包括操作命令、操作對象和關(guān)鍵字。操作命令包括查詢文檔內(nèi)容(GET)、刪除對象(DELETE)、插入對象(INSERT)、更新對象(UPDATE SET)、統(tǒng)計對象(COUNT)等,前4種命令作為基本操作命令,COUNT作為統(tǒng)計命令,區(qū)分出對流式文檔功能點的查詢、刪除、修改和統(tǒng)計操作;操作對象分為節(jié)(Section)、段落(Paragraph)、圖片(Picture)、列表(list)、表格(table)等可直接訪問的文檔功能點;操作命令和操作對象通過關(guān)鍵字WHERE、FROM、of、AS、ALL、with、after、before等聯(lián)系起來,并結(jié)合基本表達(dá)式運算符@、=、括號、&&、|等,共同構(gòu)成了基本的ODQ語法。基本命令表達(dá)如下所示:
(1)查詢獲取命令GET
GET[@屬性1,[@屬性2]…|式樣1,[式樣2]…of]對象[all|序號|范圍]
FROM Url/Document[of對象[all|序號|范圍]]…
[WHERE{@屬性1=值1,[@屬性2=值2…]|式樣1=值1,[式樣2=值2]…}];
(2)更新修改命令UPDATE SET
UPDATE{[對象[序號|all][[of對象]…]}
SET{@屬性1|式樣1}of對象[序號|范圍|all]AS{值1},
[{@屬性2|式樣2}of對象[序號|范圍|all]AS{值2}…]
[WHERE{@屬性1=值1,[@屬性2=值2…]|式樣1=值1,[式樣2=值2]…}];
(3)刪除對象命令DELETE
DELETE對象[序號]|[范圍]|[all]
FROM {對象[序號|all|范圍][of對象…]}
[WHERE{@屬性1=值1,[@屬性2=值2…]|式樣1=值1,[式樣2=值2]…}];
(4)插入對象命令I(lǐng)NSERT
INSERT{Text|Rich Text|對象}
BEFORE/AFTER對象[[序號]of對象…]
[WHERE{@屬性1=值1,[@屬性2=值2…]|式樣1=值1,[式樣2=值2]…}];
(5)統(tǒng)計計數(shù)命令COUNT
COUNT對象FROM對象[[序號]of對象…]
[WHERE{@屬性1=值1,[@屬性2=值2…]|式樣1=值1,[式樣2=值2]…}];
這里以查詢文字處理部分中的對象為例,簡要給出ODQ對辦公文檔的一般查詢。
(1)針對段落的操作
命令:GET Paragraph
FROM Section[1]of Document
WHERE FontSize=11;
功能:得到某個文檔第一節(jié)中所有字號為11的段落
命令:UPDATE Paragraph[1]
of Section[1]of Document
SET Text AS“first Paragraph”;
功能:將某個文檔中第一節(jié)下第一個段落內(nèi)容設(shè)置成純文本內(nèi)容“first Paragraph”
(2)針對圖片的操作
命令:GET Picture
FROM Paragraph[2]
of Section[1]of Document
WHERE@Pic Type=”jpg”
功能:從某個文檔的第一節(jié)的第二段中查詢所有格式為jpg的圖片
命令:INSERT d:\20130619.jpg
BEFORE Run[1]of Paragraph[1]
of Section[1]of Document
功能:在某個文檔的第一節(jié)的第一段的第一句之前插入圖片20130619.jpg
從上述查詢示例中,可以看出ODQ方式繞開文檔結(jié)構(gòu)的復(fù)雜性,用戶不必考慮流式辦公文檔內(nèi)容和式樣混排后的結(jié)構(gòu),在應(yīng)用層使用簡單的形式構(gòu)造查詢語句即可進(jìn)行處理,易于接受和使用。
ODQ的整個架構(gòu)分為解析器、抽象的文檔模型、轉(zhuǎn)換適配器3個主要部分。解析器對用戶發(fā)出的ODQ命令進(jìn)行語法和詞法分析;抽象的文檔模型綜合ODF、OOXML以及UOF三大主流辦公文檔的文檔模型,定義針對辦公文檔常用的操作對象及屬性;轉(zhuǎn)換適配器將辦公文檔中用戶想要訪問的對象及屬性與抽象的文檔模型進(jìn)行映射。ODQ的系統(tǒng)整體架構(gòu)如圖3所示。
圖3 ODQ系統(tǒng)整體架構(gòu)
通過ODQ架構(gòu)的介紹,對流式文檔的訪問與操作的處理步驟如下:
(1)解析器解析ODQ語句,識別出關(guān)鍵字GET、UPDATE、DELETE等以及要訪問的對象和屬性,以備之后到相應(yīng)功能的API映射;
(2)將段落、圖片和表格等對象和屬性映射到抽象文檔模型;
(3)適配器機(jī)制檢測目標(biāo)文檔格式,得到對應(yīng)格式的轉(zhuǎn)換適配器;
(4)相應(yīng)適配器將中間代碼轉(zhuǎn)換成目標(biāo)代碼;
(5)調(diào)用對應(yīng)格式的API,根據(jù)(2)中抽象文檔模型里的對象和屬性訪問文檔中的數(shù)據(jù)內(nèi)容;
(6)將獲取到的數(shù)據(jù)內(nèi)容經(jīng)轉(zhuǎn)換適配器映射到文檔模型中,再由解析器將得到的結(jié)果返回給用戶。
在ODQ的設(shè)計過程中,查詢語句不僅支持常見的本地辦公文檔訪問操作,而且考慮到了文檔遠(yuǎn)程網(wǎng)絡(luò)訪問應(yīng)用的需求;通過基于抽象文檔模型設(shè)計出的ODQ底層架構(gòu),開發(fā)人員可以繞開對復(fù)雜文檔內(nèi)部結(jié)構(gòu)的直接訪問。
上文中,對ODQ的形式語句進(jìn)行了介紹,并分析了架構(gòu)及處理過程,不難看出,使用ODQ對流式文檔進(jìn)行訪問,與前3種訪問方式進(jìn)行比較,其優(yōu)越性體現(xiàn)如下:
(1)針對流式文檔,屏蔽文檔格式和版本的差異,為用戶提供統(tǒng)一的訪問接口,達(dá)到了格式無關(guān)性;
(2)ODQ具有類似SQL的語法結(jié)構(gòu),符合用戶使用習(xí)慣,代碼簡潔,開發(fā)人員無需花費過多時間去學(xué)習(xí)復(fù)雜的查詢語言,只需發(fā)出“做什么”的命令,而不用考慮“怎么做”。為操作流式辦公文檔帶來了很大的方便。
(3)查詢粒度方面,與前3種訪問方式做比較,如表1所示。因為需要的是通用文檔操作功能,不是進(jìn)行細(xì)粒度的訪問,并不需要深入了解文檔內(nèi)部結(jié)構(gòu),在這方面,可以體現(xiàn)出ODQ和API的優(yōu)越性。
(4)將在基于B/S結(jié)構(gòu)的Web應(yīng)用中,ODQ封裝進(jìn)協(xié)議中,大部分內(nèi)容放在服務(wù)器端,對于客戶端來說,不會耗用很大內(nèi)存,可以較為快速地提取所需信息;
(5)在Web應(yīng)用方面,文獻(xiàn)[12]中對ODQ的返回值形式進(jìn)行了扁平化研究,可以將訪問結(jié)果以更容易的方式進(jìn)行網(wǎng)絡(luò)傳輸并解析。
綜合上述分析,這里給出4種流式文檔訪問方式在代碼精簡度、查詢粒度、對不同格式流式文檔間互操作能力支持以及操作簡便性的比較,見表1。
表1 4種訪問方式比較
針對流式辦公文檔的新需求,本文較為系統(tǒng)地分析了XQuery、DOM、相應(yīng)格式的API/SDK、ODQ這4種流式文檔處理技術(shù),從多方面進(jìn)行分析比較的結(jié)果可知:ODQ是一種有發(fā)展前景的文檔處理語言,將來可應(yīng)用于桌面或基于Web的辦公文檔系統(tǒng)中,用于對文檔進(jìn)行訪問與操作;對于Web應(yīng)用,還可以通過HTTP協(xié)議,封裝用戶的查詢請求和查詢結(jié)果;在多人協(xié)同文檔編輯方面,可方便地與某種宿主語言一起進(jìn)行文檔的二次開發(fā)、方便文檔協(xié)議的構(gòu)造;另外,在文檔管理和電子政務(wù)等領(lǐng)域,也可得到廣泛應(yīng)用。
未來本課題組將圍繞該查詢語言進(jìn)行與Web的結(jié)合,將ODQ封裝到協(xié)議中,使對ODQ的處理能夠擴(kuò)展到網(wǎng)絡(luò)以及其它應(yīng)用領(lǐng)域。此外,關(guān)于文檔的安全性也會做到重點考慮。
[1]TIAN Ying'ai,LI Ning,LIN Li,et al.Study and implementation of UOF 1.0 API specification[J].Journal of Beijing Information Science and Technology University,2011,26(2):30-35(in Chinese).[田英愛,李寧,林莉,等.“標(biāo)文通”1.0 API規(guī)范的研究與實現(xiàn)[J].北京信息科技大學(xué)學(xué)報,2011.26(2):30-35.]
[2]OASIS.ISO/IEC 26300-2006:Information technology--Open document format for office applications v1.0[S].2006.
[3]ISO/IEC 29500-2006:Information technology--Document description and processing languages--Office open XML file formates-Par1-4[S].2008
[4]Chinese Office Software Basic Standards Working Group.GB/T20916 22007:Chinese office document format specification for the national standard of the People's Republic of China[S].Beijing:Standards Press of China,2007(in Chinese).[中文辦公軟件基礎(chǔ)標(biāo)準(zhǔn)工作組.GB/T20916 22007:中華人民共和國國家標(biāo)準(zhǔn)中文辦公軟件文檔格式規(guī)范[S].北京:中國標(biāo)準(zhǔn)出版社,2007.]
[5]LI Ning,LIANG Qi,HOU Xia,et al.Interoperability measurement of documents[J].Journal of Beijing Information Science and Technology University,2011,26(2):6-12(in Chinese).[李寧,梁琦,侯霞,等.文檔互操作度量[J].北京信息科技大學(xué)學(xué)報,2011,26(2):6-12.]
[6]GONG Sha.XML-based database query system design[J].Coal Technology,2011,30(7):144-146(in Chinese).[龔莎.基于XML的數(shù)據(jù)庫查詢體系設(shè)計[J].煤炭技術(shù),2011,30(7):144-146.]
[7]LUO Wentian,HOU Xia.An overview of converters between XML-based main office document formats[J].Journal of Beijing Information Science and Technology University,2010,12(Z2):109-116(in Chinese).[羅文甜,侯霞.基于XML的主流辦公文檔格式間的轉(zhuǎn)換器研制情況概述[J].北京信息科技大學(xué)學(xué)報,2010,12(Z2):109-116.]
[8]LIU Yuxiao.Analysis and research of XML data analytical technique based on SAX[J].Modern Electronics Technique,2010,34(12):55-65(in Chinese).[劉雨瀟.基于SAX的XML數(shù)據(jù)解析技術(shù)分析研究[J].現(xiàn)代電子技術(shù),2010,34(12):55-65.]
[9]LI Xiaoqing,LIAO Husheng,ZHANG Xiaobo.Survey of XQuery implementation[J].Computer Science,2012,39(3):9-18(in Chinese).[李小青,廖湖聲,張曉博.XQuery實現(xiàn)技術(shù)研究綜述[J].計算機(jī)科學(xué),2012,39(3):9-18.]
[10]ZHANG Xuejun.Application of using LINQ to XML to operate XML document[J].Digital Technology &Application,2010,28(12):44(in Chinese).[張雪軍.使用LINQ to XML操作XML文檔[J].數(shù)字技術(shù)與應(yīng)用,2010,28(12):44.]
[11]WANG Donglin,JIANG Haifeng,ZHANG Changyou.UOML:An unstructured operation markup language[J].Information Technology and Information,2007,32(3):121-122(in Chinese).[王東臨,姜海峰,張常有.UOML:一種非結(jié)構(gòu)化操作標(biāo)記語言[J].信息技術(shù)與信息化,2007,32(3):121-122.]
[12]LING Feng,LIU Xuhong,TIAN Ying'ai,et al.Flatten de-sign of open document query[C]//The International Conference on Cyberspace Technology,2013(in Chinese).[凌峰,劉旭紅,田英愛,等.流式辦公文檔查詢語言O(shè)DQ的扁平化研究[C]//國際網(wǎng)電空間技術(shù)大會論文集,2013.]
[13]WEI Xiaojuan,RAN Jing,LI Aihua,et al.XML parse and application based on DOM[J].Computer Technology and Development,2007,17(4):86-88(in Chinese).[蔚曉娟,冉靜,李愛華,等.基于DOM的XML解析與應(yīng)用[J].計算機(jī)技術(shù)與發(fā)展,2007,17(4):86-88.]
[14]FAN Shuyi,LI Yan,MENG Chen.Use SAX and DOM together to parse XML document[J].Microcomputer Applications,2011,27(12):42-44(in Chinese).[范書義,李巖,孟晨.XML文件解析中SAX和DOM的結(jié)合應(yīng)用[J].微型電腦應(yīng)用,2011,27(12):42-44.]
[15]LU Hao.Research on XQuery query over XML update streams[D].Baotou:Inner Mongolia University of Science and Technology,2010:1-62(in Chinese).[路皓.XML更新流的XQuery查詢處理技術(shù)研究[D].包頭:內(nèi)蒙古科技大學(xué),2010:1-62.]
[16]WU Xiaoyong,ZHANG Yu,SUN Donghai.Structural join in XQuery processing on XML stream[J].Computer Engineering,2008,34(4):63-70(in Chinese).[吳曉勇,張昱,孫東海.XQuery在XML流上查詢的結(jié)構(gòu)化連接[J].計算機(jī)工程,2008,34(4):63-70.]