亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于文檔的xml數(shù)據(jù)存儲的可編程性的制作方法

文檔序號:6568870閱讀:253來源:國知局
專利名稱:用于文檔的xml數(shù)據(jù)存儲的可編程性的制作方法
用于文檔的XML數(shù)據(jù)存儲的可編程性背景技術(shù)計(jì)算機(jī)用戶己經(jīng)逐漸習(xí)慣于用戶友好的軟件應(yīng)用程序,它們幫助用戶寫、計(jì) 算、組織、準(zhǔn)備演示、發(fā)送與接收電子郵件、制作音樂等等。例如,字處理應(yīng)用程 序允許用戶準(zhǔn)備各種有用的文檔。電子表格應(yīng)用程序允許用戶輸入、操縱和組織數(shù) 據(jù)?;脽羝菔緫?yīng)用程序允許用戶創(chuàng)建包含文本、圖片、數(shù)據(jù)或其它有用對象的幻 燈片演示。然而,由這類應(yīng)用程序創(chuàng)建的文檔(例如,字處理文檔、電子表格、幻燈片 演示文檔)在存儲/傳輸文檔上下文所需要的任意元數(shù)據(jù)內(nèi)容方面功能有限。例如, 建立在字處理文檔之上的解決方案可能要求存儲描述文檔各種狀態(tài)的工作流數(shù)據(jù),' 例如,先前的工作流核準(zhǔn)狀態(tài)(日期、時(shí)間、名稱)、當(dāng)前核準(zhǔn)狀態(tài)、完成前的未 來工作流狀態(tài)、文檔作者的名稱和辦公地址、文檔變化,等等。存儲該信息的選項(xiàng) 主要限于對文檔變量或具有限制的現(xiàn)有定制對象鏈接和嵌入(OLE)文檔性質(zhì)的使 用。例如,不能存儲分層數(shù)據(jù);字符長度有限,等等。有關(guān)這類方法的性質(zhì)存儲在 單個(gè)存儲中,例如OLE性質(zhì)存儲器,這意味著這些性質(zhì)具有沖突的可能性。而且, 這樣存儲的性質(zhì)沒有數(shù)據(jù)驗(yàn)證。這類應(yīng)用程序及有關(guān)文檔的用戶難以將任意數(shù)據(jù)與 文檔存儲在一起,而這卻是許多用戶的共同需求。發(fā)明內(nèi)容提供本概述以便以簡化形式介紹精選的概念,這些概念將在以下的詳細(xì)描述 中被進(jìn)一步描述。本概述并不旨在標(biāo)識要求保護(hù)的主題的關(guān)鍵特征或本質(zhì)特征,也 不旨在用于幫助確定要求保護(hù)的主題的范圍。將一或多個(gè)數(shù)據(jù)存儲與文檔內(nèi)主呈現(xiàn)存儲(primary presentation storage)分開 地保存,從而存儲、關(guān)聯(lián)并允許使用與計(jì)算機(jī)生成文檔相關(guān)聯(lián)的任意數(shù)據(jù)。用于結(jié) 構(gòu)化與文檔相關(guān)聯(lián)的信息的數(shù)據(jù),諸如文檔元數(shù)據(jù),被保存在一數(shù)據(jù)存儲中,其中 保存著不同數(shù)據(jù)片之間的關(guān)系。該數(shù)據(jù)存儲向數(shù)據(jù)存儲中的各種數(shù)據(jù)片暴露應(yīng)用編 程接口 (API),從而允許不同應(yīng)用程序訪問和操作一或多個(gè)數(shù)據(jù)片。這些數(shù)據(jù)片可按照標(biāo)記語言如可擴(kuò)展標(biāo)記語言(XML)來結(jié)構(gòu)化。XML模式 可與每一數(shù)據(jù)片相關(guān)聯(lián),并且數(shù)據(jù)存儲器可基于與給定數(shù)據(jù)片相關(guān)聯(lián)的XML模式 來驗(yàn)證應(yīng)用于該數(shù)據(jù)的XML結(jié)構(gòu)。當(dāng)文檔正在編輯的同時(shí),提供對XML形式數(shù) 據(jù)的程序性訪問。多個(gè)客戶應(yīng)用程序可訪問和編輯同一文檔數(shù)據(jù)片,并且解決對一 給定數(shù)據(jù)片的任何有沖突的改變。標(biāo)準(zhǔn)XML模式(XSD)也可用于定義任何與文 檔元數(shù)據(jù)相關(guān)聯(lián)的定制XML數(shù)據(jù)片的內(nèi)容,以保證應(yīng)用于文檔數(shù)據(jù)的XML數(shù)據(jù) 是有效的。


