專利名稱:向程序提交消息的系統(tǒng)和方法
背景技術(shù):
軟件應(yīng)用逐漸變得越來越復(fù)雜和強(qiáng)大。曾經(jīng)是簡單的文本編輯器的應(yīng)用現(xiàn)在可能變成了有數(shù)不清豐富特性的復(fù)雜的字處理器,例如創(chuàng)建網(wǎng)頁或編輯XML標(biāo)記的能力。隨著技術(shù)發(fā)展,每個(gè)軟件應(yīng)用提供越來越多的功能來增強(qiáng)用戶的體驗(yàn)。另外,現(xiàn)在很多軟件應(yīng)用都通過編程接口向后加應(yīng)用顯露它們的本地功能。例如,面向?qū)ο缶幊淌挂恍┸浖?yīng)用和它們的文檔能夠被當(dāng)作對象來處理。這些對象以可調(diào)用的方法的形式或者可讀取或可設(shè)置的屬性的形式來處理該應(yīng)用或文檔,顯露應(yīng)用的功能。這些進(jìn)步使得程序員能夠開發(fā)第三方附加應(yīng)用來把應(yīng)用交互時(shí)以前由手工執(zhí)行的任務(wù)和功能自動化。很多這樣的附加應(yīng)用是用簡單的編程語言開發(fā)的,例如Visual Basic forApplication(VBA)語言。這些附加功能可以通過調(diào)用該應(yīng)用的方法和屬性進(jìn)行工作以達(dá)到各種目標(biāo),并針對定制環(huán)境定制該應(yīng)用的核心功能。
除了能夠進(jìn)行從附加應(yīng)用定制的代碼到核心應(yīng)用的調(diào)用,還需要以這樣一種方式寫定制的代碼使它實(shí)際上在一些動作發(fā)生在應(yīng)用自身中的時(shí)候,響應(yīng)(和“發(fā)起”相對)來自應(yīng)用的調(diào)用。例如,一個(gè)人可能想為一個(gè)字處理器寫定制代碼,以某種特殊的方式對從該應(yīng)用接收到的用戶的按鍵作出反應(yīng),并且在用戶正在編輯一個(gè)其中只允許某些類型的字母的區(qū)域時(shí)可能阻止其中的某些按鍵。在這種情況下,程序員需要一種方法讓應(yīng)用知道當(dāng)一種特定類型的事件發(fā)生時(shí),該應(yīng)用應(yīng)當(dāng)運(yùn)行特殊的定制代碼。一旦定制的代碼被注冊于該應(yīng)用,該代碼可以通過有用的方式對發(fā)生在核心應(yīng)用中的特定的事件作出“反應(yīng)”,從而擴(kuò)充該應(yīng)用的核心功能。
發(fā)明概要本發(fā)明針對的是一種從一段代碼到另一段代碼(可以不是程序原始的代碼的一部分而是由一個(gè)第三方解決方案廠商加入以擴(kuò)充原始程序的功能)提交一個(gè)事件通知消息的機(jī)制。通知消息屬于一種特殊類型,即指示實(shí)際上發(fā)生了哪種可能的事件。例如,通知消息可以由程序進(jìn)入的某種特殊狀態(tài)觸發(fā)。在這樣的情況下,事件通知消息可以包括描述原來的狀態(tài)是什么,新的狀態(tài)是什么,及描述使得程序進(jìn)入這種狀態(tài)的原因的參數(shù)。更確切地,在一個(gè)配置為編輯可擴(kuò)充標(biāo)記語言XML創(chuàng)建的文檔的應(yīng)用中,作為用戶發(fā)起的動作的結(jié)果,出現(xiàn)一個(gè)XML相關(guān)的狀態(tài)變化就會引發(fā)事件通知消息的提交。
由事件所報(bào)告的XML相關(guān)狀態(tài)改變可以是在字處理應(yīng)用中用戶的插入點(diǎn)在基于XML的上下文中位置的改變。例如,這可以通過用戶插入點(diǎn)移動出一個(gè)XML元素進(jìn)入另一個(gè)元素觸發(fā)?;蛘弋?dāng)用戶在選定范圍附近插入一個(gè)新的XML元素時(shí)觸發(fā)?;蛘弋?dāng)用戶刪除當(dāng)前包圍用戶插入點(diǎn)的XML元素時(shí)觸發(fā)。通過這種方法,當(dāng)編輯一個(gè)XML文檔時(shí),無論是三種不同的用戶動作中的哪一種導(dǎo)致了狀態(tài)改變,單個(gè)事件通知消息都可以被用來指示這種類型的狀態(tài)改變。對附加應(yīng)用程序員來說,能夠?qū)戫憫?yīng)這種類型的事件的代碼,例如,為了根據(jù)用戶正在XML結(jié)構(gòu)的何處編輯內(nèi)容提供用戶上下文敏感的反饋,是有用的。例如,當(dāng)用戶開始編輯一個(gè)<city>XML元素的內(nèi)容時(shí),定制的附加應(yīng)用可以自動地向用戶提供一個(gè)經(jīng)常用到的城市的列表。在一個(gè)方面,本發(fā)明是針對一種數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)用來通知一個(gè)程序在另一個(gè)程序(或同一程序的其他部分)中發(fā)生了一個(gè)XML相關(guān)的動作。該數(shù)據(jù)結(jié)構(gòu)包括一個(gè)指示發(fā)生了一個(gè)XML相關(guān)的狀態(tài)改變的標(biāo)識符。該數(shù)據(jù)結(jié)構(gòu)還包括多個(gè)參數(shù)。一個(gè)參數(shù)被用來表示由狀態(tài)改變影響的第一個(gè)XML節(jié)點(diǎn),及另一個(gè)參數(shù)被用來標(biāo)識由狀態(tài)改變影響的第二個(gè)XML節(jié)點(diǎn)(如果狀態(tài)改變包括不止一個(gè)XML節(jié)點(diǎn))。第三個(gè)參數(shù)被用來標(biāo)識多種原因中的哪一種引起了狀態(tài)改變。作為本發(fā)明主題的狀態(tài)改變類型是在用戶插入點(diǎn)的XML上下文中的一個(gè)改變。為什么狀態(tài)改變發(fā)生的可能原因是XML相關(guān)的移動動作、XML相關(guān)的插入動作,或XML相關(guān)的刪除動作。另一個(gè)參數(shù)被用來標(biāo)識一個(gè)特定的被XML相關(guān)的狀態(tài)改變所影響的內(nèi)容的選擇。
在另一方面,本發(fā)明涉及一對可執(zhí)行程序(運(yùn)行在同一個(gè)進(jìn)程或兩個(gè)獨(dú)立的進(jìn)程中),其中第一程序被設(shè)計(jì)成可以編輯包括XML標(biāo)記的文檔。第一程序還被設(shè)計(jì)為提交單個(gè)事件通知以響應(yīng)發(fā)生在編輯該文檔時(shí)作為影響用戶選擇XML上下文的一個(gè)用戶動作的結(jié)果的狀態(tài)改變。影響XML上下文的事件的原因是多種類型XML相關(guān)的動作中的一種,如XML相關(guān)的移動動作,XML相關(guān)的插入動作,或XML相關(guān)的刪除動作。第二程序被設(shè)計(jì)成接收該單個(gè)事件通知并用事件處理程序處該理該單個(gè)事件通知。事件處理程序包括以某種合適的方式響應(yīng)各種類型的動作的計(jì)算機(jī)可執(zhí)行指令。
在另一方面,本發(fā)明涉及或提交事件通知消息或接收事件通知消息的程序,其中事件通知消息包括參數(shù)。事件通知消息本身指示發(fā)生了一個(gè)XML相關(guān)的狀態(tài)改變。事件通知消息的第一參數(shù)標(biāo)識與XML相關(guān)的狀態(tài)改變關(guān)聯(lián)的第一XML節(jié)點(diǎn),事件通知消息的第二參數(shù)標(biāo)識與XML相關(guān)的狀態(tài)改變關(guān)聯(lián)的第二XML節(jié)點(diǎn),事件通知消息的第三參數(shù)標(biāo)識多種原因中的哪一種引起了該狀態(tài)改變,事件通知消息的第四參數(shù)標(biāo)識XML文檔受影響的選擇。
圖1為一個(gè)計(jì)算環(huán)境的功能框圖,本發(fā)明在其中可以實(shí)現(xiàn)。
圖2為根據(jù)本發(fā)明的一個(gè)實(shí)例,顯露并使用一個(gè)公用接口的軟件應(yīng)用的功能框圖概觀。
圖3為于本發(fā)明實(shí)例中事件通知消息的一種實(shí)現(xiàn)的邏輯表示。
圖4所示為根據(jù)本發(fā)明的一個(gè)實(shí)例,一個(gè)能夠編輯XML文檔的軟件應(yīng)用顯示屏看上去的樣子。
圖5所示為根據(jù)本發(fā)明的一個(gè)實(shí)例,一個(gè)能夠編輯XML文檔的軟件應(yīng)用的另一顯示屏上去的樣子。
圖6所示是根據(jù)本發(fā)明的一個(gè)實(shí)例,一個(gè)能夠編輯XML文檔的軟件應(yīng)用再一顯示屏看上去的樣子。
本發(fā)明說明性的計(jì)算環(huán)境圖1展示了一個(gè)可以以各種形式被包括在實(shí)現(xiàn)本發(fā)明的系統(tǒng)中的示范性的計(jì)算機(jī)設(shè)備。在很基本的配置中,計(jì)算設(shè)備100通常包括至少一個(gè)處理單元102和系統(tǒng)存儲器104。處理單元102包括現(xiàn)有的有形處理器、那些在設(shè)計(jì)中的處理器、共用的多個(gè)處理器、虛擬處理器,及任何能夠編譯二進(jìn)制可執(zhí)行指令的其他設(shè)備或軟件程序。取決于計(jì)算設(shè)備的確切配置和類型,系統(tǒng)存儲器104可以是易失的(如RAM)、非易失的(如ROM、閃存等等)或兩者的某種組合。系統(tǒng)存儲器104通常有一個(gè)操作系統(tǒng)105、一個(gè)或多個(gè)程序模塊106,可能包括程序數(shù)據(jù)107。這個(gè)基本的配置在圖1中由包在虛線108內(nèi)的組件展示。
計(jì)算設(shè)備100還可以有附加的特性或功能。例如,計(jì)算設(shè)備100還可以包含附加的數(shù)據(jù)存儲設(shè)備(可移動的和/或不可移動的),例如,磁盤、光盤或磁帶。這樣的附加存儲在圖1中以可移動存儲109和不可移動存儲110展示。計(jì)算機(jī)存儲媒體可以包括用任何方法或技術(shù)實(shí)現(xiàn)信息存儲的易失的、非易失的、可移動的和不可移動的媒體,所述信息的形式有計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)。系統(tǒng)存儲器104、可移動存儲109及不可移動存儲110都是計(jì)算機(jī)存儲媒體的例子。計(jì)算機(jī)存儲媒體包括,但不限于,RAM、ROM、EEPROM、閃存或其他存儲技術(shù)、CD-ROM、數(shù)字多用盤(DVD)或其他光學(xué)存儲、盒式磁帶、磁帶、磁盤存儲或其他磁存儲設(shè)備,或可以被用來存儲所需信息并可以由計(jì)算設(shè)備100訪問的任何其他媒體。任何這樣的計(jì)算機(jī)存儲媒體都可以為設(shè)備100的一部分。計(jì)算設(shè)備100還可以有輸入設(shè)備112,如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等等。還可以包括輸出設(shè)備114,如顯示器、揚(yáng)聲器、打印機(jī)等等。所有這些設(shè)備在相關(guān)技術(shù)中都是大家熟知的,在此不再贅述。
計(jì)算設(shè)備100還可以包括使該設(shè)備與其他計(jì)算設(shè)備118,如通過網(wǎng)絡(luò)進(jìn)行通訊的通訊連接116。通訊連接116是通訊媒體的一個(gè)例子。通訊媒體一般包括計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他以調(diào)制過的數(shù)據(jù)信號表達(dá)的數(shù)據(jù),如載波或其他傳輸機(jī)制,也包括其他任何信息傳輸媒體。術(shù)語“調(diào)制過的數(shù)據(jù)信號”是指一種信號,它的一個(gè)或多個(gè)特性被設(shè)置或改變用以在信號中對信息進(jìn)行編碼。作為例子,而非限制,通訊媒體包括有線媒體,如一個(gè)有線網(wǎng)絡(luò)或直接有線連接,及無線媒體如聲音、射頻RF、紅外線或其他無線媒體。這里所用的術(shù)語“計(jì)算機(jī)可讀媒體”包括存儲媒體和通訊媒體。
發(fā)明實(shí)例詳細(xì)說明本發(fā)明使軟件應(yīng)用,如字處理器,能夠提交一種類型的消息,包括改進(jìn)該消息的參數(shù),來通知另一個(gè)應(yīng)用出現(xiàn)了狀態(tài)改變,即使該狀態(tài)改變可能由不同的用戶動作引起。更確切地,一個(gè)能夠編輯可擴(kuò)充標(biāo)記語言(XML)文檔的軟件應(yīng)用向其他軟件應(yīng)用顯露特定功能。這個(gè)功能可以和特定標(biāo)記標(biāo)簽或內(nèi)容的編輯相關(guān)。該軟件應(yīng)用附加應(yīng)用的開發(fā)者可以依指望得到特定標(biāo)記編輯動作的通知。為此,軟件應(yīng)用顯露這些動作的通知。根據(jù)本發(fā)明,軟件應(yīng)用被配置為通過提交單個(gè)“事件”消息,即使不止一個(gè)動作。在一個(gè)實(shí)現(xiàn)中,所述單個(gè)事件消息可以用來指示由三種獨(dú)立的動作中的一種所造成的狀態(tài)改變。首先,所述單個(gè)事件可以在當(dāng)前選擇在其中的一個(gè)元素被刪除時(shí)作為響應(yīng)被提交。其次,單個(gè)事件的提交可以是對一個(gè)元素在當(dāng)前選擇周圍插入時(shí)響應(yīng)。第三,單個(gè)事件可以作為對當(dāng)前選擇從一個(gè)地方換到另一個(gè)地方時(shí)的響應(yīng)被提交。無論是什么導(dǎo)致了狀態(tài)改變,觸發(fā)的事件是相同的,但在其參數(shù)中包含有狀態(tài)改變的原因。
圖2是實(shí)現(xiàn)本發(fā)明的一個(gè)實(shí)例的功能框圖,一個(gè)軟件應(yīng)用提交單個(gè)事件消息到另一個(gè)軟件應(yīng)用或程序以對多種動作之一的發(fā)生做出響應(yīng)。XML文檔編輯器201是一個(gè)使用戶能夠在自由格式編輯環(huán)境中創(chuàng)建和編輯XML文檔,如XML文檔202的軟件應(yīng)用。XML文檔編輯器201可以是專門編程以便進(jìn)行XML文件創(chuàng)建和編輯的字處理器。雖然這里是在字處理器中說明,但應(yīng)理解,本發(fā)明并不局限于字處理器,而是實(shí)際上同等適用于任何能夠處理XML(或類似的)文檔的應(yīng)用,如電子表格應(yīng)用、表單編輯器、桌面印刷包、電子郵件編輯器、代碼編輯工具,或其他任何在其中用戶和該應(yīng)用的交互會導(dǎo)致(即使用戶不知情)XML文檔發(fā)生改變的工具,上述只是略舉幾例。
XML文檔202是一個(gè)包含XML元素和內(nèi)容的文件。XML文檔202可以包含由XML文檔編輯器201插入、與格式化等屬性相關(guān)的的元素。另外,XML文檔202可以包含由用戶手工插入的元素,并表示用戶選擇和設(shè)計(jì)的指定(arbitrary)元素。在任何一種情況下,XML文檔編輯器201允許用戶編輯XML文檔202,包括插入、更改,及刪除元素及其內(nèi)容。
與XML文檔編輯器201關(guān)聯(lián)的事件發(fā)生器250被編程為監(jiān)聽某些特定動作所引起的文檔狀態(tài)改變的發(fā)生,并在確有變化發(fā)生時(shí)提交狀態(tài)改變的通知。通知采取公共接口251的形式顯露XML文檔編輯器201的特定功能。
暫時(shí)撇開公共接口251,另一程序,例如一個(gè)自動化組件209,也被包括進(jìn)來并將其編程,給XML文檔編輯器201增加一些附加的或自動化的功能。換句話說,自動化組件209是一個(gè)可以被開發(fā)以向XML文檔編輯器201的用戶提供一些對XML文檔編輯器201中已經(jīng)有的任務(wù)進(jìn)行自動化的軟件應(yīng)用。一個(gè)普通例子是“宏”應(yīng)用將完成某項(xiàng)活動的幾個(gè)手工步驟,如根據(jù)公司標(biāo)準(zhǔn)對一個(gè)文檔進(jìn)行格式化,簡化到一個(gè)按鈕的單擊或類似動作。作為選擇,自動化組件209可以向XML文檔編輯器201增加其它補(bǔ)充功能,如使用戶能夠調(diào)用某些外部的進(jìn)程來發(fā)布該文檔到Web,或類似功能。在任何情況下,自動化組件209包括代碼,例如事件處理程序275,響應(yīng)在XML文檔編輯環(huán)境中發(fā)生的一些活動。特別地,自動化組件209的編程使之對XML相關(guān)的編輯動作實(shí)現(xiàn)自動化或者增加附加的功能。更確切地,根據(jù)本發(fā)明,事件處理程序275的編程使之能對直接編輯XML文檔202相關(guān)的特定動作的發(fā)生做出響應(yīng)。
現(xiàn)在回到由XML文檔編輯器201顯露的接口,發(fā)明人確定有三個(gè)種類的動作會導(dǎo)致在XML環(huán)境中對XML相關(guān)的附加軟件應(yīng)用,如自動化組件209有用的狀態(tài)改變。這些種類包括(1)刪除包圍當(dāng)前選擇點(diǎn)的XML元素,(2)在一個(gè)選擇點(diǎn)附近插入新的XML元素,及(3)把選擇點(diǎn)從一個(gè)地方移動到另一個(gè)地方。另外,從一個(gè)地方移動選擇點(diǎn)到另一個(gè)地方的情況包括三種不同的XML相關(guān)的場合(1)把選擇點(diǎn)從某個(gè)XML元素內(nèi)移動到另一個(gè)XML元素內(nèi),(2)把選擇點(diǎn)從某個(gè)XML元素內(nèi)移動到不落在XML元素內(nèi)部的內(nèi)容上,及(3)把選擇點(diǎn)從不落在XML元素內(nèi)部的內(nèi)容上移動到某個(gè)XML元素內(nèi)部。
從前,這些種類的動作中的每一種都需要一個(gè)單獨(dú)的通知,要求自動化組件209的開發(fā)者學(xué)習(xí)和處理三種不同的事件。然而,發(fā)明人確定這三種類型的動作一般都是為了實(shí)現(xiàn)類似的目的由類似的代碼來處理的。因此,開發(fā)了單個(gè)事件以向附加軟件應(yīng)用通知這三種動作的每一種所導(dǎo)致的文檔狀態(tài)改變。通過這種方法,一個(gè)單獨(dú)的事件處理程序,如事件處理程序275,可以被實(shí)現(xiàn)來利用由XML文檔編輯器201顯露的功能。應(yīng)注意,在這種情況下,術(shù)語“功能”是指涉及編輯XML相關(guān)的內(nèi)容或元素的體驗(yàn)的功能。
對一個(gè)單獨(dú)的事件,自動化組件209可以包含編程為對三類動作的每一種所導(dǎo)致的XML環(huán)境狀態(tài)改變做出響應(yīng)的單個(gè)事件處理程序275。這種設(shè)計(jì)簡化了開發(fā)自動化組件209的工作,而不犧牲處理不同事件的靈活性。在一種特定的實(shí)現(xiàn)中,由公共接口251顯露的事件基本上可以采取圖3所示的形式,并在這里重現(xiàn)XMLChange(Sel As Selection,OldXMLNode As XMLNode,NewXMLNode As XMLNode,Reason As WdXMLChangeReason)其中指令的每一項(xiàng)有如下意義?!癤MLChange”項(xiàng)指被顯露的事件的名字,“Sel”參數(shù)301對應(yīng)于一個(gè)對象,該對象表示正在被編輯的XML文檔中的當(dāng)前選擇點(diǎn)或選擇的內(nèi)容,“OldXMLNode”參數(shù)302對應(yīng)于一個(gè)表示XML元素的對象,該元素中在完成即將進(jìn)行的動作之前存在某個(gè)選擇,“NewXMLNode”參數(shù)303對應(yīng)于一個(gè)表示在完成即將進(jìn)行的動作之后選擇將存在于其中的一個(gè)XML元素的對象,“Reason”參數(shù)304對應(yīng)于一個(gè)動作種類的標(biāo)識,該動作是導(dǎo)致該XML環(huán)境狀態(tài)改變的即將進(jìn)行的特定動作。Reason參數(shù)被用來標(biāo)識上述三種動作類型之一。相應(yīng)地,當(dāng)這個(gè)消息由XML文檔編輯器201提交時(shí),被傳遞的Reason參數(shù)是定義三種類型的動作哪一種發(fā)生了的三者之一。
為了利用由XML文檔編輯器201顯露的事件,事件處理程序275包括一個(gè)使事件處理程序275知曉該事件的聲明,及被執(zhí)行用來響應(yīng)三種類型的動作的每一種的代碼。下面是可以用在一個(gè)特定實(shí)現(xiàn)中用來處理上述事件的偽碼Public WithEvents oWordProc AsWordProc.ApplicationPrivate Sub oWordProc_XMLChange(Sel AsSelection,OldXMLNode As XMLNode,NewXMLNode AsXMLNode,Reason As WdXMLChangeReason)Select Case ReasonCase wdXMLChangeReasonInsert被執(zhí)行用來響應(yīng)XML插入的代碼熟悉相關(guān)技術(shù)的人應(yīng)理解,上面的偽碼首先創(chuàng)建一個(gè)類型為“WordProc.Application”的“oWordProc”對象,其中WordProc.Application類型的對象基本上是名為“WordProc”的軟件應(yīng)用所實(shí)現(xiàn)的功能的實(shí)例。在本例中,WordProc應(yīng)用對應(yīng)于XML文檔編輯器201,從而oWordProc對象對應(yīng)于XML文檔編輯器201的一個(gè)實(shí)例。因?yàn)榘ā癢ithEvents”語句,使得oWordProc對象知曉由XML文檔編輯器201產(chǎn)生的事件。為此,名為“oWordProc_XMLChange”的子程序包含用來處理上述XMLChange事件的代碼。處理程序代碼和消息的參數(shù)是一樣的。
在這個(gè)特定的例子中,Select/Case結(jié)構(gòu)被用來處理可能引發(fā)事件的三種原因的每一種。例如,語句“Case wdXMLChangeReasonInsert”可以被用來處理由于XML元素在某個(gè)選擇周圍被插入而觸發(fā)的事件。語句“CasewdXMLChangeReasonDelete”可以被用來處理由于在某個(gè)選擇周圍的一個(gè)XML元素被刪除而觸發(fā)的一個(gè)事件。語句“Case wdXMLChangeReasonMove”可以被用來處理由于選擇點(diǎn)以某種XML相關(guān)的方式移動而觸發(fā)的一個(gè)事件。現(xiàn)在,參照圖4到圖6,對這三種情況的每一種進(jìn)行說明。
圖4是一個(gè)允許編輯XML文檔202的XML文檔編輯器201的顯示屏410。如圖所示,XML文檔202可以是為一個(gè)簡歷文檔,有幾個(gè)部分由XML元素包繞。例如,名字“John Doe”包含在一個(gè)<name>元素405中,而<name>元素405中又包含在一個(gè)<resume>元素407中。一個(gè)插入點(diǎn)被顯示在初始位置415,對應(yīng)于<p>元素430中的內(nèi)容。
當(dāng)編輯的時(shí)候,用戶可以對XML文檔202執(zhí)行很多動作,包括移動插入點(diǎn)。例如,在編輯時(shí),插入點(diǎn)可能被從初始位置415移動到一個(gè)在文本流“Professor Smith”中的新位置425。注意,這個(gè)文本流,如圖所示,并不包含在任何當(dāng)前的XML元素中。因此,基于這個(gè)動作和它的周圍情況,一個(gè)事件將被提出,標(biāo)示插入點(diǎn)從某個(gè)XML元素移動到了不在任何XML元素內(nèi)的內(nèi)容中。在這種情況下,可以用下,面即將定義的參數(shù)提交一個(gè)代表上述事件的消息。
Sel參數(shù)可以包括一個(gè)包含當(dāng)前選擇的對象。在上述例子中,當(dāng)前選擇與插入點(diǎn)的初始位置415相關(guān)。換句話說,可以在Selection對象中傳遞<p>元素的整個(gè)內(nèi)容或該內(nèi)容的某個(gè)子集,如果不是所有內(nèi)容都被選中的話。由于插入點(diǎn)從XML元素<p>內(nèi)部移出,OldXMLNode對應(yīng)于初始位置415存在于其中的特定的<p>元素430。類似地,NewXMLNode對應(yīng)于插入點(diǎn)移入其中的XML元素,在這種情況下為NULL,因?yàn)闆]有XML元素包圍著新位置425。最后,Reason參數(shù)包括一個(gè)標(biāo)示發(fā)生了XML相關(guān)的移動動作的標(biāo)識。
應(yīng)注意,插入點(diǎn)可以從另外一個(gè)方向移動(例如,從新位置425到初始位置415)。在那種情況下,XML環(huán)境改變事件仍然被觸發(fā),雖然OldXMLNode將為NULL,同時(shí)NewXMLNode將為<p>元素430。其他參數(shù)和剛才說明的相同。
熟悉相關(guān)技術(shù)的人應(yīng)理解,字處理應(yīng)用的創(chuàng)建者可以自由地定義哪種類型的XML元素觸發(fā)該事件。例如,應(yīng)用創(chuàng)建者可以決定涉及在他們選擇的某個(gè)特殊的命名空間的元素的移動、插入、或刪除動作不觸發(fā)該事件,但如果元素來自另一個(gè)命名空間,觸發(fā)該事件。更確切地,應(yīng)用創(chuàng)建者可以決定來自代表字處理應(yīng)用的本地XML大綱命名空間、引起事件被觸發(fā)的元素對狀態(tài)改變探測器是完全不可見的,并且只有來自非本地命名空間的元素才被事件發(fā)生器250“監(jiān)視”。
圖5是XML文檔202在進(jìn)行了進(jìn)一步的編輯之后的另一個(gè)顯示。首先,用戶可以在文本“Professor Smith”周圍插入一個(gè)新的XML元素,從而移動它到<resume>元素407中?;谶@些情況,XML相關(guān)的插入事件被XML文檔編輯器201提出。因此,事件的Sel參數(shù)包括一Selection對象,代表新的XML元素510的內(nèi)容,文本“Professor Smith”。由于該文本在插入動作之前未包括在某個(gè)XML元素之內(nèi),OldXMLNode為NULL。NewXMLNode標(biāo)識新的元素<references>元素510。最后,Reason參數(shù)包括一個(gè)對應(yīng)于插入事件的標(biāo)識符。
在這個(gè)例子中,在用戶插入<references>元素510之后,插入點(diǎn)被從<references>元素510移動到<objective>元素512,從而導(dǎo)致另一個(gè)移動事件被觸發(fā)。然而,與上述移動事件不同,當(dāng)前的移動事件對應(yīng)于從一個(gè)XML元素(<references>元素510)移動插入點(diǎn)到另一個(gè)XML元素(<objective>元素512)。在這種情況下,事件的Sel參數(shù)對應(yīng)于<references>元素510的內(nèi)容,文本“Professor Smith”。OldXMLNode參數(shù)標(biāo)識<objective>元素512。最后,Reason參數(shù)標(biāo)識事件的類型為一個(gè)XML相關(guān)的移動事件。
圖6是XML文檔202在進(jìn)行了更進(jìn)一步的編輯之后的另一個(gè)顯示。在這種情況下,用戶從文本“Reward employment”周圍刪除了<objective>元素,導(dǎo)致一個(gè)XML相關(guān)的刪除事件被觸發(fā)。以類似于上述事件的方式,刪除事件包括標(biāo)識文本“Rewarding employment”610為當(dāng)前選擇的Sel參數(shù),<objective>元素512(圖5)作為OldXMLNode,<resume>元素407作為NewXMLNode。最后Reason參數(shù)包括標(biāo)示進(jìn)行了一個(gè)XML相關(guān)的刪除動作的標(biāo)志。
總之,本發(fā)明使得能夠重載單個(gè)事件通知來指示由XML編輯環(huán)境中的多種XML相關(guān)動作所導(dǎo)致的狀態(tài)改變的發(fā)生。單個(gè)事件通知用于多種動作簡化了開發(fā)附加軟件應(yīng)用來利用由XML編輯環(huán)境顯露的功能的工作。上面的詳細(xì)說明,例子和數(shù)據(jù)提供了對制造和使用本發(fā)明的組成的完整說明。因?yàn)榭梢宰龀霰景l(fā)明的很多實(shí)施例而不偏離本發(fā)明的精神和范圍,本發(fā)明存于所附的權(quán)利要求中。
權(quán)利要求
1.一種計(jì)算機(jī)可讀媒體,由用于從第一程序向第二程序提交一消息的數(shù)據(jù)結(jié)構(gòu)編碼,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)包括一標(biāo)識符字段,標(biāo)示所述數(shù)據(jù)結(jié)構(gòu)代表著與對XML文檔進(jìn)行的動作相關(guān)的事件的發(fā)生;第一參數(shù)字段,標(biāo)識與事件相關(guān)的第一XML節(jié)點(diǎn);第二參數(shù)字段,標(biāo)識與事件相關(guān)的第二XML節(jié)點(diǎn);第三參數(shù)字段,標(biāo)識所發(fā)生的事件的類型,該事件的類型是從多種事件的類型中選出的一種。
2.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)進(jìn)一步包括第四參數(shù)字段,標(biāo)識在XML文檔內(nèi)的當(dāng)前選擇。
3.如權(quán)利要求2所述的計(jì)算機(jī)可讀媒體,其特征在于,所述第一XML節(jié)點(diǎn)對應(yīng)于當(dāng)動作開始執(zhí)行時(shí)當(dāng)前選擇存在于其中的一個(gè)節(jié)點(diǎn)。
4.如權(quán)利要求2所述的計(jì)算機(jī)可讀媒體,其特征在于,所述第二XML節(jié)點(diǎn)對應(yīng)于在動作執(zhí)行后當(dāng)前選擇將存在于其中的一個(gè)節(jié)點(diǎn)。
5.如權(quán)利要求2所述的計(jì)算機(jī)可讀媒體,其特征在于,所述第一XML節(jié)點(diǎn)對應(yīng)于當(dāng)動作開始執(zhí)行時(shí)當(dāng)前選擇存在于其中的一個(gè)節(jié)點(diǎn),所述第二XML節(jié)點(diǎn)對應(yīng)于在動作執(zhí)行后當(dāng)前選擇將存在于其中的一個(gè)節(jié)點(diǎn)。
6.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種事件的類型包括XML相關(guān)的移動動作、XML相關(guān)的插入動作,及XML相關(guān)的刪除動作。
7.如權(quán)利要求6所述的計(jì)算機(jī)可讀媒體,其特征在于,所述XML相關(guān)的移動動作包括把當(dāng)前選擇從第一XML節(jié)點(diǎn)移動到第二XML節(jié)點(diǎn)。
8.如權(quán)利要求6所述的計(jì)算機(jī)可讀媒體,其特征在于,所述XML相關(guān)的移動動作包括把當(dāng)前選擇從沒有相關(guān)XML節(jié)點(diǎn)的內(nèi)容上移動到第二XML節(jié)點(diǎn)。
9.如權(quán)利要求6所述的計(jì)算機(jī)可讀媒體,其特征在于,所述XML相關(guān)的移動動作包括把當(dāng)前選擇從第一XML節(jié)點(diǎn)移動到?jīng)]有相關(guān)XML節(jié)點(diǎn)的內(nèi)容。
10.如權(quán)利要求6所述的計(jì)算機(jī)可讀媒體,其特征在于,所述XML相關(guān)的插入動作包括使當(dāng)前選擇落入所述第二XML節(jié)點(diǎn)之內(nèi)。
11.如權(quán)利要求6所述的計(jì)算機(jī)可讀媒體,其特征在于,所述XML相關(guān)的刪除動作包括刪除第一XML節(jié)點(diǎn)從而使得原先在第一XML節(jié)點(diǎn)內(nèi)的當(dāng)前選擇變到第二XML節(jié)點(diǎn)內(nèi)。
12.如權(quán)利要求1所述的計(jì)算機(jī)可讀媒體,其特征在于,所述數(shù)據(jù)結(jié)構(gòu)被配置為當(dāng)動作開始執(zhí)行時(shí)由所述第一程序傳遞到所述第二程序。
13.一種帶計(jì)算機(jī)可執(zhí)行組件的計(jì)算機(jī)可讀媒體,其特征在于,所述媒體包括第一程序,用于編輯包含XML節(jié)點(diǎn)的文檔至少多個(gè)XML節(jié)點(diǎn)包含內(nèi)容,所述第一程序被配置為提交單個(gè)通知以響應(yīng)由所述第一程序執(zhí)行的動作,該動作是從多種類型的動作中標(biāo)識出的一個(gè);及第二程序,被配置為接收單個(gè)事件通知并用事件處理程序處理所述單個(gè)事件通知,該事件處理程序包括用來對多種類型的動作中的至少一種做出響應(yīng)的計(jì)算機(jī)可執(zhí)行指令。
14.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述事件處理程序包括計(jì)算機(jī)可讀指令,用來響應(yīng)多種類型的動作中的每一種。
15.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種類型的動作包括XML相關(guān)的移動動作,該移動動作對應(yīng)于把當(dāng)前選擇從不和XML節(jié)點(diǎn)相關(guān)的內(nèi)容移動到XML節(jié)點(diǎn)內(nèi)。
16.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種類型的動作包括XML相關(guān)的移動動作,對應(yīng)于從一XML節(jié)點(diǎn)內(nèi)移動當(dāng)前選擇到不和XML節(jié)點(diǎn)相關(guān)的內(nèi)容。
17.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種類型的動作包括XML相關(guān)的移動動作,對應(yīng)于從一XML節(jié)點(diǎn)內(nèi)移動當(dāng)前選擇到另一XML節(jié)點(diǎn)內(nèi)。
18.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種類型的動作包括XML相關(guān)的插入動作,對應(yīng)于在文檔的內(nèi)容周圍插入XML節(jié)點(diǎn)。
19.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種類型的動作包括XML相關(guān)的刪除動作,對應(yīng)于從文檔中刪除XML節(jié)點(diǎn)。
20.如權(quán)利要求13所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種類型的動作包括一個(gè)XML相關(guān)的移動動作、一個(gè)XML相關(guān)的插入動作,及一個(gè)XML相關(guān)的刪除動作。
21.一種帶計(jì)算機(jī)可執(zhí)行組件的計(jì)算機(jī)可讀媒體,其特征在于,所述媒體包括一種消息裝置,用來標(biāo)示在XML文檔編輯器中有事件的發(fā)生,所述消息裝制包括多個(gè)參數(shù),第一參數(shù)標(biāo)識第一XML節(jié)點(diǎn),第二參數(shù)標(biāo)識第二XML節(jié)點(diǎn),第三參數(shù)標(biāo)識所發(fā)生的事件的類型,所述事件的類型是從多種事件的類型中選出的一種。
22.如權(quán)利要求21所述的計(jì)算機(jī)可讀媒體,其特征在于,所述多種事件的類型包括XML相關(guān)的移動事件,XML相關(guān)的插入事件,及XML相關(guān)的刪除事件。
23.如權(quán)利要求22所述的計(jì)算機(jī)可讀媒體,其特征在于,所述XML相關(guān)的移動事件包括把選擇從第一標(biāo)識XML節(jié)點(diǎn)移動到第二標(biāo)識XML節(jié)點(diǎn)。
24.如權(quán)利要求23所述的計(jì)算機(jī)可讀媒體,其特征在于,所述第一標(biāo)識XML節(jié)點(diǎn)或第二標(biāo)識XML節(jié)點(diǎn)中的任意一個(gè)包括一NULL節(jié)點(diǎn)。
25.一種計(jì)算機(jī)可讀媒體,它有用于從第一程序向第二個(gè)程序提交消息的計(jì)算機(jī)可執(zhí)行指令,其特征在于,所述媒體包括從第一個(gè)程序向第二個(gè)程序提交一事件通知,該通知包括多個(gè)參數(shù),事件通知指示出相關(guān)于第一程序有XML相關(guān)的動作發(fā)生,第一參數(shù)標(biāo)識和XML相關(guān)的動作相關(guān)聯(lián)的第一XML節(jié)點(diǎn),第二參數(shù)標(biāo)識和XML相關(guān)的動作相關(guān)聯(lián)的第二XML節(jié)點(diǎn),及第三參數(shù)標(biāo)識對應(yīng)于該XML相關(guān)的動作的多種類型的動作中的一種。
26.一種計(jì)算機(jī)可讀媒體,包含用于從第一程序向第二程序提交消息的計(jì)算機(jī)可執(zhí)行指令,其特征在于,所述媒體包括由第二程序從第一程序接收一事件通知,該通知包括多個(gè)參數(shù),事件通知指示出相關(guān)于第一程序有一XML相關(guān)的動作發(fā)生,第一參數(shù)標(biāo)識和XML相關(guān)的動作相關(guān)聯(lián)的第一XML節(jié)點(diǎn),第二參數(shù)標(biāo)識和XML相關(guān)的動作相關(guān)聯(lián)的第二XML節(jié)點(diǎn),及第三個(gè)參數(shù)標(biāo)識對應(yīng)于該XML相關(guān)的動作的多種類型的動作中的一種。
全文摘要
本發(fā)明涉及一種機(jī)制,從第一程序向第二程序提交事件通知消息以標(biāo)示在第一程序中有動作發(fā)生,其中事件通知消息包括參數(shù),標(biāo)示該動作是一組可能的動作中的一個(gè)。更確切地,在配置為編輯用可擴(kuò)充標(biāo)記語言XML創(chuàng)建的文檔的應(yīng)用中,一個(gè)XML相關(guān)的動作的發(fā)生引發(fā)事件通知消息的提交。XML相關(guān)的動作可以是XML相關(guān)的移動動作、XML相關(guān)的插入動作、或XML相關(guān)的刪除動作。通過這種方式,當(dāng)編輯XML文檔時(shí),單個(gè)事件通知消息可以被用來標(biāo)示三種不同類型動作的發(fā)生。
文檔編號G06F17/21GK1474271SQ0314524
公開日2004年2月11日 申請日期2003年6月25日 優(yōu)先權(quán)日2002年6月25日
發(fā)明者M·薩維茨基, B·M·瓊斯, J·C·雷納, E·W·撒普, M 薩維茨基, 撒普, 瓊斯, 雷納 申請人:微軟公司