專利名稱:可擴展的文件格式的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng)與程序,特別地,涉及可以提供與應(yīng)用程序的以前、當(dāng)前及將來版本兼容的文件格式的系統(tǒng)和方法。
背景技術(shù):
計算機應(yīng)用程序一般被用于執(zhí)行許多計算機處理任務(wù)。應(yīng)用程序可以用以創(chuàng)建和更改存儲該應(yīng)用程序的特定數(shù)據(jù)項信息的數(shù)據(jù)文件。舉例來說,可以使用桌面出版類型的應(yīng)用程序來創(chuàng)建一個文檔。該文檔可以包含許多獨立的元素,如頭、文本、圖形、樣式、字體等。可以用該出版類型應(yīng)用程序來創(chuàng)建存儲該特定文檔的所有信息的數(shù)據(jù)文件。
每個在計算機系統(tǒng)上保存文件的應(yīng)用程序都必須判定保存數(shù)據(jù)的格式。有許多保存數(shù)據(jù)的方法,從保存數(shù)據(jù)的存儲器映象到以工業(yè)標(biāo)準(zhǔn)形式寫出數(shù)據(jù)都包括在其中。而且,計算機應(yīng)用程序被不斷地更新及改變,以提供可用的最新特性與技術(shù)。一般通過發(fā)行該應(yīng)用程序的更新版本來提供這些更新和改變給最終用戶。由該應(yīng)用程序的更新版本使用的文件格式需要與以前及將來的版本兼容。但是,該更新版本一般使用與以前版本不同的文件格式,因為在該更新版本中的新特性要求將新的數(shù)據(jù)寫入數(shù)據(jù)文件。在該應(yīng)用程序的兩個不同版本之間就可能產(chǎn)生問題,因為不同的文件格式會導(dǎo)致以前版本不能讀取該更新版本的文件。
“對象”(在此使用時,是指具有特征并且由應(yīng)用程序顯示的實體)是應(yīng)用程序的一部分,或者是由該程序所存儲/操作的數(shù)據(jù)的一部分。由應(yīng)用程序所顯示的對象的一個實例是包含在某個應(yīng)用程序的窗口中的文本框,在其中用戶可以輸入文本。該文本框的特征可以包括其顏色、文本的字體,以及文本的點尺寸。作為應(yīng)用程序的一部分的對象的一個實例是某個動物在存儲器中的表示,其特征可以包括它的顏色、腿的數(shù)量,以及它是否是食肉動物。這一存儲器中的表示可以實現(xiàn)成某個數(shù)據(jù)結(jié)構(gòu),其元素存儲這些特征。這樣的數(shù)據(jù)結(jié)構(gòu)的一個實例是C++類數(shù)據(jù)結(jié)構(gòu)。一個對象的特征可以被稱為該對象的屬性。對象的每個屬性一般都具有一個值。舉例來說,顏色屬性可能具有值“紅色”。
在圖1中例示了對象100的一個實例。對象100可以包含邊框102和文本104。對象100可以具有針對邊框102和文本104的六個屬性。邊框102可以具有邊框樣式和邊框尺寸屬性。文本104可以具有字體、文本尺寸、對齊方式和文本樣式屬性。邊框102和文本104的缺省值可以是邊框樣式為實心,邊框尺寸為4點,文本字體為Times New Roman,文本尺寸為20點,文本對齊方式為居左,而文本樣式為非斜體。
在應(yīng)用程序中,對象和屬性的缺省值可以在初始編程的時候設(shè)立。在程序運行時,這些缺省值可以被改變并存儲在數(shù)據(jù)文件中。舉例來說,在某個能顯示對象如矩形和三角形的畫圖程序中,用戶可以更改這些對象的屬性?;氐綀D1的例子,對象100的屬性可以被改變,使實心的邊框變成點劃線的邊框,而文本樣式變成斜體。程序的后續(xù)版本一般可以讀取每個對象的缺省值及變動。但是,當(dāng)創(chuàng)建程序的后續(xù)版本時,文件格式一般與以前版本的不同。因而,以前版本不能讀取來自后續(xù)版本的文件。使用前段中的上述例子,稍后的版本可以包括新的特性,如對象100的陰影。所添加的特性要求將新的數(shù)據(jù)寫入該程序的文件,從而改變其格式。以前版本不能讀取包含著新數(shù)據(jù)的稍后版本的文件,因為這些文件格式是不同的。
對以上所討論問題的一個傳統(tǒng)解決方式是限制更新版本的新特性,這樣文件格式就仍與以前版本兼容。但是,該解決方式可能使最好的產(chǎn)品不能發(fā)布給用戶,并且可能限制該程序的總體功能和性能。
對以上所討論問題的另一個傳統(tǒng)解決方式是創(chuàng)建將以前版本的舊文件轉(zhuǎn)換成與更新版本兼容的新文件的適配器程序。該適配器程序也可以將新文件轉(zhuǎn)換成與以前版本兼容的文件。但是,該解決方式可能對用戶不方便,并且可能要求大量的存儲器和處理時間來轉(zhuǎn)換這些文件。而且,該解決方式在由以前版本保存文件時可能使用戶丟失該程序的較新版本所需要的重要信息。
因此,在相關(guān)領(lǐng)域中需要可以提供與應(yīng)用程序的以前、當(dāng)前和稍后版本兼容的文件格式的改進的系統(tǒng)與方法求。在相關(guān)領(lǐng)域中還有對可以使新特性添加到應(yīng)用程序的將來版本中而仍保持與以前版本兼容的可擴展的文件格式的需求。
發(fā)明概要本發(fā)明總體上涉及提供可以與應(yīng)用程序的以前、當(dāng)前和將來版本兼容的可擴展文件格式的系統(tǒng)與方法。本發(fā)明集中于支持向應(yīng)用程序的將來版本中添加新特性而仍保持與以前和/或當(dāng)前版本的兼容性(無需修改)的可擴展文件格式。因此,本發(fā)明可以使軟件供應(yīng)商能夠提供與相同文件兼容的多個版本,而不限制可以添加到將來版本中的特性。
在某一示例性方面,本發(fā)明可以包括將文件版本水印包含在某個應(yīng)用程序的原始數(shù)據(jù)文件中。該文件版本水印可以是原始數(shù)據(jù)文件中能夠指示該原始數(shù)據(jù)文件的各個屬性的一個元素。舉例來說,在原始數(shù)據(jù)文件中可以提供高版本水印,來指示用以保存該文件的應(yīng)用程序的最高版本。在原始數(shù)據(jù)文件中可以提供最后版本水印,來指示用以保存該文件的應(yīng)用程序的最后版本。在原始數(shù)據(jù)文件中可以提供低版本水印,來指示用以保存該文件的應(yīng)用程序的最低版本。在原始數(shù)據(jù)文件中可以提供創(chuàng)建版本水印,來指示第一次創(chuàng)建該文件的應(yīng)用程序的版本。在原始數(shù)據(jù)文件中可以提供對象版本水印,來指示寫某特定對象的應(yīng)用程序的最高版本。每個文件版本水印都可以指示對該文件所作的更改、添加或刪除。
在另一示例性方面,本發(fā)明可以包括根據(jù)在一個或多個文件版本水印中提供的信息來確定如何載入或保存原始數(shù)據(jù)文件。在某一示例性方面,本發(fā)明可以確定在文件中的高版本水印是否表示比正在載入或保存該文件的應(yīng)用程序的當(dāng)前版本更新的版本。如果原始數(shù)據(jù)文件是由某個比當(dāng)前版本更新的應(yīng)用程序版本所保存,則高版本水印表示較新的版本。在這一情況下,本發(fā)明可以確定原始數(shù)據(jù)文件是否包含當(dāng)前版本所未知的信息。而后,這些未知信息可以被應(yīng)用程序的當(dāng)前版本忽略,但保持可由較新(后續(xù))的版本所用。
在另一示例性方面,本發(fā)明可以確定在文件中的高版本水印是否表示比正在載入或保存該文件的應(yīng)用程序的當(dāng)前版本更舊的版本。如果原始數(shù)據(jù)文件是由某個比當(dāng)前版本更舊的應(yīng)用程序版本所保存,則高版本水印表示較舊的版本。在這一情況下,本發(fā)明可以確定當(dāng)前版本是否包含基于原始數(shù)據(jù)文件中舊信息的新信息。而后,這些新信息可以根據(jù)舊信息來更新。而且,用戶可以由較舊(以前)、活動和較新(后續(xù))版本通過以這些較舊、活動和較新版本的格式存儲數(shù)據(jù)來保存這些新信息。
如本發(fā)明的另一示例性方面所述,應(yīng)用程序的存儲器中結(jié)構(gòu)可以與數(shù)據(jù)文件格式分開。因此,應(yīng)用程序的將來版本可以包括許多新的特性,而無需改變數(shù)據(jù)文件格式。舉例來說,結(jié)構(gòu)可以在存儲器中移來移去,以便對某種處理器類型更為高效,而不會因改變數(shù)據(jù)文件格式而與不同的版本不兼容。
本發(fā)明還可以使載入與保存對應(yīng)于某應(yīng)用程序不同版本的數(shù)據(jù)文件所需要的存儲器和處理最小化。文件版本水印可以標(biāo)識在某個數(shù)據(jù)文件中對應(yīng)于某不同版本的特定信息。因此,任何處理或轉(zhuǎn)換只要在所標(biāo)識的信息上進行。
本發(fā)明的另一示例性方面包括將對象屬性列表(“OPL”)或?qū)ο髮傩粤斜頂?shù)組(“OPL數(shù)組”)作為數(shù)據(jù)文件結(jié)構(gòu)。通過將未知數(shù)據(jù)傳播或返回給已保存的數(shù)據(jù)文件,OPL或OPL數(shù)組可以實現(xiàn)對來自將來版本的未知屬性數(shù)據(jù)進行的“來回”。OPL或OPL數(shù)組可以載入存儲器。其所有為應(yīng)用程序的某特定版本所知的屬性可以按需要覆蓋。余下的屬性(即那些對該特定版本為未知的屬性)是由某較新版本所創(chuàng)建的,可以保留在該文件中而不觸及。對于保存在數(shù)據(jù)文件中的每個存儲器結(jié)構(gòu),都可以有用于保存該結(jié)構(gòu)的相關(guān)OPL或OPL數(shù)組。
通過以下的較佳實施例的詳細(xì)描述,并一起閱讀和參照附圖,本發(fā)明的這些及其它方面、對象和特性將變得顯明。
圖1是例示由應(yīng)用程序所使用的對象的框圖;圖2是例示適于實現(xiàn)本發(fā)明的示例性實施例的示例性計算機的框圖;圖3是例示傳統(tǒng)OPL的特征的框圖;圖4是例示如本發(fā)明的示例性實施例所述的OPL數(shù)組的特征的框圖;圖5是描述用于如本發(fā)明的示例性實施例所述載入原始數(shù)據(jù)文件的方法的流程圖;
圖6是描述用于如本發(fā)明的示例性實施例所述保存原始數(shù)據(jù)文件的方法的流程圖;圖7是描述用于如本發(fā)明所述載入和保存原始數(shù)據(jù)文件的方法的流程圖,其中當(dāng)前版本具有并不包括在以前版本中的附加對象屬性;圖8是描述用于如本發(fā)明所述載入和保存原始數(shù)據(jù)文件的方法的流程圖,其中當(dāng)前版本刪除了在以前版本中使用的對象屬性;以及圖9是描述用于如本發(fā)明所述載入和保存原始數(shù)據(jù)文件的方法的流程圖,其中當(dāng)前版本修改了以前版本的舊對象屬性。
發(fā)明詳細(xì)描述本發(fā)明將參照附圖來詳細(xì)描述,在這些附圖中同樣的索引數(shù)字代表同樣的元素。
本發(fā)明可以提供與應(yīng)用程序的以前、當(dāng)前以及將來版本兼容的可擴展的文件格式。本發(fā)明可以包括將文件版本水印包含在某個應(yīng)用程序的原始數(shù)據(jù)文件中。文件版本水印可以指示原始數(shù)據(jù)文件的多種屬性。文件版本水印可以包括高版本水印、最后版本水印、低版本水印、創(chuàng)建版本水印,以及對象版本水印。每個文件版本水印可以指示對該文件所作的改變、添加或刪除。每個文件版本水印還可以針對該文件中的特定信息而提供(如針對該文件中的某個特定對象),以指示修改了該特定信息的版本。本發(fā)明可以使用文件版本水印來判定該文件或文件中的特定信息是否與應(yīng)用程序的以前、當(dāng)前或?qū)戆姹鞠鄬?yīng)。因而,本發(fā)明就可以根據(jù)判定的結(jié)果來載入或保存原始數(shù)據(jù)文件。
圖2例示了本發(fā)明被設(shè)計于其中運行的某種示例性計算環(huán)境的多個方面。那些相關(guān)領(lǐng)域的行家將理解圖2及相關(guān)的討論是意圖提供所期望計算機硬件及程序模塊的一個簡要、總體性的描述,而附加的信息很易于在適當(dāng)?shù)木幊淌謨浴⒂脩糁笇?dǎo)以及類似出版物中找到。
圖2例示了一臺適于支持本發(fā)明的較佳實施例的運行的傳統(tǒng)個人計算機10。如圖2中所示,個人計算機10運行在與遠(yuǎn)程服務(wù)器11具有邏輯連接的聯(lián)網(wǎng)環(huán)境中。個人計算機10與遠(yuǎn)程服務(wù)器11之間的邏輯連接由局域網(wǎng)12和廣域網(wǎng)13來表示。那些相關(guān)領(lǐng)域中的普通水平的人將認(rèn)識到在這一客戶機、服務(wù)器配置中,遠(yuǎn)程服務(wù)器11可以如文件服務(wù)器或計算機服務(wù)器那樣起作用。
個人計算機10包括處理單元14,如由加利福尼亞州Santa Clara的IntelCorporation公司制造的“PENTIUM”微處理器。個人計算機10還包括系統(tǒng)存儲器15,包括只讀存儲器(ROM)16和隨機訪問存儲器(RAM)17,系統(tǒng)存儲器由系統(tǒng)總線18連接到處理器14。首選的計算機10使用存儲在ROM16中的BIOS19。那些相關(guān)領(lǐng)域的行家將認(rèn)識到BIOS19是幫助在個人計算機10內(nèi)的元素間傳輸信息的基本例程。那些相關(guān)領(lǐng)域的行家還將理解本發(fā)明可以實現(xiàn)在具有其它架構(gòu)的計算機上,如不使用BIOS的計算機,以及那些使用其它微處理器的計算機。
在個人計算機10內(nèi),本地硬盤驅(qū)動器20經(jīng)由硬盤驅(qū)動器接口21連接到系統(tǒng)總線18。用以讀寫軟盤23的軟盤驅(qū)動器22經(jīng)由軟盤驅(qū)動器接口24連接到系統(tǒng)總線18。用以讀寫CD-ROM或DVD盤26的CD-ROM或DVD驅(qū)動器25經(jīng)由一個CD-ROM或DVD驅(qū)動器接口27連接到系統(tǒng)總線18。用戶通過使用輸入設(shè)備將命令和信息輸入個人計算機10,如鍵盤28和/或定點設(shè)備如經(jīng)由串口接口30連接到系統(tǒng)總線18的鼠標(biāo)29。其它類型的定點設(shè)備(在圖2中未示出)包括軌跡墊、軌跡球、觸筆、頭追蹤器、數(shù)據(jù)手套,以及其它適用于在計算機監(jiān)視器31上定位光標(biāo)的設(shè)備。監(jiān)視器31或其它類型的顯示設(shè)備經(jīng)由視頻適配器32連接到系統(tǒng)總線18。
在這一聯(lián)網(wǎng)環(huán)境中的遠(yuǎn)程服務(wù)器11與遠(yuǎn)程存儲設(shè)備33相連。遠(yuǎn)程存儲設(shè)備33一般是某種大容量設(shè)備,如硬盤驅(qū)動器、CD-ROM或DVD驅(qū)動器、光磁驅(qū)動器等等。那些相關(guān)領(lǐng)域的行家將理解程序模塊(如應(yīng)用程序模塊37C和37D)是經(jīng)由計算機可讀取媒體提供給遠(yuǎn)程服務(wù)器11的。個人計算機10通過用以在局域網(wǎng)12上通訊的網(wǎng)絡(luò)接口34來連接到遠(yuǎn)程服務(wù)器11。
在某一可選實施例中,個人計算機10還通過用以在廣域網(wǎng)13(如互聯(lián)網(wǎng))上通訊的調(diào)制解調(diào)器35來連接到遠(yuǎn)程服務(wù)器11。調(diào)制解調(diào)器35經(jīng)由串口接口30連接到系統(tǒng)總線18。調(diào)制解調(diào)器35也可以連接到公共交換電話網(wǎng)(PSTN)或有線電視(CATV)網(wǎng)。盡管在圖2中是例示成在個人計算機10的外部,但那些相關(guān)領(lǐng)域的普通水平的人可以認(rèn)識到調(diào)制解調(diào)器35也可以是在個人計算機10內(nèi)部的,這樣就直接經(jīng)由系統(tǒng)總線18來通訊。重要的是要注意,并不需要經(jīng)由局域網(wǎng)12和廣域網(wǎng)13兩者到遠(yuǎn)程服務(wù)器11的連接,而只是例示提供個人計算機10和遠(yuǎn)程服務(wù)器11之間通訊路徑的可選的方法。
盡管未示出個人計算機10的其它內(nèi)部部件,但那些相關(guān)領(lǐng)域的普通水平的人將理解這樣的部件以及它們之間的互連都是眾所周知的。因此,關(guān)于個人計算機10內(nèi)部結(jié)構(gòu)的附加細(xì)節(jié)就不需要連同本發(fā)明一起披露。
那些相關(guān)領(lǐng)域的行家將理解,程序模塊(如操作系統(tǒng)36、應(yīng)用程序模塊37A、瀏覽器程序模塊37B、其它程序模塊37N)與數(shù)據(jù)是經(jīng)由計算機可讀取媒體而提供給個人計算機10的。在首選的計算機10中,計算機可讀取媒體包括本地或遠(yuǎn)程存儲設(shè)備,這些存儲設(shè)備可以包括本地硬盤驅(qū)動器20、軟盤驅(qū)動器23、CD-ROM或DVD驅(qū)動器26、RAM17、ROM16,以及遠(yuǎn)程存儲設(shè)備33。在首選的個人計算機10中,本地硬盤驅(qū)動器20用以存儲數(shù)據(jù)和程序。
程序模塊37N可以包含應(yīng)用程序,這些應(yīng)用程序可以具有如本發(fā)明的示例性實施例所述的可擴展文件格式的文件。第一個應(yīng)用程序可以管理一個對象,該對象又可以包含一個可擴展文件格式的對象屬性列表(OPL)。OPL可以存儲在系統(tǒng)存儲器16的連續(xù)的塊中。如下面將描述的那樣,第二個應(yīng)用程序可以訪問該對象的OPL,并可以用該OPL來執(zhí)行多種功能。
OPL是用于將數(shù)據(jù)保存到數(shù)據(jù)文件中的一種數(shù)據(jù)結(jié)構(gòu)。對OPL的更詳細(xì)的描述可以在美國專利編號5933842和5946696中找到。對那些專利的披露在此附錄,以作參考。
傳統(tǒng)的OPL提供某種用于數(shù)據(jù)文件的數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了以有利于與應(yīng)用程序的以前及將來版本兼容的某種公用格式來存儲信息。OPL的格式實現(xiàn)了跳過應(yīng)用程序不認(rèn)識的數(shù)據(jù)而使用應(yīng)用程序所認(rèn)識的數(shù)據(jù)。傳統(tǒng)的OPL會隨著新版本應(yīng)用程序中的新信息而增長,因為其會針對新的對象和屬性而動態(tài)擴展。
參照圖3,將描述某種傳統(tǒng)OPL300的特征。(關(guān)于相應(yīng)OPL的附加信息,請見美國專利編號5933842和5946696。)在本披露中所使用時,“對象”指具有特征,并能由某個應(yīng)用程序顯示或作為某個應(yīng)用程序的一部分的實體。由某個應(yīng)用程序所顯示的對象的一個實例是包含在某應(yīng)用程序窗口中的文本框,在其中用戶可以輸入文本。該文本框的特征可以包括其顏色、文本的字體,以及文本的點尺寸。作為應(yīng)用程序的一部分的對象的一個實例是某個動物在存儲器中的表現(xiàn),其特征可以包括它的顏色、腿的數(shù)量,以及它是否是食肉動物。這一存儲器中的表現(xiàn)可以實現(xiàn)成某個數(shù)據(jù)結(jié)構(gòu),其元素存儲這些特征。這樣的數(shù)據(jù)結(jié)構(gòu)的一個實例是C++類數(shù)據(jù)結(jié)構(gòu)。對象的特征可以被稱為該對象的屬性。對象的每個屬性一般都具有一個值。舉例來說,顏色屬性可能具有值“紅色”。
如在背景部分所討論的那樣,在圖1中例示了對象100的一個實例。對象100可以包含一個邊框102和文本104。對象100可以具有針對邊框102和文本104的六個屬性。邊框102可以具有邊框樣式和邊框尺寸屬性。文本104可以具有字體、文本尺寸、對齊方式和文本樣式屬性。邊框102和文本104的缺省值可以是邊框樣式為實心,邊框尺寸為4點,文本字體為Times NewRoman,文本尺寸為20點,文本對齊方式為居左,而文本樣式為非斜體。
由于OPL300使用某種標(biāo)準(zhǔn)格式,其可用以內(nèi)部存儲某個對象的屬性。舉例來說,OPL300可以包括一個對象屬性標(biāo)識(“opyid”)元素302、對象屬性類型元素304,以及對象屬性數(shù)值元素306。Opyid元素302可以包含與某特定屬性相關(guān)聯(lián)的數(shù)字標(biāo)識符。系統(tǒng)可以維護所有屬性對其opyid的映射,而該映射可以隨OPL變化。換句話說,每個OPL都可以定義oypid值所代表的屬性,而其它OPL可以對不同的屬性使用相同的opyid值。對象屬性類型元素304指某種數(shù)據(jù)類型,如短整型(2個字節(jié))、長整型(4個字節(jié))、Unicode字符串等。對象屬性數(shù)值元素306遵循所關(guān)聯(lián)的對象屬性類型元素304的適當(dāng)數(shù)據(jù)類型。如圖3中作為示例所示,opyid“1”代表短整型(2個字節(jié))的對象屬性類型元素304(系統(tǒng)認(rèn)為對應(yīng)某種“顏色”)和為0x00FF0000的對象屬性數(shù)值元素306(“紅色”的RGB(紅、綠、藍(lán))編碼)。當(dāng)指稱某特定屬性時,則使用opyid。舉例來說,如果需要OPL300中的邊框?qū)傩?,則由其opyid“2”來指稱它。OPL也可以將另一個OPL包含成一個屬性,實現(xiàn)創(chuàng)建更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
在16位的傳統(tǒng)OPL中,opyid元素302一般為11位。在這一配置中,OPL300由于該11位的制約而限于2048個數(shù)據(jù)項。在出版系統(tǒng)中,對象和屬性的數(shù)量可以輕易地超過2048個數(shù)據(jù)項。出版文檔可以具有多頁,每頁具有許多對象。每個對象可以具有許多與之相關(guān)聯(lián)的屬性。因此,在某些情況下就需要最大化OPL的容量。對于這點,本發(fā)明可以包括一種改進的OPL類型-OPL數(shù)組,具有幾乎無限的容量。OPL數(shù)組可以存儲大量的數(shù)據(jù),如文檔中的所有對象。OPL也仍然可以用以存儲較小數(shù)量的屬性。
參照圖4,將描述如本發(fā)明的某一示例性實施例所述的數(shù)據(jù)結(jié)構(gòu)400。數(shù)據(jù)結(jié)構(gòu)400可以包括根OPL402。根OPL402可以包括“最大”屬性402a、不變屬性402b,以及OPL數(shù)組屬性402c。在不必要時,最大屬性402a可以指示OPL數(shù)組屬性402c的大小,并可以提供在讀取數(shù)據(jù)結(jié)構(gòu)400時分配足夠的存儲器的便利。不變屬性402b可以定義數(shù)據(jù)項在OPL數(shù)組屬性402c中的數(shù)組索引保持不變的特性。換句話說,數(shù)據(jù)項在OPL數(shù)組屬性402c中的數(shù)字索引在該數(shù)據(jù)項的整個生命期中都不會改變。因此,新的數(shù)據(jù)項將只添加在當(dāng)前不用的某個索引處,而刪除一個數(shù)據(jù)項就造成一個空的索引位置。
OPL數(shù)組屬性402c可以引用OPL數(shù)組404。OPL數(shù)組404可以存儲在OPL屬性402c中,或分別存儲。OPL數(shù)組404可以包含屬性、其它OPL或其它OPL數(shù)組。如圖4中所示,OPL數(shù)組404可以包括子對象屬性列表(“subopl”)404a-404e,其中每個subopl 404a-404e都可以是屬性、OPL或另一個OPL數(shù)組。每個subopl 404a-404e都可以引用數(shù)組元素406。每個數(shù)組元素406都可以是屬性、OPL或另一個OPL數(shù)組。在本例中,數(shù)組元素406是包含ID和可變長度字符串的OPL。
盡管在圖4中只示出了一個OPL數(shù)組404及其相關(guān)聯(lián)的OPL數(shù)組元素406,本發(fā)明并不限于這樣一種結(jié)構(gòu)。舉例來說,數(shù)據(jù)結(jié)構(gòu)400可以包括多個象OPL一樣的OPL數(shù)組404,每一個都具有相關(guān)聯(lián)的OPL數(shù)組元素406。在這一情況下,索引402c可以引用各個OPL數(shù)組404。
Subopls 404a-404e每一個都引用一個屬性、對象或其它與傳統(tǒng)OPL opyid302(圖3)類似的OPL。但是,在數(shù)據(jù)結(jié)構(gòu)400中,沒有對OPL數(shù)組404中的數(shù)據(jù)項賦予特定的opyid。相反的是,OPL數(shù)組404中每個Subopls 404a-404e的opyid都可以設(shè)為“-1”。而后,OPL數(shù)組404中每個Subopls 404a-404e的位置都可以用作opyid。每個Subopls 404a-404e的位置在圖4中由相應(yīng)的索引位置指示符405a-405e來表示。舉例來說,如果需要某個特定的subopl,例如在OPL數(shù)組中位置“2”的,則提供對應(yīng)于在索引位置指示符405c處數(shù)據(jù)項的subopl 404c。subopl 404c位于OPL數(shù)組中的索引位置2。因此,數(shù)據(jù)結(jié)構(gòu)400根據(jù)OPL各自在OPL數(shù)組404中的索引位置來引用特定的OPL。特定subopl的索引位置就是其opyid。數(shù)據(jù)結(jié)構(gòu)400消除了針對每個元素存儲特定opyid的需要,從而克服了傳統(tǒng)OPL的不足。在典型的32位系統(tǒng)中,數(shù)據(jù)結(jié)構(gòu)400可以存儲多于四十億個數(shù)據(jù)項,因為數(shù)據(jù)項的數(shù)量不再被opyid的范圍所限制。(位置指示符405a-405e只是用于例示目的,一般在OPL數(shù)組404中并不提供。)圖4還例示了OPL數(shù)組404中的空槽如何可以為將來的引用而保留。針對在索引位置405b處的空槽404b,占位符屬性“oplempty”可以指示在索引位置405b的相應(yīng)數(shù)據(jù)項是空的。Oplempty可以指示某單個數(shù)組元素是空的,應(yīng)當(dāng)跳過。針對多個鄰接的空數(shù)組元素,可以使用一個占位符屬性“oplskip=n”。Oplskip=n可以指示接著的(n)個條目是空的。如圖4中作為示例所示,在OPL數(shù)組404中對應(yīng)于索引位置405d(即索引位置“3-5”)的數(shù)據(jù)項404d是由占位符屬性“oplskip=n”所填,指示著OPL數(shù)組404中接著的3個數(shù)據(jù)項是空的且應(yīng)當(dāng)跳過。
數(shù)據(jù)文件可以表征為對象的集合。每個對象都可以由OPL來定義。每個OPL可以具有與之相關(guān)聯(lián)的對象句柄(OH)。OH可以是對該對象OPL的索引。因此,OH可以標(biāo)識某個對象,并在該對象的生命中不變。(參見圖4的不變域402b。)文件的結(jié)構(gòu)可以引用每個對象的OH來遍歷,而不必使用特定于每個對象的信息。OH可以在文件保存中保持不被改變(不變),使一個OH可用于引用在存儲器和/或文件中的對象。
平常,OH應(yīng)當(dāng)賦予單個的對象,并且如果應(yīng)用程序的某個后續(xù)版本已經(jīng)保存了該文件,則不能再重用。舉例來說,在應(yīng)用程序的當(dāng)前版本可以引入跟蹤表,以跟蹤由該程序所創(chuàng)建的所有對象。如果某個以前版本載入了該文件并刪除了某個當(dāng)前版本的對象,則當(dāng)前版本的跟蹤表將不作反映該變化的更新。而且,如果該被刪除對象的OH被重用于某個在以前版本中創(chuàng)建的不同的對象,則當(dāng)前版本的跟蹤表將該被重用的對象解釋成一個不同的對象。通過判定某個后續(xù)版本是否保存了該文件,本發(fā)明可以避免重用某個OH,直到這樣做不會產(chǎn)生問題為止。這樣,當(dāng)后續(xù)版本載入該文件時,可以看到所有已被刪除的對象。而后可以相應(yīng)地調(diào)整跟蹤表。如果使用過該文件的最高版本(由文件版本水印來確定)保存該文件,本發(fā)明也可以讓某個OH被重用。本發(fā)明可以讓該最高版本來確定可用的OH,并通過刪除所有對已被以前版本刪除的對象的舊的引用來使它們可用于重用。
為了在OPL或OPL數(shù)組中存儲存儲器結(jié)構(gòu),可以定義一個指示每個屬性的缺省值和類型的“OPL字典”。字典的數(shù)量可以最小化,因為未使用的屬性不占任何空間。因此,本發(fā)明的示例性實施例可以使用單獨的字典。在這一實施例中,所有公用的對象對每個不同的數(shù)據(jù)項可以具有相同的opyid或數(shù)組索引位置。在另一示例性實施例中,可以提供以下的字典(1)文件結(jié)構(gòu)字典,可以包括所有與文件結(jié)構(gòu)相關(guān)的屬性(即OPL樹的根);(2)頁對象字典,可以包括用于出版文檔所有頁對象的屬性;以及(3)其它結(jié)構(gòu)字典,它可以包括用于描述含文本對象及其相關(guān)聯(lián)文本的字典,或用于定義在出版中所使用的顏色的顏色描述字典,等等。當(dāng)在字典中定義屬性時,可以用任何對象來引用它們。因此,由公用對象使用的公用屬性是相同的,因為它們來自同一字典。
OPL可以有利于保存或“遍歷”來自將來版本的未知的屬性或信息。原始的OPL可以由某個特定的版本從硬盤載入存儲器。所有該特定版本已知的OPL屬性都可以被覆蓋。剩下的屬性(即對該特定版本是未知的屬性)是由某個將來版本所創(chuàng)建的,并可以保留在文件中而不觸及。這樣,未知的屬性可以被傳播回所保存的文件,以便由某個后續(xù)版本所使用。這些未知的屬性在載入時可以忽略,而在保存時可以容易地保留。
使用OPL或OPL數(shù)組作為存儲器結(jié)構(gòu)可以實現(xiàn)存儲器中結(jié)構(gòu)與文件格式分開。因此,應(yīng)用程序的將來版本可以包括許多新的特性,而沒有與不同文件格式相關(guān)聯(lián)的問題。舉例來說,結(jié)構(gòu)可以在存儲器中移動,變得對某種特定處理器類型更為高效,而不引起文件格式的變化。對于保存在文件中的每個存儲器結(jié)構(gòu),可以有一個用于保存該結(jié)構(gòu)的相關(guān)聯(lián)的OPL。從OPL到結(jié)構(gòu)的映射不需要是一對一的。由于性能原因,在硬盤上的邏輯結(jié)構(gòu)可以變成分離的存儲器結(jié)構(gòu)。舉例來說,在某個對象上的超鏈接屬性可以存儲在一個反向查找表中,用以確定有什么其它對象鏈接到任何給定的對象。可作替換的是,多個硬盤上的對象可以組合到存儲器中單個的結(jié)構(gòu)中。
現(xiàn)在參照圖5和6,將描述一種如本發(fā)明所述的用于在某個應(yīng)用程序的當(dāng)前版本、以前版本和后續(xù)版本之間提供兼容性的方法。應(yīng)用程序的當(dāng)前版本是當(dāng)前運行在計算機系統(tǒng)200(圖2)上的應(yīng)用程序。該應(yīng)用程序的以前版本是在該當(dāng)前版本之前創(chuàng)建的該應(yīng)用程序的任何版本。該應(yīng)用程序的后續(xù)版本是在該當(dāng)前版本之后創(chuàng)建的該應(yīng)用程序的任何版本。一般來說,應(yīng)用程序的版本是以一個數(shù)字來指明的。舉例來說,應(yīng)用程序的第一個版本可以指定為版本1.0。該應(yīng)用程序的后續(xù)版本可以指定為更高的數(shù)字。舉例來說,應(yīng)用程序的第二個版本可以指定為版本2.0。版本1.0是相對于版本2.0的以前版本。版本2.0是相對于版本1.0的后續(xù)版本。
本發(fā)明可以將以上所述的OPL數(shù)組和傳統(tǒng)OPL用作數(shù)據(jù)文件的結(jié)構(gòu)。然而,如相關(guān)領(lǐng)域的行家所理解的那樣,本發(fā)明并不限于那些文件結(jié)構(gòu)。
如本發(fā)明的某一示例性實施例所述,在應(yīng)用程序的原始數(shù)據(jù)文件中可以提供文件版本水印,以指示該原始數(shù)據(jù)文件的多個屬性。該文件版本水印可以在文件頭中提供,文件頭提供關(guān)于該文件信息。可以提供高版本水印,以指示用以保存該文件的該應(yīng)用程序的最高版本??梢蕴峁┳詈蟀姹舅。灾甘居靡员4嬖撐募脑搼?yīng)用程序的最后版本??梢蕴峁┑桶姹舅。灾甘居靡员4嬖撐募脑搼?yīng)用程序的最低版本。可以提供創(chuàng)建版本水印,以指示第一個創(chuàng)建該文件的該應(yīng)用程序的版本??梢蕴峁ο蟀姹舅。鳛槊總€對象上的一個屬性,以指示寫特定對象的該應(yīng)用程序的最高版本。每個文件版本水印可以指示對該文件所作的改變、添加或刪除。當(dāng)載入某個文件時,本發(fā)明可以判定自低水印版本后添加或修改的任何數(shù)據(jù)結(jié)構(gòu)和屬性。而后這些添加或修改了的數(shù)據(jù)項可以被修正成與任何版本兼容。
在運行中,可以將數(shù)據(jù)文件中的高版本水印與應(yīng)用程序的當(dāng)前版本相比較。通過這樣的比較,可以判定該原始數(shù)據(jù)文件對應(yīng)于該應(yīng)用程序的當(dāng)前版本、某個以前版本還是某個后續(xù)版本。由于整個文件可以由應(yīng)用程序所保存,該文件中的對象包括了由高版本水印標(biāo)識的版本所創(chuàng)建的文件的特征。而后應(yīng)用程序可以根據(jù)原始數(shù)據(jù)文件是對應(yīng)于當(dāng)前版本、以前版本還是后續(xù)版本來確定如何載入和/或保存該原始數(shù)據(jù)文件。原始數(shù)據(jù)文件可以包括對象屬性列表、對象屬性數(shù)組或其它文件結(jié)構(gòu)。
舉例來說,某個應(yīng)用程序的版本2.0(后續(xù)版本)可以根據(jù)版本2.0如何對待與版本1.0(以前版本)不同的信息來判定是否要轉(zhuǎn)換信息。例如,如果版本1.0具有對超鏈接的跟蹤表,但版本2.0將超鏈接數(shù)據(jù)放在對象自身中,則版本2.0可以判定其在載入一個由版本1.0所寫入的文件時應(yīng)當(dāng)轉(zhuǎn)換該信息。然而,如果版本2.0是寫入該文件的最舊版本,則版本2.0可以判定這樣的轉(zhuǎn)換是不必要的。
如果超出了以前的標(biāo)記,可以更新低和高版本水印(以及對象水印)。保存文件的最后版本可以在保存時更新。創(chuàng)建版本水印可以在文件原始創(chuàng)建時提供,一般不再更新。
現(xiàn)在參照圖5,將描述如本發(fā)明的示例性實施例所述的載入數(shù)據(jù)文件的方法500。圖5是描述用于在應(yīng)用程序中載入原始數(shù)據(jù)文件,使該原始數(shù)據(jù)文件與當(dāng)前版本、以前版本及后續(xù)版本兼容的方法500的流程圖。方法500可以包含在原始數(shù)據(jù)文件中提供高版本水印、低版本水印、最后版本水印、創(chuàng)建版本水印和/或?qū)ο蟀姹舅〉牟襟E510。在步驟520中,確定該原始數(shù)據(jù)文件中的高版本水印。如在步驟530中所示出的那樣,該方法還可以確定在該原始數(shù)據(jù)文件中的低版本水印、最后版本水印、創(chuàng)建版本水印和/或?qū)ο蟮膶ο蟀姹舅?。在步驟540中,將高版本水印與應(yīng)用程序的當(dāng)前版本水印相比較,以判定該高版本是否比該當(dāng)前版本更新。根據(jù)這一比較,該方法確定如何載入該原始數(shù)據(jù)文件。
如果步驟540的比較指示該高版本水印代表了某個不比當(dāng)前版本新的應(yīng)用程序的版本,則該原始數(shù)據(jù)文件對應(yīng)于該應(yīng)用程序的相對于該當(dāng)前版本的同一版本或某個以前版本。在這一情況下,該方法分支到步驟560,在那里可以將該原始數(shù)據(jù)文件載入該應(yīng)用程序而不改變。因為該高版本水印對應(yīng)于該應(yīng)用程序的同一版本或某個以前版本,所以當(dāng)前版本可以讀取并理解該原始數(shù)據(jù)文件中的所有信息。
如果步驟540的比較指示該高版本水印代表了某個比當(dāng)前版本新的應(yīng)用程序的版本,則該原始數(shù)據(jù)文件對應(yīng)于該應(yīng)用程序的相對于當(dāng)前版本的某個后續(xù)版本。在這一情況下,該方法分支到步驟550,以載入該原始數(shù)據(jù)文件。因為該高版本水印對應(yīng)于該應(yīng)用程序的某個后續(xù)版本,所以當(dāng)前版本可能不能讀取并理解該原始數(shù)據(jù)文件中的所有信息。因此,該原始數(shù)據(jù)文件在步驟550通過載入所有已知的信息并跳過所有未知的信息來載入到該應(yīng)用程序中。當(dāng)某個OPL或OPL數(shù)組被用作該文件結(jié)構(gòu)時,與某個對象相關(guān)聯(lián)的某個OPL的未知屬性可以通過載入所有未知屬性并將它們存儲到某個存儲器塊中直至該文件被保存來維護??商鎿Q的方式是,該程序可以跟蹤與某個對象相關(guān)聯(lián)的原始OPL在硬盤上的位置,并可以在覆蓋該文件前按需要將某個OPL的未知屬性讀取回存儲器中。
在步驟550或560之后,該方法前進至步驟570,在那里判定在原始計算機文件中的最后版本水印是否代表了某個比當(dāng)前版本舊的應(yīng)用程序版本。如果步驟570中的判定是否定的,則該方法結(jié)束。如果步驟570中的判定是肯定的,則該方法分支到步驟580,在那里可以通過根據(jù)原始數(shù)據(jù)文件中的舊信息更新新的或修改過的信息來轉(zhuǎn)換原始數(shù)據(jù)文件。舊的信息也可以保留,不作任何改變。
步驟570和580用于根據(jù)最后版本水印轉(zhuǎn)換原始數(shù)據(jù)文件。最后版本水印可以指示有別于高版本水印的附加信息,以判定對原始數(shù)據(jù)文件需要作哪些改變。舉例來說,假定計算機應(yīng)用程序的版本2(高版本水印)已經(jīng)寫入了原始數(shù)據(jù)文件。版本2可以包括一個有別于版本1的新的或修改過的屬性。然而,如果應(yīng)用程序的版本1是寫入該文件的最后版本(最后版本水印),則其有可能已經(jīng)改變了對應(yīng)于新的或修改版本2屬性的某些數(shù)據(jù)。因此,如果版本2或某個后續(xù)版本(當(dāng)前版本)讀取該原始數(shù)據(jù)文件,則該版本可能需要轉(zhuǎn)換該數(shù)據(jù)文件中的數(shù)據(jù),因為寫入該文件的最后版本是版本1(由版本1寫入的數(shù)據(jù)可能需要更新,以對應(yīng)于版本2或后續(xù)版本)。
文件版本水印可以一個對象一個對象地提供,而不是(或同時)以整個文件為基礎(chǔ)提供。而后可以將方法500(及以下所討論的方法600)運用于原始數(shù)據(jù)文件中的對象。為單獨的對象提供文件版本水印可以通過判定文件中的哪些對象需要轉(zhuǎn)換或忽略來優(yōu)化載入和保存的方法。而且,文件版本水印可以一個屬性一個屬性地提供,而不是(或同時)以整個文件或整個對象為基礎(chǔ)提供。而后可以將方法500(及以下所討論的方法600)運用于原始數(shù)據(jù)文件中的屬性。為單獨的屬性提供文件版本水印可以通過判定文件中的哪些屬性需要轉(zhuǎn)換或忽略來優(yōu)化載入和保存的方法。
而且,應(yīng)用程序的當(dāng)前版本可以具有與每個對象相關(guān)聯(lián)的當(dāng)前版本水印,表示修訂、改變或刪除過該對象的應(yīng)用程序版本。在方法500(和以下所討論的方法600)中,針對某個特定對象的對象版本水印可以與當(dāng)前版本相比較,這里的當(dāng)前版本由針對當(dāng)前版本中該特定對象的當(dāng)前版本水印來表示。因此,本發(fā)明可以優(yōu)化對原始數(shù)據(jù)文件中的對象是否需要更新的判定,因為對象只有在當(dāng)前版本水印比對象版本水印新時需要更新。舉例來說,假定針對原始數(shù)據(jù)文件中某一特定對象的對象版本水印指示版本1.0是保存該特定對象的最后版本。如果當(dāng)前版本2.0載入該文件,就將更新當(dāng)前版本中基于該特定對象的信息,因為版本2.0比版本1.0新。但是,如果對當(dāng)前版本中的該特定對象提供了一個當(dāng)前版本水印,這里的當(dāng)前版本水印指示該特定對象自版本1.0以來沒有改變過,則當(dāng)前版本將不更新該特定對象,因為其在版本2.0中沒有改變過。這樣,載入方法就可以通過消除不必要的轉(zhuǎn)換步驟而優(yōu)化。
現(xiàn)在參照圖6,將描述用于如本發(fā)明所述的保存數(shù)據(jù)文件的方法600的一個示例性實施例。方法600實現(xiàn)保存修改了的數(shù)據(jù)文件,使之與當(dāng)前版本、以前版本和后續(xù)版本兼容。在某個原始數(shù)據(jù)文件由應(yīng)用程序的當(dāng)前版本所修改后,該修改了的原始數(shù)據(jù)文件可以被保存成與當(dāng)前版本、以前版本和后續(xù)版本兼容。圖6是描述方法600的流程圖。方法600可以包含在原始數(shù)據(jù)文件中提供高版本水印、低版本水印、最后版本水印、創(chuàng)建版本水印和/或?qū)ο蟀姹舅〉牟襟E605。在步驟610中,確定該原始數(shù)據(jù)文件中的高版本水印。如在步驟615中所示出的那樣,該方法還可以確定該原始數(shù)據(jù)文件的低版本水印、最后版本水印、創(chuàng)建版本水印和/或?qū)ο蟀姹舅 T诓襟E620中,將高版本水印與應(yīng)用程序的當(dāng)前版本水印相比較。根據(jù)這一比較,該方法確定如何保存修改了的原始數(shù)據(jù)文件。
如果步驟620的比較指示該高版本水印代表了某個比當(dāng)前版本舊的應(yīng)用程序的版本,則該原始數(shù)據(jù)文件對應(yīng)于該應(yīng)用程序的相對于該當(dāng)前版本的某個以前版本。在這一情況下,該方法分支到步驟625,以該應(yīng)用程序的當(dāng)前版本的格式來保存修改了的原始數(shù)據(jù)文件。因為該高版本水印對應(yīng)于該應(yīng)用程序的某個以前版本,所以該應(yīng)用程序的當(dāng)前版本也可以以與所有以前版本兼容的某種格式來保存修改了的原始數(shù)據(jù)文件。因此,該方法前進到步驟630,在那里將修改了的原始數(shù)據(jù)文件中的數(shù)據(jù)項轉(zhuǎn)換到以前版本的格式并保存。來自以前版本的舊的信息可以在步驟630中重構(gòu),讓該文件能被該應(yīng)用程序的以前、活動和將來版本所使用。如果重構(gòu)舊的信息變成一個太巨大的任務(wù),則可以通過在文件中插入說明該文件只可由其某個特定版本或?qū)戆姹咀x取的命令來截短將來的文件。在步驟635中,原始數(shù)據(jù)文件的高版本水印被更新成對應(yīng)于該應(yīng)用程序的當(dāng)前版本。而后該方法前進到步驟665,在那里保存該文件的最后版本也被更新,以便將來使用。
如果步驟620的比較指示該高版本水印代表了某個比當(dāng)前版本新的應(yīng)用程序的版本,則該原始數(shù)據(jù)文件對應(yīng)于該應(yīng)用程序的相對于該當(dāng)前版本的某個后續(xù)版本。在這一情況下,該方法分支到步驟640,在那里獲取該原始數(shù)據(jù)文件。而后,在步驟645,以修改了的原始數(shù)據(jù)文件覆蓋該原始數(shù)據(jù)文件。因為該高版本水印對應(yīng)于該應(yīng)用程序的某個后續(xù)版本,所以修改了的原始數(shù)據(jù)文件可以包含對于當(dāng)前版本是未知的信息或數(shù)據(jù)。因此,在步驟645中,只以修改了的原始數(shù)據(jù)文件的數(shù)據(jù)覆蓋該原始數(shù)據(jù)文件的已知數(shù)據(jù)。未知的屬性不作改變。通過這一方法,未知的數(shù)據(jù)仍保持對于可以讀取這些數(shù)據(jù)的應(yīng)用程序的后續(xù)版本可用。未知數(shù)據(jù)可以由應(yīng)用程序按以上參照圖5所討論的那樣來維護。而后該方法前進到步驟630,在那里修改了的原始數(shù)據(jù)文件中的數(shù)據(jù)項被轉(zhuǎn)換成以前版本的格式并保存。這樣,修改了的原始數(shù)據(jù)文件就以當(dāng)前版本和以前版本的格式來保存。
下面,該方法判定低版本水印是否需要更新。在步驟650中,將應(yīng)用程序的當(dāng)前版本與原始數(shù)據(jù)文件的低版本水印相比較。如果在步驟650中判定當(dāng)前版本比低版本水印所表示的應(yīng)用程序版本舊,則該方法分支到步驟655,在那里低版本水印被更新成對應(yīng)于該當(dāng)前版本。而后該方法前進至步驟665,在那里保存該文件的最后版本也被更新,以便將來使用。如果在步驟650中判定當(dāng)前版本與低版本水印所表示的應(yīng)用程序版本相同或更新,則該方法直接分支到步驟655,在那里低版本水印被更新成對應(yīng)于該當(dāng)前版本。
如果步驟620的比較指示該高版本水印代表了某個與當(dāng)前版本相同的應(yīng)用程序的版本,則該原始數(shù)據(jù)文件對應(yīng)于該應(yīng)用程序的當(dāng)前版本。在這一情況下,該方法分支到步驟660,在那里通過覆蓋原始數(shù)據(jù)文件來保存修改了的原始數(shù)據(jù)文件。而后該方法前進到步驟630,在那里在修改了的原始數(shù)據(jù)文件中的數(shù)據(jù)項被轉(zhuǎn)換成以前版本的格式并保存。這樣,修改了的原始數(shù)據(jù)文件就以當(dāng)前版本和以前版本的格式來保存。而后該方法前進到步驟665,在那里保存該文件的最后版本被更新,以便將來使用。
請注意,無論從步驟620采用哪個分支,步驟630都可以執(zhí)行。因此,對應(yīng)于以前版本的屬性總是能寫入文件,這樣該文件就會與以前版本兼容。
在某些情況中,方法500和600可以包括一個跟蹤OPL數(shù)組元素的位置以便在文件被修改后保存該文件的附加步驟(未示出)。舉例來說,一個數(shù)據(jù)文件的某個版本可能包括一個具有四個元素的表。但是該數(shù)據(jù)文件的修改版本可能只有三個元素。當(dāng)應(yīng)用程序試圖覆蓋該原始數(shù)據(jù)文件時,硬盤版本包括原始的四個元素,但存儲器版本只包括三個元素。沒有跟蹤步驟,應(yīng)用程序可能不知道哪個元素已被刪除。在跟蹤步驟中,應(yīng)用程序跟蹤所有表的原始索引。當(dāng)從硬盤讀取某個表時,就添加一個指示該表中每個元素的位置的附加數(shù)據(jù)。換句話說,應(yīng)用程序標(biāo)記哪個元素是第一個、第二個等等。因此,程序能確定哪個元素已被刪除,因為其不再存在,并且可以保存可能在數(shù)組元素中存在的將來版本屬性。
在方法500和600中,應(yīng)用程序的當(dāng)前版本可以使用任何水印來確定在載入原始數(shù)據(jù)文件時采取什么行動。上面已經(jīng)討論了高版本水印的使用。低版本水印可以向應(yīng)用程序給出提示,并且限制在原始數(shù)據(jù)文件上所必要的轉(zhuǎn)換類型。建立在以前的一個示例上,如果在版本1.0中超鏈接表已知并不存在,因為低版本水印指示文件從未由該版本寫入,則轉(zhuǎn)換過程可以安全地跳過處理該超鏈接表的任何事物。最后版本水印可以指示最后版本所知道的要寫入文件的數(shù)據(jù),以及未知但在文件中承載的數(shù)據(jù)。
對象版本水印可以提供針對某個特定對象的特定信息,而該特定對象可以根據(jù)這些信息來載入、保存或轉(zhuǎn)換。對象版本水印可以提供針對該特定對象的信息,并可以指示某一特定對象所包含的任何屬性的最高文件版本。舉例來說,假定在版本2.0中針對對象X添加了超鏈接屬性,而在版本3.0中針對對象X沒有添加任何新屬性。如果包含超鏈接的對象X被寫入版本2.0或某個后續(xù)版本,則其版本水印將被設(shè)成版本2.0。如果對象X不包含超鏈接(所以沒有超鏈接屬性寫入)或由版本1.0寫入,則其版本水印將被設(shè)成版本1.0。這一信息可以用以進一步優(yōu)化對每個單獨對象和能理解該對象所有屬性的最高版本的載入和保存操作。舉例來說,由版本3.0寫入或不包含超鏈接(所以將具有版本1.0對象水印)的對象X可以由版本1.0來寫入和讀取,而不用擔(dān)心存在將來版本屬性,盡管文件高版本水印可能反映版本3.0。
總的來說,保存某個文件的應(yīng)用程序的最近版本最適于判定如何來處理來自該版本或以前版本的信息。最近版本可以讀取并理解在該文件中的任何事物。應(yīng)用程序的最近版本確定要保留、轉(zhuǎn)換或丟棄哪些信息。因此,寫入某個文件的最高版本確定是丟棄還是轉(zhuǎn)換信息。所有的較低版本可以簡單地傳播任何未知的信息。
最后,實現(xiàn)本發(fā)明并不要求在圖5和6中所示的方法500和600的所有步驟。而且,可以用與所例示的不同的次序來執(zhí)行某些步驟。
參照圖7-9,將描述如本發(fā)明所述的方法500和600的特定示例性實施例。在圖7-9的每一幅中,方法500或600已確定最后版本水印小于應(yīng)用程序的當(dāng)前版本(即保存原始數(shù)據(jù)文件的應(yīng)用程序的最后版本對應(yīng)于該應(yīng)用程序相對于當(dāng)前版本的某個以前版本)(見圖5的步驟595)。而且,以下參照圖7-9所描述的實施例在方法500或600已確定高版本水印小于應(yīng)用程序的當(dāng)前版本時也是可運行的。
圖7是描述用于如本發(fā)明所述載入和保存原始數(shù)據(jù)文件的方法700的流程圖,其中當(dāng)前版本具有一個未包括在以前版本中的附加屬性。在方法700的步驟710中,在應(yīng)用程序的當(dāng)前版本的OPL中定義了新屬性的缺省值。該過程前進到步驟725,在那里載入原始數(shù)據(jù)文件而不作改變。該原始數(shù)據(jù)文件被修改后,在步驟730中保存。因此,該新屬性就被保存,以便與應(yīng)用程序的活動及將來版本一起使用。以前版本將簡單地忽略該新屬性。在步驟740中,高版本水印被更新成當(dāng)前版本。
圖8是描述用于如本發(fā)明所述載入和保存原始數(shù)據(jù)文件的方法800的流程圖,其中當(dāng)前版本刪除了一個在以前版本中使用的對象屬性。在步驟820中,在原始數(shù)據(jù)文件載入到當(dāng)前版本中時,該刪除了的屬性被忽略。當(dāng)在步驟830保存該原始數(shù)據(jù)文件的某個修改版本時,該文件是與對于較舊版本可用的該刪除了的屬性一起保存的。由于當(dāng)前版本不使用該刪除了的屬性,它就被返回給該保存了的文件,以便由以前版本使用??梢酝ㄟ^將刪除了的屬性留在原始數(shù)據(jù)文件中(即通過不將刪除了的屬性寫出文件)來將刪除了的屬性返回給該保存了的文件。可替換的方式是,可以通過將刪除了的屬性從原始數(shù)據(jù)文件傳播回保存了的文件來將刪除了的屬性返回給該保存了的文件。因為刪除了的屬性對于當(dāng)前版本是已知的,刪除了的屬性的值可以從其它屬性的值得到,或者可以產(chǎn)生一個代表刪除了的屬性的缺省值,以便讓該刪除了的屬性返回給保存了的文件。在步驟840中,高版本水印可以被更新成當(dāng)前版本。
舉例來說,假設(shè)以前版本在某個對象上包括下拉陰影屬性。當(dāng)前版本可能不再支持這一屬性,即該下拉陰影屬性已被從當(dāng)前版本中刪除。應(yīng)用程序的較新的版本認(rèn)識到該下拉陰影屬性已被刪除。但是,該下拉陰影屬性仍可由當(dāng)前版本寫入文件。在步驟820中,可以載入原始數(shù)據(jù)文件,而刪除了的下拉陰影屬性可以忽略。當(dāng)在步驟830中保存該原始數(shù)據(jù)文件的某個修改版本時,該文件可以與對較舊版本可用的刪除了的下拉陰影屬性一起保存。由于當(dāng)前版本不使用該刪除了的下拉陰影屬性,它就被返回給該保存了的文件,以便由以前版本使用。可以從其它屬性的值來確定下拉陰影屬性的值,或者可以使用缺省值。在步驟840中,高版本水印可以被更新成當(dāng)前版本。
圖9是描述用于如本發(fā)明所述載入和保存原始數(shù)據(jù)文件的方法900的流程圖,其中當(dāng)前版本修改了以前版本的舊對象屬性。不同于以修改了的屬性代替舊屬性,在當(dāng)前版本中提供了代表修改了的屬性的新屬性。在方法900的步驟910中,在應(yīng)用程序的當(dāng)前版本的OPL中定義了新屬性的缺省值。舊屬性被留下來,不作改變。而后在步驟920中,原始數(shù)據(jù)文件被載入當(dāng)前版本,而舊屬性被轉(zhuǎn)換成新的(修改了的)屬性。原始數(shù)據(jù)文件被修改后,在步驟930中保存。在步驟930中,新屬性不帶對舊屬性的引用而保存。而且在步驟930中,新屬性被轉(zhuǎn)換成舊屬性并保存,以便由以前版本使用。在步驟940中,高版本水印被更新成當(dāng)前版本。
舉例來說,假設(shè)應(yīng)用程序的以前版本使用RGB(紅、綠、藍(lán))色彩模型來定義對象的顏色。應(yīng)用程序的當(dāng)前版本可能包括允許以專業(yè)打印機所使用的CMYK(青、紫、黃、黑)色彩模型來定義對象顏色的新屬性。新的CMYK色彩屬性可以是基于舊的RGB色彩屬性,而針對每個RGB值可以確定一個相等的CMYK值。新的opyid可以添加到適當(dāng)?shù)腛PL字典中去。舉例來說,該適當(dāng)?shù)淖值淇梢允怯糜陧搶ο蟮捻搶ο笞值?、另一個已存在的字典或新字典。在步驟910中,可以在OPL字典中定義用于該新的CMYK色彩屬性的缺省值。舊的RGB屬性保留不變。在步驟920中,原始數(shù)據(jù)文件被載入當(dāng)前版本,而該新的CMYK色彩屬性可以根據(jù)該對象的舊的RGB屬性來更新。原始數(shù)據(jù)文件被修改后,可以在步驟930中保存。在步驟930中,新的CMYK色彩屬性可以不帶對來自原始數(shù)據(jù)文件的舊RGB屬性的引用而保存。新的CMYK屬性可以被轉(zhuǎn)換成某個對應(yīng)的舊RGB屬性并保存到文件中。因此,新的CMYK屬性可以被保存,以便應(yīng)用程序的活動和將來版本使用。以前版本將簡單地忽略新的CMYK色彩屬性。在步驟940中,高版本水印可以被更新成當(dāng)前版本。
本發(fā)明的方法還可以解決保存在數(shù)據(jù)文件中的兩個應(yīng)用程序版本之間的不一致。在上面所討論的CMYK-RGB示例中,以前版本可以讀取文件,因為后續(xù)版本將新的CMYK色彩屬性向下轉(zhuǎn)換成對應(yīng)的RGB屬性。但是,當(dāng)寫入文件的最后版本比當(dāng)前版本和寫入該文件的高版本都舊時,就可能發(fā)生不一致。當(dāng)前版本可以是寫入文件的高版本的同一版本或某個后續(xù)版本。如果寫入文件的高版本(不是最后版本)認(rèn)識新的CMYK色彩屬性,則其將該新的CMYK色彩屬性的值以及某個對應(yīng)的RGB色彩屬性值寫出到數(shù)據(jù)文件中。而且,如果寫入文件的最后版本只認(rèn)識RGB色彩屬性,則其將該RGB色彩屬性的值寫出到數(shù)據(jù)文件中。當(dāng)該數(shù)據(jù)文件被載入到支持新的CMYK色彩屬性的當(dāng)前版本時,數(shù)據(jù)文件中的CMYK色彩屬性就對應(yīng)于舊的信息。在該數(shù)據(jù)文件中存在兩個版本的色彩屬性信息,因為高版本將CMYK色彩屬性值寫入該文件,而最后版本將RGB色彩屬性值寫入該文件。RGB和CMYK值并不匹配,因為寫入該文件的最后版本更新了RGB值,但保留了未知的CMYK屬性的值。當(dāng)該文件被載入當(dāng)前版本時,可以確定寫入該文件的最后版本(見圖5的步驟570)。根據(jù)這些信息,可以判定該CMYK色彩屬性值已經(jīng)過時,而RGB色彩屬性值應(yīng)當(dāng)被載入并轉(zhuǎn)換成某個更新了的CMYK色彩屬性值。
對象就是屬性的集合。因此,在不同應(yīng)用程序版本中對對象的改變可以通過在對應(yīng)于該對象的屬性上的改變來反映。在載入或保存包含該對象的數(shù)據(jù)文件時,方法700、800和900的步驟可以對該對象的單獨屬性重復(fù)進行。
本發(fā)明的某一實施例可以用作稱為MicrosoftPublisher(來自華盛頓Redmond的MicrosoftCorporation公司)的文檔出版系統(tǒng)的一部分。該出版系統(tǒng)可以讓用戶編輯文檔并插入包含圖形數(shù)據(jù)、文本數(shù)據(jù)、電子表格數(shù)據(jù)或其它類型數(shù)據(jù)的多種對象。而且,該系統(tǒng)可以讓用戶修改這些對象的屬性。該系統(tǒng)可以具有許多預(yù)先定義的對象類型,這些對象類型具有設(shè)定為標(biāo)準(zhǔn)值(缺省值)的預(yù)先定義的屬性。每個對象類型可以具有不同集合的屬性和/或?qū)傩灾?。每個對象可以是其對象類型的一個實例。如此,以其原始形式的對象的設(shè)定就可以容易地獲得。盡管參照某個文檔出版系統(tǒng)描述了某一實施例,相關(guān)領(lǐng)域中的行家將認(rèn)識到在此描述的技術(shù)可以運用于實質(zhì)上無限數(shù)量的其它類型的系統(tǒng)。
本發(fā)明可以與執(zhí)行上述處理功能的計算機硬件和軟件一起使用。如相關(guān)領(lǐng)域的行家所理解的那樣,在此描述的系統(tǒng)、方法和過程可以實施在可編程計算機、計算機可執(zhí)行軟件或數(shù)字電路中。該軟件可以存儲在計算機可讀取媒體上。舉例來說,計算機可讀取媒體可以包括軟盤、RAM、ROM、硬盤、可移動媒體、閃存、記憶棒、光媒體、光磁媒體、CD-ROM等。數(shù)字電路可以包括集成電路、門陣列、積木邏輯、現(xiàn)場可編程門陣列(FPGA)等。
盡管上面詳細(xì)描述了本發(fā)明的特定實施例,這些描述僅僅用于示例目的。除了上述這些以外,相關(guān)領(lǐng)域的行家可以做出這些示例性實施例已披露方面的多種更改以及對應(yīng)等價步驟,而不背離在下面權(quán)利要求中所定義的本發(fā)明的精神和范圍,這些權(quán)利要求的范圍應(yīng)符合最寬泛的解釋,以致能包含這樣的更改及等價結(jié)構(gòu)。
權(quán)利要求
1.一種用于讀取與應(yīng)用程序的當(dāng)前版本及后續(xù)版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該方法包含下列步驟在原始數(shù)據(jù)文件中提供高版本水印,該高版本水印指示用以保存該文件的應(yīng)用程序的最高版本;將該高版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定該原始數(shù)據(jù)文件是否對應(yīng)于該應(yīng)用程序的后續(xù)版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件對應(yīng)于后續(xù)版本時,所述載入步驟包含下列步驟忽略該原始數(shù)據(jù)文件中的未知信息;以及將已知信息從該原始數(shù)據(jù)文件載入當(dāng)前版本。
2.如權(quán)利要求1所述的方法,其特征在于,其中所述原始數(shù)據(jù)文件包含對象屬性列表。
3.如權(quán)利要求2所述的方法,其特征在于,其中所述對象屬性列表包含對象屬性列表數(shù)組。
4.如權(quán)利要求3所述的方法,其特征在于,進一步包含下列步驟跟蹤對象在對象屬性列表數(shù)組中的位置;以及根據(jù)在所述跟蹤步驟中所跟蹤的對象位置來更新該對象屬性列表數(shù)組。
5.如權(quán)利要求1所述的方法,其特征在于,其中未知和已知信息都包含該對象屬性列表的屬性。
6.如權(quán)利要求1所述的方法,其特征在于,進一步包含保存該原始數(shù)據(jù)文件的修改版本的步驟,而所述保存步驟包含下列步驟用來自該修改版本的信息覆蓋來自該原始數(shù)據(jù)文件的已知信息;以及保留來自該原始數(shù)據(jù)文件的未知信息,以保持這些未知信息對于后續(xù)版本可用。
7.如權(quán)利要求1所述的方法,其特征在于,進一步包含下列步驟在該原始數(shù)據(jù)文件中提供最后版本水印,該最后版本水印指示用以保存該文件的應(yīng)用程序的最后版本;以及通過將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較來判定該原始數(shù)據(jù)文件的特征。
8.如權(quán)利要求7所述的方法,其特征在于,當(dāng)所述判定步驟判定該最后版本水印對應(yīng)于該應(yīng)用程序在當(dāng)前版本以前的某個版本時,所述方法進一步包含根據(jù)該原始數(shù)據(jù)文件中信息來轉(zhuǎn)換該應(yīng)用程序的當(dāng)前版本中信息的步驟。
9.如權(quán)利要求1所述的方法,其特征在于,進一步包含下列步驟在該原始數(shù)據(jù)文件中提供低版本水印,該低版本水印指示用以保存該文件的該應(yīng)用程序的最低版本;以及通過將該最低版本水印與該應(yīng)用程序的當(dāng)前版本相比較來判定該原始數(shù)據(jù)文件的特征。
10.如權(quán)利要求1所述的方法,其特征在于,進一步包含下列步驟對該原始數(shù)據(jù)文件中的對象提供對象版本水印,該對象版本水印指示可以解釋該對象中所有屬性的該應(yīng)用程序的最低版本;以及通過將該對象版本水印與該應(yīng)用程序的當(dāng)前版本中的對象版本相比較來判定該原始數(shù)據(jù)文件的特征。
11.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求1所述的方法的計算機可執(zhí)行指令。
12.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及以前版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該方法包含下列步驟在該原始數(shù)據(jù)文件中提供一個高版本水印,該高版本水印指示用以保存該文件的該應(yīng)用程序的最高版本;將該高版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定該原始數(shù)據(jù)文件是否對應(yīng)于該應(yīng)用程序的以前版本;以及當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件對應(yīng)于以前版本時,將該原始數(shù)據(jù)文件不作改變地載入當(dāng)前版本。
13.如權(quán)利要求12所述的方法,其特征在于,進一步包含下列步驟在該原始數(shù)據(jù)文件中提供一個最后版本水印,該最后版本水印指示用以保存該文件的該應(yīng)用程序的最后版本;以及通過將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較來判定該原始數(shù)據(jù)文件的特征。
14.如權(quán)利要求13所述的方法,其特征在于,當(dāng)所述判定步驟判定該最后版本水印對應(yīng)于該應(yīng)用程序在當(dāng)前版本以前的某個版本時,所述方法進一步包含根據(jù)該原始數(shù)據(jù)文件中信息來轉(zhuǎn)換該應(yīng)用程序的當(dāng)前版本中的信息的步驟。
15.如權(quán)利要求12所述的方法,其特征在于,其中所述原始數(shù)據(jù)文件包含對象屬性列表。
16.如權(quán)利要求13所述的方法,其特征在于,其中所述對象屬性列表包含對象屬性列表數(shù)組。
17.如權(quán)利要求16所述的方法,其特征在于,進一步包含下列步驟跟蹤對象在對象屬性列表數(shù)組中的位置;以及根據(jù)在所述跟蹤步驟中所跟蹤的對象位置來更新該對象屬性列表數(shù)組。
18.如權(quán)利要求14所述的方法,其特征在于,進一步包含下列步驟保存在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息;以及保存來自該原始數(shù)據(jù)文件的未轉(zhuǎn)換的舊信息。
19.如權(quán)利要求14所述的方法,其特征在于,進一步包含下列步驟保存在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息;生成與來自該原始數(shù)據(jù)文件的未轉(zhuǎn)換的舊信息對應(yīng)的信息,以及保存在所述生成步驟中所生成的信息。
20.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求12所述的方法的計算機可執(zhí)行指令。
21.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及以前版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該方法包含下列步驟在該原始數(shù)據(jù)文件中提供最后版本水印,該最后版本水印指示用以保存該文件的該應(yīng)用程序的最后版本;將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定該原始數(shù)據(jù)文件是否對應(yīng)于該應(yīng)用程序的以前版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件對應(yīng)于以前版本時,所述載入步驟包含下列步驟判定以前版本是否包括已從當(dāng)前版本中刪除的數(shù)據(jù)項;當(dāng)所述判定步驟判定以前版本包括已刪除數(shù)據(jù)項時,忽略該原始數(shù)據(jù)文件中對應(yīng)于該已刪除數(shù)據(jù)項的舊信息;以及將對應(yīng)于已刪除數(shù)據(jù)項之外的數(shù)據(jù)項的信息從該原始數(shù)據(jù)文件載入當(dāng)前版本。
22.如權(quán)利要求21所述的方法,其特征在于,其中該已刪除數(shù)據(jù)項包含對象屬性。
23.如權(quán)利要求21所述的方法,其特征在于,其中該已刪除數(shù)據(jù)項包含對象。
24.如權(quán)利要求21所述的方法,其特征在于,進一步包含下列步驟保存該原始數(shù)據(jù)文件的修改版本;以及保存對應(yīng)于該原始數(shù)據(jù)文件的已刪除數(shù)據(jù)項的信息。
25.如權(quán)利要求21所述的方法,其特征在于進一步包含下列步驟保存該原始數(shù)據(jù)文件的修改版本;生成與來自該原始數(shù)據(jù)文件的已刪除數(shù)據(jù)項對應(yīng)的信息,以及保存在所述生成步驟中所生成的信息。
26.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求21所述的方法的計算機可執(zhí)行指令。
27.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及以前版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該方法包含下列步驟在該原始數(shù)據(jù)文件中提供最后版本水印,該最后版本水印指示用以保存該文件的該應(yīng)用程序的最后版本;將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定該原始數(shù)據(jù)文件是否對應(yīng)于該應(yīng)用程序的以前版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件對應(yīng)于以前版本時,所述載入步驟包含下列步驟判定當(dāng)前版本是否包括關(guān)于該原始數(shù)據(jù)文件中舊信息的修改的數(shù)據(jù)項;當(dāng)所述判定步驟判定當(dāng)前版本包括關(guān)于該原始數(shù)據(jù)文件中舊信息的修改的數(shù)據(jù)項時,將來自該原始數(shù)據(jù)文件的舊信息轉(zhuǎn)換成對應(yīng)于該修改的數(shù)據(jù)項的信息;以及將所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息載入當(dāng)前版本。
28.如權(quán)利要求27所述的方法,其特征在于,其中該修改的數(shù)據(jù)項包含對象屬性。
29.如權(quán)利要求27所述的方法,其特征在于,其中該修改的數(shù)據(jù)項包含對象。
30.如權(quán)利要求27所述的方法,其特征在于,進一步包含保存該原始數(shù)據(jù)文件的修改版本的步驟,所述保存步驟包含下列步驟保存對應(yīng)于該修改的數(shù)據(jù)項的信息;在第二個轉(zhuǎn)換步驟中,將對應(yīng)于該修改的數(shù)據(jù)項的信息轉(zhuǎn)換成對應(yīng)于舊信息并可由以前版本讀取的信息;以及保存在所述第二個轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息。
31.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求27所述的方法的計算機可執(zhí)行指令。
32.一種用于讀取與某應(yīng)用程序的當(dāng)前版本、以前版本及后續(xù)版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該方法包含下列步驟在該原始數(shù)據(jù)文件中提供高版本水印,該高版本水印指示用以保存該文件的該應(yīng)用程序的最高版本;在該原始數(shù)據(jù)文件中提供最后版本水印,該最后版本水印指示用以保存該文件的該應(yīng)用程序的最后版本;將該高版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定該原始數(shù)據(jù)文件是否包含對應(yīng)于該應(yīng)用程序的以前版本、當(dāng)前版本及后續(xù)版本之一的屬性;將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定該原始數(shù)據(jù)文件是否包含對應(yīng)于該應(yīng)用程序的以前版本、當(dāng)前版本及后續(xù)版本之一的附加屬性;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件包含對應(yīng)于該應(yīng)用程序不同版本的屬性時,所述載入步驟包含下列步驟判定該原始數(shù)據(jù)文件的哪些屬性是當(dāng)前的,哪些屬性是過時的;根據(jù)在所述判定步驟中所判定的當(dāng)前屬性,將該原始數(shù)據(jù)文件載入當(dāng)前版本;以及忽略在所述判定步驟中所判定的過時屬性。
33.一種用于讀取與某應(yīng)用程序的當(dāng)前版本、以前版本及后續(xù)版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該方法包含下列步驟在該原始數(shù)據(jù)文件中提供最后版本水印,該最后版本水印指示用以保存該文件的該應(yīng)用程序的最后版本;將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較,以判定用以保存該原始數(shù)據(jù)文件的最后版本是否對應(yīng)于該應(yīng)用程序的以前版本;當(dāng)所述比較步驟判定用以保存該原始數(shù)據(jù)文件的最后版本對應(yīng)于以前版本時,根據(jù)該原始數(shù)據(jù)文件中的信息來轉(zhuǎn)換該應(yīng)用程序的當(dāng)前版本中的信息;以及載入在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息。
34.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及后續(xù)版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該原始數(shù)據(jù)文件包含對象屬性列表,而該方法包含下列步驟對該原始數(shù)據(jù)文件的對象屬性列表中的對象提供對象版本水印,該對象版本水印指示可以解釋該對象中所包含的所有屬性的該應(yīng)用程序的最低版本;將該對象的對象版本水印與該應(yīng)用程序的當(dāng)前版本中的對象版本相比較,以判定該對象是否對應(yīng)于該應(yīng)用程序的后續(xù)版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該對象對應(yīng)于后續(xù)版本時,所述載入步驟包含下列步驟忽略對應(yīng)于該原始數(shù)據(jù)文件中該對象的未知信息;以及將對應(yīng)于該原始數(shù)據(jù)文件中該對象的已知信息載入當(dāng)前版本。
35.如權(quán)利要求34所述的方法,其特征在于,進一步包含下列步驟更新該對象屬性列表,以包括在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息;以及保留該對象屬性列表中的舊信息。
36.如權(quán)利要求34所述的方法,其特征在于,其中該對象屬性列表包含對象屬性列表數(shù)組。
37.如權(quán)利要求36所述的方法,其特征在于,進一步包含下列步驟跟蹤對象在對象屬性列表數(shù)組中的位置;以及根據(jù)在所述跟蹤步驟中所跟蹤的對象位置來更新該對象屬性列表數(shù)組。
38.如權(quán)利要求34所述的方法,其特征在于,其中未知和已知信息都包含該對象屬性列表的屬性。
39.如權(quán)利要求34所述的方法,其特征在于,進一步包含保存該原始數(shù)據(jù)文件的修改版本的步驟,而所述保存步驟包含下列步驟用來自該修改版本的信息覆蓋來自該原始數(shù)據(jù)文件的對象屬性列表的已知信息;以及保留來自該原始數(shù)據(jù)文件的對象屬性列表的未知信息,以保持這些未知信息對于后續(xù)版本可用。
40.如權(quán)利要求34所述的方法,其特征在于,進一步包含下列步驟在該原始數(shù)據(jù)文件中提供最后版本水印,該最后版本水印指示用以寫入該對象的該應(yīng)用程序的最后版本;以及通過將該最后版本水印與該應(yīng)用程序的當(dāng)前版本相比較來判定該原始數(shù)據(jù)文件中的對象的特征。
41.如權(quán)利要求40所述的方法,其特征在于,當(dāng)所述判定步驟判定該最后版本水印對應(yīng)于該應(yīng)用程序在當(dāng)前版本以前的某個版本時,所述方法進一步包含根據(jù)該原始數(shù)據(jù)文件中對應(yīng)于該對象的信息來轉(zhuǎn)換該應(yīng)用程序的當(dāng)前版本中信息的步驟。
42.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求34所述的方法的計算機可執(zhí)行指令。
43.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及以前版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該原始數(shù)據(jù)文件包含對象屬性列表,而該方法包含下列步驟對該原始數(shù)據(jù)文件的對象屬性列表中的對象提供對象版本水印,該對象版本水印指示可以解釋該對象中所包含的所有屬性的該應(yīng)用程序的最低版本;將該對象的對象版本水印與該應(yīng)用程序的當(dāng)前版本中的對象版本相比較,以判定該原始數(shù)據(jù)文件中的該對象是否對應(yīng)于該應(yīng)用程序的以前版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件中的該對象對應(yīng)于以前版本時,所述載入步驟包含下列步驟將對應(yīng)于該原始數(shù)據(jù)文件中該對象的舊信息轉(zhuǎn)換成某種當(dāng)前版本的格式;以及將在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息載入當(dāng)前版本。
44.如權(quán)利要求43所述的方法,其特征在于,其中該對象屬性列表包含對象屬性列表數(shù)組。
45.如權(quán)利要求43所述的方法,其特征在于,進一步包含下列步驟跟蹤對象在對象屬性列表數(shù)組中的位置;以及根據(jù)在所述跟蹤步驟中所跟蹤的對象位置來更新該對象屬性列表數(shù)組。
46.如權(quán)利要求43所述的方法,其特征在于,進一步包含下列步驟保存在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息;以及保存來自該原始數(shù)據(jù)文件的未轉(zhuǎn)換的舊信息。
47.如權(quán)利要求43所述的方法,其特征在于,進一步包含下列步驟保存在所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息;生成與來自該原始數(shù)據(jù)文件的舊信息對應(yīng)的信息;以及保存所述生成步驟中所生成的信息。
48.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求43所述的方法的計算機可執(zhí)行指令。
49.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及以前版本兼容的原始數(shù)據(jù)文件的方法,其特征在于,該原始數(shù)據(jù)文件包含對象屬性列表,而該方法包含下列步驟對該原始數(shù)據(jù)文件的對象屬性列表中的對象提供對象版本水印,該對象版本水印指示可以解釋該對象中所包含的所有屬性的該應(yīng)用程序的最低版本;將該對象的對象版本水印與該應(yīng)用程序的當(dāng)前版本中的對象版本相比較,以判定該原始數(shù)據(jù)文件中的該對象是否對應(yīng)于該應(yīng)用程序的以前版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件中的該對象對應(yīng)于以前版本時,所述載入步驟包含下列步驟判定以前版本是否包括已從當(dāng)前版本中刪除的數(shù)據(jù)項;當(dāng)所述判定步驟判定以前版本包括已刪除數(shù)據(jù)項時,忽略該原始數(shù)據(jù)文件中對應(yīng)于該已刪除數(shù)據(jù)項的舊信息;以及將對應(yīng)于已刪除數(shù)據(jù)項之外的數(shù)據(jù)項的信息從該原始數(shù)據(jù)文件載入。
50.如權(quán)利要求49所述的方法,其特征在于,其中該已刪除數(shù)據(jù)項包含對象屬性。
51.如權(quán)利要求49所述的方法,其特征在于,其中該已刪除數(shù)據(jù)項包含對象。
52.如權(quán)利要求49所述的方法,其特征在于,進一步包含下列步驟保存該原始數(shù)據(jù)文件的修改版本;以及保存對應(yīng)于該原始數(shù)據(jù)文件的已刪除數(shù)據(jù)項的信息。
53.如權(quán)利要求52所述的方法,其特征在于,其中對應(yīng)于該原始數(shù)據(jù)文件的已刪除數(shù)據(jù)項的信息包括來自缺省值的信息或基于當(dāng)前版本中的其它屬性的信息之一。
54.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求49所述的方法的計算機可執(zhí)行指令。
55.一種用于讀取與某應(yīng)用程序的當(dāng)前版本及以前版本兼容的原始數(shù)據(jù)文件的方法,其特征在于該原始數(shù)據(jù)文件包含對象屬性列表,而該方法包含下列步驟對該原始數(shù)據(jù)文件的對象屬性列表中的對象提供對象版本水印,該對象版本水印指示可以解釋該對象中所包含的所有屬性的該應(yīng)用程序的最低版本;將該對象的對象版本水印與該應(yīng)用程序的當(dāng)前版本中的對象版本相比較,以判定該原始數(shù)據(jù)文件中的該對象是否對應(yīng)于該應(yīng)用程序的以前版本;以及將該原始數(shù)據(jù)文件載入當(dāng)前版本,其中,當(dāng)所述比較步驟判定該原始數(shù)據(jù)文件中的該對象對應(yīng)于以前版本時,所述載入步驟包含下列步驟判定當(dāng)前版本是否包括關(guān)于該原始數(shù)據(jù)文件中舊信息的修改的數(shù)據(jù)項;當(dāng)所述判定步驟判定當(dāng)前版本包括關(guān)于該原始數(shù)據(jù)文件中舊信息的修改的數(shù)據(jù)項時,將來自該原始數(shù)據(jù)文件的舊信息轉(zhuǎn)換成對應(yīng)于該修改的數(shù)據(jù)項的信息;以及將所述轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息載入當(dāng)前版本。
56.如權(quán)利要求55所述的方法,其特征在于其中該修改的數(shù)據(jù)項包含對象屬性。
57.如權(quán)利要求55所述的方法,其特征在于其中該修改的數(shù)據(jù)項包含對象。
58.如權(quán)利要求55所述的方法,其特征在于,進一步包含保存該原始數(shù)據(jù)文件的修改版本的步驟,所述保存步驟包含下列步驟保存對應(yīng)于該修改的數(shù)據(jù)項的信息;在第二個轉(zhuǎn)換步驟中,將對應(yīng)于該修改的數(shù)據(jù)項的信息轉(zhuǎn)換成對應(yīng)于舊信息并可由以前版本讀取的信息;以及保存在所述第二個轉(zhuǎn)換步驟中所轉(zhuǎn)換的信息。
59.一種計算機可讀取媒體,其特征在于,具有用于執(zhí)行如權(quán)利要求55所述的方法的計算機可執(zhí)行指令。
60.一種可由某個應(yīng)用程序的當(dāng)前版本和該應(yīng)用程序的后續(xù)版本讀取的數(shù)據(jù)文件,其特征在于,該數(shù)據(jù)文件包含對象;對象屬性列表數(shù)組,包含至少一個與該對象相關(guān)聯(lián)的已知屬性(對于當(dāng)前版本該已知屬性已知)和至少一個與該對象相關(guān)聯(lián)的未知屬性(對于當(dāng)前版本該未知屬性未知);以及對象版本水印,指示可以解釋該對象中所包含的所有屬性的該應(yīng)用程序的最低版本;其中,該應(yīng)用程序的當(dāng)前版本可以將該對象版本水印和與該當(dāng)前版本相關(guān)的版本號相比較,并響應(yīng)該對象版本水印大于與該當(dāng)前版本相關(guān)的版本號的判定而忽略未知屬性。
61.一種可由某個應(yīng)用程序的當(dāng)前版本和該應(yīng)用程序的以前版本讀取的數(shù)據(jù)文件,其特征在于,該數(shù)據(jù)文件包含對象;對象屬性列表數(shù)組,包含至少一個與該對象相關(guān)聯(lián)并對應(yīng)于該以前版本的屬性;以及對象版本水印,指示可以解釋該對象中所包含的所有屬性的該應(yīng)用程序的最低版本;其中,該應(yīng)用程序的當(dāng)前版本可以將該對象版本水印和與該當(dāng)前版本相關(guān)的版本號相比較,并響應(yīng)該對象版本水印小于與該當(dāng)前版本相關(guān)的版本號的判定而根據(jù)數(shù)據(jù)文件中的屬性中的至少一個屬性來更新另一個與該對象相關(guān)聯(lián)并對應(yīng)于該當(dāng)前版本的屬性。
全文摘要
本發(fā)明可以提供一種與應(yīng)用程序的以前、當(dāng)前以及將來版本兼容的可擴展的文件格式。本發(fā)明可以包括將文件版本水印包含在應(yīng)用程序的原始數(shù)據(jù)文件中。文件版本水印可以指示原始數(shù)據(jù)文件的各種屬性。文件版本水印可以包括高版本水印、最后版本水印、低版本水印、創(chuàng)建版本水印,以及對象版本水印。每個文件版本水印可以指示對該文件所作的改變、添加或刪除。本發(fā)明可以使用文件版本水印來判定該文件或文件中的特定信息是否與應(yīng)用程序的以前、當(dāng)前或?qū)戆姹鞠鄬?yīng)。因而,本發(fā)明可以根據(jù)判定的結(jié)果來載入或保存原始數(shù)據(jù)文件。
文檔編號G06F9/445GK1571978SQ02820479
公開日2005年1月26日 申請日期2002年10月17日 優(yōu)先權(quán)日2001年10月18日
發(fā)明者A·C·艾弗索, B·E·羅斯 申請人:微軟公司