專利名稱::文件系統(tǒng)項及相關(guān)聯(lián)實體的串行化的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明一般涉及對象存儲系統(tǒng),尤其涉及串行化和/或反串行化項及相關(guān)聯(lián)的實體。
背景技術(shù):
:傳統(tǒng)上,在計算機(jī)文件系統(tǒng)中,文件是數(shù)據(jù)存儲的基本單位。通常,文件系統(tǒng)中的文件具有以下特征。它是多個字節(jié)的單一序列。它具有定長,且一般存儲在非易失性存儲介質(zhì)上。它被創(chuàng)建在目錄中,并具有可由文件中操作引用的名稱,該名稱可能與其路徑結(jié)合。另外,文件系統(tǒng)可以將其它信息與文件相關(guān)聯(lián),這些其它信息諸如許可位或其它文件屬性;文件創(chuàng)建、最后修訂及最后訪問的時戳。特定應(yīng)用程序也可以在文件的字節(jié)流中存儲域?qū)S脤傩?。例如,由文字處理?yīng)用程序使用并因此被認(rèn)作為“文檔”的文件可以存儲類似文檔的標(biāo)題和作者的屬性。這些屬性以創(chuàng)建該文件的應(yīng)用程序所專用的格式被存儲在文件的字節(jié)流中。屬性不被結(jié)構(gòu)化為對象,也沒有標(biāo)準(zhǔn)化的名稱。字節(jié)流是非結(jié)構(gòu)化的值。另外,常規(guī)的計算機(jī)文件系統(tǒng)向用戶提供了可用的受限文件組織技術(shù)。例如,現(xiàn)有的應(yīng)用程序基本上采用樹結(jié)構(gòu)文件夾格式來組織和顯示各種類型的文件。盡管可以查看文件夾、子文件夾和文件之間的某些關(guān)系,但是這樣的關(guān)系在范圍中是受限的,且主要取決于顯式的用戶輸入。例如,可以按照如用戶指示的公共文件夾或子文件夾來相關(guān)多個文件。
發(fā)明內(nèi)容以下呈現(xiàn)了本發(fā)明的簡化概要,以提供對本發(fā)明的某些方面的基本理解。該概要不是本發(fā)明的寬泛的概觀。它不旨在標(biāo)識本發(fā)明的關(guān)鍵/重要的元素,也不描繪本發(fā)明的范圍。它唯一的目的是以簡化的形式呈現(xiàn)本發(fā)明的某些概念,作為之后呈現(xiàn)的更詳細(xì)描述的序言。本發(fā)明允許對文件系統(tǒng)項及相關(guān)聯(lián)實體進(jìn)行串行化和/或反串行化。文件系統(tǒng)“項”包括核心類,例如,聯(lián)系人,它可以包括屬性。項可以是簡單或者是復(fù)合的(例如,包含嵌入其中的其它項)。與項相關(guān)聯(lián)的可以是諸如片段、與其它項的鏈接和/或擴(kuò)展等實體。通過串行化,如果存在項及相關(guān)聯(lián)實體的一致副本,可以對其進(jìn)行捕捉(例如,用于傳送項并在目的地系統(tǒng)上重構(gòu)該項)。根據(jù)本發(fā)明的一方面,提供了一種串行化系統(tǒng)。該串行化系統(tǒng)包括標(biāo)識與項相關(guān)聯(lián)實體的標(biāo)識組件,以及串行化項及相關(guān)聯(lián)實體的串行化組件。串行化組件還可以串行化包含與項及相關(guān)聯(lián)實體相關(guān)聯(lián)的信息的頭部。頭部可以便于對項及相關(guān)聯(lián)實體的隨機(jī)訪問(例如,允許讀程序僅解釋/解析其所感興趣的部分)??扇芜x地,串行化系統(tǒng)可以展示便于將項及其相關(guān)聯(lián)實體從一個位置復(fù)制、移動和/或傳送至另一位置(例如,分離的計算機(jī)系統(tǒng)和/或可移動介質(zhì))的應(yīng)用程序編程接口(API)。本發(fā)明的另一方面提供了一種可以被用來反串行化項及其相關(guān)聯(lián)實體的項反串行化系統(tǒng)。該反串行化系統(tǒng)可以使用頭部來獲取對項及相關(guān)聯(lián)實體的隨機(jī)訪問(例如,可以僅解釋/解析其感興趣的部分)。反串行化系統(tǒng)可以在文件系統(tǒng)存儲中重新創(chuàng)建項結(jié)構(gòu)。為了達(dá)到前述及相關(guān)目的,此處結(jié)合以下描述及附圖描述了本發(fā)明的某些說明性方面。然而,這些方面僅指示可在其中使用本發(fā)明的原理的各種方式中的少量幾種,而本發(fā)明旨在包括所有這樣的方面及其等效實施方式。當(dāng)結(jié)合附圖考慮,通過閱讀本發(fā)明的以下詳細(xì)描述時,本發(fā)明的其它優(yōu)點和新穎的特征將變得明顯。圖1是根據(jù)本發(fā)明的一方面的串行化系統(tǒng)的框圖。圖2是根據(jù)本發(fā)明的一方面的示例性項結(jié)構(gòu)的示意圖。圖3是根據(jù)本發(fā)明的一方面的示例性串行化結(jié)構(gòu)的示意圖。圖4是根據(jù)本發(fā)明的一方面的串行化系統(tǒng)的框圖。圖5是根據(jù)本發(fā)明的一方面的串行化環(huán)境的框圖。圖6是根據(jù)本發(fā)明的一方面的反串行化系統(tǒng)的框圖。圖7是根據(jù)本發(fā)明的一方面的反串行化環(huán)境的框圖。圖8是根據(jù)本發(fā)明的一方面便于串行化項的方法的流程圖。圖9是進(jìn)一步示出圖8的方法的流程圖。圖10是根據(jù)本發(fā)明的一方面便于反串行化項的方法的流程圖。圖11是進(jìn)一步示出圖10的方法的流程圖。圖12示出了其中本發(fā)明可以運(yùn)作的示例操作環(huán)境。具體實施例方式現(xiàn)在參考附圖描述本發(fā)明,在全部附圖中,同樣的參考標(biāo)號指的是同樣的元素。在以下描述中,為說明起見,描述了眾多具體細(xì)節(jié),以提供對本發(fā)明的全面理解。然而,顯然,本發(fā)明可以無需這些具體細(xì)節(jié)而實現(xiàn)。在其它實例中,公知的結(jié)構(gòu)和設(shè)備以框圖形式示出,以便于描述本發(fā)明。如在本申請中所使用的,術(shù)語“組件”、“處理程序”、“模型”、“系統(tǒng)”等指的是計算機(jī)相關(guān)的實體,它們或者是硬件、硬件和軟件的組合、軟件或者是執(zhí)行中的軟件。例如,組件可以是,但不限于,運(yùn)行在處理器上的進(jìn)程、處理器、對象、可執(zhí)行代碼、執(zhí)行的線程、程序和/或計算機(jī)。作為說明,運(yùn)行在服務(wù)器上的應(yīng)用程序和服務(wù)器本身均可以是組件。一個或多個組件可以駐留在執(zhí)行中的進(jìn)程和/或線程內(nèi),且組件可以位于一臺計算機(jī)上和/或分布在兩臺或多臺計算機(jī)之間。同樣,這些組件可以從其上存儲各種數(shù)據(jù)結(jié)構(gòu)的各種計算機(jī)可讀介質(zhì)執(zhí)行。這些組件可以通過本地和/或遠(yuǎn)程進(jìn)程通信,諸如根據(jù)含有一個或多個數(shù)據(jù)包的信號(例如,來自一個組件的數(shù)據(jù)與處于本地系統(tǒng)、分布式系統(tǒng)中的組件和/或跨諸如因特網(wǎng)等網(wǎng)絡(luò)與其它系統(tǒng)通過信號交互)。根據(jù)本發(fā)明,計算機(jī)組件可以被存儲在例如計算機(jī)可讀介質(zhì)上,包括但不限于,ASIC(應(yīng)用專用集成電路)、CD(光盤)、DVD(數(shù)字視頻盤)、ROM(只讀存儲器)、軟盤、硬盤、EEPROM(電可擦可編程只讀存儲器)以及記憶棒。本發(fā)明允許文件系統(tǒng)項及相關(guān)聯(lián)實體的串行化和/或反串行化。如在本申請中所使用的,文件系統(tǒng)“項”包括核心類,例如聯(lián)系人,它可以包括多個屬性(例如,名字、地址、電話號碼)。項可以是簡單或復(fù)合的(例如,包括嵌入其中的其它項)。與項相關(guān)聯(lián)的可以是實體,諸如項片段、與其它項的鏈接(例如,關(guān)系)和/或擴(kuò)展(例如,附加屬性)。參考圖1,示出了根據(jù)本發(fā)明的一方面的串行化系統(tǒng)100。系統(tǒng)100可以被用來串行化項(例如,核心項)及與項相關(guān)聯(lián)的實體。系統(tǒng)100還可以生成包含與項及相關(guān)聯(lián)的實體相關(guān)聯(lián)的信息的頭部,并對其串行化。串行化系統(tǒng)100包括標(biāo)識與項相關(guān)聯(lián)的實體的標(biāo)識組件110。標(biāo)識組件110可以從文件系統(tǒng)存儲120中獲取關(guān)于項的信息。如下所述,信息可以包括,例如項片段、擴(kuò)展、外向鏈接和/或嵌入的項。串行化系統(tǒng)100還包括串行化項及相關(guān)聯(lián)實體的串行化組件130。串行化組件130還可以生成包含與項及相關(guān)聯(lián)實體相關(guān)聯(lián)的信息的頭部,并對其串行化。頭部可以便于對項及相關(guān)聯(lián)實體的隨機(jī)訪問(例如,允許讀程序只翻譯/解析其感興趣的部分)。簡要地參考圖2,示出了根據(jù)本發(fā)明的一方面的示例性項結(jié)構(gòu)示意圖200。在該示例中,核心項210可以包括屬性。例如,核心項210可以是具有屬性“名字”和“家庭電話號碼”的“聯(lián)系人”。核心項210可以含有由特定應(yīng)用程序添加的擴(kuò)展220,來用額外的屬性擴(kuò)展核心項210。繼續(xù)“聯(lián)系人”核心項210的示例,電子郵件應(yīng)用程序可以通過添加擴(kuò)展屬性“電子郵件地址”和“業(yè)務(wù)電話號碼”來擴(kuò)展核心項210的屬性。然后,核心項210可以被鏈接至零個、一個或多個其它項230。鏈接可以是外向鏈接240和/或內(nèi)向鏈接250。外向鏈接240指的是以核心項210為源的核心項210與其它項230之間的耦合。內(nèi)向鏈接250指的是以其它項230為源的核心項210與其它項230之間的耦合。外向鏈接240和/或內(nèi)向鏈接250可以是類型化的。因此鏈接240、250提供項耦合的關(guān)系能力。例如,鏈接240、250可以是“朋友”類型的,該類型具有相關(guān)聯(lián)屬性“友誼日期”和“等級”。另外,鏈接240、250可以唯一地標(biāo)識(例如,使用全局唯一標(biāo)識符)項之間的耦合。核心項210還可以包括嵌入項260,此處有時將它們共同稱為復(fù)合項。例如,“聯(lián)系人”類型的核心項210可以包括含有圖象(例如,照片)的嵌入項260。根據(jù)本發(fā)明的一方面,可以通過項級操作(例如,備份、還原、復(fù)制和/或?qū)С?將復(fù)合項作為單個一致性單元來查看。核心項210可以含有片段270,片段是允許在項類型和項擴(kuò)展中對大集合進(jìn)行聲明的實體類型。集合的元素是含有鍵的實體。這使得應(yīng)用程序能夠獨(dú)立于持有項(owningitem)來訪問和修改集合中的元素。不必為修改集合檢索持有項。另外,系統(tǒng)可以跟蹤嵌套范圍內(nèi)的每一元素的改變。核心項210可以由文件備份或可以具有FileStream(文件流)屬性。文件后備項(filebackeditem)是其中從后備文件280中提升該項的一部分的項。擴(kuò)展220、外向鏈接240、與內(nèi)向鏈接250相關(guān)聯(lián)的信息(例如,鏈接標(biāo)識符)、嵌入項260、片段270和/或后備文件280可以被共同稱為核心項210的“相關(guān)聯(lián)實體”。當(dāng)接收到串行化核心項210的請求時,如果存在核心項210及相關(guān)聯(lián)實體,那么復(fù)制它們以保存核心項210的結(jié)構(gòu)完整性。通過包含相關(guān)聯(lián)實體,接收串行化流的系統(tǒng)(未示出)可以在核心項210及相關(guān)聯(lián)實體的適當(dāng)上下文中重新構(gòu)造它們。示意圖200示出了可以與串行化系統(tǒng)100一起使用的示例性項結(jié)構(gòu)的元素。本領(lǐng)域的技術(shù)人員可以認(rèn)識到,本發(fā)明不限于圖中所示的項結(jié)構(gòu)??梢允褂糜糜趯崿F(xiàn)本發(fā)明的任何合適的項結(jié)構(gòu),且所有這樣的項結(jié)構(gòu)都旨在落入所附權(quán)利要求書的范圍內(nèi)。參考圖1和2,可以使用系統(tǒng)100來串行化(例如,用于向另一計算機(jī)系統(tǒng)傳送)核心項210和核心項210的相關(guān)聯(lián)實體(例如,擴(kuò)展220、外向鏈接240、與內(nèi)向鏈接250相關(guān)聯(lián)的信息(例如,鏈接標(biāo)識符)、嵌入項260和/或片段270)。標(biāo)識組件110標(biāo)識文件系統(tǒng)存儲120內(nèi)的核心項210,并向串行化組件130提供標(biāo)識信息。標(biāo)識組件110還標(biāo)識與核心項210相關(guān)聯(lián)的實體,并向串行化組件130提供關(guān)于該相關(guān)聯(lián)實體的標(biāo)識信息。串行化組件130可以為串行化過程中填充的頭部(例如,臨時性地)分配空間。在該示例中,串行化組件130執(zhí)行以下動作1.為頭部分配空間;2.串行化核心項210;3.如果存在片段270,對其串行化;4.如果存在外向鏈接240,對其串行化;5.如果存在內(nèi)向鏈接標(biāo)識符,使用其填充頭部;6.如果存在擴(kuò)展220,對其串行化;7.對每一嵌入項260,將特定嵌入項作為核心項210,遞歸地重復(fù)動作1至8;8.如果存在后備文件,對其串行化;9.串行化長度、頭部偏移量及頭部本身。轉(zhuǎn)向圖3,示出了根據(jù)本發(fā)明一方面的示例性串行化結(jié)構(gòu)300。例如,可以由串行化組件130生成結(jié)構(gòu)300,例如publicclassUdtSerialization{BinaryUdtSerializationbin;}表1結(jié)構(gòu)300包括串行化長度320和頭部偏移量330,例如publicclassBinaryUdtSerialization{//流中串行化的偏移量longserializationOffset;//串行化的長度longserializationLength;}表2表2中示出的類用于支持被用來解釋用戶定義類型(UDT)的二進(jìn)制串行化的元數(shù)據(jù)。然后,結(jié)構(gòu)300包括核心項部分340publicclassCoreItemUdtSerialization{//根項的項idSqlGuiditemId;//容器的項idSqlGuidcontainerId;//項的名字空間SqlStringnamespaceName;//它是文件后備項?boolisFileBacked;//如果內(nèi)嵌后備文件,則為后備文件的偏移量longbackingFileOffset;//后備文件的長度longbackingFileLength;//存儲文件后備項的屬性System.IO.FileAttributesfatFileAttributes;//后備文件的創(chuàng)建時間DateTimefileCreationTime;//后備文件的最近寫入時間DateTimefileLastWriteTime;//后備文件的最近訪問時間DateTimefileLastAccessTime;//串行化中安全性描述符的偏移量longsdOffset;//串行化中安全性描述符的長度longsdLength;//項片段串行化開頭的偏移量longitemFragmentOffset;//串行化中包含的項片段的數(shù)量longitemFragmentCount;}表3結(jié)構(gòu)300還包括項片段350,例如publicclassItemFragmentHeaderUdtSerialization{//項片段的片段idprivateSqlGuidfragId;//片段的組idprivateSqlGuidsetId;}表4然后,結(jié)構(gòu)300可以包括內(nèi)向鏈接部分360,例如publicclassLinkHeaderUdtSerialization{SqlGuidsourceItemId;SqlGuidtargetItemId;SqlGuidlinkId;privateboolexcludesSchemaMetadata;}表5盡管鏈接對象一般含有諸如源和目標(biāo)項標(biāo)識符等信息,然而在目標(biāo)處鏈接類型的模式缺失而鏈接不能被反串行化的情況下,該信息在LinkHeader(鏈接頭部)中重復(fù)。繼續(xù),結(jié)構(gòu)300可以包括項擴(kuò)展部分370publicclassItemExtensionHeaderUdtSerialization{}表6結(jié)構(gòu)300可以包括嵌入項380publicclassEmbeddedItem{//嵌入項的頭部ItemHeaderitemHeader;}表7其中publicclassItemHeader{//核心項頭部CoreItemcoreItem;//包含該項所有外向鏈接的鏈接頭部的列表ArrayListoutLinks;//該項的擴(kuò)展的擴(kuò)展頭部的列表ArrayListextensions;//嵌入項頭部的列表ArrayListembeddedItems;//該項的內(nèi)向鏈接的id列表ArrayListinLinkIds;//關(guān)于后備文件的信息privateBackingFileHeaderbackingFileHeader;//串行化是否排除模式元數(shù)據(jù)boolexcludesSchemaMetadata;//串行化中的安全性描述符的偏移量longsdOffset;//串行化中的安全性描述符的長度longsdLength;}表8然后,結(jié)構(gòu)300可以包括后備文件部分390publicclassBackingFileHeader{//如果內(nèi)嵌后備文件,則為后備文件的偏移量privatelongbackingFileOffset;//后備文件的長度privatelongbackingFileLength;//存儲文件后備項的屬性privateSystem.IO.FileAttributesfatFileAttributes;//后備文件的創(chuàng)建時間privateDateTimefileCreationTime;//后備文件的最近寫入時間privateDateTimefileLastWriteTime;//后備文件的最近訪問時間privateDateTimefileLastAccessTime;}表9最后,結(jié)構(gòu)300可以包括頭部部分394。頭部部分394可以包括與核心項及相關(guān)聯(lián)實體相關(guān)聯(lián)的信息。頭部部分394可以便于對核心項及相關(guān)聯(lián)實體的訪問(例如,允許讀程序僅解釋/解析它所感興趣的部分)。接著參考圖4,示出了根據(jù)本發(fā)明的一方面的串行化系統(tǒng)400。串行化系統(tǒng)400包括如上所述的標(biāo)識組件110和串行化組件130。系統(tǒng)400還包括應(yīng)用程序接口(API)410。API410便于系統(tǒng)400與應(yīng)用程序420之間的通信。例如,API410可以便于將項及其相關(guān)聯(lián)實體從一個位置復(fù)制、移動和/或傳送至另一位置(例如,分離的計算機(jī)系統(tǒng)和/或可移動介質(zhì))。因此,可以將API用于項級操作,諸如導(dǎo)出、備份、還原、復(fù)制等。在一個示例中,應(yīng)用程序420可以通過向API410提供串行化信息(例如,標(biāo)志)來選擇性地包括項的全部或部分。API410可以在文件系統(tǒng)級和/或存儲過程級展示。以下討論示例性API410SerializeItem(串行化項)APISerializeItemAPI生成包括以下組件(如果存在)的項串行化●核心項●外向鏈接(被串行化的項為源項的鏈接)以及內(nèi)向鏈接(被串行化的項為目標(biāo)項的鏈接)的鏈接標(biāo)識符●復(fù)合項中的項●擴(kuò)展●項片段●實體的本地創(chuàng)建時間和修改時間。例如,對SerializeItemAPI的調(diào)用可以是以下形式[System.Storage.Serialization].SerializeItem(@itemiduniqueidentifier,@dataoptionsint)returnsvarbinary(max)其中itemid(項id)是將被串行化的項的標(biāo)識符;dataoptions指的是串行化數(shù)據(jù)選項——如下所述用于定制串行化內(nèi)容的選項;并且,該API返回字節(jié)數(shù)組形式的項的串行化。SerializeItemToFile(將項串行化至文件)萬一項相當(dāng)大,在存儲器中對項串行化并將串行化返回給客戶機(jī)應(yīng)用程序可能是低效的。對這樣的情形,可以使用將串行化直接寫至由應(yīng)用程序指定的文件的SerializeItemToFileAPI。這可以限制在客戶機(jī)應(yīng)用程序和服務(wù)器端雙方由串行化所消耗的存儲器。另外,API可以導(dǎo)向更好的性能,因為需要被從服務(wù)器發(fā)送至客戶機(jī)應(yīng)用程序的字節(jié)數(shù)量要少得多。例如,對SerializeItemToFile的調(diào)用可以是以下形式.SerializeItemToFile(@itemiduniqueidentifier,@dataoptionsint,@filenamenvarchar(1024))returnsbigint其中itemid是將被串行化的項的標(biāo)識符;dataoptions指的是串行化數(shù)據(jù)選項——如下所述用于定制串行化內(nèi)容的選項;filename(文件名)是向其串行化對象的文件的名稱;并且,API返回寫入至文件的字節(jié)數(shù)。SerializationDataOptions(串行化數(shù)據(jù)選項)選項值允許串行化函數(shù)滿足各種顧客情形的需求。這些選項可以被用來選取關(guān)于應(yīng)該作為串行化的一部分被包括的項的數(shù)據(jù)/元數(shù)據(jù)元素。這些選項可以影響串行化的內(nèi)容。在該示例中,選項的值可以被指定為以下的OR(或)組合●公共用例中的零個或一個●各單個選項中的零個、一個或多個選項。單個選項這些選項為單個情形定義項邊界。例如●INCLUDE_EXTENSIONS0x2指定擴(kuò)展是否應(yīng)被包含在該串行化中?!馡NCLUDE_OUTGOING_LINKS0x4指定輸出鏈接是否應(yīng)被包含在該串行化中?!馡NCLUDE_EMBEDDED0x8指定復(fù)合項中的所有的項是否應(yīng)被包含在該串行化中?!馡NCLUDE_SECURITY_DESCRIPTOR0x10指定項上的顯式訪問控制列表(ACL)是否應(yīng)被包含?!馡NCLUDE_SYNC_METADATA0x80包含非授權(quán)還原所需的同步元數(shù)據(jù)。●INCLUDE_SCHEMA_METADATA0x100指定反串行化該項所需的模式元數(shù)據(jù)是否必須被包含在該串行化中。萬一要串行化大量項,那么應(yīng)用程序可以選擇將其與單個項串行化分離地備份?!馡NLINE_BACKING_FILE0x200指定后備文件是否內(nèi)嵌在串行化中還是僅有文件的UNC路徑作為串行化的一部分。這也包括后備文件的屬性(隱藏、只讀等)和時戳。使用這些示例性選項的有效串行化數(shù)據(jù)選項的示例包括SERIALIZE_FOR_COPY|INCLUDE_IDs該選項產(chǎn)生項的串行化,為復(fù)制定制,也包含id。SERIALIZE_FOR_BACKUP|INCLUDE_IDs這是有效選項,但是指定該選項,SERIALIZE_FOR_BACKUP|INCLUDE_IDs自動開啟且分離地指定它是冗余的。INCLUDE_IDs|INCLUDE_OUTGOING_LINKS這產(chǎn)生在串行化中保留項id的核心項及其擴(kuò)展。在該示例中,不指定任何公共用例是有效的。使用這些示例性選項的無效串行化數(shù)據(jù)選項的示例包括SERIALIZE_FOR_COPY|SERIALIZE_FOR_BACKUP在該示例中指定一個以上默認(rèn)值是無效的。SERIALIZE_FOR_COPY&!INCLUDE_EXTENSIONS在該示例中,不允許‘a(chǎn)nd(與)’組合。為了達(dá)到以上目的,必須使用如下的顯式的單個選項或其組合來指定選項INCLUDE_OUTGOING_LINKS|INCLUDE_EMBEDDED|INLINE_FILESTREAM_ATTRIBUTES|INCLUDE_SCHEMA_METADATA公共用例這些選項為大多數(shù)公共使用情形定義了項界限。例如●SERIALIZE_FOR_COPY0x10000000當(dāng)選中該選項時,開啟以下選項?!餓NCLUDE_EXTENSIONS,○INCLUDE_OUTGOING_LINKS,○INCLUDE_EMBEDDED,○INCLUDE_SECURITY_DESCRIPTOR,○INLINE_FILESTREAM_ATTRIBUTESand○INCLUDE_SCHEMA_METADATA●SERIALIZE_FOR_BACKUP0x20000000當(dāng)選中該選項時,開啟以下選項?!餓NCLUDE_EXTENSIONS,○INCLUDE_OUTGOING_LINKS,○INCLUDE_EMBEDDED,○INLINE_FILESTREAM_ATTRIBUTES,○INCLUDE_SECURITY_DESCRIPTOR,○INCLUDE_SCHEMA_METADATA○INCLUDE_IDsand○INCLUDE_SYNC_METADATA轉(zhuǎn)向圖5,示出了根據(jù)本發(fā)明的一方面的串行化環(huán)境500。應(yīng)用程序420向串行化系統(tǒng)400提供與將被串行化的項相關(guān)聯(lián)的信息,例如ItemID(項id)。之后,串行化系統(tǒng)400從文件存儲系統(tǒng)元數(shù)據(jù)510中獲取關(guān)于ItemID的類型信息。使用ItemID及類型信息,串行化組件400向文件系統(tǒng)視圖530查詢(例如,遞歸地)上述與將被串行化的項相關(guān)聯(lián)的信息(例如,項及相關(guān)聯(lián)的實體)。在一個示例中,串行化組件130不支持對項片段的隨機(jī)訪問。在該示例中,可以使用與頭部的起始偏移量和每一片段前面的長度字段來順序地(例如,以鏈表的方式)訪問項片段。復(fù)合項中的項當(dāng)選中INCLUDE_EMBEDDED選項時,系統(tǒng)400遞歸地走查復(fù)合項中的各個項并對其串行化。例如,系統(tǒng)400可以執(zhí)行多個查詢來走查該遞歸結(jié)構(gòu)并串行化每一項。得到的串行化具有遞歸結(jié)構(gòu),其中嵌入項串行化被包含在其父串行化中。在一個示例中,復(fù)合項中的每一項可以具有不同的安全性描述符。因此,串行化API的調(diào)用者不具有對復(fù)合項中的所有項的訪問是可能的。在該示例中,在其中用戶不具有對所有項的訪問的情形中,調(diào)用者不能訪問的項將不被串行化。后備文件在該示例中,后備文件或者可以被內(nèi)嵌至串行化中,或者由調(diào)用者分開復(fù)制(例如,基于串行化選項)。后備文件內(nèi)嵌當(dāng)應(yīng)用程序請求在串行化中包含文件后備項時,可以從文件存儲系統(tǒng)120中讀取后備文件。除文件以外,屬性、創(chuàng)建、最近訪問和/或修改時間也可以被包含在串行化頭部中。例如,當(dāng)為備份(例如,需要在反串行化之后將時戳還原至其原始值)而對項串行化時可以使用該信息。不內(nèi)嵌后備文件在該情形中,應(yīng)用程序例如通過在調(diào)用串行化API時不設(shè)置INLINE_BACKING_FILE選項,不請求在串行化中包含文件后備項。在該示例中,串行化API可以將文件名嵌入頭部中,而非在串行化中包含文件內(nèi)容。從而,應(yīng)用程序可以讀取該文件名并直接使用文件存儲系統(tǒng)API來處理后備文件的內(nèi)容。然而,在該情況下,同樣也可以在串行化頭部中捕捉到文件屬性以及創(chuàng)建、最近訪問和修改時戳。例如,該信息可以是何時當(dāng)為備份(例如,要求在反串行化之后將時戳還原至其原始值)對項進(jìn)行串行化。模式元數(shù)據(jù)在該示例中,隨每一實體串行化捕捉模式元數(shù)據(jù),因為它包含對文件系統(tǒng)存儲120唯一的typeId(類型id)。程序集名稱和版本映射的typeId是反串行化用戶定義類型串行化所需的模式元數(shù)據(jù)。例如,可以存在與每一實體相關(guān)聯(lián)的模式元數(shù)據(jù)(例如,項、鏈接、擴(kuò)展和/或片段),且可以隨各個實體串行化包含它。為了獲取該信息,串行化系統(tǒng)400可以查詢系統(tǒng)元數(shù)據(jù)520以獲取全限定類型名稱。例如,給定TypeId,GetNameFromTypeId(從類型id中獲得名稱)返回全限定類型名稱,作為僅一行兩列分別包含SchemaName(模式名稱)和TypeName(類型名稱)的表??梢詫碜晕募到y(tǒng)存儲120的各個項/鏈接/擴(kuò)展/片段表的TypeId用作函數(shù)的輸入,以獲取模式名稱和類型名稱。這還可以與sys.assemblies表進(jìn)一步結(jié)合來獲取全限定類型名稱。一般而言,TypeId跨文件系統(tǒng)存儲130(例如,數(shù)據(jù)庫)不是唯一的,然而全限定類型名稱是唯一的。對存儲內(nèi)復(fù)制(例如,在源和目標(biāo)處類型id相同),可以排除模式元數(shù)據(jù)。安全性如前所述,每一項可以具有與其相關(guān)聯(lián)的安全性描述符,該描述符標(biāo)識可以訪問該項的用戶和/或不能訪問它們的用戶。繼續(xù)關(guān)于圖5討論的示例,標(biāo)識了示例性信任邊界540。在該示例中,環(huán)境500可以依賴于文件系統(tǒng)授權(quán)來確保用戶具有連接至文件系統(tǒng)存儲120的許可。特定串行化或反串行化API的調(diào)用者一般在調(diào)用API之前已經(jīng)與文件系統(tǒng)存儲120建立了連接。然后轉(zhuǎn)向圖6,示出了根據(jù)本發(fā)明的一方面的反串行化系統(tǒng)600。系統(tǒng)600可以被用來反串行化例如由系統(tǒng)100和/或系統(tǒng)400生成的項及其相關(guān)聯(lián)的實體。系統(tǒng)600可以使用頭部來獲取對項及相關(guān)聯(lián)實體的隨機(jī)訪問(例如,可以僅解釋/解析其所感興趣的部分)。系統(tǒng)600可以展示便于對項及其相關(guān)聯(lián)實體進(jìn)行反串行化的應(yīng)用程序編程接口(API)610。API610可以向反串行化組件620提供例如從應(yīng)用程序630接收的已串行化項。反串行化組件620重新創(chuàng)建項的結(jié)構(gòu)并將其存儲在文件系統(tǒng)存儲640中。當(dāng)從應(yīng)用程序630中接收到反串行化項的請求之后,API610將該已串行化的項提供給反串行化組件620,反串行化組件620可以使用如上所述的頭部偏移量來讀取頭部(例如,至存儲器),并在反串行化過程中使用該頭部。在一個示例中,反串行化組件620然后可以1.反串行化核心項2.反串行化項片段3.反串行化外向鏈接4.反串行化擴(kuò)展5.例如按照遞歸的方式自頂向下遍歷樹來反串行化嵌入在復(fù)合項容器中的項。6.反串行化后備文件經(jīng)反串行化的項及相關(guān)聯(lián)實體被存儲在文件系統(tǒng)存儲640中。鏈接修正在一個示例中,在反串行化過程中,系統(tǒng)600確保一旦項被反串行化之后,存在于串行化中的項的所有關(guān)系繼續(xù)存在。而且,因為內(nèi)向鏈接信息被串行化了,串行化也將修正內(nèi)向鏈接至被反串行化的項。這確保了當(dāng)反串行化已串行化的項后得到的是(例如,完全)相同的項。例如,修正工作的范圍可以是給定復(fù)制操作中的所有項。如下所述,串行化API的用戶可以通過調(diào)用兩個助手APIBeginDeserializationBatch(開始反串行化批處理)和EndDeserializationBatch(結(jié)束反串行化批處理)來創(chuàng)建批處理范圍。在該范圍內(nèi)反串行化的任何項將使得其鏈接修正至該范圍內(nèi)的其他項。例如,可以在項被反串行化時,使用臨時表來跟蹤該項的關(guān)系的ID。該臨時表然后將舊的ID映射至新的ID,并串行化,然后修復(fù)鏈接的目標(biāo)ID和源ID。在該示例中,可以修復(fù)(批處理量范圍內(nèi)的)鏈接和包含關(guān)系。例如,這可以被實現(xiàn)為DeserializeItem的額外標(biāo)志。然而,在一個示例中,串行化API的消費(fèi)者被要求顯式地規(guī)定批處理范圍的開始和結(jié)束。APIAPI610便于系統(tǒng)600與應(yīng)用程序630之間的通信。例如,API410可以便于已串行化項的反串行化。可以在文件系統(tǒng)級和/或存儲過程級展示API610。以下討論示例性API610DeserializeItem(反串行化項)APIDeserializeItemAPI反串行化項,并將它置于其id被指定為containerid(容器id)的容器中。如果傳遞的名字空間和容器id均為空,那么可以從串行化中取得它們的值。存儲過程在項被串行化時所處的同一容器中反串行化該項。例如,在諸如將整棵樹(例如,文件夾和子文件夾)從源復(fù)制至目的地,同時保留項id的情形中可以如此期望。在該示例中,如果串行化不包含項id,容器id將不能被傳遞為空(例如,這樣做將導(dǎo)致錯誤)。例如[System.Storage.Serialization].DeserializeItem(@serializationvarbinary(max),@containerIduniqueidentifier,@namespacenamenvarchar(255),@optionsint,@itemiduniqueidentifieroutput)@fileinfolistFileInfoListoutput其中serialization指的是已串行化的項(例如,作為早先串行化結(jié)果而產(chǎn)生的);cotainerId指的是包含新項的容器的ItemId;namespacename(名字空間名稱)指的是被反串行化的項的名字空間的名稱;options(選項)指的是管理反串行化過程的行為的選項(以下描述);itemid指的是新項的ItemId;而fileinfolist是包含在該項中的文件名、項id和文件大小的列表。例如ClassFileInfoListArrayList;//它將包含以下實例ClassFileInfo{SqlGuiditemId;SqlStringrelativePath;SqlBigintsize;}使用重寫現(xiàn)有項來反串行化(DeserializeItemReplace)該API610反串行化存儲中的現(xiàn)有項,并使用給定串行化的內(nèi)容對其重寫。在該示例中,當(dāng)重寫文件后備項時,截去后備文件。如果串行化不含有內(nèi)嵌的文件,那么該操作導(dǎo)致長度為零的后備文件。而且,在該示例中,僅當(dāng)將同一項還原至之前的狀態(tài)時,才能使用該API610。例如[System.Storage.Serialization].DeserializeItemReplace(@serializationvarbinary(max),@targetitemiduniqueidentifier,@optionsint)其中serialization指的是已串行化的項(例如,作為早先串行化結(jié)果而產(chǎn)生的);targetitemid(目標(biāo)項id)指的是被替換的項的ItemId;而options指的是管理反串行化過程的行為的選項(以下描述)。從文件中反串行化項(DeserializeItemFromFile)可以提供該API610來允許從文件(例如,由系統(tǒng)100和/或系統(tǒng)400產(chǎn)生的)中反串行化大型項。例如,文件可以由如上所述的SerializeItemToFileAPI來產(chǎn)生,和/或通過調(diào)用如上所述的SerializeItemAPI并之后將項串行化寫入至文件來產(chǎn)生。在該示例中,如果將名字空間名稱和容器id均傳遞為空,那么它們的值可以從串行化中取得。例如[System.Storage.Serialization].DeserializeItemFromFile(@filenamenvarchar(1024),@containerIduniqueidentifier,@namespacenamenvarchar(255),@optionsint,@itemiduniqueidentifieroutput,@fileinfolistFileInfoListoutput其中,filename指的是含有將被反串行化的項的串行化的文件的名稱;containerId指的是包含新項的容器的ItemId;namespacename指的是被反串行化的項的名字空間的名稱;options指的是新項的ItemId;而fileinfolist是該項中包含的文件名、項id和文件大小的列表。例如ClassFileInfoListArrayList;//它將包含以下實例ClassFileInfo{SqlGuiditemId;SqlStringrelativePath;SqlBigintsize;}使用從文件重寫現(xiàn)有項來反串行化(DeserializeItemReplaceFromFile)使用從文件重寫現(xiàn)有項反串行化API610使用包含在所指定的文件(例如,由上述SerializeItemToFileAPI創(chuàng)建,和/或通過調(diào)用SerializeItemAPI并進(jìn)行項串行化隨后寫入文件來創(chuàng)建)中給定項串行化的內(nèi)容來重寫文件系統(tǒng)存儲640中的現(xiàn)有項。在該實例中,當(dāng)重寫文件后備項時,截去該后備文件。如果串行化不含有內(nèi)嵌的文件,那么該操作導(dǎo)致長度為零的后備文件。在該示例中,僅當(dāng)將相同的項還原至之前的狀態(tài)時,才能使用DeserializeItemReplaceFromFile。例如[System.Storage.Serialization].DeserializeItemReplaceFromFile(@filenamenvarchar(1024),@fileoffsetbigint,@targetitemiduniqueidentifier,@optionsint,@bytesreadbigintoutput其中,filename指的是含有將被反串行化的項的串行化的文件的名稱;targetitemid指的是被替換的Item的ItemId;options指的是管理反串行化進(jìn)程的行為的選項(以下描述);而bytesread(字節(jié)讀取)返回讀取的字節(jié)數(shù)(例如,以便于跳至下一偏移量)。BeginDeserializationBatch和EndDeserializationBatch這些助手函數(shù)可以彼此結(jié)合及與Link_Fix_Up反串行化選項(以下描述)結(jié)合來使用。調(diào)用BeginDeserializationBatch(開始反串行化批處理)啟動反串行化批處理范圍。在該示例中,在該范圍中串行化的所有項將更正它們的鏈接,使得它們能繼續(xù)工作。當(dāng)所有的項都被反串行化之后,然后調(diào)用EndDeserializationBatch(結(jié)束反串行化批處理)來結(jié)束該范圍,并清空由該操作使用的臨時表。例如,項A鏈接至項B,而項B鏈接至項C。而且,這些項被反串行化至新的存儲。在該示例中,客戶機(jī)應(yīng)用程序進(jìn)行以下調(diào)用BeginDeserializationBatch()(createtemptabletotrackallthelinks)DeserializeallitemswithLinkFixupflagEndDeSerializationBatch()即使在該新的存儲中重新創(chuàng)建了項,且它們具有新的ItemID,但是由于修正標(biāo)志,它們?nèi)耘f可以被正確地鏈接在一起。反串行化選項示例性的反串行化選項包括●RETAIN_ITEM_ID0x1保留與已串行化項相同的itemId。這僅當(dāng)ItemID不為空時可用?!馬ESTORE_SECURITY_DESCRIPTOR0x2保留與已串行化項相同的顯式訪問控制列表(ACL)?!馬ESTORE_TIME_STAMP0x4還原本地創(chuàng)建時間和修改時間(例如,可用于復(fù)制和/或還原)。●RESTORE_SYNC_METADATA0x8為項還原ChangeInformation(改變信息)、SyncMetadata(同步元數(shù)據(jù))。在復(fù)件/映射/沖突項的情況中,僅當(dāng)指定該選項才還原。●LINK_FIX_UP0x10可以結(jié)合兩個助手APIBeginSerializationBatch和EndSerializationBatch來使用Link_Fix_Up選項以確保保持所有項鏈接。在一個示例中,如果在批處理范圍之外使用Link_Fix_Up,將導(dǎo)致失敗。在反串行化中使用用戶定義類型可以由反串行化組件620來執(zhí)行用戶定義類型(UDT)的重構(gòu),以便(1)驗證該串行化是否為有效的串行化;和(2)驗證反串行化項所需的類型是否存在于系統(tǒng)中;和/或(3)觸發(fā)確認(rèn)約束。在該示例中,對來自串行化的UDT的重構(gòu)可以在核心項的反串行化之前執(zhí)行。接著參考圖7,示出了根據(jù)本發(fā)明的一方面的反串行化環(huán)境700。環(huán)境700包括反串行化系統(tǒng)600,它通過基本更新(baseupdate)API720與文件系統(tǒng)存儲640接口。還標(biāo)識了示例性信任邊界730。如上所述,特定反串行化API的調(diào)用者一般在調(diào)用API之前已經(jīng)與文件系統(tǒng)存儲640建立了連接。例如,應(yīng)用程序630可以向反串行化系統(tǒng)600提供項反串行化。如前所述,反串行化系統(tǒng)600可以從系統(tǒng)元數(shù)據(jù)710中獲取關(guān)于用戶定義類型的信息。通過基本更新API720,反串行化系統(tǒng)600可以試圖存儲經(jīng)反串行化的核心項及相關(guān)聯(lián)實體。基本更新API720可以包括,例如CreateItem(創(chuàng)建項)反串行化系統(tǒng)600可以使用該基本更新API720來在文件系統(tǒng)存儲640中創(chuàng)建反串行化的項。例如,可以在不經(jīng)重寫而創(chuàng)建項時使用該基本更新API720。SetItemSecurity(設(shè)置項安全性)該基本更新API720可以使用來設(shè)置已被串行化的項的安全性描述符。例如,當(dāng)設(shè)置安全性描述符時,可以使用以下策略●當(dāng)反串行化系統(tǒng)600沒有指定還原語義時,SetItemSecurity用來僅設(shè)置訪問控制列表?!癞?dāng)指定了還原語義時,SetItemSecurity可以用來設(shè)置訪問控制列表和組及所有者。ReplaceItem(替換項)反串行化系統(tǒng)600可以調(diào)用該基本更新API720來使用經(jīng)反串行化的項來重寫文件系統(tǒng)存儲640中現(xiàn)有的項。例如,可以在使用重寫創(chuàng)建項時使用該基本更新API720。MoveItem(移動項)該基本更新API720可以用于移動將被替換的項,使得它具有與當(dāng)它被串行化時相同的容器和相同的名字空間名稱。CreateLink(創(chuàng)建鏈接)反串行化系統(tǒng)600可以使用該基本更新API720來反串行化文件系統(tǒng)存儲640中的項的外向鏈接。CreateExtension(創(chuàng)建擴(kuò)展)該基本更新API720可以用來反串行化文件系統(tǒng)存儲640中的項的擴(kuò)展。CreateItemFragment(創(chuàng)建項片段)反串行化系統(tǒng)600可以使用該基本更新API720來反串行化文件系統(tǒng)存儲640中的項的片段。UpdateLink(更新鏈接)如下所述,該基本更新API720可以由反串行化系統(tǒng)600使用來更新作為項的內(nèi)向鏈接的鏈接的目標(biāo)項id。替換移動過的項在反串行化過程中使用其之前的副本來替換項在還原過程中是常見的。值得注意的是,已被還原的項可能在它被串行化(例如,備份)和反串行化(例如,還原)的時間之間移動。移動是指示下述之一的普通操作a)改變父容器,b)改變名字空間名稱,和/或c)改變名字空間名稱和父容器兩者。在該示例中,當(dāng)項被還原時,替換操作不能改變名字空間名稱或containerid。從而,為了將項還原至其原始位置,使用MoveItem來具有相同的容器和相同的名字空間名稱(如果它們均沒有改變),然后執(zhí)行替換。替換復(fù)合項在該示例中,當(dāng)在復(fù)合項上調(diào)用DeserializeItemReplace時(例如,使用其之前的副本來替換復(fù)合項),發(fā)生以下情況1)根項被移動至其原始位置,它的名字空間名稱被還原至其舊值,并被串行化中的項替換;2)自從復(fù)合項樹串行化(例如,備份)以來向其添加的項被刪除;3)使用CreateItem將自從復(fù)合項被串行化以來從中刪除的項創(chuàng)建為反串行化過程的一部分;以及,4)使用ReplaceItem來替換自從最近的串行化以來沒有被刪除的項。處理正被反串行化的項的內(nèi)向鏈接在一個示例中,在還原操作過程中(例如,在環(huán)境700保留項id時),可以使用以下來修補(bǔ)向內(nèi)至該項的鏈接的目標(biāo)項id對每一內(nèi)向鏈接ida.檢查具有該鏈接id的鏈接是否在存儲中存在。如果它存在,那么繼續(xù)下一步,否則跳過下一步b.使用UpdateLinkAPI720來更新這些鏈接的目標(biāo)項id為經(jīng)反串行化的項的id。c.對所有內(nèi)向鏈接id重復(fù)以上兩步。反串行化文件后備項文件在串行化中內(nèi)嵌在一個示例中,當(dāng)文件在串行化中內(nèi)嵌時,頭部可以攜帶以下信息文件后備項的項id(從中可以推斷出至文件將被寫入的位置的路徑),以及包含后備文件的串行化的部分。這可以用來使用基本更新API720來將一個或多個文件寫入指定的位置。文件在串行化中不內(nèi)嵌在該示例中,當(dāng)文件在串行化中不內(nèi)嵌時,使用基本更新API720來將后備文件復(fù)制至目標(biāo)位置是調(diào)用者的職責(zé)??梢岳斫猓凑沾颂帉πg(shù)語計算機(jī)組件的定義,系統(tǒng)100、文件系統(tǒng)存儲120、系統(tǒng)400、API410、應(yīng)用程序420、系統(tǒng)500、文件存儲系統(tǒng)元數(shù)據(jù)510、系統(tǒng)元數(shù)據(jù)520、文件系統(tǒng)視圖530、環(huán)境600、API610、反串行化組件620、應(yīng)用程序630、文件系統(tǒng)存儲640、環(huán)境700、系統(tǒng)元數(shù)據(jù)710和/或基本更新API720都可以是計算機(jī)組件。簡要地參考圖8-11,示出了根據(jù)本發(fā)明可以實現(xiàn)的方法。盡管為說明的簡單起見,該方法作為一連串框來示出和描述,但是可以理解和領(lǐng)會,本發(fā)明不受框的順序限制,因為根據(jù)本發(fā)明,某些框可以按與此處示出和描述的不同順序和/或與其它框同時發(fā)生。而且,不是所有示出的框?qū)崿F(xiàn)根據(jù)本發(fā)明的方法都是必需的??梢栽谥T如程序模塊等由一臺或多臺計算機(jī)運(yùn)行的計算機(jī)可執(zhí)行指令的通用語境中描述本發(fā)明。一般而言,程序模塊包括例程、程序、對象、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。通常,在各個實施例中,程序模塊的功能可以按照所期望的方式結(jié)合或分布。參考圖8和9,示出了根據(jù)本發(fā)明的一方面便于串行化項的方法800。在804處,(例如,從應(yīng)用程序)接收到串行化項的請求。在808處,為頭部分配存儲器。在812處,串行化核心項。在816處,如果存在任何項片段,則對其串行化。然后,在820處,如果存在外向鏈接,則對其串行化。在824處,如果存在內(nèi)向鏈接標(biāo)識符,則將其填充至頭部。在828處,如果存在擴(kuò)展,則對其串行化。在832處,如果存在嵌入項,則對其串行化。在836處,如果存在后備文件,則對其串行化。在840處,將串行化長度、頭部偏移量和頭部寫入串行化。在844處,向請求者(例如,請求應(yīng)用程序)提供關(guān)于串行化的信息。例如,可以將串行化本身提供給請求應(yīng)用程序?;蛘撸梢韵蛘埱髴?yīng)用程序提供指向串行化的指針和/或串行化的文件名。接著,轉(zhuǎn)向圖10和11,示出了根據(jù)本發(fā)明的一方面便于反串行化項的方法1000。在1004處,接收到反串行化項的請求。在1008處,頭部偏移量被用于將頭部讀入存儲器。在1012處,反串行化核心項。在1016處,如果存在項片段,則對其反串行化。在1020處,如果存在外向鏈接,則對其反串行化。在1024處,如果存在擴(kuò)展,則對其反串行化。在1028處,如果存在嵌入項,則對其反串行化。在1036處,如果存在后備文件,則對其反串行化。被反串行化的項及相關(guān)聯(lián)實體可以被存儲在文件存儲系統(tǒng)中。為了提供本發(fā)明的各方面的其他語境,圖12及以下討論旨在提供可在其中實現(xiàn)本發(fā)明各方面的合適的操作環(huán)境1210的簡要概括的描述。盡管在諸如程序模塊等由一臺或多臺計算機(jī)執(zhí)行的計算機(jī)可執(zhí)行指令的通用語境中描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員可以認(rèn)識到,本發(fā)明也可以結(jié)合其它程序模塊和/或作為軟硬件的組合來實現(xiàn)。然而,一般而言,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。操作環(huán)境1210只是合適的操作環(huán)境的一個示例,并不旨在對本發(fā)明的使用范圍或功能提出任何限制。適合在本發(fā)明中使用的其它公知的計算系統(tǒng)、環(huán)境和/或配置可以包括,但不限于,個人計算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費(fèi)者電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型機(jī)、包含上述系統(tǒng)或設(shè)備中的分布式計算機(jī)環(huán)境等。參考圖12,用于實現(xiàn)本發(fā)明各方面的示例性環(huán)境1210包括計算機(jī)1212。計算機(jī)1212包括處理單元1214、系統(tǒng)存儲器1216和系統(tǒng)總線1218。系統(tǒng)總線1218將包括但不限于系統(tǒng)存儲器1216的系統(tǒng)組件耦合至處理單元1214。處理單元1214可以是任何各種可用的處理器。也可以使用雙微處理器和其它多處理器體系結(jié)構(gòu)作為處理單元1214。系統(tǒng)總線1218可以是若干類型的總線結(jié)構(gòu)中的任一種,包括存儲器總線或存儲器控制器、外圍總線或外部總線,和/或使用各種可用的總線體系結(jié)構(gòu)中的任一種的局部總線,可用的總線體系結(jié)構(gòu)包括,但不限于,8位總線、工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)、微通道體系結(jié)構(gòu)(MCA)、擴(kuò)展的ISA(EISA)、智能驅(qū)動器電子接口(IDE)、VESA局部總線(VLB)、外圍部件互連(PCI)、通用串行總線(USB)、高級圖形接口(AGP)、個人計算機(jī)存儲卡國際協(xié)會總線(PCMCIA)以及小型計算機(jī)系統(tǒng)接口(SCSI)。系統(tǒng)存儲器1216包括易失性存儲器1220和非易失性存儲器1222?;据斎?輸出系統(tǒng)(BIOS)包含有助于諸如啟動時在計算機(jī)1212中元件之間傳遞信息的基本例程,它通常存儲在非易失性存儲器1222中。作為說明,而非限制,非易失性存儲器1222可以包括只讀存儲器(ROM)、可編程ROM(PROM)、電可編程ROM(EPROM)、電可擦除ROM(EEPROM)或閃存。易失性存儲器1220包括用作外部高速緩存的隨機(jī)存取存儲器(RAM)。作為說明,而非限制,RAM以多種形式可用,諸如同步RAM(SRAM)、動態(tài)RAM(DRAM)、同步DRAM(SDRAM)、雙倍數(shù)據(jù)速率SDRAM(DDRSDRAM)、增強(qiáng)型SDRAM(ESDRAM)、同步鏈路DRAM(SLDRAM)以及直接RambusRAM(DRRAM)。計算機(jī)1212也包括可移動/不可以移動、易失性/非易失性計算機(jī)存儲介質(zhì)。例如,圖12示出磁盤存儲1224。磁盤存儲1224包括,但不限于,如磁盤驅(qū)動器、軟盤驅(qū)動器、磁帶驅(qū)動器、Jaz驅(qū)動器、Zip驅(qū)動器、Ls-100驅(qū)動器、閃存卡或記憶棒的設(shè)備。另外,磁盤存儲1224可以包括獨(dú)立或與其它存儲介質(zhì)結(jié)合的存儲介質(zhì),包括但不限于,諸如光盤ROM設(shè)備(CD-ROM)、CD可記錄驅(qū)動器(CD-R驅(qū)動器)、CD可重寫驅(qū)動器(CD-RW驅(qū)動器)或數(shù)字多功能盤ROM驅(qū)動器(DVD-ROM)等的光盤驅(qū)動器。為了便于將磁盤存儲設(shè)備1224連接至系統(tǒng)總線1218,一般使用諸如接口1226等可移動或不可移動接口。可以理解,圖12描述了作為用戶和在合適的操作環(huán)境1210中描述的基本計算機(jī)資源之間的中介的軟件。這樣的軟件包括操作系統(tǒng)1228??杀淮鎯υ诖疟P存儲1224上的操作系統(tǒng)1228用來控制和分配計算機(jī)系統(tǒng)1212的資源。系統(tǒng)應(yīng)用程序1230利用了操作系統(tǒng)1228通過存儲在系統(tǒng)存儲器1216或者磁盤存儲1214上的程序模塊1232和程序數(shù)據(jù)1234執(zhí)行的資源管理??梢岳斫?,本發(fā)明可以使用各種操作系統(tǒng)或操作系統(tǒng)的組合來實現(xiàn)。用戶通過輸入設(shè)備1236向計算機(jī)1212輸入命令或信息。輸入設(shè)備1236包括,但不限于,諸如鼠標(biāo)、跟蹤球、指示筆等定點設(shè)備、觸摸墊、鍵盤、麥克風(fēng)、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀、TV調(diào)諧器卡、數(shù)碼相機(jī)、數(shù)碼攝像機(jī)、網(wǎng)絡(luò)攝像頭等。這些和其它輸入設(shè)備經(jīng)由接口端口1238通過系統(tǒng)總線1218連接至處理單元1214。接口端口1238包括,例如串行端口、并行端口、游戲端口和通用串行總線(USB)。輸出設(shè)備1240使用某些與輸入設(shè)備1236相同類型的端口。從而,例如,USB端口可以用于向計算機(jī)1212提供輸入,并向輸出設(shè)備1240輸出來自計算機(jī)1212的信息。提供輸出適配器1242來示出,存在類似監(jiān)視器、揚(yáng)聲器和打印機(jī)以及其它需要專用適配器的輸出設(shè)備1240的某些輸出設(shè)備1240。作為說明而非限制,輸出適配器1242包括提供輸出設(shè)備1240和系統(tǒng)總線1218之間的連接手段的顯卡和聲卡。應(yīng)該注意,諸如遠(yuǎn)程計算機(jī)1244等其它設(shè)備和/或設(shè)備系統(tǒng)同時提供輸入和輸出能力兩者。計算機(jī)1212可使用至一臺或多臺遠(yuǎn)程計算機(jī),諸如遠(yuǎn)程計算機(jī)1244的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計算機(jī)1244可以是個人計算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、工作站、基于微處理器的裝置、對等設(shè)備或其它常見網(wǎng)絡(luò)節(jié)點等,且通常包括上文相對于計算機(jī)1212描述的許多或所有元件。為簡潔起見,對于遠(yuǎn)程計算機(jī)1244僅示出存儲器存儲設(shè)備1246。遠(yuǎn)程計算機(jī)1244通過網(wǎng)絡(luò)接口1248被邏輯連接至計算機(jī)1212,并且然后通過通信連接1250被物理地連接。網(wǎng)絡(luò)接口1248包括諸如局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)的通信網(wǎng)絡(luò)。LAN技術(shù)包括光纖分布式數(shù)據(jù)接口(FDDI)、銅線分布式數(shù)據(jù)接口(CDDI)、以太網(wǎng)/IEEE802.3、令牌環(huán)/IEEE802.5等。WAN技術(shù)包括,但不限于,點對點鏈路、類似綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN)及其變體的電路交換網(wǎng)絡(luò)、分組交換網(wǎng)絡(luò)和數(shù)字用戶線(DSL)。通信連接1250指的是用來將網(wǎng)絡(luò)接口1248連接至總線1218的硬件/軟件。盡管為說明清楚,將通信連接1250示為位于計算機(jī)1212內(nèi),然而通信連接1250也可以在計算機(jī)1212外部。僅為示例性的目的,連接至網(wǎng)絡(luò)接口1248所必需的硬件/軟件包括內(nèi)部和外部技術(shù),諸如包括常規(guī)電話級調(diào)制解調(diào)器、線纜調(diào)制解調(diào)器和DSL調(diào)制解調(diào)器等的調(diào)制解調(diào)器、ISDN適配器以及以太網(wǎng)卡。以上描述的包括本發(fā)明的示例。當(dāng)然,不可能為描述本發(fā)明的目的而描述每個可想象的組件或方法的組合,但是本領(lǐng)域的普通技術(shù)人員可以認(rèn)識到,本發(fā)明的眾多其它組合和排列是可能的。從而,本發(fā)明旨在包括落入所附權(quán)利要求書精神和范圍內(nèi)的所有這樣的變更、修改和變化。而且,就或者在詳細(xì)描述或者在權(quán)利要求書中使用的術(shù)語“包括”而言,當(dāng)被用作權(quán)利要求書中的過渡詞時,這樣的術(shù)語旨在類似于解釋術(shù)語“包含”的方式是包含性的。權(quán)利要求1.一種串行化系統(tǒng),包括標(biāo)識與項相關(guān)聯(lián)的實體的標(biāo)識組件;以及串行化所述項、所述相關(guān)聯(lián)實體和頭部的串行化組件,所述頭部提供與所述項及相關(guān)聯(lián)實體相關(guān)聯(lián)的信息。2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述相關(guān)聯(lián)實體包括外向鏈接、內(nèi)向鏈接、嵌入項、項片段和后備文件中的至少一個。3.如權(quán)利要求1所述的系統(tǒng),其特征在于,基于請求啟動對所述項及相關(guān)聯(lián)實體的串行化。4.如權(quán)利要求3所述的系統(tǒng),其特征在于,對所述相關(guān)聯(lián)實體的標(biāo)識是至少部分地基于與所述請求相關(guān)聯(lián)的上下文相關(guān)聯(lián)的安全性信息。5.如權(quán)利要求4所述的系統(tǒng),其特征在于,對所述相關(guān)聯(lián)實體的標(biāo)識還基于與所述相關(guān)聯(lián)實體相關(guān)聯(lián)的訪問控制列表。6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述頭部便于對所述項及相關(guān)聯(lián)實體的隨機(jī)訪問。7.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括便于所述系統(tǒng)和與所述項的串行化相關(guān)聯(lián)的應(yīng)用程序之間的通信的應(yīng)用程序編程接口。8.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用程序編程接口便于對項及相關(guān)聯(lián)實體的導(dǎo)出、備份、還原和復(fù)制中的至少一種。9.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用程序編程接口接收與串行化選項相關(guān)聯(lián)的信息,所述串行化選項被用來選取多個相關(guān)聯(lián)實體中的哪一個來與所述項一起串行化。10.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用程序編程接口在文件系統(tǒng)級上展示。11.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用程序編程接口在存儲過程級上展示。12.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用程序編程接口以字節(jié)數(shù)組形式返回所述串行化。13.如權(quán)利要求7所述的系統(tǒng),其特征在于,所述應(yīng)用程序編程接口返回與所述串行化相關(guān)聯(lián)的指針或文件名。14.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述相關(guān)聯(lián)實體包含嵌入項,所述系統(tǒng)還遞歸地串行化所述嵌入項。15.一種接收如權(quán)利要求1所述的系統(tǒng)生成的串行化的反串行化系統(tǒng)。16.一種便于串行化項的方法,包括串行化所述項;標(biāo)識與所述項相關(guān)聯(lián)的至少一個實體;以及串行化所述相關(guān)聯(lián)實體。17.如權(quán)利要求16所述的方法,其特征在于,包括至少以下其中之一接收串行化所述項的請求;串行化頭部,所述頭部包含與所述項及相關(guān)聯(lián)實體相關(guān)聯(lián)的信息;串行化串行化長度和頭部偏移量。18.如權(quán)利要求16所述的方法,其特征在于,所述相關(guān)聯(lián)實體包括外向鏈接、內(nèi)向鏈接、嵌入項、擴(kuò)展、項片段、安全性信息和后備文件的至少一個。19.一種其上存儲用于實現(xiàn)如權(quán)利要求16所述的方法的計算機(jī)可執(zhí)行指令的計算機(jī)可讀介質(zhì)。20.一種在兩臺或多臺計算機(jī)組件之間傳輸?shù)摹⒈阌陧椀拇谢瘋魉偷臄?shù)據(jù)包,所述數(shù)據(jù)包包括串行化長度字段;頭部偏移量字段;核心項字段;包含至少一個相關(guān)聯(lián)實體的字段;以及,提供與項及相關(guān)聯(lián)實體相關(guān)聯(lián)信息的頭部字段。全文摘要提供了用于對文件系統(tǒng)項及相關(guān)聯(lián)實體進(jìn)行串行化和/或反串行化的系統(tǒng)和方法。文件系統(tǒng)“項”包括可以包含屬性的核心類。項可以是簡單或者是復(fù)合的(例如,包含嵌入其中的其它項)。與項相關(guān)聯(lián)的可以是諸如片段、與其它項的鏈接和/或擴(kuò)展等實體。通過串行化,如果存在項及相關(guān)聯(lián)實體的一致的副本,可以對其進(jìn)行捕捉(例如,用于傳送項并在目的地系統(tǒng)上重構(gòu)該項)。串行化系統(tǒng)包括標(biāo)識與項相關(guān)聯(lián)實體的標(biāo)識組件,以及串行化項及相關(guān)聯(lián)實體的串行化組件。串行化組件還可以串行化包含與項及相關(guān)聯(lián)實體相關(guān)聯(lián)的信息的頭部。頭部可以便于對項及相關(guān)聯(lián)實體的隨機(jī)訪問(例如,允許讀程序僅解釋/解析其所感興趣的部分)。串行化系統(tǒng)可以展示便于將項及其相關(guān)聯(lián)實體從一個位置復(fù)制、移動和/或傳送至另一位置的應(yīng)用程序編程接口(API)。文檔編號G06F17/30GK1825314SQ20061000467公開日2006年8月30日申請日期2006年1月24日優(yōu)先權(quán)日2005年2月24日發(fā)明者H·R·科達(dá)瓦拉,M·J·斯利曼,R·D·達(dá)曼卡,V·卡瑟瑞亞申請人:微軟公司