圖1例示計(jì)算機(jī)的示例性計(jì)算體系結(jié)構(gòu);以及圖2是例示一或多個(gè)客戶應(yīng)用與一或多個(gè)數(shù)據(jù)存儲之間的關(guān)系以及數(shù)據(jù)存儲 的內(nèi)容的框圖;圖3例示示出內(nèi)部和外部數(shù)據(jù)消費(fèi)者與XML數(shù)據(jù)存儲之間交互的系統(tǒng)圖;圖4例示用于處理與數(shù)據(jù)存儲相關(guān)聯(lián)的各事件的過程;以及圖5例示根據(jù)本發(fā)明的諸方面用于處理包括副效應(yīng)(side-effect)的事件的過具體實(shí)施方式
現(xiàn)在參考其中相似的數(shù)字代表相似的元素的附圖,描述本發(fā)明的各種方面。 具體地,圖1和相應(yīng)的討論旨在提供對在其中可以實(shí)現(xiàn)本發(fā)明實(shí)施例的合適計(jì)算環(huán) 境的簡要描述。一般而言,程序模塊包括例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和其它類型的結(jié)構(gòu), 它們執(zhí)行特定的任務(wù)或者實(shí)現(xiàn)特定的抽象數(shù)據(jù)類型。也可使用其它計(jì)算機(jī)系統(tǒng)配 置,包括手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)電子產(chǎn)品、小型 機(jī)、大型機(jī)等等。也可使用分布式計(jì)算環(huán)境,其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程 處理設(shè)備執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可位于本地和遠(yuǎn)程兩者的存儲器存 儲設(shè)備中。參見圖1,用于實(shí)現(xiàn)本發(fā)明的一個(gè)示例性系統(tǒng)包括計(jì)算設(shè)備,諸如計(jì)算設(shè)備 100。在一個(gè)非?;镜呐渲弥校?jì)算設(shè)備100通常包括至少一個(gè)處理單元102和 系統(tǒng)存儲器104。取決于計(jì)算設(shè)備的確切配置和類型,系統(tǒng)存儲器104可以是易失 性的(諸如RAM)、非易失性的(諸如ROM、閃存等)或是兩者的某種組合。系統(tǒng)存儲器104通常包括操作系統(tǒng)105、 一個(gè)或多個(gè)應(yīng)用程序104,并且可以包括 程序數(shù)據(jù)107。在一個(gè)實(shí)施例中,應(yīng)用程序106可以包括字處理程序120。這一基 本配置在圖1中由虛線108中的那些組件示出。計(jì)算設(shè)備100也可具有其它特征或功能性。例如,計(jì)算設(shè)備100也可含有附 加的數(shù)據(jù)存儲設(shè)備(可移動和/或不可移動),諸如磁盤、光盤或磁帶。這樣的額 外存儲在圖1中由可移動存儲109和不可移動存儲110示出。計(jì)算機(jī)存儲介質(zhì)可包 括易失性和非易失性、可移動和不可移動介質(zhì),它們以用于存儲諸如計(jì)算機(jī)可讀指 令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)這樣的信息的任意方法或技術(shù)來實(shí)現(xiàn)。系統(tǒng)存 儲器104、可移動存儲109和不可移動存儲110都是計(jì)算機(jī)存儲介質(zhì)的示例。計(jì)算 機(jī)存儲介質(zhì)包括,但不限于,RAM、 ROM、 EEPROM、閃存或其它存儲器技術(shù)、 CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲、磁帶盒、磁帶、磁盤存儲或其 它磁性存儲設(shè)備、或能用于存儲所需信息且可以由計(jì)算設(shè)備100訪問的任何其它介 質(zhì)。任何這樣的計(jì)算機(jī)存儲介質(zhì)都可以是設(shè)備100的一部分。計(jì)算設(shè)備100也可以 具有諸如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等輸入設(shè)備112。也可以 包括諸如顯示器、揚(yáng)聲器、打印機(jī)等的輸出設(shè)備114。這些設(shè)備在本領(lǐng)域是公知的, 因此不必在此詳細(xì)討論。計(jì)算設(shè)備100也可以包含允許該系統(tǒng)與其它計(jì)算設(shè)備118諸如經(jīng)網(wǎng)絡(luò)通信的 通信連接116。通信連接116是通信介質(zhì)的一個(gè)示例。通信介質(zhì)通??删唧w化為諸 如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模 塊或其它數(shù)據(jù),并且包括任何信息傳遞介質(zhì)。術(shù)語已調(diào)制的數(shù)據(jù)信號是指以在該信 號中編碼信息的方式來設(shè)置或改變其一個(gè)或多個(gè)特性的信號。作為示例,而非限制, 通信介質(zhì)包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,以及無線介質(zhì),諸如聲學(xué)、 RF、紅外線和其它無線介質(zhì)。如此處所用的術(shù)語計(jì)算機(jī)可讀介質(zhì)既包括存儲介質(zhì) 又包括通信介質(zhì)??稍谟?jì)算設(shè)備100的系統(tǒng)存儲器104中存儲多個(gè)程序模塊和數(shù)據(jù)文件,包括 適于控制聯(lián)網(wǎng)個(gè)人計(jì)算機(jī)操作的操作系統(tǒng)105,諸如來自華盛頓雷德蒙德的微軟公 司的Windows操作系統(tǒng)。系統(tǒng)存儲器104也可存儲一或多個(gè)程序模塊,諸如字處 理應(yīng)用120以及下述的其它應(yīng)用。字處理應(yīng)用120用于提供創(chuàng)建、編輯和處理電子 文檔的功能性。根據(jù)本發(fā)明的一個(gè)實(shí)施例,字處理應(yīng)用120包括來自微軟公司的WORD程序。 然而應(yīng)該了解,可利用來自其它制造者的字處理應(yīng)用程序。字處理應(yīng)用的例示僅為了示例,而非不限制可產(chǎn)生并操作文檔的其它類型的應(yīng)用。例如,可以等效地應(yīng)用能處理各種形式內(nèi)容(例如,文本、圖像、圖片等)的其它應(yīng)用程序106,諸如電 子表格應(yīng)用程序,數(shù)據(jù)庫應(yīng)用程序,幻燈片演示應(yīng)用程序,畫圖或計(jì)算機(jī)輔助應(yīng)用 程序等等。產(chǎn)生并操作各種不同類型文檔的示例應(yīng)用程序106包括來自微軟公司的OFFICE 。實(shí)施例可實(shí)現(xiàn)為計(jì)算機(jī)過程、計(jì)算系統(tǒng)、或者制造品,如計(jì)算機(jī)程序產(chǎn)品或 計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)程序產(chǎn)品可以是計(jì)算機(jī)系統(tǒng)可讀且對指令的計(jì)算機(jī)程序進(jìn)行編碼以執(zhí)行計(jì)算機(jī)過程的計(jì)算機(jī)存儲介質(zhì)。計(jì)算機(jī)程序產(chǎn)品也可以是計(jì)算系統(tǒng)可 讀的且對指令計(jì)算機(jī)程序進(jìn)行編碼以執(zhí)行計(jì)算機(jī)過程的載波傳播信號。在通篇說明書和權(quán)利要求書中,下列術(shù)語采用與此處相關(guān)聯(lián)的含義,除非該 術(shù)語的上下文另有指示。術(shù)語"數(shù)據(jù)"指文檔表面層或者呈現(xiàn)層信息,諸如字詞、語句、段落等等, 以及由字處理文檔攜帶、引用或使用的補(bǔ)充信息,例如元數(shù)據(jù)。該信息通常較大且 有可能沒有暴露于文檔的呈現(xiàn)層。術(shù)語"呈現(xiàn)"指文檔的可見部分,諸如打印文檔時(shí)會出現(xiàn)的文本和布局等。術(shù)語"標(biāo)簽"指插入文檔中描述XML文檔內(nèi)元素的字符。每個(gè)元素一般包括兩個(gè)標(biāo)簽開始標(biāo)簽和結(jié)束標(biāo)簽。也有可能具有空元素(沒有內(nèi)容),在此情形中允許一個(gè)標(biāo)簽。術(shù)語"標(biāo)記語言"或"ML"指用于文檔內(nèi)特殊代碼的語言,用于規(guī)定文檔的 諸部分如何由應(yīng)用程序來解釋。在字處理文件中,標(biāo)記語言規(guī)定文本被如何格式化 或布局。術(shù)語"元素"指XML文檔的基本單元。元素可包含屬性、其它元素、文本和 用于XML文檔的其它內(nèi)容區(qū)域。術(shù)語"構(gòu)件"指文檔中被綁定且有可能加有標(biāo)簽的區(qū)域,它用作用戶輸入的 特定類型內(nèi)容的容器。術(shù)語"數(shù)據(jù)綁定,數(shù)據(jù)映射和數(shù)據(jù)域"指構(gòu)件上的性質(zhì),它確定指向存儲在 文檔中的XMLDOM的XPath,其中應(yīng)當(dāng)存儲該構(gòu)件的內(nèi)容。在標(biāo)簽之間的XML內(nèi)容被認(rèn)為是該元素的"子"(或后代)。因此,嵌入在 元素的內(nèi)容中的其它元素稱為"子元素"或"子節(jié)點(diǎn)"或者元素。直接嵌入在元素 內(nèi)容中的文本被認(rèn)為是該元素的"子文本節(jié)點(diǎn)"。元素內(nèi)的子元素與文本一起構(gòu)成 元素的"內(nèi)容"。術(shù)語"屬性"指設(shè)置為特定值且與元素相關(guān)聯(lián)的附加性質(zhì)。元素可具有任意 數(shù)量的與其相關(guān)聯(lián)的屬性設(shè)置,包括一個(gè)也沒有。屬性用于將附加信息與將不再包 含其它元素或者作為文本節(jié)點(diǎn)來對待的元素相關(guān)聯(lián)。"XPath"是運(yùn)算符,它使用模式表達(dá)式(pattern expression)來標(biāo)識XML文檔 中的節(jié)點(diǎn)。XPath模式是用斜杠分開的子元素名稱列表,它描述到通過XML文檔 的路徑。模式"選擇"匹配該路徑的元素。術(shù)語"XML數(shù)據(jù)存儲或數(shù)據(jù)存儲"指諸如字處理文檔,電子表格文檔,幻燈 片演示文檔等的文檔內(nèi)的容器,它在文件打開時(shí)提供對存儲在該文檔中的數(shù)據(jù)(例 如XML格式)的存儲和修改的訪問。下面參考圖2提供XML數(shù)據(jù)存儲的進(jìn)一步定義。。圖2是例示一或多個(gè)客戶應(yīng)用程序與一或多個(gè)數(shù)據(jù)存儲之間的關(guān)系以及數(shù)據(jù) 存儲中的內(nèi)容的框圖。 一般而言,在將一或多個(gè)數(shù)據(jù)存儲與文檔內(nèi)主呈現(xiàn)存儲分開 保存,以存儲、關(guān)聯(lián)并允許使用與計(jì)算機(jī)生成文檔相關(guān)聯(lián)的任意數(shù)據(jù)。用于結(jié)構(gòu)化 與文檔相關(guān)聯(lián)的信息的數(shù)據(jù),諸如文檔元數(shù)據(jù),被保存在其中保存不同數(shù)據(jù)片之間 的關(guān)系的一個(gè)數(shù)據(jù)存儲中。數(shù)據(jù)存儲向數(shù)據(jù)存儲中的各種數(shù)據(jù)片暴露應(yīng)用程序編程 接口 (API),以允許不同應(yīng)用訪問和操作一或多個(gè)數(shù)據(jù)片。如在此使用的,術(shù)語 "數(shù)據(jù)消費(fèi)者"、"應(yīng)用"和"過程"能互換地使用,除非上下文另有明確指示。數(shù)據(jù)片可按照標(biāo)記語言如可擴(kuò)展標(biāo)記語言(XML)來結(jié)構(gòu)化。XML模式可與 每一數(shù)據(jù)片相關(guān)聯(lián),并且數(shù)據(jù)存儲可基于與給定數(shù)據(jù)片相關(guān)聯(lián)的XML模式來驗(yàn)證 應(yīng)用于數(shù)據(jù)的XML結(jié)構(gòu)。數(shù)據(jù)存儲可包含根據(jù)可擴(kuò)展標(biāo)記語言(XML)結(jié)構(gòu)化的 任何數(shù)量的任何數(shù)據(jù)項(xiàng),例如元數(shù)據(jù)。因此,文檔解決方案提供者可將任意元數(shù)據(jù) 作為XML與給定文檔存儲在一起,并且讓該信息在發(fā)生事件時(shí)由有權(quán)訪問數(shù)據(jù)的 給定解決方案來處理,諸如當(dāng)數(shù)據(jù)從數(shù)據(jù)存儲中移除或被加載到數(shù)據(jù)存儲時(shí)和/或 當(dāng)用戶打開/編輯/保存文檔時(shí)。當(dāng)文檔正在被編輯時(shí),還可提供對XML形式的數(shù)據(jù)的程序性訪問。根據(jù)一個(gè) 實(shí)施例,提供一種解決方案開發(fā)者熟悉的標(biāo)準(zhǔn)機(jī)制,通過該機(jī)制在打開文檔時(shí)能以 在程序上訪問和修改數(shù)據(jù)。該程序上的訪問模擬標(biāo)準(zhǔn)的XML接口。通過應(yīng)用編程 接口為一或多個(gè)編輯客戶應(yīng)用(例如,文檔編輯或創(chuàng)建應(yīng)用和/或第三方應(yīng)用插件 解決方案等等)提供對數(shù)據(jù)的程序性訪問。因此,多個(gè)客戶應(yīng)用可訪問并編輯相同 的文檔數(shù)據(jù)片,并且解決任何對給定數(shù)據(jù)片的有沖突的改變??蓪θ魏谓o定改變作 出"副效應(yīng)"(例如,響應(yīng)于將公司名稱設(shè)置為"Microsoft(微軟)",將股票代碼改為"MSFT")。此外,對數(shù)據(jù)的改變和任何相關(guān)聯(lián)的副效應(yīng)可由數(shù)據(jù)存儲來"捆 綁",使得撤消一或多個(gè)改變將后退所有相關(guān)改變。這幫助減少對解決方案本身開 發(fā)的負(fù)擔(dān),以確保當(dāng)用戶例如通過壓下撤消命令從文檔表面啟動原始改變撤消時(shí)所 有的改變都得以后退。標(biāo)準(zhǔn)XML模式(XSD)也可用于定義與文檔元數(shù)據(jù)相關(guān)聯(lián)的任何定制XML 數(shù)據(jù)片的內(nèi)容,以確保應(yīng)用于該文檔數(shù)據(jù)的XML數(shù)據(jù)是有效的。這些模式可附連 到存儲在文檔中的XML數(shù)據(jù)的任何實(shí)例中,并且數(shù)據(jù)存儲將不允許會導(dǎo)致該數(shù)據(jù) 的XML結(jié)構(gòu)變成無效(即,XML標(biāo)簽與其內(nèi)容相反)的任何對XML數(shù)據(jù)的改變。 這幫助確保解決方案開發(fā)者能將特定的XML元數(shù)據(jù)片附連到文檔,并且確保該 XML數(shù)據(jù)將根據(jù)相關(guān)聯(lián)的模式繼續(xù)在結(jié)構(gòu)上保持"正確",無論哪個(gè)數(shù)據(jù)消費(fèi)者 (例如,插件)修改該數(shù)據(jù)?,F(xiàn)參考圖2,文檔數(shù)據(jù)220包括XML結(jié)構(gòu)數(shù)據(jù)以及表示文檔的表面或呈現(xiàn)層 視圖的相關(guān)聯(lián)文檔數(shù)據(jù)。例如,文檔數(shù)據(jù)220可包括XML結(jié)構(gòu)(例如,標(biāo)題標(biāo)簽, 正文標(biāo)簽,結(jié)論標(biāo)簽)以及字處理文檔、電子表格文檔、幻燈片演示文檔等的相關(guān) 聯(lián)的表面視圖數(shù)據(jù)(例如,字詞,語句,段落)。數(shù)據(jù)存儲208是文檔數(shù)據(jù)儲存庫,用于存儲一或多個(gè)與關(guān)聯(lián)于給定文檔的一 或多個(gè)類型的數(shù)據(jù)相關(guān)聯(lián)的結(jié)構(gòu)化數(shù)據(jù)片。盡管僅示出一個(gè)數(shù)據(jù)存儲器,但可使用 不止一個(gè)數(shù)據(jù)存儲。元數(shù)據(jù)l 225 (結(jié)構(gòu)化的數(shù)據(jù)項(xiàng))可包括XML結(jié)構(gòu)和用于關(guān) 聯(lián)于文檔的第一元數(shù)據(jù)片的相關(guān)聯(lián)數(shù)據(jù)。例如,元數(shù)據(jù)1 225可包括XML結(jié)構(gòu)數(shù) 據(jù)(例如日期標(biāo)簽,名稱標(biāo)簽等),它們列出文檔作者,文檔創(chuàng)建日期,文檔最后 改變/保存日期等等。元數(shù)據(jù)2230 (結(jié)構(gòu)化數(shù)據(jù)項(xiàng))可包括XML結(jié)構(gòu)數(shù)據(jù)(標(biāo)簽) 以及表示關(guān)聯(lián)于文檔的第二元數(shù)據(jù)片的相關(guān)聯(lián)元數(shù)據(jù)。如應(yīng)了解的,元數(shù)據(jù)1和元 數(shù)據(jù)2是為了示例,而非限制可保存在數(shù)據(jù)存儲208中關(guān)聯(lián)于給定文檔的大量不同 類型數(shù)據(jù)。例如,如在此所述的,任意數(shù)據(jù)可按有權(quán)訪問文檔數(shù)據(jù)的解決方案開發(fā) 者或用戶的需要,由一或多個(gè)軟件應(yīng)用來結(jié)構(gòu)化并添加到文檔。模式文件240、 245可選地可被附連到存儲在數(shù)據(jù)存儲208中的每一數(shù)據(jù)片, 用于指示與應(yīng)用于每一數(shù)據(jù)片225、 230的可擴(kuò)展標(biāo)記語言(XML)相關(guān)聯(lián)的句法 和驗(yàn)證規(guī)則。XML模式文件提供一種在XML環(huán)境中描述和驗(yàn)證數(shù)據(jù)的方法。模 式文件陳述使用什么XML標(biāo)記數(shù)據(jù)(包括元素和屬性)來描述XML文檔中的內(nèi) 容,并且模式文件定義XML標(biāo)記句法,包括每一元素所允許的位置,在元素內(nèi)允 許什么類型的內(nèi)容以及在哪些元素可出現(xiàn)在其它元素中。模式文件的使用確保文檔(或者在此情形中為單個(gè)的數(shù)據(jù)片)以一致且能預(yù)知的方式來結(jié)構(gòu)化。模式文件240、 245可由用戶創(chuàng)建并且一般由相關(guān)聯(lián)的標(biāo)記語言諸如XML來支持。該文檔的模式化通過在數(shù)據(jù)存儲層處拒絕違反給定模式文件的任何改變來允. 許數(shù)據(jù)存儲提供"保證"文檔的結(jié)構(gòu)有效性的能力。按照一實(shí)施例,數(shù)據(jù)存儲208 使用模式驗(yàn)證模塊260針對相關(guān)聯(lián)的模式文件驗(yàn)證添加的XML結(jié)構(gòu)或者對給定數(shù) 據(jù)片的改變。例如,如果文檔創(chuàng)建者或編輯者對給定數(shù)據(jù)片例如元數(shù)據(jù)1作出XML 結(jié)構(gòu)上的改變,其中編輯者添加或移除給定的XML標(biāo)簽,則數(shù)據(jù)存儲208將使用 模式驗(yàn)證模塊針對相關(guān)聯(lián)的模式文件來檢查XML結(jié)構(gòu)上的改變以確保改變的合法 性。如果改變不是有效的,則向編輯者產(chǎn)生一個(gè)錯(cuò)誤。如所理解的,對應(yīng)用于給定 數(shù)據(jù)片的XML結(jié)構(gòu)的這種控制考慮了結(jié)構(gòu)上的一致性和可預(yù)知性,這對于允許客 戶和第三方應(yīng)用程序與相關(guān)聯(lián)數(shù)據(jù)交互尤為重要。數(shù)據(jù)存儲208提供可由客戶應(yīng)用205 (例如,字處理應(yīng)用,電子表格應(yīng)用,幻 燈片演示應(yīng)用等)以及第三方應(yīng)用210、 215通過相應(yīng)應(yīng)用205、 210、 210的對象 模型(OM)訪問的一或多個(gè)應(yīng)用編程接口 (API) 270。這些API允許客戶應(yīng)用和 第三方應(yīng)用將任何現(xiàn)有XML文件加載到給定文檔的數(shù)據(jù)存儲208,因而確保該數(shù) 據(jù)現(xiàn)在是文檔的一部分并且將在其生存期中在該文檔內(nèi)傳播(例如,通過打開/編 輯/保存/重命名等)或者直到該數(shù)據(jù)從數(shù)據(jù)存儲中刪除為止。按照一個(gè)實(shí)施例,數(shù) 據(jù)存儲中的數(shù)據(jù)以其XML格式可用,甚至在給定數(shù)據(jù)片225、 230的源應(yīng)用被關(guān) 閉或者不可用的情況下。即,給定數(shù)據(jù)片225、 230可由其它應(yīng)用(并非源應(yīng)用) 通過API 270來訪問。如下所述,API還允許客戶和第三方應(yīng)用對應(yīng)用于數(shù)據(jù)項(xiàng)225、 230的XML標(biāo)記數(shù)據(jù)進(jìn)行改變。一旦XML數(shù)據(jù)225、 230被加載到數(shù)據(jù)存儲中以便與文檔220相關(guān)聯(lián),則可 使用數(shù)據(jù)存儲接口將其作為標(biāo)準(zhǔn)XML來操縱,其中數(shù)據(jù)存儲接口被設(shè)計(jì)為提供與 現(xiàn)有XML編輯接口相似的方法,以便利用開發(fā)者的XML編程標(biāo)準(zhǔn)的現(xiàn)有知識。 這允許用戶對添加到用于文檔的數(shù)據(jù)存儲的XML數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)XML操作,諸如 添加元素和屬性,移除元素和屬性,改變現(xiàn)有元素/屬性的值,以及讀取相關(guān)聯(lián)XML 樹的任何現(xiàn)有部分的值。使用這些XML標(biāo)準(zhǔn)操作,解決方案可將結(jié)構(gòu)化的復(fù)雜元 數(shù)據(jù)與文檔主題存儲在一起而沒有先前的對數(shù)據(jù)的長度/大小或數(shù)據(jù)的結(jié)構(gòu)的限 制,這使得對該XML數(shù)據(jù)存儲的使用能夠用于比以前的解決方案更顯著地結(jié)構(gòu)化 的解決方案。例如,可編寫第三方用215,它通過讀取添加到每一文檔的數(shù)據(jù)存儲 器208的元數(shù)據(jù)1 225,而從多個(gè)文檔定位和提取文檔作者名稱和文檔創(chuàng)建日期。示例的第三方可以是一個(gè)為作出由給定組織創(chuàng)建的所有文檔的文檔作者名稱和文 檔創(chuàng)建日期列表而編程的應(yīng)用。按照本發(fā)明的實(shí)施例,第三方應(yīng)用可使用應(yīng)用于元數(shù)據(jù)1的XML結(jié)構(gòu)來有效地定位和提取所需數(shù)據(jù)。例如,可編寫第三方應(yīng)用來語 法分析元數(shù)據(jù)1文件的XML結(jié)構(gòu)以定位XML標(biāo)簽,諸如〈docauthor〉和 <doccreationdate>,用于獲得和使用關(guān)聯(lián)于這些標(biāo)簽的數(shù)據(jù)。如應(yīng)了解的,上述內(nèi) 容僅是一或多個(gè)應(yīng)用可通過數(shù)據(jù)存儲208與關(guān)聯(lián)于文檔的結(jié)構(gòu)化數(shù)據(jù)交互的許多 方法中的一個(gè)示例。此外,數(shù)據(jù)存儲器208提供任意數(shù)量的API接口 270給任何單獨(dú)的XML數(shù)據(jù) 片220、 225、 230 (也稱為存儲項(xiàng)),以使多個(gè)應(yīng)用205、 210、 215能夠與同一數(shù) 據(jù)片一寧工作。例如,若干解決方案,諸如客戶應(yīng)用(例如字處理應(yīng)用)和第三方 應(yīng)用解決方案(例如上述應(yīng)用),可與同一組文檔性質(zhì)(例如包含在元數(shù)據(jù)2 230 文件中的性質(zhì)) 一起工作。使用數(shù)據(jù)存儲208,這些應(yīng)用的每一個(gè)通過其自己的數(shù) 據(jù)存儲API接口 270接收對所需XML數(shù)據(jù)230的獨(dú)立訪問,這些API接口 270 允許每一個(gè)應(yīng)用通過其自己OM與數(shù)據(jù)通信而不必處理讓多個(gè)數(shù)據(jù)消費(fèi)者訪問同 一數(shù)據(jù)片的復(fù)雜性。為了允許這多個(gè)數(shù)據(jù)消費(fèi)應(yīng)用205、 210、 215訪問同一數(shù)據(jù),數(shù)據(jù)存儲208 在XML數(shù)據(jù)的任意部分被另一應(yīng)用改變時(shí)通知這些應(yīng)用的每一個(gè),使得給定應(yīng)用 可響應(yīng)于該改變(既包括在內(nèi)部對于其自己過程的又包括在外部由對同一數(shù)據(jù)的其 它改變所引起的)。當(dāng)一個(gè)應(yīng)用請求對給定數(shù)據(jù)項(xiàng)的改變時(shí),該請求被自動發(fā)送到 所有其它應(yīng)用,以允許其它應(yīng)用決定如何或是否響應(yīng)所請求的改變。按照一個(gè)實(shí)施例,這是通過允許每一個(gè)應(yīng)用注冊對其具有接口的XML數(shù)據(jù)的任意部分的"監(jiān)聽" 來實(shí)現(xiàn)的,使得給定的應(yīng)用解決方案/程序僅接收屬于其自己邏輯的那些消息。例 如, 一種類型的應(yīng)用210可能希望注冊監(jiān)聽對給定XML數(shù)據(jù)的所有改變以便向第 三方解決方案提供詳細(xì)的商務(wù)邏輯能力,而另一類型的應(yīng)用215可能希望僅監(jiān)聽對 同一數(shù)據(jù)內(nèi)的一兩個(gè)特定的XML元素的改變,因?yàn)槠溥壿嫴魂P(guān)心對XML數(shù)據(jù)的 任何其它部分的改變。按照該實(shí)施例,多個(gè)應(yīng)用205、 210、 215可訪問和編輯同一文檔數(shù)據(jù)片,并 且解決對給定數(shù)據(jù)片的任何沖突改變。例如,當(dāng)一個(gè)應(yīng)用所作的一個(gè)改變引起由另 一應(yīng)用所作的"副效應(yīng)"改變時(shí),可對任何給定的改變作出副效應(yīng)。例如,第一應(yīng) 用210的任務(wù)是從關(guān)聯(lián)于給定文檔的一或多個(gè)數(shù)據(jù)項(xiàng)225、 230提取公司名稱以將 這些名稱翻譯成相應(yīng)的股票代碼,如果可用,則用來編譯有關(guān)給定文檔的公司股票代碼的列表。如果第二應(yīng)用215引起給定數(shù)據(jù)片中的給定公司名稱添加或改變,例 如將公司名稱從"公司ABC"改變?yōu)?公司XYZ",則第一應(yīng)用可監(jiān)聽該改變, 從而自動更新其股票代碼列表以包括代替"公司ABC"的"公司XYZ"的股票代 碼。此外,這類改變及任何相關(guān)聯(lián)的副效應(yīng)可由數(shù)據(jù)存儲208進(jìn)行捆綁,使得撤消 一或多個(gè)改變時(shí)后退所有相關(guān)改變。圖3例示示出的內(nèi)部和外部數(shù)據(jù)消費(fèi)者與XML數(shù)據(jù)存儲之間交互的系統(tǒng)圖。 如所示的,系統(tǒng)300包括數(shù)據(jù)存儲302,它包括呈現(xiàn)層304、 XML存儲l-N (306) (每一個(gè)包括錯(cuò)誤存儲和撤消存儲)、全局改變存儲308、可選全局撤消存儲310、 耦合到內(nèi)部數(shù)據(jù)消費(fèi)者l-N 314的內(nèi)部代理程序312以及耦合到外部數(shù)據(jù)消費(fèi)者 1-N318的外部代理程序316。使用XML數(shù)據(jù)存儲器306,文檔具有包含任意數(shù)量的任意數(shù)據(jù)項(xiàng)的能力(只 要每個(gè)數(shù)據(jù)項(xiàng)遵循標(biāo)準(zhǔn)的XML句法)。任意元數(shù)據(jù)可作為XML存儲在文檔內(nèi)并 且該信息在文檔由用戶打開/編輯/保存時(shí)可自動往返。如上所述,當(dāng)文檔正在被編輯時(shí)通過可使用的API提供對該數(shù)據(jù)的程序性訪 問,提供一種解決方案開發(fā)者所熟悉的標(biāo)準(zhǔn)機(jī)制,通過該機(jī)制在文檔打開時(shí)可程序 性地訪問和修改該信息。按照一個(gè)實(shí)施例,該程序性訪問被設(shè)計(jì)為模擬標(biāo)準(zhǔn)的XML 接口。使用API,當(dāng)諸如字處理應(yīng)用的應(yīng)用正在運(yùn)行時(shí),可以添加/移除數(shù)據(jù);可 將數(shù)據(jù)填充到存儲項(xiàng)(數(shù)據(jù)存儲的一部分)內(nèi);使用標(biāo)準(zhǔn)的XML結(jié)構(gòu)操縱數(shù)據(jù); 可將模式與數(shù)據(jù)存儲中的任意XML數(shù)據(jù)相關(guān)聯(lián); 一旦與數(shù)據(jù)存儲項(xiàng)相關(guān)聯(lián),模式 可被添加/移除/修改;以及可將XML改變作為事件發(fā)送給任何監(jiān)聽的客戶。如所 示的,API包括外部代理程序316和內(nèi)部代理程序3U,前者為外部數(shù)據(jù)消費(fèi)者318 而后者為任何內(nèi)部數(shù)據(jù)消費(fèi)者314提供與數(shù)據(jù)存儲302交互的接口 。對數(shù)據(jù)存儲302的操縱可實(shí)時(shí)發(fā)生。如上所述,數(shù)據(jù)存儲306可包含一或多種類型的數(shù)據(jù)。例如,公司可能具有一個(gè)數(shù)據(jù)存儲,這是他們正在用于存儲他們想 要存儲在卓一數(shù)據(jù)存儲器內(nèi)的所有不同類型的數(shù)據(jù)的數(shù)據(jù)存儲,同時(shí)另一公司可能想要在不同數(shù)據(jù)存儲內(nèi)器存儲不同類型的數(shù)據(jù)。數(shù)據(jù)消費(fèi)者318可注冊涉及有關(guān)數(shù)據(jù)存儲306的動作的事件。例如,數(shù)據(jù)消 費(fèi)者可注冊以接收在對一或多個(gè)數(shù)據(jù)存儲作出任何類型的改變時(shí)的事件。另一數(shù)據(jù) 消費(fèi)者可針對發(fā)生于數(shù)據(jù)存儲內(nèi)某一元素或某組元素的改變進(jìn)行注冊。公共事件包 括,加載數(shù)據(jù)存儲,添加到數(shù)據(jù)存儲和從數(shù)據(jù)存儲刪除。當(dāng)事件發(fā)生時(shí),已經(jīng)注冊 過的各數(shù)據(jù)消費(fèi)者可對改變作出反應(yīng),同時(shí)保持?jǐn)?shù)據(jù)存儲器的狀態(tài)一致。很多時(shí)候,數(shù)據(jù)消費(fèi)者在作出改變時(shí)不執(zhí)行任何動作。在其它時(shí)候,數(shù)據(jù)消費(fèi)者會響應(yīng)于事件 而執(zhí)行某(些)動作。例如,數(shù)據(jù)消費(fèi)者可響應(yīng)于改變而作出某些其它改變,諸如 響應(yīng)于題目改變而更新文檔內(nèi)的首部。數(shù)據(jù)消費(fèi)者還可執(zhí)行不影響文檔的某些其它 操作。例如,如果插入股票報(bào)價(jià)機(jī)代碼,則數(shù)據(jù)消費(fèi)者可檢索關(guān)聯(lián)于該股票代碼的 數(shù)據(jù),即使所有檢索到的數(shù)據(jù)并不顯示在文檔的呈現(xiàn)層內(nèi)。數(shù)據(jù)消費(fèi)者也可以拒絕 該改變。例如,如果數(shù)據(jù)消費(fèi)者l收到不接受的改變,則該數(shù)據(jù)消費(fèi)者可向代理程 序返回一個(gè)標(biāo)志,表示不接受該改變。只要改變不被接受,則使得該改變連同任何副效應(yīng)恢復(fù)原狀(roll back),使得該改變從未發(fā)生過。每一 XML存儲306可使 用其撤消存儲來撤消其己作出的改變。作為替代,可使用全局撤消存儲310來撤消 在各數(shù)據(jù)存儲上作出的改變。假設(shè)存在對發(fā)生于文檔性質(zhì)的事件感興趣的三個(gè)數(shù)據(jù) 消費(fèi)者,因此這些數(shù)據(jù)消費(fèi)者的每一個(gè)已經(jīng)注冊以接收有關(guān)這些性質(zhì)改變的事件。 當(dāng)作出改變時(shí),數(shù)據(jù)存儲確定已經(jīng)注冊的每一數(shù)據(jù)消費(fèi)者并且按預(yù)定的順序?qū)⒏淖?通知它們每一個(gè)。每一數(shù)據(jù)消費(fèi)者進(jìn)而可響應(yīng)于該改變而執(zhí)行某個(gè)動作。如果該改 變以及由已注冊數(shù)據(jù)消費(fèi)者作出的、作為該改變的結(jié)果的任何改變不被任一數(shù)據(jù)消 費(fèi)者接受,則涉及該初始改變的所有改變被撤消。外部代理程序應(yīng)用編程接口層316提供由外部數(shù)據(jù)消費(fèi)者318對數(shù)據(jù)存儲302 的訪問并且允許第三方客戶與數(shù)據(jù)存儲器302交互,就象與關(guān)聯(lián)于應(yīng)用的內(nèi)部數(shù)據(jù) 消費(fèi)者與數(shù)據(jù)存儲器交互一樣。為標(biāo)識目的,為數(shù)據(jù)存儲302內(nèi)的每一XML數(shù)據(jù) 存儲306提供唯一的ID。這幫助定位XML數(shù)據(jù)存儲306。在任何時(shí)候,數(shù)據(jù)消費(fèi)者可添加用于驗(yàn)證數(shù)據(jù)存儲內(nèi)數(shù)據(jù)的模式。因此,現(xiàn) 在有任何其它第三方代碼出現(xiàn)且嘗試改變數(shù)據(jù),數(shù)據(jù)存儲器首先要做的是確定該改變對于所提供的模式是否有意義。 一旦模式被附連,代理程序就變?yōu)轵?yàn)證中的對象。 數(shù)據(jù)存儲一次還可接收一個(gè)以上元素。提供數(shù)據(jù)(XML)作為一個(gè)特定的流可幫助在一些情況下滿足模式。例如假定,所附連的模式表示如果股票數(shù)據(jù)存在則必須至少具有兩個(gè)公司。如果一個(gè)一個(gè)地添加股票數(shù)據(jù)則這將會是無效的。使用單遍過程來驗(yàn)證數(shù)據(jù)。代替進(jìn)行兩遍會導(dǎo)致對數(shù)據(jù)存儲作出改變的過程,在數(shù)據(jù)被提交給數(shù)據(jù)存儲之前執(zhí)行驗(yàn)證。這有助于防止數(shù)據(jù)消費(fèi)者將錯(cuò)誤引入數(shù)據(jù)存儲。圖4和5例示處理涉及數(shù)據(jù)存儲的事件的過程。當(dāng)閱讀對在此提供的例程的 討論時(shí),應(yīng)當(dāng)了解,各種實(shí)施例的邏輯操作是作為(l)運(yùn)行于計(jì)算機(jī)系統(tǒng)上的一系 列計(jì)算機(jī)實(shí)現(xiàn)的動作或程序模塊,以及/或者(2)計(jì)算機(jī)系統(tǒng)內(nèi)互連的機(jī)器邏輯電路14或電路模塊來實(shí)現(xiàn)的。該實(shí)現(xiàn)是取決于實(shí)現(xiàn)本發(fā)明的計(jì)算機(jī)系統(tǒng)的性能要求來選擇 的。因此,所例示的并且構(gòu)成在此所述的實(shí)施例的邏輯操作被不同地表示為操作、 結(jié)構(gòu)性設(shè)備、動作或模塊。這些操作、結(jié)構(gòu)性設(shè)備、動作和模塊可用軟件、固件、 專用數(shù)字邏輯以及它們的任何組合來實(shí)現(xiàn)。圖4例示處理關(guān)聯(lián)于數(shù)據(jù)存儲器的事件的過程。 一般而言,當(dāng)數(shù)據(jù)存儲從數(shù) 據(jù)消費(fèi)者收到改變請求時(shí),該改變被發(fā)送到所有已注冊數(shù)據(jù)消費(fèi)者,以允許它們拒絕該改變或者請求副效應(yīng)(其它XML改變)作為該改變的結(jié)果。在開始操作之后,過程流至操作410,其中數(shù)據(jù)消費(fèi)者注冊其感興趣接收的任 何事件。這些事件可與添加數(shù)據(jù)到數(shù)據(jù)存儲、從數(shù)據(jù)存儲移除數(shù)據(jù)、對數(shù)據(jù)存儲中 的數(shù)據(jù)進(jìn)行改變等等有關(guān)。事件可被附連到對存儲在一或多個(gè)數(shù)據(jù)存儲器內(nèi)的元素 進(jìn)行的全局改變或者特定改變。例如, 一個(gè)數(shù)據(jù)消費(fèi)者可能想要知道任何改變作出 的時(shí)間,而另一客戶可能僅對數(shù)據(jù)存儲內(nèi)一特定值的改變感興趣。移動至判定操作420,作出事件是否已發(fā)生的判定。事件與對數(shù)據(jù)存儲的改變 有關(guān)。例如,如上所述,事件可包括添加、移除或?qū)?shù)據(jù)存儲作出某種其它改變。 例如,改變可以是添加一個(gè)節(jié)點(diǎn)到數(shù)據(jù)存儲。當(dāng)事件尚未發(fā)生時(shí),過程返回到判定 操作420。當(dāng)事件已發(fā)生時(shí),過程流至操作430。在操作430,改變被中繼給已注冊該改變的每一數(shù)據(jù)消費(fèi)者。按照一個(gè)實(shí)施例, 以預(yù)定順序通知每一數(shù)據(jù)消費(fèi)者。例如,該順序可基于數(shù)據(jù)存儲進(jìn)行注冊的順序。轉(zhuǎn)移至操作440,-從已接收事件通知的每一數(shù)據(jù)消費(fèi)者獲得響應(yīng)。每一客戶可 接受或拒絕該改變。這些響應(yīng)該改變是否將被提交給數(shù)據(jù)存儲。移動至判定操作450,作出是否有任何數(shù)據(jù)消費(fèi)者拒絕對數(shù)據(jù)存儲的這一改變 的判定。當(dāng)該改變已由任何數(shù)據(jù)消費(fèi)者拒絕時(shí),過程移動至框460,其中響應(yīng)于該 改變作出的任何改變被恢復(fù)原狀,好象改變甚至沒有發(fā)生過一樣。當(dāng)所有被通知的客戶接受該改變時(shí),過程流至操作470,其中可任選地驗(yàn)證這 一改變,并且隨后過程流至操作480,其中該改變被提交給合適的數(shù)據(jù)存儲。啟動該改變的原始數(shù)據(jù)消費(fèi)者隨后接收該改變已被接受的通知(操作490)。 過程隨后移動至結(jié)束框,并且返回以處理其它動作。圖5例示處理包括副效應(yīng)的事件的過程。 一般而言,當(dāng)數(shù)據(jù)存儲從數(shù)據(jù)消費(fèi) 者接收改變請求時(shí),該改變被發(fā)送到所有已注冊客戶,以允許它們拒絕該改變,或 者請求副效應(yīng)(其它XML改變)作為該改變的結(jié)果。例如,客戶可被通知對數(shù)據(jù) 存儲內(nèi)的一個(gè)項(xiàng)的改變,并且作為該改變的結(jié)果,數(shù)據(jù)消費(fèi)者對數(shù)據(jù)存儲作出另一改變。當(dāng)請求作為副效應(yīng)的改變時(shí),則過程與圖4所示的過程略有不同。在開始操作之后,過程流至操作510,其中作為當(dāng)前正被接受或拒絕的改變的 結(jié)果,客戶啟動對數(shù)據(jù)存儲的副效應(yīng)改變。轉(zhuǎn)移至操作520,該副效應(yīng)改變被排隊(duì)但未被執(zhí)行。換言之,該副效應(yīng)改變沒 有立即在數(shù)據(jù)存儲內(nèi)執(zhí)行。基于該事實(shí),用于這些事件的替換方案包括.強(qiáng)制節(jié)點(diǎn)操作(例如,添加,取代)以 返回void而非節(jié)點(diǎn)和文檔,它是一個(gè)請 求而非動作使節(jié)點(diǎn)操作的結(jié)果一致 無性能擊中 對于如果你要操縱節(jié)點(diǎn)則你在其 AfterAdd(添加后)事件中這么做的事實(shí), 清除經(jīng)歷反映調(diào)用者正在'請求'改變而非作出 改變的事實(shí)使節(jié)點(diǎn)操作的結(jié)果一致 無性能擊中對每一調(diào)用者執(zhí)行必要的改變,隨后在 調(diào)用者返回時(shí)撤消它們向調(diào)用者返回活動節(jié)點(diǎn)當(dāng)在事件中作出改變時(shí)返回?cái)嚅_連接 (讀尚未提交的節(jié)點(diǎn))無論如何從改變返回節(jié)點(diǎn)保存OM客戶的獨(dú)立DOM向調(diào)用者返回活動節(jié)點(diǎn)移動至判定操作530,作出是否有任何數(shù)據(jù)消費(fèi)者拒絕對數(shù)據(jù)存儲器的原始改 變的判定。當(dāng)該改變己經(jīng)被任何數(shù)據(jù)消費(fèi)者拒絕時(shí),過程移動至框540,其中響應(yīng)于該改 變所作的任何改變和被排隊(duì)的任何副效^Z改變被恢復(fù)原狀,好象改變甚至沒有發(fā)生 過一樣。當(dāng)客戶己接受原始改變時(shí),過程流至操作550,其中可任選地驗(yàn)證該改變,并 且過程流至操作560,其中原始改變被提交給合適的數(shù)據(jù)存儲。過程隨后移動至操作570,其中在數(shù)據(jù)存儲內(nèi)一次一個(gè)地執(zhí)行副效應(yīng)改變。每 一副效應(yīng)改變隨后可被任何已注冊客戶接受或拒絕。當(dāng)任何副效應(yīng)改變被拒絕時(shí), 所作的所有改變被恢復(fù)原狀,好象改變甚至沒有被作出過一樣。過程隨后移動至結(jié)束框,并且返回以處理其它動作。下面是示例代碼段,它們說明通過數(shù)據(jù)存儲OM暴露的部分公共功能性第一示例說明將流添加到數(shù)據(jù)存儲Dim o Stream As CustomXMLPartSet oStream = Document.XMLStreams.Add oStream.Load("c:\specSolution.xmr) 第二示例說明定位數(shù)據(jù)存儲。 Dim o Stream As CustomXMLPart Set oStream ——Document.XMLStreams("http:〃www.microsoft.com/office/12/specs")第三示例說明添加子樹到數(shù)據(jù)存儲。oStream.SelectionNamespaces = oStream.SelectionNamespaces & "xmlns:s='http:〃www.microsoft.com/office/12/specs"'oStream.SelectSingleNode(7s:spec/s:specBody/s:issues").AppendSubtree("<s:issu e><s:issueBy/><s:issueDate/><s:issueDesc/x/s:issue>")按照一個(gè)實(shí)施例,下面是與API相關(guān)聯(lián)的示例性函數(shù)。CustomXMLNode上的事件事件可CustomXMLNode(定制XML節(jié)點(diǎn))上發(fā)生,也可僅在文檔層上發(fā)生。AfterInsert(NewNode as CustomXMLNode, InUndoRedo as Boolean) 參數(shù)NewNode :對應(yīng)于剛被添加至該CustomXMLNode的節(jié)點(diǎn)的 CustomXMLNode對象。注意該節(jié)點(diǎn)可具有子節(jié)點(diǎn)(如果子樹剛被添加至文檔)。 InUndoRedo: Boolean(布爾型),如果節(jié)點(diǎn)是作為用戶進(jìn)行的撤消/重做動作一部分 被添加的,則返回TRUE(真),否則返回FALSE(假)。每當(dāng)XML節(jié)點(diǎn)將被添加到當(dāng)前文檔時(shí),該事件激發(fā)。如果添加操作涉及將一個(gè)XML文檔的子樹被添加至CustomXMLNode,為最頂端的節(jié)點(diǎn)改變激發(fā)該事件 一次。為每一改變通過消息發(fā)送到數(shù)據(jù)存儲,該事件激發(fā)一次,因此由該事件表示 的改變的副效應(yīng)也觸發(fā)該事件。AfterDelete(01dNode as CustomXMLNode, OldParentNode as CustomXMLNode, OldNextSibling As CustomXMLNode, InUndoRedo as Boolean)參數(shù)OldNode:對應(yīng)于剛從CustomXMLPart移除的節(jié)點(diǎn)的CustomXMLNode 對象。注意#1:該節(jié)點(diǎn)可以具有子節(jié)點(diǎn)(如果正在從文檔移除子樹)。注意#2:該節(jié)點(diǎn)將是'斷開連接'的節(jié)點(diǎn),因?yàn)榭蓮脑摴?jié)點(diǎn)進(jìn)行向下查詢,但不能向上——它看上去單獨(dú)存在(即,它是一個(gè)具有相同OwnerStream的文檔元素w/)。 OldParentNode:對應(yīng)于OldNode的以前父節(jié)點(diǎn)的CustomXMLNode對象。 OldNextSibling:對應(yīng)于OldNode的以前下一兄弟的CustomXMLNode對象。 InUndoRedo: Boolean,如果該節(jié)點(diǎn)作為用戶的撤消/重做動作一部分而被添加則返 回TRUE,否則返回FALSE。每當(dāng)從數(shù)據(jù)存儲中的當(dāng)前項(xiàng)刪除XML節(jié)點(diǎn)時(shí),該事件激發(fā)。如果刪除操作涉 及CustomXMLPart中XML文檔的子樹,則為最頂端的節(jié)點(diǎn)的改變就激發(fā)該事件 一次。為每一改變通過消息發(fā)送到數(shù)據(jù)存儲,該事件激發(fā)一次,因此由該事件表示 的改變的副效應(yīng)也觸發(fā)該事件。AfterReplace(OldNode as CustomXMLNode, NewNode as CustomXMLNode, InUndoRedo as Boolean)參數(shù)OldNode:相應(yīng)于剛從CustomXMLPart移除的節(jié)點(diǎn)的CustomXMLNode 對象。注意#1:該節(jié)點(diǎn)可能具有子節(jié)點(diǎn)(如果正從文檔中移除子樹)。注意#2:.該節(jié)點(diǎn)將是一個(gè)(斷開連接'的節(jié)點(diǎn),因?yàn)榭蓮脑摴?jié)點(diǎn)進(jìn)行向下查詢,但不能向上——它看上去是單獨(dú)存在的(即,它是一個(gè)具有相同OwnerStream的文檔元素w/)。 NewNode:對應(yīng)于剛添加到CustomXMLPart的節(jié)點(diǎn)的CustomXMLNode對象。注 意該節(jié)點(diǎn)可具有子節(jié)點(diǎn)(如果子樹剛被添加到文檔)。InUndoRedo: Boolean,如果該節(jié)點(diǎn)作為用戶的撤消/重做動作一部分而被添加則返回TRUE,否則返回 FALSE 。每當(dāng)XML節(jié)點(diǎn)在數(shù)據(jù)存儲中被代替時(shí),該事件激發(fā)。如果替換操作涉及CustomXMLPart中XML文檔的子樹,則為最頂端的節(jié)點(diǎn)發(fā)生改變激發(fā)該事件一次。為每一改變通過消息發(fā)送到數(shù)據(jù)存儲,則該事件激發(fā)一次,因此由該事件表示的改變的副效應(yīng)也觸發(fā)該事件。CustomXMLPartsO:指向在包含OLE文檔性質(zhì)和WSS性質(zhì)流的文件中所有可用的數(shù)據(jù)存儲項(xiàng)的集合。CustomXMLPrefixMappings:表示當(dāng)前部分的所有前綴映射的對象。AddNamespace(Prefix As String, NamespaceURI As String) As Void參數(shù)Prefix: String(串),表示添加到前綴映射列表的前綴。NamespaceURI:String,表示指派給新添加前綴的命名空間。允許開發(fā)者添加定制命名空間/前綴映射以在查詢該項(xiàng)時(shí)使用。如果前綴已經(jīng)存在于管理器中,則除了在該前綴由數(shù)據(jù)存儲在內(nèi)部添加/使用的情況下,這會蓋寫該前綴的意義,隨后將返回一個(gè)錯(cuò)誤"該前綴已經(jīng)在使用并且不能被修改"。 Count As Long:返回集合中前綴映射的數(shù)量。 Item(Index as Long) As CustomXMLPrefixMapping 參數(shù)Index: Long(長整型),表示集合中所需模式的索引。 從集合返回所請求的CustomXMLPrefixMapping。該對象的默認(rèn)成員。 LookupNamespace(Prefix As String) As String參數(shù)Prefix: String,表示前綴映射列表中的前綴。允許開發(fā)者取得對應(yīng)于指定前綴的命名空間。如果沒有向所請求的前綴指派命名空間,則返回""。 LookupPrefix(NamespaceURI As String) As String 參數(shù)NamespaceURI: String,表示前綴映射列表中的命名空間。 允許開發(fā)者取得對應(yīng)于指定命名空間的前綴。如果沒有將前綴指派給所請求的命名空間,則返回""。如果在命名空間管理器中存在多個(gè)指定的前綴,則返回符合所提供的命名空間的第一個(gè)前綴。CustomXMLPrefixMapping:表示前綴映射的對象。Prefix As String:返回該前綴映射的前綴。NamespaceURI As String:返回該前綴映射的命名空間。CustomXMLSchema:表示作為模式集合一部分的模式的對象。Delete As Void:從模式集合刪除該模式。如果這是對已經(jīng)被驗(yàn)證或者被附連到流的集合(分類的活動集合)中的模式進(jìn)行的,則失敗,且錯(cuò)誤消息為"該模式不能被刪除,因?yàn)槟J郊袭?dāng)前正在使用"。19Location As String:返回一個(gè)串,它表示該模式在用戶機(jī)器上的位置。 NamespaceURI As String:返回該模式的目標(biāo)命名空間,如果XSD未指定則 返回""。Reload As Void:從盤重新加載該模式,這翻譯為修飾盤上該模式的拷貝更 新其位置(如果SL已改變)并且確保它仍是有效的模式。如果這是對己被驗(yàn)證或 被系于流的集合(分類的活動集合)中的模式進(jìn)行的,則失敗,且錯(cuò)誤消息為"該 模式不能被重新加載,因?yàn)槟J郊袭?dāng)前正在使用"。CustomXMLSchemaCollection():表示(可被/將被附連于流的)模式集合的對象。Add([NamespaceURI As String], [Alias As String], [FileName As String], [InstallForAllUsers As Boolean = False]) As CustomXMLSchema參數(shù)NamespaceURI: String,表示要添加到集合的模式的命名空間。如果該 模式存在于模式庫中,則從那里檢索它。Alias: String,表示要添加到集合的模式 的別名。如果該別名存在于SL中,使用該自變量來找到它。FileName: String, 表示可以找到該模式在盤上的位置。如果該參數(shù)被指定,不僅將模式添加到集合, 而且還將它添加到SL。 InstallForAllUsers: Boolean,表示在將模式添加到模式庫 的情況下,SL鍵應(yīng)當(dāng)被寫到HKLM (對于所有用戶)還是HKCU (僅對于當(dāng)前用 戶)。默認(rèn)為False (寫到HKCU)。該方法允許開發(fā)者添加一或多個(gè)模式到模式集合,而該模式集合要被添加到 數(shù)據(jù)存儲中的流并被添加到模式庫??梢院拖铝袇?shù)組一起調(diào)用它(在沖突的情形 中,嘗試按以下順序使用這些參數(shù)) [NamespaceURI],[Alias],FileName,[InstallForAllUsers](如果對于該命名空間不存在 模式,則將一個(gè)模式添加到模式庫)。僅NamespaceURI (從模式庫中查找XSD)。 僅Alias (從模式庫中査找XSD)。AddCollection(SchemaCollection As CustomXMLSchemas()) As Void參數(shù)SchemaCollection :表示要導(dǎo)入到當(dāng)前集合中的模式集合的 CustomXMLSchemas()對象。添加己經(jīng)存在的集合到當(dāng)前集合。如果命名空間在導(dǎo)入期間發(fā)生沖突(例如, 如果a.xsd已經(jīng)鏈接到"fooNamespace"但引入的集合具有b.xsd用于同一命名空 間),則引入的集合獲勝。Count As Long:返回集合中模式的數(shù)量。Item(Index as Variant) As CustomXMLSchema參數(shù)Index: Variant(變體型),指示集合中所需的項(xiàng)。它可以是以下任一-String,表示所需模式的目標(biāo)命名空間;或者Long,表示集合中所需模式的索引。 從集合返回所請求的CustomXMLSchema。該對象的默認(rèn)成員。 NamespaceURI(Index as Long) As String 參數(shù)Index: Long,表示集合中模式的索引。 返回模式集合中指定成員的目標(biāo)命名空間。Validate As Boolean:返回Boolean,表示集合中的模式是否被驗(yàn)證。這也是 為集合中每一模式遍歷Includes并且將它們添加到請求它們的模式的情況。CustomXMLParts():表示一組CustomXMLPart對象的集合。Add([XML As String], [SchemaCollection as CustomXMLSchemaCollection()]) As CustomXMLPart參數(shù)XML:可選的String,表示添加到新創(chuàng)建的CustomXMLPart的XML。 SchemaCollection:可選的CustomDataSchemaCollection()對象,表示用于驗(yàn)證該流 的模式組。.允許用戶添加新的CustomXMLPart到文件。如果XML參數(shù)中的XML不是 合式(well-formed)的,則失敗,并拋出錯(cuò)誤"要添加內(nèi)容到該流,它必須是有效、 合式的XML"。如果用戶提供SchemaCollection:驗(yàn)證它(如果它尚未被驗(yàn)證過)。 拋出被接收回OM客戶的任何MSXML語法分析錯(cuò)誤并且未能添加流。檢査XML 參數(shù)是否能被加載到DOM中。如果否,則失敗并且拋出錯(cuò)誤"要添加內(nèi)容到流, 它必須是有效、合式的XML"。附連模式集合到DOM并且嘗試驗(yàn)證實(shí)例文檔。 如果它沒有證實(shí),則失敗并且拋出在OM客戶接收回的XML語法分析錯(cuò)誤并且不 將流添加到集合。如果用戶不提供SchemaCollection:檢查XML參數(shù)是否可被加載到DOM中。 如果否,則失敗并且拋出錯(cuò)誤"要添加內(nèi)容到流,它必須是有效、合式的XML"。 査看在XML文件中所引用的命名空間列表。從SL中找出這些模式并且推理出用 于它們的模式集合。嘗試驗(yàn)證所得到的模式集合。如果它沒有證實(shí),仍將流加到該 集合,但它不與任何模式集合相關(guān)聯(lián)并且因此沒有被驗(yàn)證。將該模式集合附連到 DOM并且嘗試驗(yàn)證實(shí)例文檔。如果它沒有證實(shí),則失敗并且拋出接收回OM客戶 的XML語法分析錯(cuò)誤,并且不將流添加該集合。如果它沒有證實(shí),仍將流添加到 該集合,但它不與任何模式集合相關(guān)聯(lián)并且因此沒有被驗(yàn)證。提供空SchemaCollection將是一個(gè)用來表示"從不驗(yàn)證該流"的顯式動作。 Count As Long:返回集合中定制數(shù)據(jù)流的數(shù)量。 Item(Index As Variant) As CustomXMLPart參數(shù)Index: Variant,可以是下列兩種類型之一Long,表示集合中所需 CustomXMLPart的索弓l;或者String,表示集合中所需CustomXMLPart的根命名 空間。如果不止一個(gè)CustomXMLPart符合這個(gè)根命名空間,則將按索引順序返回 第一個(gè)符合的CustomXMLPart。這是CustomXMLParts對象的默認(rèn)成員,并且它返回對應(yīng)于所請求對象的 CustomXMLPart對象。SelectByID(ID As String) As CustomXMLPart 參數(shù)ID: String,包含應(yīng)從集合返回的數(shù)據(jù)存儲項(xiàng)的ID。 允許開發(fā)者使用其ID從數(shù)據(jù)存儲抓取特定項(xiàng)。如果具有此ID的存儲項(xiàng)不存 在,則返回Nothing(無)。SelectByNamespace(NamespaceURI As String) As CustomXMLParts() 參數(shù)NamespaceURI: String,表示來自數(shù)據(jù)存儲的集合中的所需項(xiàng)的根命名 空間。返回其根命名空間匹配所請求條目的所有數(shù)據(jù)存儲項(xiàng)。如果具有此根命名空間的流不存在,則返回空CustomXMLParts()集合。 StreamAfterAdd(NewStream As CustomXMLPart 參數(shù)NewStream:包含剛被添加的流的CustomXMLPart對象。 每當(dāng)新的流被添加到數(shù)據(jù)存儲時(shí),該事件激發(fā)。如果添加多個(gè)流,則為每一新流該事件激發(fā)一次。如果(使用合適的.Add(添加)方法)將流與XML內(nèi)容一起添加,則該事件應(yīng)當(dāng)直到該項(xiàng)被該內(nèi)容填充才激發(fā)。 StreamBeforeDelete(OldStream As CustomXMLPart)參數(shù)OldStream:包含將要從數(shù)據(jù)存儲刪除的流的CustomXMLPart對象。 每當(dāng)從數(shù)據(jù)存儲移除流,該事件激發(fā)。如果移除多個(gè)流,則為每一被刪除的 流該事件激發(fā)一次。還將該流標(biāo)記為'將要被刪除',使得對它的只讀操作是合法 的(例如,查詢節(jié)點(diǎn)、檢查值等),但寫操作失敗,且錯(cuò)誤信息為"該操作不能在 將要被刪除的流上完成"。CustomXMLPart: Object(對象),表示數(shù)據(jù)存儲中單個(gè)XML流。 AddNode([Name As String], [NamespaceURI As String], Parent As[NextSibling As CustomXMLNode],[NodeType As msoCustomXMLNodeType], [Node Value As String]) As Void參數(shù)Name: String,表示要被添加到XML DOM的節(jié)點(diǎn)的基本名稱。 Namespace:可選的String,表示要被添加到XML DOM的節(jié)點(diǎn)的命名空間。添加 msoCustomXMLNodeElement或msoCustomXMLNodeAttribute類型的節(jié)點(diǎn)時(shí)需要, 否則忽略。Parent: CustomXMLPart,表示該節(jié)點(diǎn)應(yīng)當(dāng)被添加至其下的節(jié)點(diǎn)。如果 添加屬性,表示應(yīng)當(dāng)向其添加屬性的元素。NextSibling:可選的CustomXMLNode, 表示應(yīng)當(dāng)變成新節(jié)點(diǎn)的下一兄弟節(jié)點(diǎn)的節(jié)點(diǎn)。如果未指定,則該節(jié)點(diǎn)被添加到父節(jié) 點(diǎn)的子節(jié)點(diǎn)末尾。忽略有關(guān)添加msoCustomXMLNodeAttribute類型。如果 NextSibling不是某個(gè)父節(jié)點(diǎn)的子節(jié)點(diǎn),返回錯(cuò)誤"該節(jié)點(diǎn)不能被添加,因?yàn)橄?一兄弟節(jié)點(diǎn)不是父節(jié)點(diǎn)的子節(jié)點(diǎn)"。NodeType:可選的msoCustomXMLNodeType, 指定要創(chuàng)建的節(jié)點(diǎn)類型。如果未指定,則假設(shè)為msoCustomXMLNodeElement。 NodeValue:可選的String,用于設(shè)置允許文本的節(jié)點(diǎn)的節(jié)點(diǎn)值。如果該節(jié)點(diǎn)不允 許文本,則忽略該參數(shù)。用于添加XML節(jié)點(diǎn)到數(shù)據(jù)存儲項(xiàng)的普適方法。需要Parent并且NodeType默 認(rèn)為msoCustomXMLNodeElement。如果得到的添加在結(jié)構(gòu)上是無效的,則失敗, 且錯(cuò)誤消息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上無效的數(shù)據(jù)流"。如果命名 空間不在模式引用集合中,則失敗并且提供錯(cuò)誤消息"要添加該元素,首先必須 附連其模式至數(shù)據(jù)流"。DocumentElement As CustomXMLNode取流的根元素。如果流為空,則返回Nothing。Delete As Void:從數(shù)據(jù)存儲中刪除當(dāng)前CustomXMLPart。如果用戶試圖刪除 核心性質(zhì)部分,則失敗,且錯(cuò)誤消息為"該定制XML部分為辦公室正確運(yùn)行所 需的因而不能刪除"。ID As String:返回一個(gè)串,包含指派給當(dāng)前CustomXMLPart的GUID。Load(FilePath As String) As Boolean參數(shù)FilePath: String對象,對應(yīng)于在用戶機(jī)器(或網(wǎng)絡(luò)等)上的、應(yīng)從其 中加載用于該CustomXMLPart的XML的文件。允許模板作者從先前存在于其機(jī)器上的文件填充CustomXMLPart。如果加載 成功,則返回TRUE,如果否則FALSE (包括啟動結(jié)構(gòu)強(qiáng)制并且XML在結(jié)構(gòu)上非 法的情形或者XML不是有效和/或合式的情形)。 一旦加載DOM,則失敗,且錯(cuò)誤消息為"該DOM不能加載兩次"。LoadXML(XML As String) As Boolean參數(shù)XML: String對象,對應(yīng)于應(yīng)當(dāng)與該CustomXMLPart —起加載的XML。允許模板作者從XML串來填充CustomXMLPart。如果加載成功則返回TRUE, 否則返回FALSE (包括啟用結(jié)構(gòu)性強(qiáng)制并且XML在結(jié)構(gòu)上非法的情形或者XML 不是有效和/或合式的情形)。 一旦加載DOM,則失敗,錯(cuò)誤消息為"該DOM不 能加載兩次"。 -NamespaceURI As String:返回一個(gè)串,包含當(dāng)前CustomXMLPart的根節(jié)點(diǎn)的 完整命名空間URI。如果流為空(創(chuàng)建但未添加節(jié)點(diǎn)),則返回""。SchemaCollection As CustornXMLSchemaCollection(): 取 / 設(shè)置 CustomXMLSchemaCollection()集合,表示附連到該流的模式組。如果用戶提供 SchemaCollection,則驗(yàn)證它(如果它尚未驗(yàn)證過)。拋出接收回客戶的任何語法 分析錯(cuò)誤并且未能添加流;以及將模式集合附連到DOM并且嘗試驗(yàn)證實(shí)例文檔。 如果它沒有證實(shí),則失敗并且拋出在客戶處接收回的語法分析錯(cuò)誤,并且不改變流 上的模式集合。NamespaceManager As CustomXMLPrefixMappings()取得針對當(dāng)前CustomXMLPart使用的命名空間前綴映射組。當(dāng)打開文檔時(shí), 自動用嵌入在數(shù)據(jù)存儲項(xiàng)中的前綴映射的內(nèi)容來填充它,但可以由模板作者編輯/ 添加/刪除它。然而,按照一個(gè)實(shí)施例,對該參數(shù)的改變不與文檔一起保存。SelectNodes(XPath As String) As CustomXMLNodes()參數(shù)XPath: String,包含針對DOM求值的XPath表達(dá)式。該XPath的前綴 映射是從相關(guān)聯(lián)的命名空間管理器檢索的。如果XPath沒有解析,則傳遞通過任何 發(fā)生錯(cuò)誤的地方。該方法允許開發(fā)者從DOM內(nèi)取回一組節(jié)點(diǎn)。SelectSingleNode(XPath As String) As CustomXMLNode參數(shù)XPath: String,包含針對DOM求值的XPath表達(dá)式。該XPath的前綴 映射是從相關(guān)聯(lián)的命名空間管理器檢索的。如果XPath沒有解析,則傳遞通過任何 發(fā)生錯(cuò)誤的地方。該方法允許開發(fā)者從DOM內(nèi)取回單個(gè)節(jié)點(diǎn)。XML As String:返回當(dāng)前CustomXMLPart的XML表示。NodeAfterInsert(NewNode as CustomXMLNode, InUndoRedo as Boolean)參數(shù)NewNode: CustomXMLNode對象,對應(yīng)于剛被添加到CustomXMLPart 的節(jié)點(diǎn)。注意該節(jié)點(diǎn)可能有子節(jié)點(diǎn)(如果子樹剛被添加到文檔)。InUndoRedo: Boolean,如果節(jié)點(diǎn)是作為用戶的撤消/重做動作的一部分被添加的,則返回TRUE, 否則FALSE 。每當(dāng)XML節(jié)點(diǎn)將要被添加到當(dāng)前文檔,該事件激發(fā)。如果添加操作涉及要添 加到CustomXMLPart中的XML文檔子樹,則為最頂端節(jié)點(diǎn)的改變,就激發(fā)該事 件一次。為通過消息發(fā)送到數(shù)據(jù)存儲的每一改變,該事件激發(fā)一次,因此由該事件 表示的改變的副效應(yīng)也觸發(fā)該事件。NodeAfterDelete(01dNode as CustomXMLNode, OldParentNode as CustomXMLNode, OldNextSibling As CustomXMLNode, InUndoRedo as Boolean).參數(shù)OldNode: CustomXMLNode對象,對應(yīng)于剛從CustomXMLPart移除的節(jié)點(diǎn)。注意#1:該節(jié)點(diǎn)可能有子節(jié)點(diǎn)(如果子樹正從文檔移除)。注意#2:該節(jié)點(diǎn)將是一個(gè)'斷開連接'的節(jié)點(diǎn),因?yàn)榭蓮脑摴?jié)點(diǎn)進(jìn)行向下查詢,但不能向上——它看上去是單獨(dú)存在的(即,它是一個(gè)具有相同OwnerStream的文檔元素w/)。 OldParentNode: CustomXMLNode對象,對應(yīng)于OldNode以前的父節(jié)點(diǎn)。 OldNextSibling: CustomXMLNode對象,對應(yīng)于OldNode以前的下一兄弟節(jié)點(diǎn)。 InUndoRedo: Boolean,如果該節(jié)點(diǎn)作為用戶的撤消/重做動作一部分而被添加則返 回TRUE,否則返回FALSE。每當(dāng)從數(shù)據(jù)存儲的當(dāng)前項(xiàng)中刪除XML節(jié)點(diǎn)時(shí),該事件激發(fā)。如果刪除操作涉 及CustomXMLPart中的XML文檔子樹,則為最頂端的節(jié)點(diǎn)發(fā)生改變就激發(fā)該事 件一次。為通過消息發(fā)送到數(shù)據(jù)存儲的每一改變,該事件激發(fā)一次,因此由該事件 表示的改變的副效應(yīng)也觸發(fā)該事件。NodeAfterReplace(01dNode as CustomXMLNode, NewNode as CustomXMLNode, InUndoRedo as Boolean)參數(shù)OldNode: CustomXMLNode對象,相應(yīng)于剛從CustomXMLPart移除的 節(jié)點(diǎn)。注意#1:該節(jié)點(diǎn)可能具有子節(jié)點(diǎn)(如果正從文檔移除子樹)。注意#2:該節(jié) 點(diǎn)將是一個(gè)'斷開連接'的節(jié)點(diǎn),因?yàn)榭蓮脑摴?jié)點(diǎn)進(jìn)行向下查詢,但不能向上—— 它顯示器是單獨(dú)存在的(即,它是一個(gè)具有相同OwnerStream的文檔元素w/)。 NewNode: CustomXMLNode對象,對應(yīng)于剛添加到CustomXMLPart的節(jié)點(diǎn)。注 意該節(jié)點(diǎn)可具有子節(jié)點(diǎn)(如果子樹剛被添加到文檔)。InUndoRedo: Boolean, 如果該節(jié)點(diǎn)作為用戶的撤消/重做動作一部分而被添加則返回TRUE,否則返回25每當(dāng)XML節(jié)點(diǎn)在數(shù)據(jù)存儲中被代替時(shí),該事件激發(fā)。如果替換操作涉及 CustomXMLPart中的XML文檔子樹,則為最頂端的節(jié)點(diǎn)發(fā)生改變就激發(fā)該事件一 次。為通過消息發(fā)送到數(shù)據(jù)存儲的每一改變,該事件激發(fā)一次,因此由該事件表示 的改變的副效應(yīng)也觸發(fā)該事件。CustomXMLNodes():表示當(dāng)前文檔中一組CustomXMLNode對象的集合。Count As Long:返回集合中CustomXMLNode的數(shù)量。Item(Index as Long) As CustomXMLNode參數(shù)Index: Long,表示集合中所需CustomXMLNode的索引。 這是CustomXMLNodes對象的默認(rèn)成員,并且它返回對應(yīng)于集合中所請求項(xiàng) 的CustomXMLNode對象。 CustomXMLNodeAppendChildNode([Name As String], [NamespaceURI As String], [NodeType As msoCustomXMLNodeType],[Node Value As String]) As Void參數(shù)Name:可選的String,表示要被添加到XML DOM的節(jié)點(diǎn)的基本名稱。 Namespace:可選的String,表示要被添加到XML DOM的元素的命名空間。在添 加msoCustomXMLNodeElement或msoCustomXMLNode Attribute類型的節(jié)點(diǎn)時(shí)需 要,否則忽略。NodeType:可選的msoCustomXMLNodeType,它指定要創(chuàng)建的節(jié) 點(diǎn)類型。如果沒有指定,假設(shè)為msoCustomXMLNodeElement 。 Node Value:可選 的String,用于設(shè)置允許文本的節(jié)點(diǎn)的節(jié)點(diǎn)值。如果該節(jié)點(diǎn)不允許文本,則忽略該 參數(shù)。如果該上下文節(jié)點(diǎn)是msoCustomXMLNodeElement類型,則允許開發(fā)者添加 單個(gè)節(jié)點(diǎn)作為樹中上下文元素下的最后一個(gè)子節(jié)點(diǎn)。如果否,則該方法失敗,且錯(cuò) 誤為"不能向注釋、處理指令或?qū)傩愿郊幼庸?jié)點(diǎn)"。還阻止其中要添加的節(jié)點(diǎn)是已經(jīng)存在的屬性的任何情形"在當(dāng)前元素上已存在同名屬性"。AppendChildSubtree(XML As String) As Void參數(shù)XML: String,表示要添加到XML DOM的子樹。該XML必須是合式 的XML文檔(包括命名空間聲明、單一根節(jié)點(diǎn)等等)。如果否,則失敗,且錯(cuò)誤 為"要添加XML子樹到你的文檔,它必須包含有效、合式的XML"。如果該上下文節(jié)點(diǎn)是msoCustomXMLNodeElement類型,則允許開發(fā)者添加 現(xiàn)有的合式XML子樹作為DOM中上下文元素下的最后一個(gè)子節(jié)點(diǎn)。如果否,則該方法失敗,且錯(cuò)誤為"不能向注釋、處理指令或?qū)傩愿郊幼庸?jié)點(diǎn)"。Attributes As CustomXMLNodes():返回CustomXMLNode集合,表示當(dāng)前元 素上的屬性。BaseName As String:這是CustomXMLNode的默認(rèn)成員。它返回沒有命名空 間前綴的節(jié)點(diǎn)基本名稱,如果在DOM中存在一個(gè)的話。ChildNodes As CustomXMLNodes:返回CustomXMLNodes集合,包含作為當(dāng) 前節(jié)點(diǎn)的子節(jié)點(diǎn)的所有元素。DeleteAsVoid:從XML DOM刪除當(dāng)前節(jié)點(diǎn)(包括其所有子節(jié)點(diǎn),如果有的 話)。如果所得刪除在結(jié)構(gòu)上非法,則失敗,且錯(cuò)誤消息為"該操作不能完成, 因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。FirstChild As CustomXMLNode:返回CustomXMLNode對象,對應(yīng)于當(dāng)前節(jié) 點(diǎn)的第一個(gè)子元素。如果該節(jié)點(diǎn)沒有子元素(或者它本身不是 msoCustomXMLNodeElement類型),則返回Nothing。HasChildNodes As Boolean:如果當(dāng)前節(jié)點(diǎn)具有子元素節(jié)點(diǎn)則返回TRUE,否 則FALSE。當(dāng)CustomXMLNode不是msoCustomXMLNodeElement節(jié)點(diǎn)類型時(shí), 這將返回FALSE。InsertNodeBefore([Name As String], [NamespaceURI As String], [NodeType As msoCustomXMLNodeType], [NodeValue As String], [NextSibling as CustomXMLNode]) As Void參數(shù)Name: String,表示要被添加到XML DOM的節(jié)點(diǎn)的基本名稱。 Namespace:可選的String,表示要被添加到XML DOM的元素的命名空間。在添 加msoCustomXMLNodeElement或msoCustomXMLNodeAttribute類型的節(jié)點(diǎn)時(shí)需 要,否則忽略。NodeType:可選的msoCustomXMLNodeType,指定要創(chuàng)建的節(jié)點(diǎn) 類型。如果未指定,則假設(shè)為msoCustomXMLNodeElement。 NodeValue:可選的 String,用于設(shè)置允許文本的節(jié)點(diǎn)的節(jié)點(diǎn)值。如果該節(jié)點(diǎn)不允許文本,則忽略該參 數(shù)。NextSibling:可選的CustomXMLNode對象,指定一節(jié)點(diǎn),在其之前應(yīng)當(dāng)將新 的XML元素添加到樹。在指定位置處將新的子節(jié)點(diǎn)插入到樹中。如果當(dāng)添加 msoCustomXMLNodeElement 、 msoCustomXMLNodeComment 或msoCustomXMLNodeProcessinglnstruction類型的節(jié)點(diǎn)時(shí)未呈現(xiàn)BeforeNode,貝lj將 節(jié)點(diǎn)添加到列表的末尾。如果添加為msoCustomXMLNodeAttribute類型,則忽略它。如果NextSibling不是上下文節(jié)點(diǎn)的子節(jié)點(diǎn),則該方法失敗"該XML節(jié)點(diǎn) 不能被添加,因?yàn)橄乱粋€(gè)兄弟元素必須是上下文元素的子元素"。如果所得到的添 加在結(jié)構(gòu)上非法(并且模式實(shí)施被啟用),則失敗,且錯(cuò)誤消息為"該操作不能 完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。還阻止其中將被添加的節(jié)點(diǎn)為已存在 的屬性的任何情形"在當(dāng)前元素上已存在同名的屬性"。InsertSubtreeBefore(XML As String, [NextSibling as CustomXMLNode]) AsVoid參數(shù)XML: String,表示添加到XML DOM的子樹。該XML必須是合式的 XML文檔(包括命名空間聲明、單一根節(jié)點(diǎn),等等)。如果否,則失敗,且錯(cuò)誤 為"要添加XML子樹到你的文檔,它必須包含有效的合式的XML"。NextSibling: 可選的CustomXMLNode對象,指定一節(jié)點(diǎn),在其之前應(yīng)當(dāng)將新的XML元素添加 到樹。布指定位置處將指定XML子樹插入到子節(jié)點(diǎn)組中。如果NextSibling不是上 下文節(jié)點(diǎn)的子節(jié)點(diǎn),則該方法失敗"該XML節(jié)點(diǎn)不能被添加,因?yàn)橄乱粋€(gè)兄弟 節(jié)點(diǎn)必須是上下文元素的子元素"。如果所得到的添加在結(jié)構(gòu)上非法,則失敗,且 錯(cuò)誤消息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。LastChild As CustomXMLNode:返回CustomXMLNode對象,對應(yīng)于當(dāng)前節(jié) 點(diǎn)的最后一個(gè)子元素。如果節(jié)點(diǎn)沒有子元素(或者如果它本身不是 msoCustomXMLNodeElement類型),則返回Nothing。NamespaceURI As String [read-only(只讀)]返回String ,對應(yīng)于當(dāng)前節(jié)點(diǎn)的命名空間。如果節(jié)點(diǎn)是 mso.CustomXMLNodeComment、 msoCustomXMLNodeProcessinglnstruction類型,則返回""。NextSibling As CustomXMLNode:返回當(dāng)前節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)(元素、 注釋或者處理指令)。如果節(jié)點(diǎn)是其所在層上的最后一個(gè)兄弟節(jié)點(diǎn),則返回Nothing。NodeType As msoCustomXMLNodeType: 返回msoCustomXMLNodeType常 量,表示當(dāng)前節(jié)點(diǎn)的類型。Node Value As String:取得/設(shè)置僅包含文本的節(jié)點(diǎn)(即文本節(jié)點(diǎn)、注釋、處 理指令、屬性)內(nèi)部的文本。對于元素,失敗"不能設(shè)置元素節(jié)點(diǎn)的NodeValue 參數(shù)"。OwnerDoc腿ent As Variant : 返回 Document(文檔)/Workbook(工作簿)/Presentation(演示)對象,表示關(guān)聯(lián)于該節(jié)點(diǎn)的Word文檔。OwnerStream As CustomXMLPart:返回CustomXMLPart對象,表示關(guān)聯(lián)于該 節(jié)點(diǎn)的數(shù)據(jù)存儲項(xiàng)。PreviousSibling As CustomXMLNode:返回當(dāng)前節(jié)點(diǎn)的前一兄弟節(jié)點(diǎn)(元素、 注釋或處理指令)。如果節(jié)點(diǎn)是其所在層上的第一個(gè)兄弟節(jié)點(diǎn),則返回Nothing。ParentNode As CustomXMLNode:返回當(dāng)前節(jié)點(diǎn)的父元素節(jié)點(diǎn)。如果節(jié)點(diǎn)在根 層上,則返回Nothing。RemoveChild(Child As CustomXMLNode) As Void參數(shù)Child: CustomXMLNode對象,表示要刪除的上下文節(jié)點(diǎn)的子節(jié)點(diǎn)。如果該節(jié)點(diǎn)不是上下文節(jié)點(diǎn)的子節(jié)點(diǎn),則失敗,且錯(cuò)誤消息為"該節(jié)點(diǎn)不能移除,因?yàn)樗皇钱?dāng)前元素的子節(jié)點(diǎn)"。從流中移除指定的子節(jié)點(diǎn)。如果所得到的DOM在結(jié)構(gòu)上非法,則失敗,且錯(cuò) 誤消息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。ReplaceChildNode(Name As String, [Namespace As String], [NodeType As msoCustomXMLNodeType], [Node Value As String], OldNode As CustomXMLNode) As Void參數(shù)OldNode: CustomXMLNode,表示要被取代的子節(jié)點(diǎn)。Name: String, 表示要被添加到XMLDOM的元素的基本名稱。Namespace:可選的String,表示 要被添加到XML DOM的元素的命名空間。在添加msoCustomXMLNodeElement 或msoCustomXMLNodeAttribute類型的節(jié)點(diǎn)時(shí)需要,否則忽略。NodeType:可選 的msoCustomXMLNodeType,指定要創(chuàng)建的節(jié)點(diǎn)類型。如果未指定,則假設(shè)為 msoCustomXMLNodeElement。 NodeValue:可選的String,用于設(shè)置允許文本的節(jié) 點(diǎn)的節(jié)點(diǎn)值。如果該節(jié)點(diǎn)不允許文本,則忽略該參數(shù)。從流移除指定的子節(jié)點(diǎn)(及其子樹),并且在同一位置中用指定的節(jié)點(diǎn)取代 它。如果OldNode不是上下文節(jié)點(diǎn)的子節(jié)點(diǎn),則失敗,且錯(cuò)誤消息為"OldNode 必須是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)"。如果所得到的取代在結(jié)構(gòu)上是非法的,則失敗,且錯(cuò) 誤消息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。還阻止其中 將添加的節(jié)點(diǎn)為已存在屬性的任何情形"在當(dāng)前元素上已存在同名屬性"。ReplaceChildSubtree(XML As String, OldNode As CustomXMLNode) As Void參數(shù)OldNode: CustomXMLNode,表示要取代的子節(jié)點(diǎn)。XML: String,表 示要添加到XML DOM的子樹。這XML必須是合式的XML文檔(包括命名空間聲明、單一根節(jié)點(diǎn),等等)。如果否,則失敗,且錯(cuò)誤為"要添加XML子樹到你的文檔,它必須是有效的合式的XML"。從流中移除指定的節(jié)點(diǎn)(及其子樹),并且在同一位置用指定的XML子樹取 代它。如果OldNode不是上下文節(jié)點(diǎn)的子節(jié)點(diǎn),則失敗,且錯(cuò)誤消息為"01dNode 必須是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)"。如果所得到的取代在結(jié)構(gòu)上是非法的,則失敗,且錯(cuò) 誤消息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。SelectNodes(XPath As String) As CustomXMLNodesO參數(shù)XPath: String,包含針對DOM求值的XPath表達(dá)式。該XPath的前綴 映射是從NamespaceManager性質(zhì)檢索的。如果XPath沒有解析,則傳遞任何存在 錯(cuò)誤的地方(按目前的具有嵌入的XML的Document對象上的該方法)。該方法允許開發(fā)者從數(shù)據(jù)存儲項(xiàng)內(nèi)取回一組節(jié)點(diǎn)。SelectSingleNode(XPath As String) As CustomXMLNode()參數(shù)XPath: String,包含針對DOM求值的XPath表達(dá)式。該XPath的前綴 映射是從NamespaceManager性質(zhì)檢索的。如果XPath沒有解析,則傳遞任何存在 錯(cuò)誤的地方(按目前的具有嵌入的XML的Document對象上的該方法)。該方法允許開發(fā)者從數(shù)據(jù)存儲項(xiàng)內(nèi)取回單個(gè)節(jié)點(diǎn)。Text As String:取得/設(shè)置當(dāng)前節(jié)點(diǎn)的文本。與MSXML不同,在節(jié)點(diǎn)上設(shè)置 這個(gè)用指定的串取代該節(jié)點(diǎn)的內(nèi)容——例如,在其中foo的內(nèi)容類似如下的非葉元 素《00>上將它設(shè)置為"test":<foo>Bar<baz>hello</baz> </foo>將不會失敗,但將導(dǎo)致在內(nèi)部對于數(shù)據(jù)存儲和在外部對于數(shù)據(jù)存儲的客戶的不同消息。如果所得到的取代在結(jié)構(gòu)上是非法的,則失敗,旦錯(cuò)誤消息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。XML As String:返回當(dāng)前節(jié)點(diǎn)及其子節(jié)點(diǎn)(如果有的話)的原始XML表示。 XPath As String:返回具有當(dāng)前節(jié)點(diǎn)的規(guī)范化的XPath的串。如果節(jié)點(diǎn)不再在DOM中(它被刪除),則失敗"該節(jié)點(diǎn)已從關(guān)聯(lián)于定制XML部分中刪除"。 Nsw Enums:msoCustomXMLNodeType ,表示可用的 XML 節(jié)點(diǎn)類型。msoCustomXMLNodeAttribute,表示XML屬'性節(jié)點(diǎn)。msoCustomXMLNodeCData 表示CD ATA節(jié)點(diǎn)。msoCustomXMLNodeComment表示XML注釋節(jié)點(diǎn)。 msoCustornXMLNodeDocument 表 示 XML 文 檔 (/) 節(jié) 點(diǎn) 。 msoCustomXMLNodeElement 表 示 XML 元 素 節(jié) 點(diǎn) 。 msoCustomXMLNodeProcessinglnstruction 表示 XML 處理指令節(jié)點(diǎn)。 msoCustomXMLNodeText表示文本節(jié)點(diǎn)。ReplaceChild(Child As CustomXMLNode, Name As String, [Namespace As String], [NodeType As String], [NodeValue As String]) As CustomXMLNode參數(shù):Child: CustomXMLNode對象,表示要被刪除的上下文節(jié)點(diǎn)的子節(jié)點(diǎn)。如果該節(jié)點(diǎn)不是上下文節(jié)點(diǎn)的子節(jié)點(diǎn),則失敗,且錯(cuò)誤消息為"該節(jié)點(diǎn)不能被移 除,因?yàn)樗皇钱?dāng)前元素的子節(jié)點(diǎn)"。Name: String,表示要被添加到XML DOM 的節(jié)點(diǎn)的基本名稱。Namespace:可選的String,表示要被添加到XML DOM的節(jié) 點(diǎn)的命名空間。 在添力B msoCustomXMLNodeElement 或 msoCustomXMLNodeAttribute類型的節(jié)點(diǎn)時(shí)需要,否則忽略。NodeType:可選的 msoCustomXMLNodeType,指定要創(chuàng)建的節(jié)點(diǎn)類型。如果未指定,則假設(shè)為 msoCustomXMLNodeElement。 NodeValue:可選的String,用于設(shè)置允許文本的節(jié) 點(diǎn)的節(jié)點(diǎn)值。如果該節(jié)點(diǎn)不允許文本,則忽略該參數(shù)。從流中移除指定的子節(jié)點(diǎn)(及其子樹),并且在同一位置用指定節(jié)點(diǎn)取代它。 如果所得到的刪除在結(jié)構(gòu)上是非法的(并且模式實(shí)施被啟用),則失敗,且錯(cuò)誤消 息為"該操作不能完成,因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的DOM"。 XMLNamespace:該對象表示模式庫中的單個(gè)唯一的命名空間。 AttachToCustomXMLPart(CustomXMLPart As Variant) As Void 參數(shù)CustomXMLPart: Variant,它可以是所需流的CustomXMLPart對象, 或者是CustomXMLParts集合中的該流的索引。將該XML命名空間的模式附連到給定的CustomXMLPart。 XMLShemaReference:該對象表示在當(dāng)前文檔中引用的單個(gè)唯一的命名空間。 Delete() As Void:從CustomXMLPart中移除命名空間以及該命名空間中的元 素。然而,在該情形中數(shù)據(jù)存儲可拒絕該操作,因?yàn)閱⒂媒Y(jié)構(gòu)性模式強(qiáng)制,于是移 除這些元素將導(dǎo)致在結(jié)構(gòu)上非法的DOM。在該情形中,失敗并且拋出錯(cuò)誤"該 操作不能在啟用模式強(qiáng)制的同時(shí)執(zhí)行,因?yàn)樗玫降牧髟诮Y(jié)構(gòu)上是非法的"。Add(Name As String, Namespace As String, [Parent As CustomXMLNode],[NextSibling As CustomXMLDataNode], [NodeType AsmsoXMLNodeType],[NodeValue As String]) As CustomXMLNode參數(shù)Name: String,表示要被添加到XML DOM的節(jié)點(diǎn)的基本名稱。 Namespace:可選的String,表示要被添加到XML DOM的節(jié)點(diǎn)的命名空間。在添 力口 msoCustomXMLNodeElement或msoCustomXMLNodeAttribute類型的節(jié)點(diǎn)時(shí)需 要,否則忽略。Parent:可選的CustomXMLPart,表示該節(jié)點(diǎn)應(yīng)當(dāng)被添加其下的節(jié) 點(diǎn)。如果取消(call off of)由.Attributes性質(zhì)返回的CustomXMLNodes集合,則假設(shè) 為這些屬性的父節(jié)點(diǎn)。如果在任何其它情形中被調(diào)用,則指定該參數(shù)或者返回錯(cuò)誤 "必須指定父節(jié)點(diǎn)來添加該節(jié)點(diǎn)到你的文檔"。NextSibling:可選的 CustomXMLNode,表示應(yīng)當(dāng)成為新節(jié)點(diǎn)的下一兄弟的節(jié)點(diǎn)。如果未指定,則將節(jié) 點(diǎn)添加到父節(jié)點(diǎn)的子節(jié)點(diǎn)的末尾。忽略msoCustomXMLNodeAttribute類型的添加。 如果NextSibling不是父節(jié)點(diǎn)的子節(jié)點(diǎn),則返回錯(cuò)誤"該節(jié)點(diǎn)不能被添加,因?yàn)?下 一 兄弟節(jié)點(diǎn)不是父節(jié)點(diǎn)的子節(jié)點(diǎn)"。NodeType :可選的 msoCustomXMLNodeType,指定要創(chuàng)建的節(jié)點(diǎn)類型。如果未指定,則假設(shè)為 msoCustomXMLNodeAttribute , 除非取消.Attributes 性質(zhì),則假設(shè)為 msoCustomXMLNodeElement。 NodeValue:可選的String,用于設(shè)置允許文本的節(jié) 點(diǎn)的節(jié)點(diǎn)值。如果節(jié)點(diǎn)不允許文本,則忽略該參數(shù)。用于添加XML節(jié)點(diǎn)到數(shù)據(jù)存儲項(xiàng)的普適方法。如果取消由.Attributes性質(zhì)返 回的CustomXMLNodes對象,則Parent具有默認(rèn)的父節(jié)點(diǎn)并且NodeType具有默 認(rèn)的msoCustomXMLNodeAttribute。在所有其它情形中,需要Parent并且NodeType 默認(rèn)為msoCustomXMLNodeElement。如果所得到的添加在結(jié)構(gòu)上是非法的(并且 模式強(qiáng)制被啟用),則失敗,且錯(cuò)誤消息為"該操作不能在啟用模式強(qiáng)制時(shí)完成, 因?yàn)樗鼘?dǎo)致在結(jié)構(gòu)上非法的數(shù)據(jù)流"。如果命名空間不在模式引用集合中,則失敗,并且錯(cuò)誤消息為"要添加該元素,必須首先將其模式附連到數(shù)據(jù)流"。CustomDataXMLSchemaReferencesO : Collection( 集合), 表示在 CustomXMLPart中標(biāo)識的所有的唯一命名空間。注意默認(rèn)地,用在XML文件中 聲明的每一命名空間的條目來填充它。Add([NamespaceURI As String], [Alias As String], [FileName As String], [InstallForAllUsers As Boolean = False]) As XMLSchemaReference參數(shù)NamespaceURI: String,包含由要添加到模式集合的模式定義的命名空 間。Alias: String,包含當(dāng)將該模式添加到模式庫時(shí)要寫的別名。FileName: String,包含指向應(yīng)添加到模式庫的模式的路徑。InstallForAUUsers: Boolean,確定模式庫 鍵應(yīng)當(dāng)被添加到HKCU (默認(rèn))還是HKLM。該方法添加模式引用。為完成這個(gè),如果在文件中還沒有定義命名空間,則 向CustomXMLPart的根元素添加合適的命名空間聲明。在打開時(shí),使用所有被聲 明的命名空間來填充該集合。EnforceStructure As Boolean:取得和設(shè)置對應(yīng)于數(shù)據(jù)存儲是否應(yīng)當(dāng)按照其模式 對相關(guān)聯(lián)的CustomXMLPart強(qiáng)制結(jié)構(gòu)有效性的布爾值。如果用戶嘗試在 CustomXMLPart的內(nèi)容不是有效時(shí)將此屬性設(shè)置為TRUE,則返回錯(cuò)誤"當(dāng)該 數(shù)據(jù)流的內(nèi)容在結(jié)構(gòu)上是非法時(shí),不能啟用模式強(qiáng)制"。Count As Long:返回在該CustomXMLPart中當(dāng)前引用的命名空間的數(shù)量。Item(Index As Variant) As XMLSchemaReference參數(shù)Index: Variant,可以是以下兩種類型之一Long,表示集合中所需 CustomDataXMLSchemaReference的索弓| ; 以及String , 表示集合中所需 CustomDataXMLSchemaReference的命名空間。這是CustomDataXMLSchemaReferences對象的默認(rèn)成員,并且它返回對應(yīng)于 所請求對象的XMLSchemaReference對象。Validate() As Void:該方法針對CustomDataXMLSchemaReferences集合中的 所有模式來驗(yàn)證整個(gè)流。在各個(gè)節(jié)點(diǎn)上報(bào)告錯(cuò)誤(見.ValidationStatus性質(zhì))/CustomXMLNodeNodeAfterInsert(NewCustomXMLNode as CustomXMLNode, InUndoRedo as Boolean).參數(shù)NewCustomXMLNode: CustomXMLNode對象,對應(yīng)于剛添加到 CustomXMLPart的節(jié)點(diǎn)。注意該節(jié)點(diǎn)可能具有子節(jié)點(diǎn)(如果子樹剛被添加到文 檔)。InUndoRedo: Boolean,如果節(jié)點(diǎn)作為用戶的撤消/重做動作一部分被添加則 返回TRUE,否貝IJFALSE。每當(dāng)XML節(jié)點(diǎn)將被添加到當(dāng)前文檔,該事件激發(fā)。如果添加操作涉及到將 XML文檔子樹添加到CustomXMLPart,則為最頂端節(jié)點(diǎn)的改變,就激發(fā)該事件一 次。為通過消息發(fā)送到數(shù)據(jù)存儲的每一改變,該事件激發(fā)一次,因此由該事件表示 的改變的副效應(yīng)也觸發(fā)該事件。NodeBeforeDelete(OldCustomXMLNode as CustomXMLNode, InUndoRedo asBoolean)參數(shù)OldCustomXMLNode : CustomXMLNode對象,對應(yīng)于將要從 CustomXMLPart移除的節(jié)點(diǎn)。注意該節(jié)點(diǎn)可能具有子節(jié)點(diǎn)(如果從文檔移除子 樹)。InUndoRedo: Boolean,如果節(jié)點(diǎn)作為用戶的撤消/重做動作一部分被添加則 返回TRUE,否則FALSE 。每當(dāng)XML節(jié)點(diǎn)從數(shù)據(jù)存儲中當(dāng)前項(xiàng)被刪除,該事件激發(fā)。如果刪除操作涉及 到將XML文檔子樹添加到CustomXMLPart,則為最頂端節(jié)點(diǎn)的改變,就激發(fā)該事 件一次。為通過消息發(fā)送到數(shù)據(jù)存儲的每一改變,該事件激發(fā)一次,因此由該事件 表示的改變的副效應(yīng)也觸發(fā)該事件。如果事件處理程序嘗試修改在該節(jié)點(diǎn)下的任何 內(nèi)容,則失敗,且錯(cuò)誤消息為"不允許該改變,因?yàn)樵摴?jié)點(diǎn)將被刪除"。以上說明、示例和數(shù)據(jù)提供了對本發(fā)明成分的制造和使用的全面描述。因?yàn)?可以在不背離本發(fā)明的精神和范圍的情況下做出本發(fā)明的許多實(shí)施例,所以本發(fā)明 位于所附權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種具有用于管理與計(jì)算機(jī)生成文檔相關(guān)聯(lián)的數(shù)據(jù)的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),包括在數(shù)據(jù)存儲中存儲與文檔相關(guān)聯(lián)的結(jié)構(gòu)化數(shù)據(jù)項(xiàng),所述數(shù)據(jù)存儲獨(dú)立于所述文檔保存;以及向數(shù)據(jù)消費(fèi)者暴露應(yīng)用編程接口(API),用于允許所述數(shù)據(jù)消費(fèi)者程序性地訪問所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng);其中所述API提供在打開所述文檔時(shí)以及當(dāng)關(guān)閉所述文檔時(shí)訪問所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)的能力。
2. 如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括按照可擴(kuò)展標(biāo) 記語言(XML)結(jié)構(gòu)化所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)。
3. 如權(quán)利要求2所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API允許所述數(shù) 據(jù)消費(fèi)者程序性地訪問所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)包括允許一個(gè)以上數(shù)據(jù)消費(fèi)者同時(shí)訪問 同一結(jié)構(gòu)化數(shù)據(jù)項(xiàng)。
4. 如權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括使用所述API 判定何時(shí)對所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)之一作出改變;以及當(dāng)作出改變時(shí)將所述改變通知已 注冊的數(shù)據(jù)消費(fèi)者;以及判定所述改變是被所述已注冊數(shù)據(jù)消費(fèi)者接受還是拒絕。
5. 如權(quán)利要求4所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括當(dāng)所述已注冊 數(shù)據(jù)消費(fèi)者之一拒絕所述改變時(shí)將所述改變恢復(fù)原狀,而當(dāng)每一所述己注冊數(shù)據(jù)消 費(fèi)者接受所述改變時(shí)向所述數(shù)據(jù)存儲提交所述改變。
6. 如權(quán)利要求5所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括使用所述API 將所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)與XML模式文件相關(guān)聯(lián),所述XML模式文件用于在向所述 數(shù)據(jù)存儲提交所述改變之前驗(yàn)證所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)。
7. 如權(quán)利要求2所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API提供一函數(shù) 來注冊以接收有關(guān)下列各項(xiàng)至少之一的改變通知的通知對所述數(shù)據(jù)存儲的改變以 及對一或多個(gè)所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)的改變;其中所述改變可包括對所述數(shù)據(jù)存儲和所 述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)的至少之一的刪除、添加和修改。
8. 如權(quán)利要求7所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API提供接口用 于添加節(jié)點(diǎn)至所述數(shù)據(jù)存儲;從所述數(shù)據(jù)存儲刪除節(jié)點(diǎn);以及取代所述數(shù)據(jù)存儲 內(nèi)的節(jié)點(diǎn)。
9. 如權(quán)利要求7所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API提供接口用 于使用現(xiàn)有文件填充所述數(shù)據(jù)存儲;以及使用XML串填充所述數(shù)據(jù)存儲。
10. 如權(quán)利要求7所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API提供接口 用于添加命名空間;查找命名空間;添加模式;刪除模式;以及重新加載模式。
11. 如權(quán)利要求7所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API提供接口 用于添加流;移除流;添加子樹;移除子樹;獲得當(dāng)前節(jié)點(diǎn)的下一兄弟節(jié)點(diǎn);以 及獲得當(dāng)前節(jié)點(diǎn)的上一兄弟節(jié)點(diǎn)獲得節(jié)點(diǎn)類型。
12. 如權(quán)利要求7所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述API提供接口用于獲得節(jié)點(diǎn)值;以及強(qiáng)制一種結(jié)構(gòu)。
13. —種用于管理與計(jì)算機(jī)生成文檔相關(guān)聯(lián)的數(shù)據(jù)的計(jì)算機(jī)實(shí)現(xiàn)方法,包括: 使用數(shù)據(jù)存儲存儲與文檔相關(guān)聯(lián)的結(jié)構(gòu)化數(shù)據(jù)項(xiàng);其中,所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)是按照可擴(kuò)展標(biāo)記語言(XML)結(jié)構(gòu)化的;以及向數(shù)據(jù)消費(fèi)者暴露應(yīng)用編程接口 (API),所述API允許程序性地訪問所述文 檔以及包含在所述數(shù)據(jù)存儲內(nèi)的所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng);以及當(dāng)正在編輯所述文檔時(shí)和 當(dāng)關(guān)閉所述文檔時(shí),使用所述API訪問所述數(shù)據(jù)存儲內(nèi)的所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng);以 及其中,所述數(shù)據(jù)消費(fèi)者在已注冊的情況下接收關(guān)于對所述數(shù)據(jù)存儲做出的改變的通知。
14. 如權(quán)利要求13所述的計(jì)算機(jī)實(shí)現(xiàn)方法,其特征在于,使用所述API還包括使用所述API發(fā)起對所述數(shù)據(jù)存儲之一的改變; 向所述已注冊數(shù)據(jù)消費(fèi)者提供有關(guān)所述改變的通知;在來自所述已注冊數(shù)據(jù)消費(fèi)者之一的響應(yīng)是拒絕的情況下做出判定,并且當(dāng) 所述響應(yīng)是拒絕時(shí),將所述改變以及任何副效應(yīng)改變恢復(fù)原狀;在所有已注冊數(shù)據(jù)消費(fèi)者接受所述改變的情況下做出判定;并且當(dāng)所述已注 冊數(shù)據(jù)消費(fèi)者接受所述改變時(shí);可選地使用XML模式文件來驗(yàn)證所述改變,所述 XML模式文件是由所述數(shù)據(jù)消費(fèi)者之一通過所述API提供的;以及向一或多個(gè)所 述數(shù)據(jù)存儲提交所述改變。
15. 如權(quán)利要求14所述的計(jì)算機(jī)實(shí)現(xiàn)方法,其特征在于,使用所述API還包 括提供編程接口用于獲得節(jié)點(diǎn)的值;添加節(jié)點(diǎn);刪除節(jié)點(diǎn);移動節(jié)點(diǎn);添加模式; 刪除模式;重新加載模式;添加命名空間;以及移除命名空間。
16. —種用于管理與計(jì)算機(jī)生成文檔相關(guān)聯(lián)的數(shù)據(jù)的系統(tǒng),包括外部數(shù)據(jù)消費(fèi)者;被配置為存儲文檔的文檔數(shù)據(jù)存儲;以及被配置為存儲與一或多個(gè)所述文檔相關(guān)聯(lián)的結(jié)構(gòu)化數(shù)據(jù)項(xiàng)的數(shù)據(jù)存儲;其中 所述數(shù)據(jù)存儲器包括XML數(shù)據(jù)存儲;被配置為與所述外部數(shù)據(jù)消費(fèi)者和內(nèi)部數(shù) 據(jù)消費(fèi)者交互的API代理程序;被配置為存儲與對結(jié)構(gòu)化數(shù)據(jù)項(xiàng)所作的改變相關(guān) 聯(lián)的改變的改變存儲;以及被配置為將作為對所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)所作的改變的結(jié)果 而做出的任何改變恢復(fù)原狀的撤消存儲;其中,所述API代理程序暴露編程接口 (API),所述API允許程序性地訪問所述文檔以及包含在所述數(shù)據(jù)存儲內(nèi)的所述 結(jié)構(gòu)化數(shù)據(jù)項(xiàng);以及當(dāng)打開所述文檔時(shí)以及當(dāng)關(guān)閉所述文檔時(shí)都能使用所述API 訪問所述數(shù)據(jù)存儲內(nèi)的所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)。
17. 如權(quán)利要求16所述的系統(tǒng),其特征在于,所述數(shù)據(jù)存儲還被配置為 接收對應(yīng)用于所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)的可擴(kuò)展標(biāo)記標(biāo)記(XML)標(biāo)記數(shù)據(jù)的改變; 讀取與對所述XML標(biāo)記數(shù)據(jù)的改變所指向的所述結(jié)構(gòu)化數(shù)據(jù)項(xiàng)相關(guān)聯(lián)的XML模式文件;按照所述讀取的XML模式文件判定對所述XML標(biāo)記數(shù)據(jù)的改變是否有效;以及如果按照所述讀取的XML模式文件,對所述XML標(biāo)記數(shù)據(jù)的改變不是有效 的,則禁止對所述XML標(biāo)記數(shù)據(jù)的改變;以及當(dāng)按照所述讀取的XML模式文件, 對所述XML標(biāo)記數(shù)據(jù)的改變是有效的,則向一或多個(gè)XML存儲提交所述改變。
18. 如權(quán)利要求16所述的系統(tǒng),其特征在于,所述XML數(shù)據(jù)存儲的每一個(gè) 包括撤消存儲和改變存儲。
19. 如權(quán)利要求16所述的系統(tǒng),其特征在于,所述API提供接口用于添加 節(jié)點(diǎn)到所述數(shù)據(jù)存儲;從所述數(shù)據(jù)存儲刪除節(jié)點(diǎn);取代所述數(shù)據(jù)存儲內(nèi)的節(jié)點(diǎn);以 及從所述數(shù)據(jù)存儲獲得值。
20. 如權(quán)利要求19所述的系統(tǒng),其特征在于,所述API提供接口用于添加 模式;刪除模式;以及重新加載模式。
全文摘要
一種用于與文檔內(nèi)的數(shù)據(jù)存儲交互的可編程性模式允許實(shí)時(shí)交互。在該數(shù)據(jù)存儲中保存用于結(jié)構(gòu)化與文檔相關(guān)聯(lián)的數(shù)據(jù),諸如文檔元數(shù)據(jù),其中不同數(shù)據(jù)片之間的關(guān)系在不同于文檔的表示層視圖的位置處保存。數(shù)據(jù)存儲暴露與數(shù)據(jù)存儲中各種數(shù)據(jù)片的接口,以允許不同應(yīng)用訪問和操作一或多個(gè)數(shù)據(jù)片??梢愿鶕?jù)諸如可擴(kuò)展標(biāo)示語言(XML)的標(biāo)記語言來構(gòu)造各數(shù)據(jù)片,并且XML模式可與每一數(shù)據(jù)片相關(guān)聯(lián),以允許數(shù)據(jù)存儲基于與給定數(shù)據(jù)片相關(guān)聯(lián)的XML模式來驗(yàn)證應(yīng)用于該數(shù)據(jù)的結(jié)構(gòu)。
文檔編號G06F17/21GK101263477SQ200680033069
公開日2008年9月10日 申請日期2006年9月8日 優(yōu)先權(quán)日2005年9月9日
發(fā)明者A·泰爾哈特, B·M·瓊斯, M·塞維奇, R·A·利特爾, T·A·戴維斯 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1