專利名稱:網(wǎng)絡(luò)操作系統(tǒng)的制作方法
網(wǎng)絡(luò)操作系統(tǒng)相關(guān)申請的交叉引用本申請要求以下申請的權(quán)益2007年9月28日提交的臨時申請No. 60/976,216、 2007年9月28日提交的臨時申請No. 60/976,222,2007年9月28日提交的臨時申請 No. 60/976, 246、2007年9月28日提交的臨時申請No. 60/976, 249、2007年9月28日提交 的臨時申請No. 60/976,252、2007年9月28日提交的臨時申請No. 60/976,258、2007年9月 28日提交的臨時申請No. 60/976,266、2007年9月28日提交的臨時申請No. 60/976,269、 2007年9月28日提交的臨時申請No. 60/976,275,2007年9月28日提交的臨時申請 No. 60/976,281、2007年9月28日提交的臨時申請No. 60/976,283、2007年9月28日提交 的臨時申請No. 60/976,292、2007年9月28日提交的臨時申請No. 60/976,301、2007年9月 28日提交的臨時申請No. 60/976,304、2007年9月28日提交的臨時申請No. 60/976,308、 2007年9月28日提交的臨時申請No.60/976,311、2007年9月28日提交的臨時申請 No. 60/976,312、2007年9月28日提交的臨時申請No. 60/976,320、2007年9月28日提交 的臨時申請No. 60/976,325、2007年9月28日提交的臨時申請No. 60/976,327和2007年 9月28日提交的臨時申請No. 60/976,339,通過引用將所有這些申請并入本文。
背景技術(shù):
被構(gòu)造為根據(jù)例如互聯(lián)網(wǎng)協(xié)議(“IP”)的公共協(xié)議交換數(shù)據(jù)的計算機(jī)網(wǎng)絡(luò)日益用 于執(zhí)行遠(yuǎn)程系統(tǒng)與用戶之間的各種任務(wù)。從計算機(jī)網(wǎng)絡(luò)提供的連接性使組織等尋找便于參 與協(xié)作過程的方案。在這點上,許多現(xiàn)有的Web站點、網(wǎng)絡(luò)門戶和分布式應(yīng)用使用戶能夠以 多種方法共享數(shù)據(jù)和進(jìn)行協(xié)作。為了進(jìn)一步支持協(xié)作,使得資源日益可作為網(wǎng)絡(luò)的服務(wù)而 獲得。一般地說,服務(wù)是指可從與任何基礎(chǔ)技術(shù)分離的網(wǎng)絡(luò)進(jìn)行訪問的軟件和硬件。相應(yīng) 地,網(wǎng)絡(luò)服務(wù)常被描述為“松散耦合”到操作系統(tǒng)、編程語言和執(zhí)行服務(wù)的硬件組件。結(jié)果, 即使利用不同的基礎(chǔ)技術(shù),仍可以組合網(wǎng)絡(luò)服務(wù)以創(chuàng)建分布式應(yīng)用。術(shù)語“云”計算常用于描述從網(wǎng)絡(luò)獲得越來越多的服務(wù)的趨勢。隨著網(wǎng)絡(luò)帶寬的 增加以及連接性的提高,云計算的應(yīng)用和經(jīng)濟(jì)刺激將必然繼續(xù)擴(kuò)張。然而,現(xiàn)有的系統(tǒng)利用 以機(jī)器為中心的操作系統(tǒng)來管理網(wǎng)絡(luò)上的通信以及幫助進(jìn)行協(xié)作。在這點上,在開發(fā)出例 如互聯(lián)網(wǎng)的計算機(jī)網(wǎng)絡(luò)之前,已經(jīng)建立了以機(jī)器為中心的操作系統(tǒng)的核心設(shè)計。結(jié)果,現(xiàn)有 的系統(tǒng)不能提供易于將網(wǎng)絡(luò)通信集成到應(yīng)用和用戶體驗的其它方面中的一般化協(xié)作環(huán)境。 相反,開發(fā)便于共享和參與協(xié)作過程的應(yīng)用仍然艱難并且最終對于大多數(shù)用戶和/或組織 來講過于困難或昂貴。因此,需要一種提供補(bǔ)充支持計算機(jī)網(wǎng)絡(luò)的連接性的更加有效的方 法的網(wǎng)絡(luò)操作系統(tǒng)。
發(fā)明內(nèi)容
一般地說,本發(fā)明涉及一種提供補(bǔ)充支持計算機(jī)網(wǎng)絡(luò)的連接性的更加有效的方法 的網(wǎng)絡(luò)操作系統(tǒng)。在一個實施例中,實現(xiàn)XML虛擬機(jī),該XML虛擬機(jī)接受以XML編程語言編 寫的高級應(yīng)用代碼作為輸入。提供用于將以XML編程語言編寫的應(yīng)用代碼翻譯或解釋成適于跨計算機(jī)平臺執(zhí)行的代碼的功能。此外,XML虛擬機(jī)支持模型視圖控制器(“MVC”)設(shè)計 模式,該設(shè)計模式便于進(jìn)行從應(yīng)用到公共數(shù)據(jù)模型的真數(shù)據(jù)抽象??梢詣?chuàng)建和執(zhí)行多實例 應(yīng)用,每個實例潛在支持多個視圖。
由于通過參考結(jié)合附圖在下文進(jìn)行的詳細(xì)描述能夠更好地理解本發(fā)明,將更易于 理解本發(fā)明的上述方面以及許多附帶優(yōu)點,在附圖中圖1是適于示出本發(fā)明的各方面的包括服務(wù)器端數(shù)據(jù)中心和多個客戶機(jī)計算機(jī) 的網(wǎng)絡(luò)環(huán)境的示例性圖示表示;圖2是適于示出本發(fā)明的各方面的包括服務(wù)器端數(shù)據(jù)中心和多個客戶機(jī)計算機(jī) 的網(wǎng)絡(luò)環(huán)境的示例性圖示表示;圖3是示出適于實現(xiàn)本發(fā)明的各方面的計算裝置的示例性硬件架構(gòu)的框圖;圖4A-C是可實現(xiàn)本發(fā)明的示例性平臺環(huán)境的框圖;圖5A-B是適于示出本發(fā)明的各方面的包括服務(wù)器端數(shù)據(jù)中心和多個客戶機(jī)計算 機(jī)的網(wǎng)絡(luò)環(huán)境的示例性圖示表示;圖6A-B示出適于示出本發(fā)明的各方面的與應(yīng)用關(guān)聯(lián)的示例性過程和UI XML文 檔;圖7A-C示出可視地表示基于語義在圖6A-B內(nèi)描述的應(yīng)用的圖形元素的示例性圖 形顯不;圖8A-B是適于示出本發(fā)明的各方面的組件的圖示表示;圖9是示例性管理器被構(gòu)造為實現(xiàn)本發(fā)明的各方面的框圖;圖10A-C是示出根據(jù)本發(fā)明的一個實施例的執(zhí)行處理以打開應(yīng)用包的示例性應(yīng) 用初始化例程的圖;圖11是示出用于打開并啟動在應(yīng)用的過程代碼內(nèi)定義的邏輯的執(zhí)行的例程的示 例性流程圖;圖12A-B示出了示出被構(gòu)造為使得執(zhí)行過程步驟內(nèi)的操作的執(zhí)行方法的示例性 流程圖;圖14A-14B是示出適于示出本發(fā)明的各方面的對象之間的交互的圖;圖15示出了示出根據(jù)本發(fā)明的一個實施例的實現(xiàn)功能的動作處理例程的示例性 流程圖;圖16是根據(jù)本發(fā)明的一個實施例的將對象綁定至數(shù)據(jù)模型的綁定處理例程的 圖;圖17A-B是示出了根據(jù)本發(fā)明的一個實施例的使得響應(yīng)于正激活的觸發(fā)器執(zhí)行 應(yīng)用代碼的觸發(fā)器激活例程的圖;圖18是被構(gòu)造為執(zhí)行請求以基于求值指引應(yīng)用執(zhí)行的流程的判斷處理例程的 圖;圖19是根據(jù)本發(fā)明的一個實施例的描述用于實現(xiàn)改變操作的邏輯的改變處理例 程的圖;圖20A-C是示出了根據(jù)本發(fā)明的一個實施例的實現(xiàn)用于修改數(shù)據(jù)模型的內(nèi)容的邏輯的數(shù)據(jù)更新例程的圖;圖21是根據(jù)本發(fā)明的一個實施例的描述用于在數(shù)據(jù)模型內(nèi)設(shè)置組件規(guī)則的邏輯 的設(shè)置規(guī)則例程的圖;圖22是根據(jù)本發(fā)明的一個實施例的向?qū)ο笸ㄖ獢?shù)據(jù)更新的通知監(jiān)聽器例程的 圖;圖23是根據(jù)本發(fā)明的一個實施例的使得渲染應(yīng)用視圖的渲染例程的圖;圖24示出了根據(jù)本發(fā)明的一個實施例的適于描述應(yīng)用與各種示例性數(shù)據(jù)源進(jìn)行 交互的方式的框圖;圖25示出了適于描述本發(fā)明提供的XML文件系統(tǒng)的框圖;圖26示出了根據(jù)本發(fā)明的一個實施例的被構(gòu)造為實現(xiàn)網(wǎng)絡(luò)上數(shù)據(jù)的同步的消息 服務(wù)器;圖27示出了根據(jù)本發(fā)明的另一個實施例的消息服務(wù)器的附加方面;圖28A-28D示出了用于從本發(fā)明提供的文件系統(tǒng)獲取文件的示例性方法;圖28E示出了適于示出本發(fā)明的各方面的示例性文件的摘錄;圖29示出了根據(jù)本發(fā)明的一個實施例的被構(gòu)造為獲取文件列表的方法;圖30A-30C示出了根據(jù)本發(fā)明的另一個實施例的在XML文件系統(tǒng)內(nèi)創(chuàng)建文件的方 法;圖31A-31E示出了根據(jù)本發(fā)明的另一個實施例的打開XML文件系統(tǒng)內(nèi)的現(xiàn)有文件 的方法;圖32示出了根據(jù)本發(fā)明的一個實施例的在客戶機(jī)計算機(jī)上進(jìn)行網(wǎng)絡(luò)操作系統(tǒng)的 啟動的方法;圖33示出了根據(jù)本發(fā)明的另一個實施例的掛接網(wǎng)絡(luò)操作系統(tǒng)組的方法;圖34A示出了根據(jù)本發(fā)明的一個實施例的將客戶機(jī)計算機(jī)從聯(lián)機(jī)狀態(tài)轉(zhuǎn)變到離 線狀態(tài)的方法;圖34B示出了根據(jù)本發(fā)明的另一個實施例的可用于網(wǎng)絡(luò)協(xié)作的多個驅(qū)動器的示 例性圖示表示;圖35示出了根據(jù)本發(fā)明的另一個實施例的當(dāng)客戶機(jī)計算機(jī)已經(jīng)在離線狀態(tài)下操 作時將客戶機(jī)計算機(jī)轉(zhuǎn)變回聯(lián)機(jī)狀態(tài)的方法;圖36示出了根據(jù)本發(fā)明的另一個實施例的按照有助于增強(qiáng)網(wǎng)絡(luò)通信的方式處理 創(chuàng)建新文件的請求的方法;圖37示出了適于描述本發(fā)明的附加方面的與聊天應(yīng)用一起利用的共享數(shù)據(jù)文 件;圖38示出了根據(jù)本發(fā)明的另一個實施例的由聊天應(yīng)用利用的組件與數(shù)據(jù)模型之 間的關(guān)系;圖39示出了根據(jù)本發(fā)明的另一個實施例的用于幫助聊天會話的共享數(shù)據(jù)文件的 更新;圖40示出了根據(jù)本發(fā)明的另一個實施例的在聊天會話內(nèi)執(zhí)行的一組示例性通 信;圖41示出了在多個客戶機(jī)之間執(zhí)行協(xié)作式通信時共享數(shù)據(jù)文件的使用;
圖42示出了適于示出本發(fā)明的附加方面的示例性應(yīng)用的用戶界面;以及圖43示出了適于示出本發(fā)明的附加方面的示例性應(yīng)用的用戶界面。具體實現(xiàn)方式一般地說,本發(fā)明的各方面涉及便于開發(fā)互聯(lián)網(wǎng)模式云計算的網(wǎng)絡(luò)操作系統(tǒng)。在 實際實施例中,這里所述的網(wǎng)絡(luò)操作系統(tǒng)利用XML(可擴(kuò)展標(biāo)記語言)作為通用語言來表示 數(shù)據(jù)。因此,下文提供的示例可以參考XML結(jié)構(gòu)化數(shù)據(jù)和文檔來描述網(wǎng)絡(luò)操作系統(tǒng)的功能 性。在這點上,在此上下文中,利用XML實現(xiàn)許多的好處和協(xié)同作用。然而,本領(lǐng)域技術(shù)人 員等將認(rèn)識到,在不脫離要求保護(hù)的主題的范圍的情況下,可以利用這里所述之外的其它 基礎(chǔ)技術(shù)或技術(shù)組合實現(xiàn)本發(fā)明。此外,下文提供的說明性示例和描述并非是窮盡的或者 要將本發(fā)明限制到公開的具體形式。相似地,下文所述的任何步驟可以與其它步驟或步驟 組合進(jìn)行互換以達(dá)到相同結(jié)果。參照圖1,下文旨在提供可用于實現(xiàn)本發(fā)明各方面的網(wǎng)絡(luò)環(huán)境100的總覽。如圖1 所示,網(wǎng)絡(luò)環(huán)境100包括與服務(wù)器104關(guān)聯(lián)的服務(wù)器端數(shù)據(jù)中心102。網(wǎng)絡(luò)環(huán)境100還包 括與用戶112關(guān)聯(lián)的多個客戶機(jī)計算裝置,這些客戶機(jī)計算裝置包括移動電話106、臺式計 算機(jī)108和瘦客戶機(jī)110。在這點上,服務(wù)器端數(shù)據(jù)中心102被構(gòu)造為經(jīng)由網(wǎng)絡(luò)114與移 動電話106、臺式計算機(jī)108和瘦客戶機(jī)110進(jìn)行通信,其中網(wǎng)絡(luò)114可以被實現(xiàn)為局域網(wǎng) (“LAN”)、無線網(wǎng)絡(luò)、例如互聯(lián)網(wǎng)的廣域網(wǎng)(“WAN”)等。本領(lǐng)域技術(shù)人員等知道,圖1所 示的計算裝置可以被構(gòu)造為在網(wǎng)絡(luò)114上交換文件、命令和其它類型的數(shù)據(jù)。然而,由于本 領(lǐng)域技術(shù)人員公知例如TCP/IP的網(wǎng)絡(luò)通信協(xié)議,所以這里將不描述這些協(xié)議。在現(xiàn)有系統(tǒng)中,在一種類型的計算裝置上可用的應(yīng)用程序可能與其它類型的裝置 不兼容。這種不兼容性產(chǎn)生各種問題。例如,在通用臺式計算機(jī)上,用戶可以利用特定應(yīng)用 來訪問電子郵件消息。另一方面,為了在例如移動電話的有限資源裝置上訪問電子郵件,可 能需要具有不同特征和界面的另一個程序。這種不兼容性無助于提供公同的用戶體驗以及 使用戶需要的知識量和技能最小化。此外,即使許多應(yīng)用執(zhí)行相似或相同的功能,針對不同 類型的裝置創(chuàng)建應(yīng)用仍花費過多開發(fā)時間。本發(fā)明的各方面可以應(yīng)用于多個不同環(huán)境下,下文中的環(huán)境僅僅是一個示例。在 一個實施例中,可從針對網(wǎng)絡(luò)操作系統(tǒng)而啟用的任何類型的計算裝置訪問用戶的應(yīng)用和數(shù) 據(jù)。如圖1所示,用戶112可以從移動電話106、臺式計算機(jī)108或瘦客戶機(jī)110連接到網(wǎng) 絡(luò)114。作為響應(yīng),服務(wù)器端數(shù)據(jù)中心102將網(wǎng)絡(luò)操作系統(tǒng)服務(wù)傳遞到適當(dāng)?shù)难b置。更具體 地講,每當(dāng)用戶連接到網(wǎng)絡(luò)時,可以傳遞和建立網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件和用戶應(yīng)用。 應(yīng)用在適當(dāng)?shù)目蛻魴C(jī)計算裝置的本地執(zhí)行而不在服務(wù)器104上執(zhí)行。用戶數(shù)據(jù)可以緩存在 客戶機(jī)計算裝置上,但是將與由服務(wù)器端數(shù)據(jù)中心102保持的存儲一致。因此,主要執(zhí)行客 戶機(jī)計算裝置106-110與服務(wù)器端數(shù)據(jù)中心102之間的通信,以獲得文檔和更新數(shù)據(jù)。例 如,當(dāng)客戶機(jī)離線時,網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件使數(shù)據(jù)更新在本地緩存。當(dāng)重新建立網(wǎng) 絡(luò)連接時,這些更新可以被發(fā)送至服務(wù)器端數(shù)據(jù)中心102并且與任何其它變化進(jìn)行同步。在一個實施例,網(wǎng)絡(luò)操作系統(tǒng)可以提供在每一個用戶計算裝置上的公同體驗。在 這點上,在完全不同類型的計算裝置上傳遞并建立公共桌面應(yīng)用。從該公共桌面可以訪問 所有的用戶應(yīng)用程序和數(shù)據(jù)。例如,用戶112可以從客戶機(jī)計算裝置106-110中的任何一個 訪問針對網(wǎng)絡(luò)操作系統(tǒng)啟用的單個電子郵件程序。由于可從服務(wù)器端數(shù)據(jù)中心102獲得用
6戶數(shù)據(jù)并且作為服務(wù)傳遞應(yīng)用,不管正在使用哪個計算裝置,都可以獲得相同的應(yīng)用(例 如,電子郵件程序)和數(shù)據(jù)(例如,電子郵件消息)??梢愿鶕?jù)用戶偏愛和其它變量定制由網(wǎng)絡(luò)操作系統(tǒng)提供給客戶機(jī)計算裝置的服 務(wù)。在這點上,維護(hù)配置數(shù)據(jù),該配置數(shù)據(jù)定義將如何提供或者是否提供特定網(wǎng)絡(luò)操作系統(tǒng) 服務(wù)。例如,用戶可以根據(jù)正在使用的計算裝置建立偏愛以具有不同的可用應(yīng)用程序或數(shù) 據(jù)的集合。通過另一個示例,用戶可以從包括不安全的無線連接的任何數(shù)目的接入點連接 到網(wǎng)絡(luò)114。在這種情況下,由于網(wǎng)絡(luò)連接的不安全性質(zhì),可以建立安全屬性以使得無法訪 問某些服務(wù)和/或數(shù)據(jù)。本領(lǐng)域技術(shù)人員等應(yīng)該明白,上文提供的示例僅僅表示了可以利 用本發(fā)明定制網(wǎng)絡(luò)操作系統(tǒng)服務(wù)的一些方式。為了方便,圖1示出了可用于網(wǎng)絡(luò)環(huán)境100中的服務(wù)器端數(shù)據(jù)中心102、服務(wù)器計 算機(jī)104、移動電話106、臺式計算機(jī)108和瘦客戶機(jī)110,在網(wǎng)絡(luò)環(huán)境100中可由通過網(wǎng)絡(luò) 114鏈接在一起的遠(yuǎn)程計算裝置執(zhí)行補(bǔ)充任務(wù)。然而,可以利用其它類型的客戶機(jī)計算裝置 實現(xiàn)本發(fā)明,例如為但不限于膝上型計算機(jī)、平板計算機(jī)、個人數(shù)字助理(PDA)、混合/嵌 入式裝置、機(jī)頂盒、媒體中心等。此外,本領(lǐng)域技術(shù)人員等將認(rèn)識到,可以以不同的網(wǎng)絡(luò)配置 實現(xiàn)本發(fā)明并且圖1所示的示例應(yīng)該解釋為示例性的?,F(xiàn)在參照圖2,將描述可用于示出本發(fā)明的另外的方面的另一個網(wǎng)絡(luò)環(huán)境200。如 圖2所示,服務(wù)器端數(shù)據(jù)中心202可以耦合到例如企業(yè)網(wǎng)絡(luò)204的私有網(wǎng)絡(luò)。在這種情況 下,附加網(wǎng)絡(luò)操作系統(tǒng)服務(wù)直接經(jīng)由企業(yè)網(wǎng)絡(luò)204被提供給客戶機(jī)206、208和210。然而, 仍然從服務(wù)器端數(shù)據(jù)中心216提供和管理網(wǎng)絡(luò)操作系統(tǒng),企業(yè)服務(wù)器端數(shù)據(jù)中心202僅僅 提供附加服務(wù)。此外,相同的附加服務(wù)可以提供給企業(yè)網(wǎng)絡(luò)204之外的客戶機(jī)。在這個實 例中,服務(wù)器端數(shù)據(jù)中心202經(jīng)由互聯(lián)網(wǎng)214向客戶機(jī)212提供網(wǎng)絡(luò)服務(wù)。與上文所述相 似,客戶機(jī)206-212可以是針對網(wǎng)絡(luò)操作系統(tǒng)下啟用的任何計算裝置(移動電話、臺式計算 機(jī)、瘦客戶機(jī)等)。在另一個實施例中,網(wǎng)絡(luò)操作系統(tǒng)可由企業(yè)服務(wù)器端數(shù)據(jù)中心202及其 附加服務(wù)直接提供,并且可以或可以不(取決于安全配置)允許對企業(yè)網(wǎng)絡(luò)204以外的外 部服務(wù)器端數(shù)據(jù)中心216進(jìn)行訪問。網(wǎng)絡(luò)操作系統(tǒng)被構(gòu)造為便于參與協(xié)作過程。本發(fā)明的一個方面是XML文件系統(tǒng), 它用作能夠存儲包括XML文檔、可執(zhí)行文件、二進(jìn)制文件、多媒體等的任何類型的數(shù)據(jù)的網(wǎng) 絡(luò)倉庫。可在服務(wù)器端數(shù)據(jù)中心202或216實現(xiàn)XML文件系統(tǒng)以管理物理存儲和數(shù)據(jù)訪 問。除了傳統(tǒng)的文件系統(tǒng)功能以外,XML文件系統(tǒng)允許定義各種類型的協(xié)作空間。在示例 性實施例中,所支持的協(xié)作空間的類型包括社團(tuán)、組、好友以及現(xiàn)有協(xié)作空間內(nèi)的子集(例 如,子社團(tuán)、子組等)。XML文件系統(tǒng)中的根文件夾用作建立的每個社團(tuán)、組或其它協(xié)作空間 的倉庫。此外,可以在與各個用戶關(guān)聯(lián)的XML文件系統(tǒng)內(nèi)創(chuàng)建文件夾和文件。在另一個實施 例中,可以動態(tài)啟用不同用戶之間的協(xié)作,而不需要用戶共享XML文件系統(tǒng)中的協(xié)作空間。 如在下文中更加詳細(xì)地描述的,提供允許用戶產(chǎn)生和接受實時建立協(xié)作會話的請求的消息 發(fā)送服務(wù)。這樣,即使沒有定義現(xiàn)有的協(xié)作空間,用戶仍可以通過動態(tài)建立的協(xié)作會話來建 立新的關(guān)系。當(dāng)網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件開始執(zhí)行時,可以利用登錄提示獲得用戶證明。 為了便于透明訪問,與用戶關(guān)聯(lián)的每個文件夾可以從XML文件系統(tǒng)映射為客戶機(jī)上的虛擬 驅(qū)動器。例如,如果用戶是特定組的成員,則這個組文件夾將作為客戶機(jī)上的虛擬驅(qū)動器出
7現(xiàn)。在一個實施例中,XML文件系統(tǒng)中的文件夾包括定義協(xié)作空間的共享資源的XML結(jié)構(gòu) 化數(shù)據(jù)。這些共享資源可以包括但不限于應(yīng)用、數(shù)據(jù)文檔、訪問和安全設(shè)置、用戶列表、統(tǒng) 計量、日歷等。XML文件系統(tǒng)在一個實施例中還可以用作倉庫或數(shù)據(jù)庫以替代在網(wǎng)絡(luò)操作系 統(tǒng)環(huán)境上執(zhí)行的一個或多個應(yīng)用。如在下文中更加詳細(xì)地描述的,通過本發(fā)明提供的事務(wù) 管理可以對保持在協(xié)作和分布式數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行自動同步。通過利用這種類型的協(xié)作 和分布式數(shù)據(jù)庫建立應(yīng)用,應(yīng)用繼承數(shù)據(jù)庫的特征并且會易于共享數(shù)據(jù)。由于XML文件系統(tǒng)遵照應(yīng)用編程接口(API),所以可以有服務(wù)器端數(shù)據(jù)中心202的 其它實施例。在這點上,在需要在企業(yè)內(nèi)的遺留應(yīng)用和數(shù)據(jù)庫之上進(jìn)行抽象從而能夠提供 新的應(yīng)用或者集成在網(wǎng)絡(luò)操作系統(tǒng)環(huán)境上執(zhí)行的多個應(yīng)用的情況下,希望可以從XML文件 系統(tǒng)提供其它XML Web服務(wù)。XML文件系統(tǒng)的定制實現(xiàn)可以選擇要支持的功能的等級。例 如,在一個支持等級中,可以省去用于同步事務(wù)的支持。除了管理數(shù)據(jù)訪問以外,XML文件系統(tǒng)提供用于通過同步數(shù)據(jù)和協(xié)調(diào)數(shù)據(jù)更新的 事務(wù)控制按便于協(xié)作的方式創(chuàng)建和定制用戶之間的關(guān)聯(lián)的集成框架。例如,應(yīng)用連同任何 關(guān)聯(lián)的用戶數(shù)據(jù)可由用戶組(例如,好友)共享。共享的應(yīng)用的功能和關(guān)聯(lián)的用戶數(shù)據(jù)連 同其它資源可在保持在組或用戶文件夾中的XML文檔內(nèi)進(jìn)行表示。XML文件系統(tǒng)提供每個 用戶訪問共享的應(yīng)用和關(guān)聯(lián)的用戶數(shù)據(jù)的方法。通過這種方法,可以在多個客戶機(jī)上傳遞 和建立共享的應(yīng)用,每個組成員操縱來自相同組或用戶文件夾的數(shù)據(jù)。如上所述,企業(yè)網(wǎng)絡(luò)204以外的客戶機(jī)(S卩,客戶機(jī)212)可以從服務(wù)器端數(shù)據(jù)中 心202獲得服務(wù)。舉例來講,當(dāng)在企業(yè)網(wǎng)絡(luò)204之外時,雇員或其它用戶可以訪問企業(yè)資源。 因此,客戶機(jī)212可以是經(jīng)由互聯(lián)網(wǎng)214訪問服務(wù)器端數(shù)據(jù)中心202的家庭計算機(jī)、移動電 話等。在這點上,本領(lǐng)域技術(shù)人員等認(rèn)識到,網(wǎng)絡(luò)環(huán)境200可以包括圖2所示的網(wǎng)絡(luò)以外的 附加網(wǎng)絡(luò),并且可以按許多方法重新構(gòu)造圖2中的示例性結(jié)構(gòu)從而通過其它方法傳遞網(wǎng)絡(luò) 操作系統(tǒng)和附加XML文件系統(tǒng)二者。例如,客戶機(jī)212的網(wǎng)絡(luò)接入點可以源自局域網(wǎng)、無線 網(wǎng)絡(luò)、廣域網(wǎng)等,這對于服務(wù)器端數(shù)據(jù)中心202和216也可以是這樣的。在另一個實施例中,客戶機(jī)可以根據(jù)一個或多個變量從企業(yè)服務(wù)器端數(shù)據(jù)中心 202獲得不同類型的服務(wù)。不是向每個客戶機(jī)提供相同的網(wǎng)絡(luò)服務(wù),可以根據(jù)客戶機(jī)的網(wǎng)絡(luò) 接入點的位置構(gòu)造網(wǎng)絡(luò)服務(wù)。例如,可以向直接連接到企業(yè)網(wǎng)絡(luò)204的客戶機(jī)206-210提 供該企業(yè)特有的附加定制服務(wù)。在企業(yè)網(wǎng)絡(luò)204之外,可以從服務(wù)器端數(shù)據(jù)中心202向客 戶機(jī)212(例如顧客、供應(yīng)商、雇員、或與企業(yè)有關(guān)的其它用戶)傳遞外部服務(wù)。為了便于定 制網(wǎng)絡(luò)服務(wù)的安全傳遞,可以由服務(wù)器端數(shù)據(jù)中心202分配資源用于管理不同類型的客戶 機(jī)。在圖2所示的實施例中,服務(wù)器端數(shù)據(jù)中心202包括硬盤驅(qū)動器220,硬盤驅(qū)動器220 被分配用于向網(wǎng)絡(luò)內(nèi)部的客戶機(jī)206-210提供定制服務(wù)。另一方面,硬盤驅(qū)動器222可被 分配用于向例如客戶機(jī)212的企業(yè)網(wǎng)絡(luò)之外的客戶機(jī)提供更一般化的服務(wù)。在其它實施例 中,提供給客戶機(jī)的服務(wù)可以取決于例如用戶證明、設(shè)置信息、客戶機(jī)類型等的其它變量。在一個方面中,網(wǎng)絡(luò)操作系統(tǒng)提供便于實時“企業(yè)到企業(yè) (business-to-business)”協(xié)作的更一般化的框架??梢詣?chuàng)建協(xié)作空間以允許不同企業(yè)從 公共數(shù)據(jù)存儲來訪問資源。在圖2所示的示例中,客戶機(jī)212可以與維護(hù)服務(wù)器端數(shù)據(jù)中 心202的企業(yè)的伙伴企業(yè)關(guān)聯(lián)。在這點上,通過與服務(wù)器端數(shù)據(jù)中心202交互的用戶或軟 件代理來操作圖2所示的客戶機(jī)。當(dāng)通過軟件代理進(jìn)行操作時,本發(fā)明的各方面有效創(chuàng)建
8EDI (電子數(shù)據(jù)互換)關(guān)系,在這種EDI關(guān)系中,與企業(yè)關(guān)聯(lián)或單獨的用戶利用XML文件系統(tǒng) 自動共享資源。還可以由可由公眾獲得的服務(wù)器數(shù)據(jù)中心216提供EDI服務(wù),這取決于安 全要求。可以在XML文件系統(tǒng)內(nèi)創(chuàng)建組文件夾,用于存儲共享的伙伴資源和/或定義EDI 的業(yè)務(wù)規(guī)則。與上述的說明相似,組文件夾可以被映射為客戶機(jī)212上的虛擬驅(qū)動器,由此 提供對于企業(yè)網(wǎng)絡(luò)204之外的共享資源的透明訪問。值得注意,共享應(yīng)用可以作為XML結(jié) 構(gòu)化數(shù)據(jù)從服務(wù)器端數(shù)據(jù)中心202傳遞到客戶機(jī)206-212。客戶機(jī)206-212中的每一個在 本地建立并執(zhí)行應(yīng)用,將數(shù)據(jù)更新返回報告給XML文件系統(tǒng)內(nèi)的共享文件夾或每個用戶私 有文件夾。在一個實施例中,服務(wù)器端數(shù)據(jù)中心202被構(gòu)造為管理數(shù)據(jù)更新協(xié)調(diào),以使得多 個客戶機(jī)可以同時訪問和更新相同的文檔。如果數(shù)據(jù)存儲在XML文件系統(tǒng)內(nèi),則還可以由 服務(wù)器端數(shù)據(jù)中心216進(jìn)行該協(xié)調(diào)。在一個方面中,網(wǎng)絡(luò)操作系統(tǒng)使得客戶機(jī)206-212可以對外部網(wǎng)絡(luò)服務(wù)進(jìn)行透明 訪問。利用應(yīng)用編程接口(API)可以創(chuàng)建通信器,用于抽象出用于與任何(內(nèi)部或外部) 網(wǎng)絡(luò)服務(wù)進(jìn)行交互的數(shù)據(jù)處理功能。舉例來講,開發(fā)人員可以創(chuàng)建用于訪問容留(host) XML Web服務(wù)、REST服務(wù)、XML資源、RSS或Atom feeds、文本、csv文本、基于Web站點的 HTML(超文本標(biāo)記語言)等的網(wǎng)絡(luò)服務(wù)器的通信器。參照圖2,可由客戶機(jī)212對通信器或 “通道”的實例進(jìn)行實例化,以與Web服務(wù)218進(jìn)行交互。在這個示例中,利用服務(wù)器端數(shù)據(jù) 中心216作為代理服務(wù)器(proxy),使客戶機(jī)212可以在公共網(wǎng)絡(luò)(S卩,互聯(lián)網(wǎng)214)上訪 問網(wǎng)絡(luò)操作系統(tǒng)服務(wù)。此外,即使從私有網(wǎng)絡(luò)(例如,企業(yè)網(wǎng)絡(luò)204)提供網(wǎng)絡(luò)操作服務(wù),利 用通信器仍可使客戶機(jī)206-210訪問Web服務(wù)218。在這種情況下,服務(wù)器端數(shù)據(jù)中心216 用作代理服務(wù)器,該代理服務(wù)器管理客戶機(jī)206-210與Web服務(wù)218之間的通信。因此,客 戶機(jī)可以利用通信器提取訪問網(wǎng)絡(luò)服務(wù)時的數(shù)據(jù)處理功能。由于不要求開發(fā)人員重復(fù)編寫 用于管理客戶機(jī)與網(wǎng)絡(luò)服務(wù)之間的通信的代碼,所以本發(fā)明的這個方面簡化了應(yīng)用開發(fā)。盡管圖2示出了企業(yè)網(wǎng)絡(luò)204,但是本領(lǐng)域技術(shù)人員等將認(rèn)識到這僅僅是示例性 的。另外,本發(fā)明可以幫助在其它類型的網(wǎng)絡(luò)環(huán)境中的數(shù)據(jù)同步和協(xié)調(diào)。因此,除了例如互 聯(lián)網(wǎng)的廣域網(wǎng)外,參照圖2進(jìn)行的描述可以同等地應(yīng)用于由家庭和小企業(yè)保持的局域網(wǎng)。 此外,參照向每個客戶機(jī)206-212提供不同的網(wǎng)絡(luò)服務(wù)的服務(wù)器端數(shù)據(jù)中心202舉出上述 示例。然而,服務(wù)器端數(shù)據(jù)中心202可以被構(gòu)造為提供補(bǔ)充另一個裝置或網(wǎng)絡(luò)的資源或服 務(wù)的網(wǎng)絡(luò)服務(wù)。例如,小企業(yè)可以對連接到局域網(wǎng)的所有客戶機(jī)保持一個網(wǎng)絡(luò)驅(qū)動器。通 過提供附加存儲或者允許在公共網(wǎng)絡(luò)裝置出現(xiàn)故障的情況下進(jìn)行備份,服務(wù)器端數(shù)據(jù)中心 202可以提供數(shù)據(jù)存儲服務(wù)以補(bǔ)充服務(wù)器端數(shù)據(jù)中心216處的公共網(wǎng)絡(luò)驅(qū)動器。通過另一 個示例,家庭網(wǎng)絡(luò)可以利用媒體中心計算機(jī)向每個本機(jī)客戶機(jī)提供對數(shù)字媒體的訪問。為 了補(bǔ)充媒體中心計算機(jī)的存儲,服務(wù)器端數(shù)據(jù)中心202可以向連接到家庭網(wǎng)絡(luò)的所有裝置 提供虛擬驅(qū)動器。在這點上,虛擬驅(qū)動器可以被構(gòu)造為基于用戶偏愛或其它配置變量,在媒 體中心計算機(jī)與服務(wù)器端數(shù)據(jù)中心202之間分配數(shù)據(jù)的實際存儲。現(xiàn)在參照圖3,將描述計算裝置300的示例性硬件架構(gòu)。當(dāng)參照實現(xiàn)為網(wǎng)絡(luò)上的 客戶機(jī)的計算裝置描述圖3時,下文的描述可應(yīng)用于可用于實現(xiàn)本發(fā)明的服務(wù)器和其它裝 置。此外,本領(lǐng)域技術(shù)人員等將認(rèn)識到,計算裝置300可以是任何數(shù)目的當(dāng)前可用或尚待開 發(fā)的裝置中的任何一個。在它的最基本的結(jié)構(gòu)中,計算裝置300包括通過通信總線306連接 的至少一個中央處理單元(“CPU”)302和系統(tǒng)存儲器304。根據(jù)裝置的確切結(jié)構(gòu)和類型,系統(tǒng)存儲器304可以是易失性或非易失性存儲器,例如只讀存儲器(“ROM”)、隨機(jī)存取存 儲器(“RAM”)、EEPR0M、閃存或相似的存儲器技術(shù)。本領(lǐng)域技術(shù)人員等將認(rèn)識到,系統(tǒng)存儲 器304通常存儲可由CPU 302立即訪問的和/或CPU 302當(dāng)前正在操作的數(shù)據(jù)和/或程序 模塊。在這點上,CPU 302通過支持指令的執(zhí)行,用作計算裝置300的計算中心。如圖3進(jìn)一步所示,計算裝置300包括網(wǎng)絡(luò)接口 310,它包括經(jīng)由網(wǎng)絡(luò)與其它裝置 進(jìn)行通信的一個或多個組件。如在下文中更加詳細(xì)地描述的,本發(fā)明可以訪問基本服務(wù), 這些基本服務(wù)利用網(wǎng)絡(luò)接口 310使用公共網(wǎng)絡(luò)協(xié)議進(jìn)行通信。在圖3所示的示例性實施 例中,計算裝置300還包括存儲介質(zhì)308。然而,如在下文中參照圖4A更加詳細(xì)地描述的, 可以利用不包括用于將數(shù)據(jù)保持到本地存儲介質(zhì)的裝置的計算裝置,訪問網(wǎng)絡(luò)操作系統(tǒng)服 務(wù)。因此,由虛線表示圖3所示的存儲介質(zhì)308,以指示存儲介質(zhì)308是可選的。在任何情 況下,存儲介質(zhì)308可以是易失性的或非易失性的、可移動的或不可移動的,并且是利用能 夠存儲信息的任何技術(shù)實現(xiàn)的,例如為但不限于硬盤驅(qū)動器、固態(tài)驅(qū)動器、CD-R0M、DVD或者 其它盤存儲、磁盒、磁帶、磁盤存儲等。這里使用的術(shù)語“計算機(jī)可讀介質(zhì)”包括以能夠存儲信息(例如,計算機(jī)可讀指 令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù))的任何方法或技術(shù)實現(xiàn)的易失性和非易失性以及可 移動和不可移動介質(zhì)。在這點上,圖3所示的系統(tǒng)存儲器304和存儲介質(zhì)308僅僅是計算 機(jī)可讀介質(zhì)的示例。包括CPU 302、系統(tǒng)存儲器304、通信總線306、存儲介質(zhì)308和網(wǎng)絡(luò)接口 310的計 算裝置的合適實現(xiàn)方式是已知的和可購置的。為了易于例示并且由于對于理解要求保護(hù)的 主題而言不重要,所以圖3沒有示出許多計算裝置的一些典型組件。在這點上,計算裝置 300通常包括例如鍵盤、鼠標(biāo)、麥克風(fēng)、觸摸輸入裝置等的輸入裝置。相似地,計算裝置300 還可以包括例如顯示器、揚聲器、打印機(jī)等的輸出裝置。由于所有這些裝置在現(xiàn)有技術(shù)中是 公知的,所以在這里不對它們進(jìn)行描述?,F(xiàn)在參照圖4A-4C,將描述可實現(xiàn)本發(fā)明的示例性平臺環(huán)境。在這點上,圖4A-4C 示出了計算裝置300 (圖3)的平臺層之間的層級關(guān)系。更具體地講,圖4A-4B所示的計算 裝置300的平臺層包括底層上的硬件平臺402、中間層內(nèi)的機(jī)器操作系統(tǒng)404和頂層上的應(yīng) 用平臺406。當(dāng)然,本領(lǐng)域技術(shù)人員應(yīng)該明白,圖4A-4C所示的計算裝置300的平臺層僅僅 是示例性的。由于在上文中參照圖3描述了計算裝置300的示例性硬件平臺402,所以在這里 將不提供對這些組件的附加描述。然而,如圖4A-4B所示,計算裝置300可以包括機(jī)器操作 系統(tǒng)404。在這點上,機(jī)器操作系統(tǒng)404可以來自被構(gòu)造為利用普通硬件的通用操作系統(tǒng) 族(例如,Microsoft 操作系統(tǒng)、Apple 操作系統(tǒng)、UNIX 操作系統(tǒng)、Linux 操作系統(tǒng)、 Nokia Symbian、Google Android等)中的任何一個。另外,機(jī)器操作系統(tǒng)404可以是 針對利用非普通硬件的專用計算裝置(例如,瘦客戶機(jī)、移動電話、大型機(jī)、超級計算機(jī)等) 構(gòu)造的操作系統(tǒng)。此外,機(jī)器操作系統(tǒng)404可以是例如實時操作系統(tǒng)、嵌入式操作系統(tǒng)等的 被設(shè)計為滿足特定配置參數(shù)的操作系統(tǒng)。機(jī)器操作系統(tǒng)的一個目的是提取訪問硬件資源和以其它方式利用硬件資源的細(xì) 節(jié)。因此,機(jī)器操作系統(tǒng)幾乎都執(zhí)行基本系統(tǒng)任務(wù),例如,管理利用硬件組件的1/0(輸入和 輸出)、存儲器管理、任務(wù)調(diào)度等。在這點上,機(jī)器操作系統(tǒng)通常通過API向應(yīng)用程序提供服務(wù)。通過API提供服務(wù)使應(yīng)用開發(fā)人員不必管理訪問或以其它方式利用基礎(chǔ)計算機(jī)平臺的 實現(xiàn)細(xì)節(jié)。值得注意的是,本發(fā)明的各方面僅僅針對可從所有現(xiàn)代計算機(jī)平臺獲得的基本 服務(wù),利用機(jī)器操作系統(tǒng)404。在這點上,可以利用服務(wù)以與網(wǎng)絡(luò)硬件對接并且利用TCP/IP 協(xié)議建立用于通信的網(wǎng)絡(luò)連接。在圖4A所示的實施例中,計算裝置300包括在應(yīng)用平臺406的頂層上工作的Web 瀏覽器408。如上所述,網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件410可以被傳遞和建立在計算裝置 300上。在圖4A所示的實施例中,客戶機(jī)端組件410被構(gòu)造為在Web瀏覽器408的環(huán)境內(nèi)工 作。在這點上,Web瀏覽器408可以是被構(gòu)造為利用TCP/IP網(wǎng)絡(luò)通信協(xié)議與遠(yuǎn)程裝置進(jìn)行 通信的任何數(shù)目的瀏覽器應(yīng)用,包括但不限于MozillaFirefox 、Microsoft的Internet Explorer ⑧等。在圖4A所示的實施例中,客戶機(jī)端組件410不直接與機(jī)器操作系統(tǒng)404進(jìn)行交 互。代替地,從Web瀏覽器408訪問由客戶機(jī)端組件410使用的基本服務(wù)。本領(lǐng)域技術(shù)人 員等將認(rèn)識到,HTTP是高于TCP/IP的高級協(xié)議,其允許利用統(tǒng)一資源定位符(“URL”)請 求/接收網(wǎng)絡(luò)資源等。通常,Web瀏覽器產(chǎn)生HTTP請求以獲得以標(biāo)記語言(例如,超文本 標(biāo)記語言(HTML)、可擴(kuò)展標(biāo)記語言(XML))進(jìn)行格式化或者利用JS0N(“ JavaScript對象標(biāo) 記”)和/或JavaScript進(jìn)行格式化的Web頁面。在一個實施例中,網(wǎng)絡(luò)操作系統(tǒng)的客戶 機(jī)端組件410利用Web瀏覽器408執(zhí)行使用HTTP的網(wǎng)絡(luò)通信,并且渲染以可從Web瀏覽器 獲得的其它圖形表示技術(shù)之中的HTML表示的圖形元素。在圖4B所示的實施例中,網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件410不利用Web瀏覽器而 直接訪問機(jī)器操作系統(tǒng)404的服務(wù)。本發(fā)明的各方面允許在完全不同類型的計算裝置上傳 遞和建立應(yīng)用。然而,Web瀏覽器通常被構(gòu)造為根據(jù)預(yù)定的頁面尺寸和/或布局來顯示圖 形元素。因此,通用Web瀏覽器可能不太適于在可以實現(xiàn)本發(fā)明的每種類型的計算裝置上 渲染圖形元素。例如,利用Web瀏覽器在小形狀因數(shù)計算裝置上渲染圖形元素可能是有問 題的。在這點上,給定可用形狀因數(shù),Web瀏覽器預(yù)期的預(yù)定頁面尺寸和/或布局可能太大 或者不適當(dāng)。如圖4B所示,網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件410可以被實現(xiàn)為孤立的應(yīng)用或 甚至實現(xiàn)為機(jī)器操作系統(tǒng)。在這種情況下,客戶機(jī)端組件410被構(gòu)造為不利用Web瀏覽器 按照適當(dāng)給出計算裝置300的形狀因數(shù)的方式執(zhí)行圖形渲染。此外,在這個實施例中,從機(jī) 器操作系統(tǒng)404直接獲得用于執(zhí)行網(wǎng)絡(luò)通信的基本服務(wù)或者將該基本服務(wù)內(nèi)置在客戶機(jī) 端組件410中。在圖4C所示的實施例中,計算裝置300不包括傳統(tǒng)的機(jī)器操作系統(tǒng)。代替地,用 于與硬件平臺402交互的基本服務(wù)被內(nèi)置到客戶機(jī)端組件410中。在這個實施例中,客戶 機(jī)端組件410執(zhí)行用于進(jìn)行存儲器管理、任務(wù)調(diào)度等的基本系統(tǒng)任務(wù)。通過將這些類型的 基本機(jī)器服務(wù)內(nèi)置到客戶機(jī)端組件410中,易于定制和部署本發(fā)明的各方面以與特定硬件 平臺一起使用。換言之,客戶機(jī)端組件410可以被構(gòu)造為獨立于由機(jī)器操作系統(tǒng)的提供商 提供的服務(wù)。如上所述,每當(dāng)用戶連接到網(wǎng)絡(luò)時,客戶機(jī)端組件410可以作為網(wǎng)絡(luò)服務(wù)被傳遞 和建立。如圖4A-4C所示,客戶機(jī)端組件410適于實現(xiàn)為孤立應(yīng)用、機(jī)器操作系統(tǒng)或者在 Web瀏覽器的環(huán)境下實現(xiàn)。在所有這些實施例中,服務(wù)器端數(shù)據(jù)中202或216可以向客戶 機(jī)端組件410提供應(yīng)用邏輯作為網(wǎng)絡(luò)的服務(wù)。因此,不具有存儲介質(zhì)(例如,硬盤驅(qū)動器、CD-ROM、DVD等)的有限資源計算裝置可被用于訪問本發(fā)明提供的網(wǎng)絡(luò)操作系統(tǒng)服務(wù)。在 這點上,客戶機(jī)端組件410和其它網(wǎng)絡(luò)操作系統(tǒng)數(shù)據(jù)可以緩存在系統(tǒng)存儲器(R0M、RAM等) 中,而不必保持到本地存儲介質(zhì)。這樣,由于應(yīng)用可以作為服務(wù)傳遞,所以針對網(wǎng)絡(luò)操作系 統(tǒng)啟用的應(yīng)用不需要被“安裝”在計算裝置300上?,F(xiàn)在參照圖5A-5B,描述根據(jù)本發(fā)明如何將公共數(shù)據(jù)模型用于傳遞網(wǎng)絡(luò)操作系統(tǒng) 服務(wù)。網(wǎng)絡(luò)操作系統(tǒng)通過將應(yīng)用組件分離到不同層(即模型、視圖和控制器)中,支持模型 視圖控制器(MVC)設(shè)計模式。在實際的實施例中,XML文檔是在網(wǎng)絡(luò)操作系統(tǒng)環(huán)境中表示 信息的“模型”或公共數(shù)據(jù)格式。從下文的描述可以清楚看出,在這種環(huán)境中利用公共數(shù)據(jù) 模型(例如,XML文檔)產(chǎn)生許多好處。圖5A-5B所示的網(wǎng)絡(luò)環(huán)境500包括服務(wù)器端數(shù)據(jù)中心502,服務(wù)器端數(shù)據(jù)中心502 經(jīng)由網(wǎng)絡(luò)508可通信地連接到客戶機(jī)504和506的每一個。如上所述,網(wǎng)絡(luò)操作系統(tǒng)的客 戶機(jī)端組件可以從服務(wù)器端數(shù)據(jù)中心502動態(tài)地傳遞到客戶機(jī)504和506的每一個,或者 可以安裝在客戶機(jī)504和506的任何一個的本地。在任一情況下,網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī) 端組件提供XML虛擬機(jī)510,XML虛擬機(jī)510解釋或產(chǎn)生要在客戶機(jī)504和506上執(zhí)行XML 結(jié)構(gòu)化應(yīng)用。當(dāng)作為服務(wù)傳遞時,本發(fā)明的各方面通過傳遞來自服務(wù)器端數(shù)據(jù)中心502的 過程XML文檔,使得網(wǎng)絡(luò)操作系統(tǒng)“導(dǎo)入(boot)”。在這點上,過程XML文檔提供描述客戶 機(jī)504和506的啟動序列的邏輯。如在下文中更詳細(xì)地描述的,該過程XML文檔將在XML 虛擬機(jī)510內(nèi)執(zhí)行。啟動序列通常對XML虛擬機(jī)510內(nèi)的一組對象進(jìn)行實例化和操縱以使 得可以執(zhí)行其它應(yīng)用。如上所述,盡管XML可以用作在網(wǎng)絡(luò)操作系統(tǒng)環(huán)境中表示應(yīng)用邏輯和其它數(shù)據(jù)的 “模型”或公共格式,但是也可以使用其它模型、數(shù)據(jù)格式和數(shù)據(jù)結(jié)構(gòu)實現(xiàn)本發(fā)明。在一個 實施例中,提供允許以非常高級別的抽象設(shè)計應(yīng)用的XML編程語言。本領(lǐng)域技術(shù)人員等將 認(rèn)識到,XML是高度結(jié)構(gòu)化、可轉(zhuǎn)移、可變換的語言。這樣,將高抽象等級的應(yīng)用邏輯表示為 XML結(jié)構(gòu)化數(shù)據(jù)是存儲器高效的(memory efficient)并且產(chǎn)生緊湊應(yīng)用。具體地講,提供 用于執(zhí)行在一個或多個良構(gòu)(well-formed)的XML文檔內(nèi)表示的應(yīng)用的邏輯的平臺。根據(jù) MVC設(shè)計模式分離應(yīng)用功能,由此消除由傳統(tǒng)系統(tǒng)執(zhí)行的重復(fù)任務(wù)。因此,與現(xiàn)有系統(tǒng)相比 較,將應(yīng)用代碼從服務(wù)器端數(shù)據(jù)中心502傳送至客戶機(jī)504和506消耗少量的帶寬。此外, 由于利用XML虛擬機(jī)510執(zhí)行應(yīng)用邏輯,所以利用本發(fā)明執(zhí)行應(yīng)用邏輯消除或者顯著降低 消耗的帶寬。直接在客戶機(jī)504或506上處理本來通過執(zhí)行服務(wù)器“往返”而處理的交互, 而不必請求或者依賴于與服務(wù)器端數(shù)據(jù)中心502的網(wǎng)絡(luò)通信。本發(fā)明的一個方面是XML虛擬機(jī)510,它向客戶機(jī)504和506提供用于執(zhí)行和開發(fā) 應(yīng)用的平臺和應(yīng)用編程接口(API)。在這點上,以XML編程語言編寫的高級應(yīng)用代碼被接受 為輸入,并且在客戶機(jī)504和506的本地由XML虛擬機(jī)510執(zhí)行。提供用于將高級應(yīng)用代碼 翻譯或解釋成可解釋代碼、字節(jié)碼或適于在任何平臺上執(zhí)行的其它低級語言的功能。在這 點上,XML虛擬機(jī)510抽象出基礎(chǔ)計算機(jī)平臺和網(wǎng)絡(luò)資源從而使得可以通過相同方式在任 何類型的計算裝置上執(zhí)行應(yīng)用。因此,XML虛擬機(jī)510是完全獨立于平臺和硬件的,并且可 以利用任何數(shù)目的當(dāng)前可用或者還在開發(fā)的編程技術(shù)(例如但不限于Microsoft. Net 、 Java、C、C++、HTML、JavaScript、AJAX、Adobe Flash、Microsoft SilverLight 等)實 現(xiàn)XML虛擬機(jī)510。
現(xiàn)在參照圖5B,將描述如何使用公共數(shù)據(jù)模型來提供網(wǎng)絡(luò)操作系統(tǒng)服務(wù)的附加方 面。圖5B所示的網(wǎng)絡(luò)環(huán)境500包括在上文中參照圖5A描述的相同組件。此外,在服務(wù)器 端數(shù)據(jù)中心502上繪出了提供存儲和其它網(wǎng)絡(luò)服務(wù)的XML文件系統(tǒng)512。因此,當(dāng)正在提供 網(wǎng)絡(luò)操作系統(tǒng)服務(wù)時,客戶機(jī)504和506可以訪問保持在XML文件系統(tǒng)512內(nèi)的數(shù)據(jù)。在 一個方面中,本發(fā)明實現(xiàn)客戶機(jī)端緩存器514,用于管理客戶機(jī)504和506上的文檔和其它 運行時數(shù)據(jù)的存儲。如圖5B所示,XML虛擬機(jī)510易于訪問存儲在客戶機(jī)端緩存器514中 的數(shù)據(jù)。在一個實施例中,即使網(wǎng)絡(luò)連接臨時不可用或者客戶機(jī)504和506離線,客戶機(jī)端 緩存器514也使XML虛擬機(jī)能夠繼續(xù)執(zhí)行應(yīng)用。舉例來講,當(dāng)用戶處于網(wǎng)絡(luò)連接不可用的 公共汽車、火車或者飛機(jī)和其它情況時,在客戶機(jī)504和506上執(zhí)行的應(yīng)用可以繼續(xù)離線工 作。如在下文中更詳細(xì)地描述的,當(dāng)重新建立網(wǎng)絡(luò)連接時,在客戶機(jī)504或506上執(zhí)行的數(shù) 據(jù)變化將被同步到駐留在服務(wù)器端數(shù)據(jù)中心512上的XML文件系統(tǒng)512。如上所述,本發(fā)明提供使得開發(fā)人員可以創(chuàng)建非常高的抽象等級的應(yīng)用的編程語 言。在實際實施例中,這些編程語言包括過程XML語言、用戶界面(“UI”)XML語言和應(yīng)用 包XML語言。以這些編程語言編寫的應(yīng)用代碼適于表示為XML結(jié)構(gòu)化數(shù)據(jù)并且存儲在XML 文檔內(nèi)。在圖5B所示的示例中,過程XML文檔516、用戶界面XML文檔518和應(yīng)用包XML文 檔520分別包含以這些編程語言編寫的應(yīng)用代碼。因此,可以在保持在服務(wù)器端數(shù)據(jù)中心 502處的一個或多個XML文檔內(nèi)定義應(yīng)用。此外,應(yīng)用將通常利用例如同樣保持在服務(wù)器端 數(shù)據(jù)中心502處的數(shù)據(jù)XML文檔522的數(shù)據(jù)文檔。在要求時,客戶機(jī)504和506可以訪問 這些XML文檔516-522從而可以利用XML虛擬機(jī)510執(zhí)行應(yīng)用。在一個實施例中,UI XML語言用于定義應(yīng)用的在MVC設(shè)計模式中的“視圖”。在這 點上,標(biāo)記語言原先開發(fā)用于通過由Web瀏覽器渲染頁面的方式描述Web頁面的布局。標(biāo) 記語言的結(jié)構(gòu)化性質(zhì)允許在不影響Web瀏覽器或其它相關(guān)技術(shù)的實現(xiàn)的情況下修改Web頁 面的外觀。在這點上,UI XML語言根據(jù)符合XML語法的模式(schema),定義應(yīng)用用戶界面 的外觀和行為。利用UI XML語言,開發(fā)人員可以創(chuàng)建具有存在于公共桌面應(yīng)用中的相同圖 形元素(即,菜單、工具條、下拉框等)的應(yīng)用。由于用戶界面邏輯不依賴于特定客戶機(jī)或 者以特定客戶機(jī)所特有的方式描述它的實現(xiàn),所以UI XML語言適于開發(fā)跨不同平臺工作的 用戶界面。此外,在UI XML語言中描述的用戶界面和行為根據(jù)較高抽象等級的XML語法, 根據(jù)MVC設(shè)計模式,描述這些元素。因此,UI XML語言中描述的用戶界面和行為易于進(jìn)行 變換或修改,而不會影響其它系統(tǒng)。對UI XML語言進(jìn)行變換的該能力允許基于一個或多個 變量定制應(yīng)用的功能性。例如,可以根據(jù)正在利用的裝置的類型來定義變換以減小或消除 應(yīng)用功能的某些方面。通過另一個示例,可以在UI XML語言上定義變換以根據(jù)用戶訪問證 明去除或限制某些功能,或者針對不同語言和/或市場對應(yīng)用進(jìn)行本地化。在一個實施例中,過程XML語言用于定義MVC設(shè)計模式中的應(yīng)用的“控制器”組件。 在這點上,過程XML語言使開發(fā)人員可以在一組過程步驟中描述應(yīng)用的邏輯。每個過程步 驟包含近似等同于傳統(tǒng)編程語言中的指令和/或方法調(diào)用的一個或多個操作。在MVC設(shè)計 模式中,過程XML語言用作控制器或者用戶界面(“視圖”)邏輯與XML數(shù)據(jù)(“模型”)之 間的粘結(jié)劑。因此,本發(fā)明的各方面使得能夠利用抽象等級高于傳統(tǒng)編程語言的過程XML 語言描述應(yīng)用邏輯。在這點上,用戶界面邏輯(“視圖”)與過程XML邏輯(“控制器”)完 全分離。結(jié)果,本發(fā)明自動處理包括現(xiàn)有系統(tǒng)中的大多數(shù)應(yīng)用代碼的數(shù)據(jù)處理功能。具體地講,使用過程XML語言,可以在視圖邏輯與數(shù)據(jù)模型之間定義智能數(shù)據(jù)綁定。當(dāng)執(zhí)行應(yīng)用 時,網(wǎng)絡(luò)操作系統(tǒng)自動處理到達(dá)本地緩存的數(shù)據(jù)模型和遠(yuǎn)程文件系統(tǒng)及任何遠(yuǎn)程監(jiān)聽器的 1/0(輸入和輸出)或數(shù)據(jù)。由于開發(fā)人員不提供數(shù)據(jù)處理邏輯,所以更加快速地頻繁開發(fā) 利用過程XML語言創(chuàng)建的應(yīng)用并且它包括少于傳統(tǒng)應(yīng)用的應(yīng)用代碼。如在下文中更詳細(xì)地 描述的,過程XML語言提供參照圖5A描述的以外的用于在網(wǎng)絡(luò)環(huán)境中創(chuàng)建和分布應(yīng)用的其 它優(yōu)點。除了上述的語言以外,還提供了應(yīng)用包XML語言。應(yīng)用包XML語言使開發(fā)人員可 以描述由應(yīng)用利用的資源。在這點上,可以在應(yīng)用包內(nèi)識別定義應(yīng)用的功能性的UI和過程 XML文檔。應(yīng)用包中的邏輯使開發(fā)人員可以以受控和安全的方式封裝應(yīng)用的資源并分發(fā)給 客戶機(jī)。此外,使用應(yīng)用包使得可以按照使XML虛擬機(jī)510能夠保證應(yīng)用內(nèi)安全性的方式 創(chuàng)建應(yīng)用的多個實例。在一個方面中,本發(fā)明提供用于在網(wǎng)絡(luò)環(huán)境中分發(fā)應(yīng)用和軟件更新的改進(jìn)方法。 利用現(xiàn)有系統(tǒng),通常以可執(zhí)行格式分布應(yīng)用,該可執(zhí)行格式當(dāng)被執(zhí)行時將“應(yīng)用,,安裝在計 算裝置上??蓤?zhí)行文件通常將應(yīng)用邏輯表示為特定計算平臺所特有的機(jī)器指令。這樣,可執(zhí) 行文件是應(yīng)用的存儲器密集型表示,其在網(wǎng)絡(luò)環(huán)境中進(jìn)行分發(fā)時消耗相對大量的帶寬。因 此,復(fù)雜和資源密集型系統(tǒng)需要使用可執(zhí)行文件分發(fā)和安裝應(yīng)用。用于在網(wǎng)絡(luò)上分發(fā)應(yīng)用和軟件更新的改進(jìn)方法被集成到網(wǎng)絡(luò)操作系統(tǒng)中。針對網(wǎng) 絡(luò)操作系統(tǒng)啟用的應(yīng)用沒有使用可執(zhí)行文件被“安裝”在客戶機(jī)計算裝置上。代替地,本發(fā) 明允許完全以XML結(jié)構(gòu)化數(shù)據(jù)表示應(yīng)用邏輯。當(dāng)客戶機(jī)建立網(wǎng)絡(luò)連接時,可以從可從互聯(lián) 網(wǎng)上的本地/私有服務(wù)器或任何Web服務(wù)器提供XML文檔的服務(wù)提供商,自動獲得在一個 或多個XML文檔中表示的應(yīng)用。因此,提供用于在網(wǎng)絡(luò)上向客戶機(jī)分發(fā)應(yīng)用的集成框架。此 外,例如“補(bǔ)丁”的更新以及應(yīng)用的較新版本也可以自動傳播至客戶機(jī)。在這點上,由于在 作為網(wǎng)絡(luò)服務(wù)而自動分發(fā)的XML文檔內(nèi)表示應(yīng)用邏輯,所以對XML文檔的任何修改也將作 為網(wǎng)絡(luò)服務(wù)傳播至客戶機(jī)。在網(wǎng)絡(luò)操作系統(tǒng)環(huán)境中,與任何其它數(shù)據(jù)一樣,應(yīng)用邏輯可以在 整個網(wǎng)絡(luò)上進(jìn)行同步。由于XML虛擬機(jī)510和XML文件系統(tǒng)512被構(gòu)造為通過事務(wù)處理來 同步數(shù)據(jù)和協(xié)調(diào)變化,所以可以實時地以協(xié)作方式執(zhí)行對應(yīng)用的改變。例如,可以打開保持 在共享文件夾中的應(yīng)用并在客戶機(jī)504上執(zhí)行。同時,與客戶機(jī)506關(guān)聯(lián)的用戶可以修改 應(yīng)用邏輯并且將變化自動傳播至客戶機(jī)504。將實時實現(xiàn)對應(yīng)用邏輯的改變,因此,當(dāng)改變 發(fā)生時易于在客戶機(jī)504上觀察到這種改變。如上面參照圖5A-5B所述,應(yīng)用的XML表示由服務(wù)提供商分發(fā)并且在使用XML虛 擬機(jī)的客戶機(jī)上執(zhí)行。結(jié)果,客戶機(jī)可以“離線”地執(zhí)行應(yīng)用,而不用要求服務(wù)器端的運行時 處理。在這種情況下,表示一個或多個應(yīng)用的XML文檔被緩存在客戶機(jī)上的存儲器內(nèi)。在 沒有網(wǎng)絡(luò)連接的情況下,XML虛擬機(jī)可以訪問這些緩存的XML文檔以繼續(xù)執(zhí)行應(yīng)用。此外, 當(dāng)重新建立網(wǎng)絡(luò)連接時,在離線時發(fā)生的數(shù)據(jù)更新也被緩存并被發(fā)送至服務(wù)器端。值得注意的是,本發(fā)明提供網(wǎng)絡(luò)操作系統(tǒng)服務(wù),而不要求計算機(jī)資源的虛擬化。在 這點上,用于對計算機(jī)資源進(jìn)行虛擬化的多個技術(shù)正用于提供例如“云”存儲的網(wǎng)絡(luò)服務(wù)。 一般地說,這些虛擬化技術(shù)對通常與遠(yuǎn)離基礎(chǔ)平臺的服務(wù)器關(guān)聯(lián)的計算機(jī)資源進(jìn)行抽象。 所抽象的資源通常封裝在適于從網(wǎng)絡(luò)進(jìn)行訪問的獨立于平臺的接口內(nèi)。在這點上,可抽象 的計算機(jī)資源包括應(yīng)用、硬件、桌面、機(jī)器操作系統(tǒng)等。然而,復(fù)雜系統(tǒng)需要以這種方式抽象和封裝計算機(jī)資源。例如,可能需要對服務(wù)器基礎(chǔ)硬件進(jìn)行模擬并且對性能至少產(chǎn)生一些 影響的虛擬化層。此外,這些虛擬化技術(shù)促進(jìn)了以服務(wù)器為中心的模型,該模型將實現(xiàn)并執(zhí) 行資源的位置轉(zhuǎn)移到服務(wù)器端。當(dāng)向不斷增多的用戶提供網(wǎng)絡(luò)服務(wù)時,在服務(wù)器上增加的 處理和其它需求可能不成比例。因此,利用虛擬化技術(shù)實現(xiàn)網(wǎng)絡(luò)服務(wù)可能需要一個統(tǒng)一數(shù) 據(jù)中心,在該統(tǒng)一數(shù)據(jù)中心內(nèi),需要提供充足的服務(wù)器以保證可以按需獲得服務(wù)。此外,由 于在遠(yuǎn)程服務(wù)器上而非直接在客戶機(jī)上執(zhí)行應(yīng)用邏輯,所以虛擬化技術(shù)消耗更多帶寬并且 導(dǎo)致更慢的用戶體驗。這還將導(dǎo)致當(dāng)網(wǎng)絡(luò)連接發(fā)生故障或者客戶機(jī)“離線”時不能夠獲得 應(yīng)用。在沒有對計算機(jī)資源進(jìn)行虛擬化的情況下實現(xiàn)網(wǎng)絡(luò)服務(wù)提供大量優(yōu)點。在這點 上,提供一種更加可伸縮的架構(gòu),該架構(gòu)使不斷增加的用戶可以訪問網(wǎng)絡(luò)服務(wù)。通過利用 XML虛擬機(jī)在客戶機(jī)端執(zhí)行應(yīng)用,可以更加全面地利用來自客戶機(jī)的處理和其它資源。這種 實現(xiàn)方式提供了一種更加可伸縮的架構(gòu),這是因為在訪問網(wǎng)絡(luò)服務(wù)的用戶的數(shù)目、帶寬使 用量、處理能力、以及可從客戶機(jī)端獲得以執(zhí)行應(yīng)用邏輯的其它資源之間存在自然對應(yīng)關(guān) 系。除了更加可伸縮以外,通過利用XML虛擬機(jī)在客戶機(jī)上執(zhí)行應(yīng)用,使得在“離線”情況 下用戶仍能夠容易地訪問應(yīng)用功能。當(dāng)客戶機(jī)“離線”時,在一個或多個XML文檔內(nèi)表示的 應(yīng)用和用戶數(shù)據(jù)可以存儲在客戶機(jī)端緩存內(nèi)。因此,所有的應(yīng)用的邏輯是可用的并且可以 利用緩存器中的數(shù)據(jù)執(zhí)行,而不管是否存在有效網(wǎng)絡(luò)連接。然而,在“離線”時應(yīng)用不能夠訪 問網(wǎng)絡(luò)資源并且可能需要重新建立網(wǎng)絡(luò)連接以實現(xiàn)所有的應(yīng)用的功能。相反,當(dāng)利用虛擬 化技術(shù)實現(xiàn)網(wǎng)絡(luò)服務(wù)時提供的“離線”功能是更加受限的。在這點上,一些現(xiàn)有的網(wǎng)絡(luò)服務(wù) 執(zhí)行“離線”模式,在這種“離線”模式下,用戶可以繼續(xù)與用于訪問網(wǎng)絡(luò)服務(wù)的應(yīng)用進(jìn)行交 互。然而,為了提供這個功能,在客戶機(jī)上分布并安裝應(yīng)用的可執(zhí)行的或其它低級表示。當(dāng) 用戶“離線”時,在本地執(zhí)行應(yīng)用的該低級表示。然而,在客戶機(jī)上安裝應(yīng)用以提供這種“離 線”功能可能不是可行的或者方便的。例如,有限資源計算裝置可能沒有足夠的存儲空間用 以“安裝”應(yīng)用的可執(zhí)行的或其它低級表示。更一般地講,在無有效網(wǎng)絡(luò)連接的情況下在客 戶機(jī)上可用的功能限于已安裝在本地的那些應(yīng)用。然而,客戶機(jī)可能沒有足夠的計算資源 (存儲器、內(nèi)存、帶寬等)來安裝使用應(yīng)用的可執(zhí)行的或其它低級表示的每個期望應(yīng)用。在一個方面中,本發(fā)明實現(xiàn)了用于在移動、無線或不穩(wěn)定網(wǎng)絡(luò)上訪問網(wǎng)絡(luò)服務(wù)的 改進(jìn)方法。本領(lǐng)域技術(shù)人員將認(rèn)識到,與有線網(wǎng)絡(luò)相比,移動或無線網(wǎng)絡(luò)較不可靠并且?guī)?更加受到限制。通過提供將應(yīng)用邏輯表示為XML結(jié)構(gòu)化數(shù)據(jù)的編程語言和被配置為自動執(zhí) 行重復(fù)數(shù)據(jù)處理功能的XML虛擬機(jī)510,能夠產(chǎn)生高度緊湊和存儲器高效的應(yīng)用。在這點 上,當(dāng)實現(xiàn)應(yīng)用邏輯時,應(yīng)用能夠共享XML虛擬機(jī)510的功能以及重用對象。結(jié)果,與現(xiàn)有 的應(yīng)用分布系統(tǒng)相比,分布針對網(wǎng)絡(luò)操作系統(tǒng)啟用的應(yīng)用消耗一小部分的帶寬。此外,本發(fā) 明使應(yīng)用的XML表示可以保持在客戶機(jī)端緩存器中并且利用XML虛擬機(jī)510在本地執(zhí)行。 由于應(yīng)用邏輯和數(shù)據(jù)可以緩存在本地,所以連續(xù)網(wǎng)絡(luò)連接不是必需的。代替地,本發(fā)明非常 適于在網(wǎng)絡(luò)連接可能是間歇性的無線網(wǎng)絡(luò)上提供對網(wǎng)絡(luò)服務(wù)的訪問。此外,由于在本地執(zhí) 行應(yīng)用,所以可以提供具有一定服務(wù)保障的更加可靠的網(wǎng)絡(luò)服務(wù)。例如,本發(fā)明還非常適于 提供企業(yè)類應(yīng)用作為例如互聯(lián)網(wǎng)的網(wǎng)絡(luò)的服務(wù)。在這點上,本領(lǐng)域技術(shù)人員等將認(rèn)識到,即 使網(wǎng)絡(luò)連接暫時不可用或者互聯(lián)網(wǎng)連接的質(zhì)量影響對網(wǎng)絡(luò)的訪問,仍需要可以在企業(yè)內(nèi)部 訪問企業(yè)類應(yīng)用。這里所述的發(fā)明解決了這個問題。
15
網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件本領(lǐng)域技術(shù)人員等將認(rèn)識到,XML是可擴(kuò)展語言,其提供了創(chuàng)建附加語言的基礎(chǔ)。 XML文檔具有層級樹結(jié)構(gòu),其中,樹根標(biāo)識文檔,文檔中的其它節(jié)點是根的后代。樹的節(jié)點可 以包含文檔內(nèi)容以及定義內(nèi)容的結(jié)構(gòu)的數(shù)據(jù)。除了由XML強(qiáng)加的語法以外,可以定義元素 和它們的關(guān)聯(lián)屬性以建立對XML文檔的結(jié)構(gòu)和內(nèi)容的其它語義約束。在一個實施例中,本 發(fā)明實現(xiàn)對由XML強(qiáng)加的語法應(yīng)用附加語義約束的模式和詞匯表。利用本發(fā)明提供的XML 語言,開發(fā)人員根據(jù)MVC設(shè)計模式按語義表示應(yīng)用的邏輯。MVC設(shè)計模式最初以Smalltalk編程語言實現(xiàn)并且從此被用于其它工程環(huán)境中。 本領(lǐng)域技術(shù)人員等將認(rèn)識到,MVC設(shè)計模式僅僅是用于描述用于將功能分離到多個層的一 般架構(gòu)模式。這樣,在各種環(huán)境下實現(xiàn)MVC設(shè)計模式以消除依賴性和支持平臺獨立性。舉 例來講,用于存儲HTML數(shù)據(jù)、收集動態(tài)Web頁面內(nèi)容和渲染W(wǎng)eb頁面的現(xiàn)有系統(tǒng)被頻繁描 述為符合MVC設(shè)計模式。此外,根據(jù)MVC設(shè)計模式,用于創(chuàng)建Web應(yīng)用的開發(fā)環(huán)境可以將功 能分離到多個層中。在這種環(huán)境下,Web應(yīng)用的圖形用戶界面與數(shù)據(jù)模型分離,以支持更加 模塊化的應(yīng)用開發(fā)。然而,這些現(xiàn)有系統(tǒng)實現(xiàn)功能并利用比本發(fā)明更加域特定的基礎(chǔ)數(shù)據(jù) 模型。與現(xiàn)有系統(tǒng)不同,本發(fā)明的各方面允許根據(jù)MVC設(shè)計模式創(chuàng)建任何類型的應(yīng)用。 換言之,用戶界面與邏輯和基礎(chǔ)數(shù)據(jù)模型的分離不限于Web應(yīng)用、Web頁面等??梢栽诰W(wǎng)絡(luò) 操作系統(tǒng)環(huán)境中創(chuàng)建和執(zhí)行多實例應(yīng)用,使每個實例潛在支持多個視圖。此外,這些應(yīng)用實 例均操縱來自公共數(shù)據(jù)模型的數(shù)據(jù)。由于開發(fā)人員不必提供用于設(shè)置和訪問來自數(shù)據(jù)模型 的數(shù)據(jù)以及管理用戶界面(“視圖”)與數(shù)據(jù)模型之間的同步和數(shù)據(jù)交換的程序邏輯,所以 大幅簡化了應(yīng)用開發(fā)?,F(xiàn)在參照圖6A-6B,將描述用于示出本發(fā)明的各方面的示例性過程和UI XML文 檔。圖6A示出了提供“MyTasks”應(yīng)用的控制器邏輯的語義描述的示例性過程XML文檔 600 ( "MyTasks. xml”)。如圖 6A 所示,MyTasks. xml 文檔 600 包括在 “〈trigger〉” XML 元 素內(nèi)定義的觸發(fā)器602。這個觸發(fā)器602保持一組屬性,包括視圖、組件、事件和步驟屬性。 此外,以過程XML語言編寫的應(yīng)用邏輯可以定義過程步驟的序列。在這個示例中,MyTasks. xml文檔600包括由“<step>”XML元素描述的多個過程步驟604-610。如圖6A所示,兩個 屬性與過程步驟604-610的每一個關(guān)聯(lián),包括編號屬性(“id”)和名稱屬性。在每個過程 步驟內(nèi),定義至少一個操作。舉例來講,與名稱屬性“InitializeApplication” (初始化應(yīng) 用)關(guān)聯(lián)的過程步驟604包括由“〈operation〉”XML元素描述的三個操作612-616。圖6B示出了提供MyTasks應(yīng)用的示例性“視圖”邏輯的語義描述的UI XML文 檔(“MyTasks_gui. xml”)的摘錄。如圖 6B 所示,MyTasks_gui. xml 文檔 650 包括由 “〈button〉”XML元素描述的兩個按鈕組件652和654。每個按鈕元素保持一組屬性,包括名 稱、文本和寬度屬性。此外,MyTasks_gui. xml文檔650包括由“〈input〉” XML元素描述的 兩個輸入組件656和658。在這個示例中,輸入組件656和658保持一組屬性,包括名稱、寬 度和高度屬性。當(dāng)啟動應(yīng)用時,用作XML虛擬機(jī)的本發(fā)明的各方面可以開始解釋MyTasks. xml文 檔600。在一個實施例中,應(yīng)用邏輯一次被解釋一條語句,而非在執(zhí)行之前被全部編譯。然 而,在另選的實施例中,以本發(fā)明提供的XML語言編寫的應(yīng)用代碼可以編譯成可執(zhí)行代碼或字節(jié)碼。在這個示例中,MyTasks. xml文檔600定義了觸發(fā)器602,觸發(fā)器602識別將響 應(yīng)于觸發(fā)器的激活而執(zhí)行的應(yīng)用中的過程步驟606。最初,在所示實施例中當(dāng)XML虛擬機(jī)開 始解釋MyTasks. xml文檔600時,對觸發(fā)器602進(jìn)行登記從而使得響應(yīng)于觸發(fā)器的激活,流 程可以導(dǎo)向適當(dāng)?shù)倪^程步驟606。在圖6A所示的MyTasks. xml文檔600中,應(yīng)用定義名稱屬性為“Initialize Application”的缺省過程步驟604,其中,一旦已登記了應(yīng)用中的任何觸發(fā)器,則控制流程 被導(dǎo)向該缺省過程步驟604。名稱屬性為“open”以及值屬性為“apps/mytasks_gui. xml” 的操作612是將執(zhí)行的初始化應(yīng)用過程步驟604中的第一操作。執(zhí)行打開(Open)操作 612將使得在計算機(jī)顯示器上解釋并渲染在MyTaSkS_gui. xml文檔650內(nèi)表示的應(yīng)用的 視圖。在這個示例中,應(yīng)用的視圖包括在MyTaSkS_gui. xml文檔650內(nèi)按語義定義的組件 652-658。一旦打開了 MyTasks_gui. xml文檔650,則將執(zhí)行名稱屬性為“action”并且值屬 性為“測yTasks”的操作614。一般地說,一旦打開了 MyTasks_gui. xml文檔650,則執(zhí)行動 作(Action)操作614將從視圖中隱藏按鈕組件654?,F(xiàn)在參照圖7A-7C,將描述與MyTasks應(yīng)用關(guān)聯(lián)的示例性圖形顯示700。具體地講, 圖7A所示的圖形顯示700包括與按語義在MyTaSkS_gui. xml文檔650內(nèi)描述的按鈕組件 652-654對應(yīng)的Button 1組件702和Button2組件704。此外,圖形顯示700包括分別與輸 入組件656-658的語義描述對應(yīng)的Input3組件706和Input4組件708。在這點上,圖7A 中的圖形顯示700表示MyTasks_gui. xml文檔650的可視描述。如上所述,當(dāng)啟動MyTasks 應(yīng)用時,MyTasks. xml文檔600中的過程邏輯使Button2組件704被隱藏。因此,在圖7A中 用虛線描繪BUtton2組件704以指示在執(zhí)行動作操作614后最初用戶看不見BUtton2組件 704。一般地說,示例性MyTasks應(yīng)用被構(gòu)造為顯示存儲在“data/tasks, xml”文檔內(nèi)的 任務(wù)描述的列表。更具體地講,當(dāng)啟動應(yīng)用時,任務(wù)描述將缺省地顯示在Input3組件706 內(nèi)。在一個方面中,用戶可以通過直接與Input3組件706進(jìn)行交互以及改變?nèi)蝿?wù)描述的條 目來修改任務(wù)列表。在另一個方面中,用戶可以向Input4組件708輸入新的任務(wù)描述并且 通過選擇Buttonl組件702來激活觸發(fā)器602。如果接收到有效輸入,則新任務(wù)描述被添 加到“data/tasks, xml”文檔并且由Input3組件706自動顯示。相反,如果用戶僅僅選擇 Button 1組件702而沒有向Input4組件708提供任何輸入,則Button2組件704顯示請求 用戶提供有效任務(wù)描述的文本。再次參照圖6A,名稱屬性為“bind”并且值屬性為“data/tasks, xml”的操作616 是將執(zhí)行的初始化應(yīng)用過程步驟604中的下一個操作。一般地說,執(zhí)行綁定(Bind)操作 616,將使Input3組件706變成顯示任務(wù)描述的列表的數(shù)據(jù)綁定組件。具體地講,在綁定操 作616及其關(guān)聯(lián)的組件元素618中提供的邏輯將Input3組件706綁定到在“data/tasks, xml”文檔內(nèi)表示的任務(wù)描述的列表。在這個示例中,在“data/tasks, xml”文檔內(nèi)任務(wù)被定 義為保持關(guān)聯(lián)的描述屬性的元素。由組件元素618提供的邏輯選擇任務(wù)元素的“/tasks/ task/@description”屬性用于在Input3組件706中顯示。如圖6A所示,綁定操作616是 執(zhí)行的初始化應(yīng)用過程步驟604中的最后一個操作?,F(xiàn)在參照圖7B,將描述在執(zhí)行綁定操作616后的圖形顯示700的狀態(tài)。在這點上, 圖7B示出了在上文中參照圖7A描述的相同的按鈕和輸入組件702-708。然而,在執(zhí)行綁定操作616后,由Input3組件706顯示一組任務(wù)描述。具體地講,Input3組件706被綁定到 在“data/tasks, xml”文檔內(nèi)定義的任務(wù)元素的描述屬性。因此,在執(zhí)行綁定操作616后, 在數(shù)據(jù)模型(例如,文檔對象710)中表示的分配到這些任務(wù)描述的值顯示在Input3組件 706 內(nèi)。當(dāng)執(zhí)行初始化應(yīng)用過程步驟604時,直到激活觸發(fā)器才恢復(fù)在MyTasks. xml文檔 600中表示的應(yīng)用邏輯的執(zhí)行。在這個示例中,MyTasks應(yīng)用定義觸發(fā)器602,該觸發(fā)器602 在Buttonl組件702經(jīng)歷“選擇”事件時,將執(zhí)行流程導(dǎo)向過程步驟“2”。因此,響應(yīng)于選擇 Buttonl組件702,觸發(fā)器602將執(zhí)行流程導(dǎo)向標(biāo)題為“Press Button”(按下按鈕)的過 程步驟606。在這個示例中,名稱屬性為“decision”并且值屬性為“#MyTasks#input4”的 操作620是將執(zhí)行的按下按鈕過程步驟606中的操作。一般地說,當(dāng)選擇了 Buttonl組件 702時,判斷(Decision)操作620執(zhí)行測試以確定是否有任何文本輸入到Input4組件708 內(nèi)。當(dāng)選擇了 Buttonl組件702時,如果文本輸入到Input4組件708內(nèi),則“<when>”XML 元素622內(nèi)的邏輯把執(zhí)行流程導(dǎo)向過程步驟608。相反,當(dāng)發(fā)生觸發(fā)事件時,如果沒有文本 輸入到Input4組件708,則判斷操作620使執(zhí)行流程繼續(xù)進(jìn)行到過程步驟610。在這個示例中,當(dāng)文本輸入到Input4組件708時,執(zhí)行流程進(jìn)行到“Add Task”(添 加任務(wù))過程步驟608。因此,名稱屬性為"change"并且值屬性為"data/tasks, xml”的 操作624是將執(zhí)行的下一個操作。改變(Change)操作624將使具有適當(dāng)描述屬性的新任 務(wù)元素加入到“data/tasks, xml”文檔。在這點上,改變操作624內(nèi)的“〈store〉” XML元素 626提供使在Input4組件708內(nèi)輸入的文本存儲在新任務(wù)的描述屬性中的邏輯?,F(xiàn)在參照圖7C描述在輸入新任務(wù)和選擇Buttonl組件702后的圖形顯示700的狀 態(tài)。因此,圖7C包括在上文中參照圖7A-7B描述的相同的組件702-708。在這個示例中,用 戶將文本“purchase airlinetickets”輸入到由Input4組件708提供的文本區(qū)域。上述的 改變操作624將這個任務(wù)描述的值添加到利用對應(yīng)文檔對象710的“data/tasks, xml”文 檔。由于Input3組件706被綁定到受改變操作624影響的描述屬性的選擇,所以由Input3 組件706顯示的任務(wù)的列表自動在文檔對象710中進(jìn)行更新。換言之,開發(fā)人員不必提供 用于處理Input3組件706與數(shù)據(jù)模型之間的同步和數(shù)據(jù)交換的應(yīng)用代碼。在一個方面中,用戶可以向Input4組件708輸入新任務(wù)描述并且通過選擇 Buttonl組件702更新任務(wù)列表。此外,用戶可以通過直接與顯示在Input3組件706中的 條目進(jìn)行交互來修改任務(wù)描述。舉例來講,用戶可以刪除當(dāng)前正由Input3組件706顯示的 “更新表示”任務(wù)描述。由于定義了數(shù)據(jù)綁定,所以刪除將自動傳播至“data/tasks, xml”文 檔。在這點上,一個或多個組件和/或本地或遠(yuǎn)程應(yīng)用可以是對于在“data/tasks, xml”文 檔內(nèi)表示的任務(wù)描述的數(shù)據(jù)監(jiān)聽器。響應(yīng)于正刪除“更新表示”任務(wù),將由文檔對象710通 知和更新本地數(shù)據(jù)監(jiān)聽器的每一個。值得注意的是,任務(wù)的刪除將傳播至基礎(chǔ)數(shù)據(jù)模型并 且然后經(jīng)由網(wǎng)絡(luò)傳播至任何數(shù)據(jù)監(jiān)聽器,而不需要開發(fā)人員提供用于處理數(shù)據(jù)更新的應(yīng)用 代碼。再次參照圖6A,如果當(dāng)選擇Buttonl組件702時沒有向Input4組件708輸入文本, 則執(zhí)行流程進(jìn)行到“Show Button”(顯示按鈕)過程步驟610。因此,名稱屬性為“action” 并且值屬性為“SMyTasks”的操作628是將執(zhí)行的下一個操作。一般地說,執(zhí)行這個動作操 作628將顯示初始隱藏(圖7A)的Button2組件704。如在MyTasks_gui. xml文檔650內(nèi)
18表示的,Button2組件704將顯示請求用戶提供有效任務(wù)描述的文本串。本領(lǐng)域技術(shù)人員等將會明白,參照圖6A-7C描述的MyTasks應(yīng)用是可用于示出本 發(fā)明的各方面的一個應(yīng)用的高度簡化示例??梢栽诰W(wǎng)絡(luò)操作系統(tǒng)環(huán)境中創(chuàng)建和執(zhí)行另外的 應(yīng)用。因此,參照這里的MyTasks應(yīng)用所舉的示例和進(jìn)行的描述應(yīng)該解釋為是示例性的。用于開發(fā)現(xiàn)代應(yīng)用的編程語言(C++、JaVaTM、Pyth0nTM等)具有在應(yīng)用的過程邏輯 內(nèi)創(chuàng)建和保持的用戶界面組件。換言之,開發(fā)人員明確地提供創(chuàng)建和設(shè)置用戶界面組件上 的數(shù)據(jù)的邏輯。此外,開發(fā)人員在應(yīng)用的過程邏輯內(nèi)提供用于監(jiān)聽事件以及監(jiān)視影響應(yīng)用 的用戶界面的數(shù)據(jù)變化的代碼。這些事件監(jiān)聽器使數(shù)據(jù)變化保持在應(yīng)用的用戶界面與域特 定數(shù)據(jù)結(jié)構(gòu)之間。然而,應(yīng)用的用戶界面與數(shù)據(jù)結(jié)構(gòu)之間的輸入/輸出不是標(biāo)準(zhǔn)化的。因 此,應(yīng)用的用戶界面上的數(shù)據(jù)的表示與如何在數(shù)據(jù)結(jié)構(gòu)內(nèi)表示數(shù)據(jù)緊密耦合。結(jié)果,對用戶 界面或數(shù)據(jù)結(jié)構(gòu)的修改會影響應(yīng)用的其它方面。網(wǎng)絡(luò)操作系統(tǒng)提供用戶界面與基礎(chǔ)數(shù)據(jù)模型之間的自動通信路徑從而支持符合 MVC設(shè)計模式的應(yīng)用的執(zhí)行。在這點上,開發(fā)人員可以定義用戶界面組件(在其它編程環(huán)境 語言中有時候稱作控件或小工具(widget))與基礎(chǔ)數(shù)據(jù)模型之間的綁定。本發(fā)明管理對基 礎(chǔ)數(shù)據(jù)模型的數(shù)據(jù)更新和影響組件的數(shù)據(jù)變化的協(xié)調(diào),由此簡化應(yīng)用開發(fā)。如MyTasks應(yīng) 用的說明所示,如果在基礎(chǔ)數(shù)據(jù)文檔內(nèi)表示的數(shù)據(jù)發(fā)生變化,則自動更新監(jiān)聽變化的任何 數(shù)據(jù)綁定組件。更具體地講,MyTasks應(yīng)用中的綁定操作616提供用于將Input3組件706 綁定到在數(shù)據(jù)模型內(nèi)表示的一組數(shù)據(jù)的應(yīng)用邏輯。因此,從基礎(chǔ)數(shù)據(jù)XML文檔刪除“更新表 示”任務(wù)被自動傳播至包括在網(wǎng)絡(luò)上監(jiān)聽同一文檔的應(yīng)用和組件的監(jiān)聽組件。此外,數(shù)據(jù) 綁定便于本地用戶界面組件之間以及網(wǎng)絡(luò)上的遠(yuǎn)程客戶機(jī)之間的數(shù)據(jù)的交換和同步。舉例 來講,MyTasks應(yīng)用中的改變操作624提供利用向Input4組件708輸入的文本對基礎(chǔ)數(shù)據(jù) 文檔進(jìn)行更新的應(yīng)用邏輯。在這點上,Input3組件706監(jiān)聽基礎(chǔ)數(shù)據(jù)文檔的變化。當(dāng)文本 輸入到Input4組件708并且激活觸發(fā)器602時,對Input3組件706的可視顯示進(jìn)行更新。 在這個示例中,數(shù)據(jù)綁定和改變操作624的組合使得能夠在用戶界面組件之間進(jìn)行數(shù)據(jù)的 同步交換。如上所述,綁定提供用戶界面組件與基礎(chǔ)數(shù)據(jù)模型之間的自動通信路徑。在一個 方面中,本發(fā)明允許在用戶界面組件之間共享和/或轉(zhuǎn)移綁定。在圖8A-8B中表示本發(fā)明的 這個方面,其中,圖8A-8B示出了被構(gòu)造為顯示用戶的文件系統(tǒng)文件夾的不同可視表示的 組件800和850。具體地講,圖8A示出了被構(gòu)造為以樹結(jié)構(gòu)顯示用戶的文件夾的組件800。 如果用戶產(chǎn)生請求將文件夾顯示為列表的輸入,則組件800的到基礎(chǔ)數(shù)據(jù)的數(shù)據(jù)綁定可以 轉(zhuǎn)移到組件850,這將還轉(zhuǎn)移組件800的狀態(tài)。這個示例示出本發(fā)明從數(shù)據(jù)模型的結(jié)構(gòu)中消 除了數(shù)據(jù)的表示和處理之間的依賴性。此外,數(shù)據(jù)綁定的轉(zhuǎn)移和共享不僅根據(jù)MVC設(shè)計模 式提供應(yīng)用層之間的自動通信路徑,還提供用于開發(fā)應(yīng)用的增強(qiáng)平臺。本發(fā)明提供一組用戶界面組件(即,按鈕、輸入框、下拉框、顯示面板等)。為了便 于應(yīng)用開發(fā),標(biāo)準(zhǔn)框架允許從有關(guān)的用戶界面組件建立應(yīng)用。在這點上,用戶界面組件可以 從利用UI XML語言的父組件繼承屬性并且因此進(jìn)行組合以表達(dá)更加復(fù)雜的用戶界面元素。 結(jié)果,應(yīng)用可以包括以層級結(jié)構(gòu)進(jìn)行組織的一組相關(guān)組件,其中,每個組件知道相關(guān)組件。 另選地,可以定義單個用戶界面組件以表示應(yīng)用的整個視圖。此外,提供組件API (應(yīng)用編 程接口),其允許開發(fā)人員創(chuàng)建與本發(fā)明一起使用的新的用戶界面組件。
在一個方面中,本發(fā)明支持使用過程XML語言的面向過程應(yīng)用的開發(fā)。在這點上, MyTasks. xml文檔600內(nèi)的每個過程步驟表示過程執(zhí)行流程的一部分。過程步驟內(nèi)的操作 可以定義正執(zhí)行的應(yīng)用的狀態(tài)變化。通過對描述應(yīng)用的運行時狀態(tài)的數(shù)據(jù)的受控訪問以及 通過利用消息發(fā)送端口,支持過程之間的通信。開發(fā)人員可以以利用全局命名對象的表達(dá) 式來引用視圖、組件和其它運行時變量。在這點上,提供引用和操縱對象的表達(dá)式語言或公 共方式。一般地說,表達(dá)式和過程XML語言共同對執(zhí)行多實例應(yīng)用的復(fù)雜性進(jìn)行抽象。代 替地,開發(fā)人員可以創(chuàng)建應(yīng)用,就好像該應(yīng)用僅存在于單個執(zhí)行實例中一樣。如MyTasks. xml文檔600所示(圖6A),表達(dá)式被構(gòu)造為與XML語法兼容并且可以被劃界或被標(biāo)記以用 于其它編程語言內(nèi)。當(dāng)對一表達(dá)式求值時,XML虛擬機(jī)根據(jù)接收的表達(dá)式執(zhí)行識別、合并以 及操縱被請求數(shù)據(jù)的工作。結(jié)果,即使正在執(zhí)行應(yīng)用的多個運行時實例,開發(fā)人員仍可以在 應(yīng)用代碼中利用全局命名對象。本發(fā)明提供在可進(jìn)行“對象”實例化的多個“類”中實現(xiàn)的客戶機(jī)端組件。換言之, 可以利用例如使用面向?qū)ο缶幊烫卣鞯腏avaScript的編程語言實現(xiàn)客戶機(jī)端組件。另選 地,可以利用例如C編程語言的非面向?qū)ο笳Z言或者結(jié)構(gòu)可表示為對象的任何其它語言實 現(xiàn)本發(fā)明。本領(lǐng)域技術(shù)人員應(yīng)該明白,從類創(chuàng)建的對象通常包括封裝或隱藏實現(xiàn)對象的功 能的算法的方法。替代暴露這些實現(xiàn)細(xì)節(jié),對象提供其它模塊可以用來訪問其功能的接口 作為抽象。因此,在利用面向?qū)ο蠛屠^承的對象的環(huán)境中出現(xiàn)根據(jù)本發(fā)明的一個實施例實 現(xiàn)XML虛擬機(jī)的功能。如上所述,客戶機(jī)端組件用作執(zhí)行以符合XML語法的語言編寫的應(yīng)用的XML虛擬 機(jī)。在實際實施例中,XML虛擬機(jī)被構(gòu)造為執(zhí)行以過程建模語言(例如,過程XML語言)、用 戶界面建模語言(例如,UI XML語言)和應(yīng)用包建模語言(例如,應(yīng)用包XML語言)按語 義描述的應(yīng)用代碼。值得注意的是,可以對XML虛擬機(jī)進(jìn)行擴(kuò)展以理解附加XML語言或基 于XML的應(yīng)用,從而提供這里未描述的功能。此外,應(yīng)該明白,不使用這里所述的XML語言 執(zhí)行編程邏輯,其它實施例也是可行的。例如,JavaScript API或庫能夠用于建立實現(xiàn)相 同功能的應(yīng)用。因此,利用基于XML的語言僅僅是示例性的,并且可以利用傳統(tǒng)的編程語言 實現(xiàn)本發(fā)明。在任何給定時刻,由XML虛擬機(jī)解釋的應(yīng)用可以被理解為處于特定的執(zhí)行狀態(tài)。 過程XML語言使開發(fā)人員可以定義在狀態(tài)之間進(jìn)行轉(zhuǎn)變的條件。除此以外,XML虛擬機(jī)通 過下面的操作實現(xiàn)用于管理狀態(tài)轉(zhuǎn)變的功能(1)定義描述執(zhí)行中應(yīng)用的狀態(tài)的一組運行 時變量/對象;(2)執(zhí)行當(dāng)應(yīng)用狀態(tài)將發(fā)生轉(zhuǎn)變時進(jìn)行驅(qū)動的邏輯;以及(3)提供實現(xiàn)應(yīng)用 狀態(tài)的適當(dāng)變化的低級構(gòu)造?,F(xiàn)在參照圖9,將描述實現(xiàn)XML虛擬機(jī)的客戶機(jī)端組件以及類和對象的各方面???戶機(jī)端組件包括多個“管理器”或?qū)ο?,這些“管理器”或?qū)ο笸ǔT诰W(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī) 端組件的啟動時被實例化并且在整個用戶會話期間保持活躍。如上所述,根據(jù)所示實施例 的由客戶機(jī)端組件提供的對象利用面向?qū)ο蠛屠^承。在這點上,可對系統(tǒng)環(huán)境對象902進(jìn) 行實例化,它用作在運行時嵌入管理器和其它對象的占位符。因此,系統(tǒng)環(huán)境對象902可用 于對圖9所示的管理器(包括應(yīng)用管理器904、過程管理器906、視圖管理器908、事務(wù)管理 器910、文檔管理器912和事件管理器914)進(jìn)行實例化。每個管理器通常執(zhí)行通過可從系統(tǒng)環(huán)境對象902訪問的接口暴露的特定任務(wù)。因
20此,本發(fā)明實現(xiàn)的其它對象可以調(diào)用和利用管理器的功能來執(zhí)行期望任務(wù)。例如,可以調(diào)用 過程管理器906以對執(zhí)行應(yīng)用的過程代碼的準(zhǔn)備時的過程對象進(jìn)行實例化。在另一個方 面中,管理器允許在提供應(yīng)用內(nèi)和過程內(nèi)安全性的基礎(chǔ)的對象之間執(zhí)行受控的實例化和通 信。盡管參照特定管理器和管理器保持的關(guān)聯(lián)對象提供這里的描述,但是本領(lǐng)域技術(shù)人員 等將認(rèn)識到,將功能封裝到特定類型的管理器中是示例性的。在其它實施例中,可以在不進(jìn) 行封裝的情況下執(zhí)行關(guān)于特定管理器及其對應(yīng)對象在這里中描述的功能,或者可以以與所 述方式不同的方式封裝這些功能。此外,這里所述的面向?qū)ο蟮木幊陶Z言和特征僅僅是說 明性的,在不脫離要求的主題的范圍的情況下可以利用其它工具。如圖9所示,客戶機(jī)端組件包括提供用于管理應(yīng)用的生命周期的邏輯的應(yīng)用管理 器904。在這點上,應(yīng)用管理器904暴露用于創(chuàng)建、打開和終止應(yīng)用的功能??梢栽趦?nèi)部將 應(yīng)用表示為向應(yīng)用管理器904進(jìn)行“登記”的應(yīng)用對象。當(dāng)調(diào)度執(zhí)行應(yīng)用時,可以調(diào)用應(yīng)用 管理器904以創(chuàng)建對應(yīng)的應(yīng)用對象。因此,應(yīng)用管理器904創(chuàng)建并保持對系統(tǒng)內(nèi)的所有活 躍應(yīng)用的引用。如上所述,開發(fā)人員可以按語義在使用應(yīng)用包XML語言的應(yīng)用包內(nèi)描述一個或多 個應(yīng)用的屬性。在應(yīng)用包內(nèi)描述的屬性包括對由特定應(yīng)用用來執(zhí)行的資源和系統(tǒng)設(shè)置的引 用。應(yīng)用包內(nèi)識別的資源通常包括提供應(yīng)用的視圖和過程邏輯的語義描述的XML文檔。在 一個方面中,應(yīng)用管理器904被構(gòu)造為當(dāng)調(diào)度執(zhí)行應(yīng)用時從適當(dāng)應(yīng)用包提取信息并且獲得 識別的資源。另選地,包括UI和過程XML文檔的任何XML數(shù)據(jù)資源可以直接嵌入到應(yīng)用包 內(nèi)。在另一個方面中,由應(yīng)用管理器904實現(xiàn)當(dāng)客戶機(jī)“離線”時使得應(yīng)用可以繼續(xù)執(zhí)行的 功能。在這點上,應(yīng)用管理器904可以引用適當(dāng)?shù)膽?yīng)用包以識別由對應(yīng)應(yīng)用利用的資源。然 后,從適當(dāng)?shù)姆?wù)提供商識別和獲得還沒有緩存在本地的任何資源。圖9所示的過程管理器906負(fù)責(zé)創(chuàng)建和保持用于執(zhí)行應(yīng)用中的過程步驟的內(nèi)部過 程對象。如上所述,以過程XML語言編寫的應(yīng)用邏輯可以定義過程步驟的序列,每個過程步 驟均包括一個或多個操作。由過程管理器906創(chuàng)建和保持的過程對象負(fù)責(zé)循環(huán)遍歷并調(diào)用 一個或多個低級構(gòu)造或操作處理器。與傳統(tǒng)平臺不同,網(wǎng)絡(luò)操作系統(tǒng)的概念基礎(chǔ)是基于對 低級構(gòu)造進(jìn)行建模的面向過程操作。從這些低級構(gòu)造構(gòu)建例如模型工作流、產(chǎn)品生命周期 管理、用戶協(xié)作等的更高級構(gòu)造。舉例來講,本發(fā)明提供的對低級構(gòu)造進(jìn)行建模的操作處理 器的集合包括但不限于打開操作處理器、綁定操作處理器、改變操作處理器、判斷操作處 理器等。此外,提供操作API從而使得開發(fā)人員可以定義另外的操作處理器。通過這種方 式,可以擴(kuò)展XML虛擬機(jī)以支持和執(zhí)行另外的低級構(gòu)造。另一方面,可用于應(yīng)用中的操作限 于根據(jù)操作API創(chuàng)建或者由本發(fā)明提供的那些操作。結(jié)果,由于僅僅有限和良定義的操作 集合可用于執(zhí)行應(yīng)用邏輯,所以用戶創(chuàng)建惡意軟件或?qū)崿F(xiàn)惡意功能的能力受到嚴(yán)格限制。 一方面,由于操縱XML文檔的方式的數(shù)目是有限的,所以需要提供相對較少數(shù)目的操作。由 于XML是非常一般性的語言,所以可以利用這個語言描述任何應(yīng)用或域。因此,本發(fā)明提供 的過程XML語言及其對應(yīng)操作能夠描述任何類型的過程邏輯并且可用于描述任何類型的 應(yīng)用。根據(jù)一個實施例,由本發(fā)明提供跟蹤執(zhí)行應(yīng)用或?qū)嵗摹斑\行時狀態(tài)”的實例對 象。本領(lǐng)域技術(shù)人員等將認(rèn)識到,當(dāng)執(zhí)行邏輯時,執(zhí)行中應(yīng)用的運行時狀態(tài)不斷地進(jìn)化。實 例對象跟蹤并管理執(zhí)行中應(yīng)用的運行時狀態(tài)并且向用于實現(xiàn)XML虛擬機(jī)的其它對象提供環(huán)境。因此,實例對象將操作意義耦合到過程及其關(guān)聯(lián)操作的執(zhí)行。結(jié)果,即使應(yīng)用實例的 運行時狀態(tài)不斷變化,仍向操作處理器提供說明這些變化的數(shù)據(jù)。通過這種方法,本發(fā)明支 持使用無狀態(tài)的過程對象的應(yīng)用邏輯的動態(tài)執(zhí)行。換言之,即使可以存在應(yīng)用的多個實例, 但是僅需一個版本的應(yīng)用代碼,從而節(jié)省了內(nèi)存。如圖9所示,客戶機(jī)端組件包括視圖管理器908,視圖管理器908負(fù)責(zé)跟蹤與執(zhí)行 中應(yīng)用關(guān)聯(lián)的“視圖”或用戶界面。視圖管理器908提供用于創(chuàng)建用于渲染和更新應(yīng)用的 用戶界面的內(nèi)部視圖對象的方法。根據(jù)MVC設(shè)計模式,可以利用UI XML語言按語義描述應(yīng) 用的用戶界面。因此,可以在UI XML文檔內(nèi)表示應(yīng)用的完整用戶界面的組件和其它圖形屬 性之間的關(guān)系。在渲染在UI XML文檔內(nèi)按語義描述的用戶界面時利用由視圖管理器908 進(jìn)行實例化和保持的視圖對象。在一個實施例中,可以通過一系列的XML變換執(zhí)行用戶界 面的渲染。然而,本領(lǐng)域技術(shù)人員等將認(rèn)識到,可以不用執(zhí)行XML變換而渲染用戶界面并且 以上提供的描述應(yīng)該被解釋為是示例性的。在任何情況下,視圖管理器908被構(gòu)造為創(chuàng)建 視圖對象并且保持對系統(tǒng)中的所有活躍視圖的引用。如圖9所示,客戶機(jī)端組件包括文檔管理器912,負(fù)責(zé)實例化和保持對文檔對象的 引用。如上所述,XML文檔是用作網(wǎng)絡(luò)操作系統(tǒng)環(huán)境中的公共數(shù)據(jù)源的數(shù)據(jù)模型。在XML 文檔內(nèi)表示應(yīng)用邏輯、系統(tǒng)設(shè)置、應(yīng)用狀態(tài)等。在一個方面中,文檔管理器912負(fù)責(zé)將文檔 加載或緩存在客戶機(jī)計算機(jī)上的存儲器內(nèi)。因此,文檔管理器912可以與例如通信管理器 (下文描述)的其它管理器進(jìn)行交互以獲得文檔??梢岳猛ㄐ磐ǖ缽倪h(yuǎn)程網(wǎng)絡(luò)位置獲得 文檔,或者可以建立通道以訪問保持在客戶機(jī)計算機(jī)上的本地硬盤驅(qū)動器或其它非易失性 存儲器上的文檔。在另一個方面中,文檔管理器912用作用于跟蹤加載到客戶機(jī)計算機(jī)上 的存儲器中的每個文檔的客戶機(jī)端緩存器。當(dāng)在本地獲得文檔時,可以對提供文檔的結(jié)構(gòu) 化面向?qū)ο蟊硎镜膬?nèi)部文檔對象進(jìn)行實例化。在這點上,文檔管理器912保持對系統(tǒng)內(nèi)的 所有文檔對象的引用并且暴露用于對XML文檔進(jìn)行創(chuàng)建、檢索、保存和重新命名等的方法。圖9中可視地示出的事件管理器914用作觸發(fā)器事件總線,該觸發(fā)器事件總線使 XML虛擬機(jī)的各方面可以響應(yīng)于觸發(fā)器的激活而執(zhí)行應(yīng)用邏輯。一方面,過程對象可以利用 通知器對象向事件管理器914登記觸發(fā)器作為監(jiān)聽器。系統(tǒng)內(nèi)例如組件對象的其它對象常 常將它們自身直接作為監(jiān)聽器登記到事件管理器914。此外,通知器對象接收并存儲用于識 別響應(yīng)于激活觸發(fā)器而將執(zhí)行的應(yīng)用中的過程步驟的數(shù)據(jù)。此外,由通知器對象提供的數(shù) 據(jù)將觸發(fā)器與發(fā)起觸發(fā)器激活的發(fā)起對象(即,通常是視圖或組件對象)進(jìn)行關(guān)聯(lián)。另一 方面,當(dāng)激活觸發(fā)器時,事件管理器914推送(push)對象(即,視圖或組件對象)或者以其 它方式通知登記的監(jiān)聽器。在這個示例中,組件對象將向事件管理器914通知并傳遞數(shù)據(jù)。 作為響應(yīng),事件管理器914將針對激活的事件執(zhí)行查詢以識別監(jiān)聽器。然后,可以警告適當(dāng) 的通知器或其它監(jiān)聽對象并且向其提供使得應(yīng)用執(zhí)行進(jìn)行到適當(dāng)?shù)倪^程步驟的數(shù)據(jù)。如在 下文中更加詳細(xì)地描述的,分立的應(yīng)用實例均可以利用相同一組觸發(fā)器和通知器對象。提 供被構(gòu)造為以這種方式重用相同資源的事件管理器914和關(guān)聯(lián)系統(tǒng)既提高了性能又使使 用的內(nèi)存最小化。這里使用的“觸發(fā)器”是指將導(dǎo)致應(yīng)用代碼被執(zhí)行的定義的觸發(fā)事件的發(fā)生。因 此,在上文中參照圖6A所述的示例性過程XML文檔600中,激活觸發(fā)器602使得執(zhí)行在應(yīng) 用代碼中定義的特定過程步驟。與現(xiàn)有系統(tǒng)相反,當(dāng)發(fā)生數(shù)據(jù)更新時,本發(fā)明實現(xiàn)的觸發(fā)器通常不被激活。換言之,除了指定例如數(shù)據(jù)綁定的操作以外,開發(fā)人員不需要提供用于管理 從應(yīng)用用戶界面到數(shù)據(jù)模型的輸入和輸出的邏輯。代替地,本發(fā)明通過單獨的數(shù)據(jù)更新通 知事件總線管理數(shù)據(jù)更新,并且數(shù)據(jù)更新不對應(yīng)于觸發(fā)器的激活。如下文中更加詳細(xì)地描 述的,本發(fā)明的各方面提供在文檔對象內(nèi)實現(xiàn)的分立事件總線,該事件總線自動地處理到 組件和其它對象的數(shù)據(jù)更新事件的傳播。另外圖9所示的事務(wù)管理器910提供用于創(chuàng)建和傳播用于更新XML文檔的內(nèi)容的 事務(wù)的接口。因此,當(dāng)將執(zhí)行對數(shù)據(jù)模型的改變時,這將產(chǎn)生事務(wù)。在這點上,事務(wù)表示相 對變化并且可以被表示為包含用于實現(xiàn)或撤銷對數(shù)據(jù)模型的改變的數(shù)據(jù)的XML數(shù)據(jù)片段。 例如,在上文參照圖6A所述的MyTasks應(yīng)用中,向基礎(chǔ)數(shù)據(jù)XML文檔添加任務(wù)的改變操作 624會導(dǎo)致事務(wù)的創(chuàng)建。事務(wù)中反映的數(shù)據(jù)更新可以保存到數(shù)據(jù)模型以及任何遠(yuǎn)程監(jiān)聽 器。在一個實施例中,事務(wù)管理器910包括標(biāo)識和創(chuàng)建事務(wù)時的時間戳數(shù)據(jù),可用于“回滾 (rollback)”事務(wù)中表示的數(shù)據(jù)更新以及識別產(chǎn)生事務(wù)的順序。現(xiàn)在參照圖10A,將描述應(yīng)用初始化例程1000,該應(yīng)用初始化例程1000執(zhí)行用于 打開應(yīng)用包的處理??梢皂憫?yīng)于用戶產(chǎn)生啟動應(yīng)用的命令而執(zhí)行應(yīng)用初始化例程1000。 如上所述,本發(fā)明的各方面可以提供一種桌面環(huán)境,在這種桌面環(huán)境中,用戶通過選擇菜單 項、圖標(biāo)等啟動應(yīng)用。響應(yīng)于接收到這種類型的命令,可以向系統(tǒng)環(huán)境對象902內(nèi)的數(shù)據(jù)類 型識別器傳遞用于識別與應(yīng)用包關(guān)聯(lián)的文檔、XML文檔或二進(jìn)制文件的位置的URL。如下文 中更加詳細(xì)地描述的,以多種方式利用數(shù)據(jù)類型識別器以識別動作并且將動作與特定類型 的文檔進(jìn)行關(guān)聯(lián)。在任何情況下,當(dāng)數(shù)據(jù)類型識別器確定正打開與應(yīng)用包對應(yīng)的文檔(例 如,應(yīng)用包XML文檔)時,可執(zhí)行應(yīng)用初始化例程1000。在圖10A所示的應(yīng)用初始化例程1000中,在塊1002內(nèi),利用應(yīng)用管理器904對應(yīng) 用對象進(jìn)行實例化。均表示不同應(yīng)用的多個應(yīng)用對象可以由應(yīng)用管理器904進(jìn)行實例化和 保持。在應(yīng)用初始化例程1000的該次重復(fù)中,可以實例化例如表示字處理程序的第一應(yīng)用 對象。在應(yīng)用初始化例程1000的一不同重復(fù)中,可以實例化表示不同程序(例如,電子郵 件程序)的第二應(yīng)用對象。通過控制對應(yīng)用對象的實例化和訪問,與一個應(yīng)用關(guān)聯(lián)的過程 邏輯不能夠訪問與不同應(yīng)用關(guān)聯(lián)的內(nèi)部對象(例如,視圖對象、實例對象、過程對象等)。因 此,當(dāng)執(zhí)行字處理程序的過程邏輯時,與電子郵件應(yīng)用包關(guān)聯(lián)的視圖對象是不可訪問的。如 下文中更加詳細(xì)地描述的,利用應(yīng)用管理器904來實例化和保持應(yīng)用對象是本發(fā)明提供的 用于確保應(yīng)用內(nèi)和過程內(nèi)安全性的較大框架的一部分。在塊1004內(nèi),獲得在對應(yīng)的應(yīng)用包內(nèi)指定的正打開的應(yīng)用的資源。根據(jù)本發(fā)明形 成的應(yīng)用包內(nèi)的邏輯提供應(yīng)用的資源和設(shè)置的全部藍(lán)圖。因此,應(yīng)用包XML文檔可以識別 與應(yīng)用關(guān)聯(lián)的過程和UI XML文檔以及例如圖像、數(shù)據(jù)文檔、XSLT文檔等的其它應(yīng)用資源。 包括應(yīng)用包XML文檔自身的由應(yīng)用利用的資源可以緩存在客戶機(jī)上的存儲器內(nèi)或者可以 利用通信通道(下文描述)從服務(wù)提供商獲得。除了資源和設(shè)置管理以外,應(yīng)用包XML語 言使開發(fā)人員可以以更先進(jìn)的方式配置應(yīng)用包。僅作為示例,應(yīng)用包XML文檔內(nèi)的條件邏 輯可用于實現(xiàn)能夠從失效備援(failover)網(wǎng)絡(luò)位置獲得資源的更加容錯的網(wǎng)絡(luò)服務(wù)。在 主要網(wǎng)絡(luò)位置不可用的情況下,應(yīng)用包能夠識別可獲得資源的另選的網(wǎng)絡(luò)位置。然而,這僅 僅是本發(fā)明使開發(fā)人員可以利用包XML語言構(gòu)造應(yīng)用包的方式的一個示例。如在圖10A中進(jìn)一步所示,在判斷塊1006內(nèi),應(yīng)用初始化例程1000確定是否允許
23應(yīng)用的附加運行時實例。應(yīng)用包XML語言使開發(fā)人員可以建立用于限制可創(chuàng)建的應(yīng)用實例 的數(shù)目的配置。因此,在塊1006進(jìn)行的確定取決于在應(yīng)用包XML文檔內(nèi)定義的配置。如果 在塊1006內(nèi)確定不允許附加實例,則應(yīng)用初始化例程1000進(jìn)入塊1008,在塊1008內(nèi),處理 用于啟動不允許附加實例的應(yīng)用的命令。在這點上,在塊1008內(nèi)處理命令可包括刷新應(yīng)用 的現(xiàn)有運行時實例。附加地或另選地,處理命令可包括通過對話框通知用戶應(yīng)用的附加實 例不被允許。然后,當(dāng)處理命令時,應(yīng)用初始化例程1000進(jìn)入塊1014,在塊1014內(nèi)應(yīng)用初 始化例程1000終止。另一方面,如果在塊1006內(nèi)確定應(yīng)用的附加實例被允許,則應(yīng)用初始化例程1000 進(jìn)行到塊1010。在塊1010內(nèi),對用于跟蹤和管理正啟動的應(yīng)用的運行時狀態(tài)的實例對象進(jìn) 行實例化。當(dāng)創(chuàng)建過程和視圖對象時,本發(fā)明的各方面將這些對象與它們的對應(yīng)實例進(jìn)行 關(guān)聯(lián)。在塊1010內(nèi)實例化的實例對象保持用于跟蹤過程和視圖對象的結(jié)構(gòu)、別名和其它運 行時變量。因此,實例對象知道與這個應(yīng)用實例關(guān)聯(lián)的過程和視圖對象。通過對象的受控 實例化和引用,可以建立本地化關(guān)系層級以界定應(yīng)用實例的邊界。如在下文中更加詳細(xì)地 描述的,這個框架將過程和視圖對象與對應(yīng)的實例進(jìn)行關(guān)聯(lián)并且對從本地化關(guān)系層級之外 對這些對象的訪問進(jìn)行劃界。在塊1010內(nèi)實例化的實例對象提供的環(huán)境可以關(guān)于應(yīng)用的運行時狀態(tài)實現(xiàn)功 能。在一個方面中,實例對象實例化和保持用于對在正進(jìn)行解釋的應(yīng)用代碼內(nèi)遇到的表達(dá) 式進(jìn)行求值的本地表達(dá)式引擎。過程對象可以利用對應(yīng)實例對象和該實例保持用以對表達(dá) 式求值的本地表達(dá)式引擎。此外,當(dāng)執(zhí)行操作時為了將操作意義耦合到過程邏輯的執(zhí)行,可 提供在塊1010內(nèi)實例化的實例對象。如在圖10A中進(jìn)一步所示,在塊1012內(nèi),利用在塊1002內(nèi)實例化的應(yīng)用對象打開 和初始應(yīng)用的過程和視圖邏輯的執(zhí)行。在下文中而不在這里描述用于打開和初始化過程 和UI XML文檔內(nèi)的邏輯的執(zhí)行的例程。值得注意的是,每當(dāng)啟動與應(yīng)用包關(guān)聯(lián)的應(yīng)用時, 將提供新的實例對象以跟蹤應(yīng)用的運行時狀態(tài)。例如,每當(dāng)啟動字處理應(yīng)用的實例時,表示 字處理程序的應(yīng)用對象將提供不同的實例對象。通過以這種方式利用應(yīng)用對象,本發(fā)明的 各方面能夠控制對與執(zhí)行中應(yīng)用關(guān)聯(lián)的對象的訪問。然后,應(yīng)用初始化例程1000進(jìn)行到塊 1014,在塊1014應(yīng)用初始化例程1000終止?,F(xiàn)在參照圖10B,將詳細(xì)描述利用應(yīng)用對象封裝應(yīng)用并且提供應(yīng)用內(nèi)安全性。當(dāng)啟 動應(yīng)用包中的應(yīng)用時,應(yīng)用管理器904實例化應(yīng)用對象,該應(yīng)用對象提供該應(yīng)用的封裝表 示。如圖10B所示,應(yīng)用管理器904可以實例化應(yīng)用對象A 1030、應(yīng)用對象B 1032和第N 應(yīng)用對象1034。在一個實施例中,利用應(yīng)用對象實例化和保持一個或多個實例對象。在圖 10B所示的示例中,應(yīng)用對象A 1030可以實例化和保持實例對象A11036、實例對象A21038 和實例對象A-N 1040。相似地,應(yīng)用對象B 1032可以實例化和保持實例對象B1 1042和實 例對象B-N1044。在這點上,圖10B所示的對象之間的單向?qū)嵓^指示發(fā)起箭頭的源對象 保持由箭頭指針識別的目的地對象。因此,從應(yīng)用管理器904到應(yīng)用對象1030-1034的實 箭頭指示這些對象由應(yīng)用管理器904保持。從圖10B所示可見,應(yīng)用管理器904、應(yīng)用對象 1030-1034以及它們的對應(yīng)實例對象1036-1044之間的關(guān)系是明顯的。圖10B所示的對象之間的關(guān)系示出了本發(fā)明如何能夠保證應(yīng)用內(nèi)安全性。由暴 露用于創(chuàng)建、打開和終止應(yīng)用的方法的應(yīng)用管理器904控制對應(yīng)用對象的訪問。當(dāng)應(yīng)用對象被實例化時,應(yīng)用管理器904將該應(yīng)用對象隔離到分離的存儲器空間中。通過防止應(yīng)用 對象共享存儲空間,一個應(yīng)用的代碼不會注入或者以其它方式影響分配給不同應(yīng)用的存儲 器空間。此外,應(yīng)用對象提供可隱藏與應(yīng)用關(guān)聯(lián)的內(nèi)部數(shù)據(jù)的、應(yīng)用的封裝表示。通過創(chuàng)建 暴露的方法,控制應(yīng)用的所有功能以及對內(nèi)部數(shù)據(jù)的訪問。通過以這種方式隔離和封裝應(yīng) 用,使得與一個應(yīng)用關(guān)聯(lián)的內(nèi)部對象(例如,視圖對象、實例對象、過程對象等)對于一個不 同應(yīng)用不可訪問。因此,當(dāng)執(zhí)行使用應(yīng)用對象A 1030的代碼時,不可以訪問與應(yīng)用對象B 1032關(guān)聯(lián)的內(nèi)部對象。盡管不可以訪問應(yīng)用的內(nèi)部數(shù)據(jù),但是可以利用基礎(chǔ)數(shù)據(jù)模型共享 數(shù)據(jù)。因此,如果用戶有足夠的訪問權(quán),則文檔可由多個應(yīng)用共享。換言之,本發(fā)明提供的 應(yīng)用內(nèi)安全性框架沒有阻止使用基礎(chǔ)數(shù)據(jù)模型的應(yīng)用之間的數(shù)據(jù)的授權(quán)共享?,F(xiàn)在參照圖10C,將詳細(xì)描述利用實例對象實現(xiàn)本地化關(guān)系層級。通過定義本地化 關(guān)系層級,本發(fā)明的各方面使得可以安全執(zhí)行多實例應(yīng)用。圖10C中的圖示包括應(yīng)用對象 1050和實例對象1052。此外,圖10C描述了當(dāng)打開應(yīng)用的過程和UI XML文檔時實例化的 過程對象1054、視圖對象1056、組件對象1058和對話框?qū)ο?060。在一個實施例中,當(dāng)發(fā) 起應(yīng)用的執(zhí)行時,應(yīng)用對象1050提供實例對象1052。從應(yīng)用對象1050到視圖對象1056和 過程對象1054的虛線單向箭頭指示在提供的實例對象1052所特有的本地化關(guān)系層級內(nèi)創(chuàng) 建這些對象。在這點上,實例對象1052保持迷你視圖管理器1062和迷你過程管理器1064。 當(dāng)打開應(yīng)用的過程XML文檔時,向?qū)嵗龑ο?052提供對利用迷你過程管理器1064進(jìn)行跟 蹤獲得的過程對象1054的引用。相似地,當(dāng)打開應(yīng)用視圖時獲得的視圖對象1056被提供 給實例對象1052并且由迷你視圖管理器1062保持。因此,對迷你過程管理器1064和迷你 視圖管理器1062更新使實例對象1052可以跟蹤和識別與特定應(yīng)用實例關(guān)聯(lián)的對象。貫穿描述應(yīng)用的邏輯的代碼,開發(fā)人員可以利用全局命名對象來定義應(yīng)用的邏 輯??梢愿鶕?jù)本發(fā)明提供的表達(dá)式語言來引用這些全局命名對象。然而,分配給應(yīng)用代碼 中的對象的全局名稱可以引用屬于不同實例的運行時對象。例如,可在應(yīng)用代碼中使用下 面的表達(dá)式來引用視圖對象1056 :“#MyTaSkS”。此外,下面的表達(dá)式可用于引用在上述的 視圖對象1056的環(huán)境內(nèi)創(chuàng)建的組件對象(例如,按鈕)“#MyTaSkS#buttonl”。為了避免 歧義和增強(qiáng)安全性,本發(fā)明的各方面實現(xiàn)關(guān)于適當(dāng)實例對在應(yīng)用代碼內(nèi)遇到的全局命名對 象進(jìn)行求值的功能。在這點上,在不創(chuàng)建重復(fù)的過程或UI XML文檔的情況下執(zhí)行全局命名 對象的求值。代替地,應(yīng)用的過程和UI文檔被共享并用于建立多個應(yīng)用實例的運行時對 象。從下文的描述可清楚看出,本地化關(guān)系層級的實現(xiàn)提供了用于當(dāng)對表達(dá)式求值時識別 和/或提供適當(dāng)實例以及訪問實例內(nèi)的適當(dāng)視圖對象的基礎(chǔ)。在圖10C所示的示例中,在實例對象1052與視圖對象1056之間示出了雙向箭頭。 一方面,雙向箭頭指示實例對象1052知道視圖對象1056與這個特定應(yīng)用實例關(guān)聯(lián)。當(dāng)被 實例化時,視圖對象1056可被提供給實例對象1052并且由迷你視圖管理器1062保持。另 一方面,當(dāng)創(chuàng)建應(yīng)用視圖時提供實例對象1052的標(biāo)識符從而使得視圖對象1056知道它的 關(guān)聯(lián)實例。結(jié)果,當(dāng)接收到將使得執(zhí)行數(shù)據(jù)更新或應(yīng)用邏輯的輸入時,可以識別適當(dāng)實例。 例如,當(dāng)視圖對象1056用于打開應(yīng)用視圖時,可以實例化組件對象1058。由于在應(yīng)用視圖 的環(huán)境內(nèi)創(chuàng)建組件對象1058,所以它可以與視圖對象1056進(jìn)行通信。結(jié)果,例如當(dāng)用戶提 供將使得執(zhí)行應(yīng)用代碼的輸入時,組件對象1058可以識別適當(dāng)?shù)膶嵗龑ο?052在圖10C所示的示例中,在實例對象1052與過程對象1054之間示出了單向箭頭。在一個實施例中,利用過程對象1052執(zhí)行應(yīng)用中的過程步驟。通過利用和更新迷你過程管 理器1064,實例對象1052知道了它的關(guān)聯(lián)的過程對象1054。然而,本發(fā)明提供的過程對象 在過程步驟的執(zhí)行之間是無狀態(tài)的。結(jié)果,向過程對象提供來自單個實例對象1052的環(huán) 境。換言之,在過程步驟的執(zhí)行之間過程對象1052不知道關(guān)聯(lián)的實例對象1052。然而,過 程對象1054可利用由提供的實例對象1052保持的表達(dá)式引擎(下文描述)的服務(wù)。圖 10C所示的本地化關(guān)系層級和關(guān)聯(lián)描述示出了本發(fā)明如何能夠在仍支持多實例應(yīng)用的同時 確保過程內(nèi)安全性。當(dāng)重復(fù)過程步驟中的操作時,可以僅僅從一個實例對象1052向過程對 象1054提供環(huán)境。基于建立關(guān)系以使得從單個實例對象1052向過程對象1054提供環(huán)境 的這個框架,能夠在與不同實例關(guān)聯(lián)的對象之間實現(xiàn)嚴(yán)格分離。因此,當(dāng)執(zhí)行應(yīng)用代碼時, 過程對象1054不能夠訪問不同實例的本地化關(guān)系層級內(nèi)的對象。本發(fā)明的各方面能夠在由父實例建立的本地化關(guān)系層級內(nèi)創(chuàng)建子實例。在這個實 施例中,在父實例的本地化關(guān)系層級內(nèi)創(chuàng)建子實例及其獲得的子視圖對象和子過程對象。 由子實例描述的本地化關(guān)系層級對于在父實例的關(guān)系層級內(nèi)創(chuàng)建的對象是可見的。然而, 在子實例內(nèi)創(chuàng)建的運行時對象不知道與父實例或其它子實例關(guān)聯(lián)的對象。在父實例內(nèi)嵌套 子實例的這個能力向建立更加模塊化的代碼的應(yīng)用開發(fā)人員提供了較大的靈活性以及利 用不同的作用域的能力?,F(xiàn)在參照圖11,將描述用于打開和初始化在應(yīng)用的過程代碼內(nèi)定義的邏輯的執(zhí)行 的過程初始化例程1100。當(dāng)產(chǎn)生打開包含過程邏輯的文檔的調(diào)用時,可執(zhí)行過程初始化例 程1100。在一個實施例中,打開文件的調(diào)用可以被發(fā)送至從主調(diào)對象接收URL的數(shù)據(jù)類型 識別器。傳遞至數(shù)據(jù)類型識別器的URL可以對應(yīng)于任何類型的文檔,包括但不限于應(yīng)用包 XML文檔、過程XML文檔或UI XML文檔。當(dāng)打開包含過程邏輯的文檔時,數(shù)據(jù)類型識別器可 以使得執(zhí)行特定動作以幫助應(yīng)用的執(zhí)行。在圖11所示的示例性實施例中,數(shù)據(jù)類型識別器 確定提供的文檔是過程XML文檔并且使得執(zhí)行該文件類型特有的動作。
圖11所示的過程初始化例程1100示出了可打開過程XML文檔的兩個示例性情 況。然而,由于在不脫離要求保護(hù)的主題的范圍的情況下可以在其它情況下打開過程XML 文檔,所以下文提供的示例應(yīng)該解釋為示例性的。如圖11所示,過程初始化例程1100在塊 1102或塊1104開始。在一個示例性實施例中,例程1100在塊1102開始,在塊1102內(nèi),數(shù) 據(jù)類型識別器接收用于打開與應(yīng)用包關(guān)聯(lián)的過程XML文檔的調(diào)用。在這個實施例中,應(yīng)用 對象在塊1102內(nèi)接收到的調(diào)用內(nèi)提供先前創(chuàng)建的實例對象。如下文中更加詳細(xì)地描述的, 在預(yù)期執(zhí)行在過程XML文檔內(nèi)定義的過程步驟時,過程初始化例程1100將實例化過程對 象。對這個過程對象的引用可在以后提供給在塊1102接收到的調(diào)用內(nèi)提供的對應(yīng)實例。在一個另選實施例中,過程初始化例程1100在塊1104開始,在塊1104內(nèi),數(shù)據(jù)類 型識別器接收用于打開表示孤立應(yīng)用的過程XML文檔的調(diào)用。應(yīng)用不需要與應(yīng)用包進(jìn)行關(guān) 聯(lián)。在這個實施例中,數(shù)據(jù)類型識別器在塊1104在打開過程XML文檔的調(diào)用內(nèi)不接收提供 的實例。以這種方式構(gòu)造為孤立的應(yīng)用不支持多個實例執(zhí)行并且使得應(yīng)用可以共享至少一 些存儲空間。在塊1106內(nèi),數(shù)據(jù)類型識別器執(zhí)行處理以識別將打開的文檔的文件類型。在這個 示例中,由數(shù)據(jù)類型識別器執(zhí)行的分析將確定與接收的調(diào)用關(guān)聯(lián)的文檔是過程XML文檔。 如上所述,數(shù)據(jù)類型識別器可以將動作與特定文件類型進(jìn)行關(guān)聯(lián)。當(dāng)遇到打開過程XML文檔的請求時,在塊1108,數(shù)據(jù)類型識別器被構(gòu)造為調(diào)用過程管理器906,指示已經(jīng)接收到打 開過程XML文檔的請求。在判斷塊1110,過程管理器906內(nèi)的邏輯確定這個過程XML文檔的過程對象是否 緩存在存儲器內(nèi)。在一個方面內(nèi),當(dāng)最初啟動應(yīng)用時,過程初始化例程1100負(fù)責(zé)實例化新 的過程對象。一旦被實例化,過程初始化例程1100實現(xiàn)使得新實例化的過程對象執(zhí)行過程 步驟的邏輯。由于過程對象是無狀態(tài)的,所以它可被重用。這樣,相同過程對象可用于執(zhí)行 來自應(yīng)用包的相同實例或者嵌入在過程XML文檔內(nèi)的其它過程的應(yīng)用代碼。因此,通過過 程管理器906可將在啟動應(yīng)用時實例化的過程對象緩存在存儲器內(nèi)。如果過程管理器906 先前針對仍在存儲器內(nèi)的這個應(yīng)用實例化了過程對象,則在塊1110執(zhí)行的測試的結(jié)果為 “是”,并且過程初始化例程1100進(jìn)行到塊1120,這將在以后進(jìn)行更加詳細(xì)的描述。相反,如 果確定將實例化新的過程對象,則過程初始化例程1100進(jìn)行到塊1112。在實例化新過程對 象之前,應(yīng)該在本地可獲得正打開的過程XML文檔。為此,在塊1112,過程管理器904產(chǎn)生 經(jīng)由文檔管理器912路由以獲得適當(dāng)?shù)倪^程XML文檔的調(diào)用。在塊1114,確定由過程管理器904請求的過程XML文檔是否加載在客戶機(jī)計算裝 置的存儲器內(nèi)。如上所述,文檔管理器912用作客戶機(jī)端緩存器,跟蹤加載在客戶機(jī)上的存 儲器內(nèi)的每個文檔。如果確定正打開的過程XML文檔在由文檔管理器912保持的客戶機(jī) 端緩存器內(nèi)被引用,則過程初始化例程1100進(jìn)行到塊1118,這將在以后進(jìn)行更加詳細(xì)的描 述。相反,如果請求的過程XML文檔沒有加載在客戶機(jī)端緩存器內(nèi),則過程初始化例程1100 進(jìn)行到塊1116,在塊1116,基于文檔管理器912從服務(wù)提供商獲得請求的過程XML文檔。更 具體地講,在塊1116,文檔管理器912利用通信管理器(下文所述)請求從由提供的URL識 別的網(wǎng)絡(luò)位置獲得適當(dāng)?shù)倪^程XML文檔。一旦可從客戶機(jī)端緩存器獲得該過程XML文檔,則在塊1118實例化新的過程對 象。具體地講,在預(yù)期執(zhí)行應(yīng)用代碼時利用過程管理器904內(nèi)的邏輯來實例化新的過程對 象。然后,在塊1120將新過程對象作為監(jiān)聽器登記在它的對應(yīng)過程XML文檔上。如下文中 更加詳細(xì)地描述的,通過作為監(jiān)聽器在數(shù)據(jù)模型中的文檔上進(jìn)行登記,當(dāng)對文檔執(zhí)行指定 的數(shù)據(jù)更新時,對象可以被通知并且采取某動作。在塊1122,針對應(yīng)用中的每個觸發(fā)器實例化通知器對象。具體地講,可以執(zhí)行解 析以識別在正打開的過程XML文檔內(nèi)定義的觸發(fā)器元素。舉例來講,MyTasks應(yīng)用定義觸 發(fā)器602 (圖6A),其將導(dǎo)致在塊1122內(nèi)實例化通知器對象。觸發(fā)器可以被定義為過程XML 文檔內(nèi)的元素,每個觸發(fā)器包括視圖、組件、事件和步驟屬性。分配給視圖和組件屬性的值 識別將激活觸發(fā)器的應(yīng)用視圖和/或組件。相似地,分配給事件屬性的值識別將激活觸發(fā) 器的事件的類型。此外,分配給步驟屬性的值識別將響應(yīng)于觸發(fā)器而執(zhí)行的應(yīng)用的過程代 碼內(nèi)的過程步驟。對于應(yīng)用中的每個觸發(fā)器,過程管理器906內(nèi)的邏輯實例化通知器對象 并且緩存通知器對象中可接下來用于執(zhí)行特定過程步驟的數(shù)據(jù)。另外如圖11所示,在塊1124,定義在應(yīng)用中的每個觸發(fā)器向事件管理器914進(jìn)行 登記。在一個實施例中,事件管理器914保持將一組觸發(fā)器數(shù)據(jù)與監(jiān)聽通知器對象進(jìn)行關(guān) 聯(lián)的內(nèi)部哈希數(shù)據(jù)結(jié)構(gòu)。因此,可以通過更新由事件管理器914保持的哈希數(shù)據(jù)結(jié)構(gòu)來登 記觸發(fā)器。如下文中更加詳細(xì)地描述的,當(dāng)發(fā)生與登記的組件的事件和事件類型匹配的事 件時,事件管理器914通知適當(dāng)?shù)谋O(jiān)聽對象和通知器對象。
27
另外如圖11所示,在塊1126確定是否將實例化新實例。當(dāng)打開過程XML文檔時, 可以提供實例。具體地講,當(dāng)打開過程XML文檔時,上述的應(yīng)用初始化例程1000可以實例 化和提供實例。另外,為了支持模塊化應(yīng)用開發(fā)以及使得不同過程共享環(huán)境,可以在其它 環(huán)境中提供實例。在這些實施例中,將不實例化新實例,并且過程初始化例程1100進(jìn)行到 塊1130,這將在以后進(jìn)行更加詳細(xì)描述。相反,如果沒有提供實例對象,則過程初始化例程 1100進(jìn)行到塊1128,在塊1128,實例化實例對象。具體地講,在塊1128,過程管理器906內(nèi) 的邏輯產(chǎn)生實例化新實例對象的調(diào)用。在塊1130,產(chǎn)生執(zhí)行在過程XML文檔內(nèi)定義的過程步驟的調(diào)用。在實際實施例中, 過程對象被構(gòu)造為基于兩個接收的參數(shù)執(zhí)行過程步驟(1)表示應(yīng)用的運行時狀態(tài)的提供 的實例;和(2)將執(zhí)行的過程步驟的標(biāo)識符。在這點上,可在應(yīng)用包或孤立應(yīng)用的環(huán)境內(nèi)創(chuàng) 建要提供給過程對象的實例。在另一個實施例中,過程初始化例程1100被構(gòu)造為向過程對 象提供參數(shù),在執(zhí)行在過程XML文檔內(nèi)定義的每個過程步驟時,所述參數(shù)使得可以對于多 個實例重用該過程對象。然后,過程初始化例程1100進(jìn)行到塊1132,在塊1132它結(jié)束。當(dāng)將執(zhí)行過程步驟時,控制流程導(dǎo)向在過程對象內(nèi)編碼的執(zhí)行方法。一般地說,執(zhí) 行方法循環(huán)遍歷并且使得執(zhí)行在過程步驟內(nèi)定義的每個操作。換言之,執(zhí)行方法是對根據(jù) 過程操作API開發(fā)的過程操作的接口。這樣,為了執(zhí)行在MyTasks應(yīng)用內(nèi)定義的過程步驟 “1”,過程初始化例程1100可以調(diào)用執(zhí)行方法。作為響應(yīng),執(zhí)行方法將執(zhí)行處理以使得執(zhí)行 這個過程步驟604內(nèi)的打開、綁定和動作操作612-616?,F(xiàn)在參照圖12A-12B,將描述執(zhí)行方法1200,該執(zhí)行方法1200被構(gòu)造為使得執(zhí)行 過程步驟內(nèi)的操作。如圖12A所示,執(zhí)行方法1200在塊1202開始,在塊1202,識別過程步 驟內(nèi)的新操作。在一個實施例中,通常順序識別和執(zhí)行過程步驟內(nèi)的操作。當(dāng)遇到新操作 時,在塊1203選擇在操作的值屬性中提供的表達(dá)式以進(jìn)行求值。例如,在上述的MyTasks 應(yīng)用中,MyTasks文檔600 (圖6A)定義初始化應(yīng)用過程步驟604。在這個過程步驟604內(nèi), 第一操作是具有值屬性“appS/mytaSkS_gui. xml”的打開操作612。在對執(zhí)行方法1200的 該次重復(fù)中,在塊1203選擇表達(dá)式“appS/mytaSkS_gui. xml”以進(jìn)行求值。參照圖12進(jìn)行的描述提供了順序執(zhí)行過程步驟內(nèi)的操作的示例。然而,本發(fā)明的 各方面支持操作的異步執(zhí)行從而使得可以不順序地執(zhí)行過程步驟內(nèi)的每個操作。例如,如 果第一操作請求了僅僅可從遠(yuǎn)程網(wǎng)絡(luò)位置獲得的資源,則可在異步地獲得資源的同時執(zhí)行 其它操作(不取決于第一操作的結(jié)果)。另外如圖12A所示,在塊1204內(nèi),在塊1203選擇用于求值的表達(dá)式被求得為 XBind。這里所用的XBind是包括URL、基路徑(例如,引用由指定URL識別的文檔內(nèi)的XML 片段的XPath表達(dá)式)和選擇(例如,多個XPath表達(dá)式)的數(shù)據(jù)類型。在MyTasks應(yīng)用 中定義的示例性打開操作612內(nèi),在塊1204,“appS/mytaSkS_gui. xml”表達(dá)式將被求得為 下面的XBind URL = apps/mytasks_gui. xmlBase path = /Selection =這個XBind的URL引用提供應(yīng)用的用戶界面的語義描述的UIXML文檔。盡管這里 提供的示例利用URL作為用于識別資源的格式,但是這應(yīng)該被解釋為是示例性的。結(jié)合本發(fā)明可以實現(xiàn)能夠唯一識別資源的任何系統(tǒng)。如在下文中更加詳細(xì)地描述的,網(wǎng)絡(luò)操作系 統(tǒng)提供用于訪問XML文件系統(tǒng)、數(shù)據(jù)庫和使用URL的XML Web服務(wù)的協(xié)議和抽象。然而,可 以想到,其它協(xié)議可用于識別URL以外的資源位置。以上XBind的基路徑是“/”,其引用在 URL內(nèi)識別的UI XML文檔的根元素。當(dāng)打開應(yīng)用視圖時,基路徑可以引用UI XML文檔內(nèi)的 片段。在這種情況下,視圖邏輯的語義描述不與UI XML文檔的根節(jié)點關(guān)聯(lián)。因此,針對該 變化的XBind將包括引用與視圖邏輯對應(yīng)的節(jié)點的基路徑。由于針對這個示例性XBind的 選擇不包含數(shù)據(jù),所以它是“null”(空)。一旦對表達(dá)式進(jìn)行了求值,執(zhí)行方法1200進(jìn)行 到塊1206,這將在以后進(jìn)行詳細(xì)描述?,F(xiàn)在參照圖12B,將描述當(dāng)對表達(dá)式求值時發(fā)生的交換。圖12B中的圖示包括一組 對象,其包括實例對象1250、過程對象1252和視圖對象1254。與以上參照圖10C提供的描 述相似,圖12B中所示的虛箭頭指示過程和視圖對象1252-1254先前與實例對象1250所特 有的本地化關(guān)系層級關(guān)聯(lián)。在執(zhí)行方法1200內(nèi),過程對象1252可利用實例對象1250來對 遇到的表達(dá)式求值。由于當(dāng)發(fā)起過程步驟的執(zhí)行時提供實例對象1250,所以過程對象1252 可以利用過程步驟內(nèi)的實例對象1250從而具有由表達(dá)式引擎1260求得的表達(dá)式。在一個實施例中,本發(fā)明實現(xiàn)表達(dá)式引擎1260,表達(dá)式引擎1260被構(gòu)造為對由實 例提供的環(huán)境內(nèi)的表達(dá)式進(jìn)行求值。具體地講,可在實例對象1250的環(huán)境內(nèi)使用封裝在 表達(dá)式引擎1260內(nèi)的功能,將表達(dá)式1262求得為XBind 1264、XML格式化數(shù)據(jù)或純文本。 一旦被求值,由表達(dá)式引擎1260識別的XBind 1264可以從實例對象1250傳遞至過程對象 1252。通過利用實例對象1250實例化和保持本地表達(dá)式引擎1260,關(guān)于由實例或任何子實 例提供的環(huán)境易于執(zhí)行表達(dá)式的求值。此外,以這種方式利用本地表達(dá)式引擎1260使得可 以在多鏈接作用域深度內(nèi)執(zhí)行實例和作用域處理。因此,可以根據(jù)正在執(zhí)行的應(yīng)用實例,不 同地對表達(dá)式求值,并且開發(fā)人員不需要解決管理多實例或作用域的復(fù)雜性。將在下文中 更加詳細(xì)描述在表達(dá)式引擎1260內(nèi)實現(xiàn)的功能和可由本發(fā)明求得的表達(dá)式的類型的附加 描述。在這點上,表達(dá)式引擎1260可用于對在操作內(nèi)定義的多個表達(dá)式求值。在調(diào)用操作 處理器之前對操作內(nèi)的這些表達(dá)式的每一個求值,這將在下文中進(jìn)行更加詳細(xì)地描述。再次參照圖12A,在塊1206,執(zhí)行方法1200發(fā)起適當(dāng)?shù)牟僮魈幚砥鞯膱?zhí)行。如上所 述,本發(fā)明提供多個操作處理器。每個操作處理器實現(xiàn)對于可能遇到的操作的類型特定的 功能。因此,如果當(dāng)前操作是打開操作,則在塊1206執(zhí)行方法1200調(diào)用打開操作處理器。 然而,實現(xiàn)了可在執(zhí)行方法1200內(nèi)調(diào)用的其它操作處理器(綁定、判斷、動作、改變等)。因 此,執(zhí)行方法1200被構(gòu)造為傳遞適于利用良定義的過程操作API進(jìn)行調(diào)用的特定操作處理 器的變元,這將在下面的示例中進(jìn)行討論。然而,每個操作處理器當(dāng)被調(diào)用時,向該操作處 理器提供至少實例和過程對象以及求得的XBind。在判斷塊1208,執(zhí)行方法1200確定是否將執(zhí)行過程步驟中的另外的操作。因此, 如果先前沒有執(zhí)行當(dāng)前過程步驟內(nèi)的所有操作,則執(zhí)行方法1200返回到塊1202,并且重復(fù) 執(zhí)行塊1202-1208直到執(zhí)行了每個操作。值得注意的是,過程步驟可以包括引導(dǎo)應(yīng)用執(zhí)行 流程的語句。例如,“調(diào)用”語句可被定義為過程步驟內(nèi)的語句,一旦執(zhí)行了當(dāng)前過程步驟中 的所有操作,該語句將執(zhí)行流程導(dǎo)向一個不同的過程步驟。更具體地講,提供“調(diào)用”操作, 該“調(diào)用”操作使開發(fā)人員能夠?qū)⒁粋€過程步驟的操作之間的執(zhí)行流程導(dǎo)向一個不同的過 程步驟。當(dāng)定義“調(diào)用”操作時,流程進(jìn)行到新的過程步驟,并且當(dāng)完成時返回到發(fā)起過程步驟內(nèi)的位置。在實際實施例中,可利用“調(diào)用”操作產(chǎn)生異步調(diào)用、時間延遲調(diào)用和時間 重復(fù)間隔調(diào)用。然后,一旦執(zhí)行了所有操作,執(zhí)行方法1200進(jìn)行到塊1210,在塊1210它結(jié)
束o如上所述,當(dāng)解釋應(yīng)用邏輯時,執(zhí)行方法1200發(fā)起特定操作處理器的執(zhí)行。繼續(xù) 參考上述的MyTasks應(yīng)用,將描述由特定操作處理器實現(xiàn)的功能。由于操作處理器實現(xiàn)狀 態(tài)改變,所以提供操作處理器利用的所有數(shù)據(jù)。此外,本發(fā)明的各方面被構(gòu)造為使得操作處 理器不返回數(shù)據(jù)。這樣,操作處理器可被實現(xiàn)為被提供用于執(zhí)行的任何事物而不返回數(shù)據(jù) 的孤獨功能。因此,可在本地執(zhí)行應(yīng)用中的過程操作。然而,由于操作處理器是孤立功能, 所以可從服務(wù)器端數(shù)據(jù)中心作為Web服務(wù)提供操作處理器?,F(xiàn)在參照圖13,將描述利用打開操作處理器的示例性打開處理例程1300。在上述 的示例性MyTasks應(yīng)用(圖6A)中,應(yīng)用定義打開操作612,打開操作612具有在執(zhí)行方法 1200(圖12A)內(nèi)可被求得為XBind的值屬性。因此,可調(diào)用打開操作處理器執(zhí)行打開操作 612。在一個實施例中,變元可在調(diào)用內(nèi)傳遞至包括先前求得的XBind的打開操作處理器和 適當(dāng)?shù)膶嵗瓦^程對象。如圖13所示,在塊1302,在打開操作處理器內(nèi)調(diào)用數(shù)據(jù)類型識別器以打開文檔。 如上所述,先前求得的XBind可以指向文檔或正打開的文檔內(nèi)的片段(節(jié)點)。此外,打開 操作處理器向數(shù)據(jù)類型識別器傳遞識別在調(diào)用內(nèi)正打開的文檔的這個先前求得的XBind。 當(dāng)接收到調(diào)用時,數(shù)據(jù)類型識別器在塊1304執(zhí)行處理以識別在接收的XBind內(nèi)引用的文 檔的文件類型。在示例性MyTasks應(yīng)用內(nèi),傳遞到數(shù)據(jù)類型識別器的XBind引用標(biāo)題為 “MyTaSkS_gUi.Xml”的文檔。在這個示例中,數(shù)據(jù)類型識別器將文件類型識別為UI XML文 檔。如上所述,在數(shù)據(jù)類型識別器內(nèi)提供將動作與特定文件類型進(jìn)行關(guān)聯(lián)的邏輯。在下文 描述當(dāng)利用數(shù)據(jù)類型識別器打開UI XML文檔時啟動的動作的示例性集合。在打開處理例程1300的塊1306內(nèi),數(shù)據(jù)類型識別器向視圖管理器908傳遞命 令以指示已經(jīng)接收到打開UI XML文檔的請求。具體地講,調(diào)用視圖管理器908以創(chuàng)建將 用于渲染新的用戶界面或應(yīng)用視圖的視圖對象。如上所述,可以在UI XML文檔(例如, "MyTasks_gui. xml")內(nèi)按語義描述應(yīng)用的用戶界面。在這點上,多視圖對象可與每個應(yīng)用 實例關(guān)聯(lián)。因此,在對視圖管理器908的調(diào)用內(nèi),可由數(shù)據(jù)類型識別器提供適當(dāng)實例的標(biāo)識 符和描述新視圖的UI XML文檔。另外如圖13所示,在塊1308內(nèi),啟動提供新應(yīng)用視圖的語義描述的邏輯的執(zhí)行。 如上所述,視圖管理器908負(fù)責(zé)實例化視圖對象并且執(zhí)行使得可以渲染在UI XML文檔內(nèi)描 述的應(yīng)用視圖的任務(wù)。為了渲染新應(yīng)用視圖,利用視圖對象實例化組合和對話框?qū)ο蟆H?下文中參照圖23進(jìn)行更加詳細(xì)地描述的,本發(fā)明提供的這些對象實現(xiàn)使得在計算機(jī)顯示 器上渲染在UI XML文檔內(nèi)按語義描述的圖形元素的功能。然后,打開處理例程1300進(jìn)行 到塊1310,在塊1310它結(jié)束?,F(xiàn)在參照圖14A-14B,將更加詳細(xì)描述在打開過程和UI XML文檔時對數(shù)據(jù)類型識 別器的利用。圖14A示出了當(dāng)打開UI XML文檔時進(jìn)行交互的過程對象1400、打開操作處 理器1402、數(shù)據(jù)類型識別器1404、實例對象1406、視圖管理器908和視圖對象1408。因此, 圖14A所示的框圖可以對應(yīng)于由在上文參照圖13描述的打開操作處理例程1300利用的對 象??捎蛇^程對象1400啟動應(yīng)用視圖的打開,過程對象1400調(diào)用打開操作處理器1402來打開由求得的XBind識別的特定文檔。當(dāng)接收到調(diào)用時,打開操作處理器1402利用數(shù)據(jù)類 型識別器1404識別文件類型并且使得執(zhí)行適當(dāng)動作。在該實施例中,當(dāng)UI XML文檔從打 開操作處理器1402傳遞至數(shù)據(jù)類型識別器1404時,定義便于打開和啟動應(yīng)用的視圖邏輯 的執(zhí)行的動作。此外,利用數(shù)據(jù)類型識別器1404將獲得的視圖對象1408與適當(dāng)?shù)膶嵗龑?象1406進(jìn)行關(guān)聯(lián)。在圖14A所示的示例中,當(dāng)接收到用于打開UI XML文檔的調(diào)用時,數(shù)據(jù)類型識別 器1404調(diào)用視圖管理器908。為了打開和執(zhí)行UIXML文檔內(nèi)的邏輯,視圖管理器908實例 化視圖對象1408并向其提供實例對象1406的標(biāo)識符和引用適當(dāng)UI XML文檔的XBind。通 過以這種方式傳遞數(shù)據(jù),視圖對象1408變得知道它的關(guān)聯(lián)的實例。一旦實例化視像 1408,利用與上述的過程初始化例程1100(圖11)相似的功能,啟動提供新應(yīng)用視圖的語義 描述的邏輯的執(zhí)行。具體地講,視圖管理器908可以將適當(dāng)UI XML加載到客戶機(jī)端緩存器 內(nèi)。然后,視圖對象1408可被實例化并用于渲染應(yīng)用的用戶界面組件和對話框。然而,與 過程不同,多個視圖對象可被實例化并且與同一實例進(jìn)行關(guān)聯(lián)。在實際實施例中,本發(fā)明的各方面支持應(yīng)用的UI邏輯的惰性加載和/或渲染。為 此,根據(jù)由萬維網(wǎng)聯(lián)盟定義的標(biāo)準(zhǔn)實現(xiàn)的XLinks可用于執(zhí)行一個或多個UI XML文檔的惰 性加載和/或渲染。本領(lǐng)域技術(shù)人員等將認(rèn)識到,XLink可被包括在描述不同XML資源之 間的鏈接的XML文檔內(nèi)。與在鏈接Web頁面時內(nèi)向用戶提供意義的傳統(tǒng)的基于HTML的超 鏈接不同,XLinks更易于由軟件系統(tǒng)和計算機(jī)解釋。值得注意的是,XLinks可以包含定義 將激活XLink的條件和當(dāng)激活時采取的動作的邏輯。結(jié)果,XLinks適于執(zhí)行應(yīng)用UI邏輯 的按需和/或惰性渲染。不是當(dāng)啟動應(yīng)用時加載所有的應(yīng)用的UI邏輯,可定義XLinks從 而按需要鏈接到適當(dāng)?shù)腦ML資源。例如,在上述的示例性MyTasks應(yīng)用中,在加載和渲染所 有的應(yīng)用的用戶界面邏輯后,“隱藏”BUtton2組件704。利用XLinks在需要時加載和/或 渲染BUtton2組件704的UI邏輯,可以實現(xiàn)等同的功能和改進(jìn)的性能。在這個示例中,與 MyTasks_gui. xml文檔650中的Button2組件704關(guān)聯(lián)的用戶界面邏輯可以包括引用定義 相關(guān)用戶界面邏輯的本地或遠(yuǎn)程資源(例如,另一個UI XML文檔)的XLink。當(dāng)由應(yīng)用邏 輯規(guī)定時,這個XLinks可用于加載和/或渲染與Button2組件704對應(yīng)的UI邏輯。一旦打開操作處理器1402完成,獲得的視圖對象1408被返回到數(shù)據(jù)類型識別器 1404。然后,數(shù)據(jù)類型識別器1404將視圖對象1408與適當(dāng)實例進(jìn)行關(guān)聯(lián)。具體地講,當(dāng)創(chuàng) 建新的應(yīng)用視圖時,數(shù)據(jù)類型識別器1404將獲得的視圖對象1408傳遞至實例對象1406。作 為響應(yīng),迷你視圖管理器1412被更新,從而將視圖對象1408與對應(yīng)實例進(jìn)行關(guān)聯(lián)。與由迷 你視圖管理器1412分配給相同對象的名稱相比,在視圖管理器908內(nèi)分配給視圖對象1408 更加復(fù)雜的名稱。具體地講,視圖管理器908內(nèi)分配給視圖對象1408的名稱包括對應(yīng)的實 例對象1406的標(biāo)識符。如下文中更加詳細(xì)地描述的,通過實現(xiàn)以這種方式對對象進(jìn)行命名 的系統(tǒng),可以在多個應(yīng)用實例之間區(qū)分相同視圖。通過以這種方式控制數(shù)據(jù)的傳遞,本發(fā)明 的各方面實現(xiàn)了界定應(yīng)用實例的邊界的本地化關(guān)系層級。現(xiàn)在參照圖14B,將更加詳細(xì)描述在打開過程XML文檔時對數(shù)據(jù)類型識別器1404 的利用。與圖14A相似,圖14B示出了過程對象1400、數(shù)據(jù)類型識別器1404、實例對象1406、 以及過程管理器906。因此,圖14B所示的框圖可對應(yīng)于由過程初始化例程1100 (圖11)利 用的對象。當(dāng)打開過程XML文檔時,在應(yīng)用包或者孤立應(yīng)用的環(huán)境中利用數(shù)據(jù)類型識別器1404來識別文檔的文件類型。在這個示例中,數(shù)據(jù)類型識別器1404定義便于在過程XML 文檔內(nèi)描述的邏輯的打開和啟動執(zhí)行的動作。具體地講,執(zhí)行流程從數(shù)據(jù)類型識別器1404 進(jìn)行到對過程對象1400進(jìn)行實例化的過程管理器906。一旦打開了過程XML文檔,對獲得 的過程對象1400的引用可被返回到數(shù)據(jù)類型識別器1404。然后,數(shù)據(jù)類型識別器1404向 實例對象1406提供對獲得的過程對象1400的引用。作為響應(yīng),迷你過程管理器1414被更 新,由此將過程對象1400與對應(yīng)實例進(jìn)行關(guān)聯(lián)。參照圖15A-15B,將描述提供關(guān)于利用迷你視圖管理器以便于過程執(zhí)行的示例的 動作操作。一旦執(zhí)行了 MyTasks應(yīng)用中的打開操作612,執(zhí)行流程進(jìn)行到動作操作614(圖 6A)。在這點上,參照圖15A-15B描述動作處理例程1500,圖15A-15B示出了邏輯以及實現(xiàn) 例程1500所涉及的對象之間的交互。如圖15A所示,在塊1502,在動作操作614的值屬性內(nèi)表示的表達(dá)式被求得為 XBind。在示例性MyTasks應(yīng)用中,動作操作614包含值屬性“ #MyTasks ”,這個值屬性 “#MyTasks”在塊1502被求得為XBind?,F(xiàn)在具體參照圖15B,實例對象1552可利用封裝在 表達(dá)式引擎1550內(nèi)的功能將“ftMyTasks”表達(dá)式求得為XBind。在這個示例中,表達(dá)式引 擎1550被構(gòu)造為針對命名為“MyTasks”的視圖對象在迷你視圖管理器1554內(nèi)執(zhí)行查詢。 當(dāng)創(chuàng)建新的應(yīng)用視圖時,獲得的視圖對象被傳遞至對應(yīng)實例,該對應(yīng)實例相應(yīng)地更新迷你 視圖管理器1554。在這點上,MyTasks視圖對象被分配由實例保持的迷你視圖管理器1554 內(nèi)的直接名稱,而非用于全局視圖管理器908內(nèi)的視圖的更加復(fù)雜的標(biāo)識符。由于復(fù)雜名 稱用于區(qū)分屬于不同實例和應(yīng)用的視圖,所以在這個實例內(nèi)不需要更復(fù)雜的名稱。由于迷 你視圖管理器1554保持它自己的視圖,所以這個信息是實例及其迷你視圖管理器1554已 經(jīng)知道的事物。通過提供這種架構(gòu),在迷你視圖管理器1554的幫助下,表達(dá)式引擎1550能 夠在與不同實例和應(yīng)用關(guān)聯(lián)的視圖之間進(jìn)行區(qū)分。因此,在示例性MyTasks應(yīng)用內(nèi),迷你 視圖管理器1554將包括名稱為“MyTasks”的視圖對象。視圖對象還包括對這個視圖對象 所關(guān)聯(lián)的實例的引用。在對“ftMyTasks”表達(dá)式求值時,表達(dá)式引擎1550將MyTasks視圖 對象1558識別為操作的源或“發(fā)射器”。具體地講,與實例對象1552關(guān)聯(lián)的MyTasks視圖 對象1558被識別為發(fā)射器而非與一個不同實例關(guān)聯(lián)的“MyTasks”視圖對象。由于表達(dá)式 引擎1550關(guān)于實例對表達(dá)式求值,所以利用迷你視圖管理器1554識別作為事件源的正確 MyTasks視圖對象1558。在這個示例中,返回到過程對象1556的XBind將包括引用MyTasks_gui. xml文檔 650和MyTasks視圖對象1558的URL。指示器將包括在XBind內(nèi)用于指示MyTasks視圖對 象1558是正執(zhí)行的操作的發(fā)射器或源。在迷你視圖管理器1554內(nèi)的查詢沒有識別與在表 達(dá)式中引用的對象的匹配的情況下,表達(dá)式引擎1550被構(gòu)造為在視圖管理器908內(nèi)進(jìn)行查 詢以獲得相關(guān)的視圖對象。在例程1500的塊1504內(nèi),過程對象1556啟動動作操作處理器1560的執(zhí)行。在 示例性MyTasks應(yīng)用內(nèi),利用表達(dá)式引擎1550先前求得的XBind和發(fā)射MyTasks視圖對 象1558由過程對象1556傳遞至動作操作處理器1560。然后,在塊1506,動作操作處理器 1560使得執(zhí)行在應(yīng)用過程邏輯內(nèi)指定的方法。在這個示例中,MyTasks應(yīng)用內(nèi)的動作操作 614定義用于識別要執(zhí)行的動作的方法和目標(biāo)的下面“<Component>”XML元素〈component name = ‘’ button2 ‘’ action = ‘’ hide ‘’ value = ‘’ “ ></component)通過定義這個元素,應(yīng)用代碼導(dǎo)向隱藏名稱為“bUtton2”的組件。在一個方面中, 利用用于對視圖對象的關(guān)聯(lián)用戶界面組件執(zhí)行狀態(tài)操縱(包括但不限于啟用、禁用、隱藏 和顯示方法等)的普通方法,對視圖對象進(jìn)行編碼。由于MyTasks視圖對象1558被傳遞至 動作操作處理器1560,所以可以在對象1558上直接調(diào)用這些普通方法。在這個示例中,動 作操作處理器在MyTasks視圖對象1558上調(diào)用“隱藏”方法并且將BUtton2組件1562識 別為將要隱藏的目標(biāo)組件。然后,動作處理例程1500進(jìn)行到塊1508,在塊1508它結(jié)束。現(xiàn)在參照圖16,將更加詳細(xì)描述綁定操作處理器的實現(xiàn)。一旦執(zhí)行了 MyTasks應(yīng) 用中的打開和動作操作612-614,執(zhí)行流程進(jìn)行到綁定操作616 (圖6A)。如圖16所示,在塊 1602,在綁定操作616的值屬性內(nèi)表示的表達(dá)式被求得為XBind并且被返回到適當(dāng)?shù)倪^程 對象。與上文提供的描述相似,過程對象利用實例本地的表達(dá)式引擎對提供的表達(dá)式求值。 在示例性綁定操作616內(nèi),在塊1602,“data/tasks, xml”表達(dá)式將被求得為下面的XBind URL = data/tasks, xmlBase path = /Selection =這個XBind的URL引用用于存儲任務(wù)描述的數(shù)據(jù)文檔。此外,基路徑引用與URL 對應(yīng)的數(shù)據(jù)文檔的根節(jié)點并且這個示例性XBind的選擇為空。在綁定處理例程1600的塊1604,用于執(zhí)行當(dāng)前過程步驟的過程對象啟動綁定操 作處理器的執(zhí)行。在這個調(diào)用內(nèi),綁定操作處理器接收先前求得的XBind以及適當(dāng)?shù)倪^程 和實例對象。如上所述,開發(fā)人員能夠根據(jù)定義功能調(diào)用參數(shù)的過程操作API和可位于操 作的主體內(nèi)的XML語義結(jié)構(gòu),創(chuàng)建操作處理器。在這個示例中,綁定操作616(圖6A)定義 下面的"<component>,,XML 元素 618 〈component view =" MyTasks" name =〃 input3〃 select=〃 /tasks/task/i description" >因此,綁定操作處理器(在塊1604進(jìn)行調(diào)用)負(fù)責(zé)對這個邏輯進(jìn)行解釋以將特定 組件綁定到XML文檔內(nèi)的片段。更一般地講,每個操作處理器負(fù)責(zé)對在操作元素的子元素 內(nèi)定義的邏輯進(jìn)行解釋。在這點上,過程操作API使開發(fā)人員可以定義操作的主體內(nèi)的XML 語法從而可以根據(jù)需要構(gòu)造在操作處理器內(nèi)執(zhí)行的邏輯。在塊1605,與將綁定到基礎(chǔ)XML文檔的組件對應(yīng)的視圖對象被識別并被返回到綁 定操作處理器。在這個示例中,由綁定操作處理器解釋的組件元素618將“Input3”識別為 創(chuàng)建在“MyTasks”視圖對象的環(huán)境內(nèi)。由于適當(dāng)?shù)膶嵗龑ο蟊惶峁┙o綁定操作處理器,所 以可以易于識別正確的視圖對象。具體地講,執(zhí)行實例的迷你視圖管理器1554內(nèi)的查詢, 并且將“MyTasks”視圖對象直接返回到綁定操作處理器。如圖16所示,在塊1606,在綁定操作處理器內(nèi)創(chuàng)建翻譯的XBind。傳遞至綁定操 作處理器的XBind識別存儲由MyTasks應(yīng)用利用的內(nèi)容的文檔(“data/tasks, xml”)。然 而,僅僅識別的XML文檔內(nèi)的數(shù)據(jù)的一個子集將被綁定到Input3組件。因此,在這個示例中 由綁定操作616執(zhí)行的綁定被構(gòu)造為將Input3組件的綁定縮減至由XPath表達(dá)式識別的 "data/tasks, xml ”文檔內(nèi)的數(shù)據(jù)的片段。具體地講,組件元素618內(nèi)的選擇屬性包括XPath 表達(dá)式,該XPath表達(dá)式限定綁定操作616的值屬性內(nèi)的表達(dá)式。在這個示例中,XPath表達(dá)式識別用于將進(jìn)入的XBind限定到綁定操作處理器并且創(chuàng)建下面翻譯的XBind的XML文 檔內(nèi)的適當(dāng)片段URL = data/tasks, xmlBase path = /tasks/task/idescriptionSelection =上述翻譯的XBind可以以速記符號寫為"data/tasks. xml#/tasks/task/i description”。在這點上,翻譯的XBind的URL引用存儲相關(guān)任務(wù)描述的數(shù)據(jù)模型內(nèi)的 XML文檔。在由URL識別的XML文檔內(nèi),基路徑引用任務(wù)元素及其對應(yīng)的描述屬性。如下 文中更加詳細(xì)地描述的,XBind還可以包括提供引用數(shù)據(jù)模型內(nèi)的片段時的附加特征的 ‘‘Selection,,。在綁定處理例程1600的塊1608內(nèi),調(diào)用由適當(dāng)用戶界面組件提供的設(shè)置數(shù)據(jù)功 能。在這個示例中,Input3組件是綁定操作616的對象并且將被綁定至任務(wù)描述的列表。 組件API可用于定義用于對特定組件設(shè)置數(shù)據(jù)的某些方法。在一個實施例中,Input3組件 可包括在塊1608內(nèi)調(diào)用的設(shè)置數(shù)據(jù)方法。值得注意的 是,當(dāng)調(diào)用綁定操作處理器時,可以 基于視圖對象和對在塊1604接收的組件名稱的引用,識別適當(dāng)組件。當(dāng)被調(diào)用時,設(shè)置數(shù)據(jù)方法通常將執(zhí)行管理功能和錯誤處理以確保組件還沒有綁 定至數(shù)據(jù)模型內(nèi)的XML文檔。然后,在塊1612,作為綁定操作616的對象的Input3組件被 作為更新監(jiān)聽器添加到“data/tasks, xml”文檔。如上所述,本發(fā)明提供了文檔對象形式的 XML文檔的結(jié)構(gòu)化面向?qū)ο蟊硎?。在一個實施例中,文檔對象用作由Web瀏覽器和XML解析 器利用的D0M(“文檔對象模型”)對象的包裝器。在這點上,在本發(fā)明提供的文檔對象內(nèi)編 碼增強(qiáng)特征,這些增強(qiáng)特征包括添加存在于網(wǎng)絡(luò)操作系統(tǒng)環(huán)境內(nèi)的任何對象作為對數(shù)據(jù)模 型進(jìn)行的更新的監(jiān)聽器的能力。僅作為示例,可以是數(shù)據(jù)更新監(jiān)聽器的對象包括但不限于 過程、視圖、組件、通信通道等。在塊1612,執(zhí)行調(diào)用以將Input3組件作為更新監(jiān)聽器添加 到與“data/tasks, xml”文檔對應(yīng)的對象。在這點上,每個文檔對象保持將響應(yīng)于數(shù)據(jù)更新 而被通知的監(jiān)聽器的列表。通過在塊1612發(fā)出調(diào)用以添加更新監(jiān)聽器,Input3組件將變 成同一文檔對象上的潛在許多數(shù)據(jù)更新監(jiān)聽器之一。在判斷塊1614,確定作為更新監(jiān)聽器添加到文檔的組件是否使用規(guī)則。在一個方 面中,本發(fā)明支持使得規(guī)則與數(shù)據(jù)綁定組件關(guān)聯(lián)的功能。在這點上,規(guī)則處理器可以被包括 在數(shù)據(jù)模型內(nèi),用于定義組件和其它對象將如何解釋它們的數(shù)據(jù)綁定。如在下文中更加詳 細(xì)地描述的,規(guī)則使得普通組件根據(jù)數(shù)據(jù)模型內(nèi)的內(nèi)容來解釋、學(xué)習(xí)和采取適當(dāng)動作。因 此,具有不同元素、屬性和層級的任何XML語義或語言可以理解和/或被綁定至相同類型的 普通組件。換言之,不需要針對某數(shù)據(jù)模型具體地創(chuàng)建使用規(guī)則的組件。代替地,規(guī)則使 得普通組件組能夠與任何類型的基礎(chǔ)數(shù)據(jù)一起使用,并且因此便于MVC設(shè)計模式內(nèi)的真實 數(shù)據(jù)抽象。組件不需要理解基礎(chǔ)數(shù)據(jù)模型的結(jié)構(gòu)并且可利用規(guī)則來解釋內(nèi)容以實現(xiàn)期望 功能。當(dāng)建立與使用規(guī)則的組件的綁定時,實現(xiàn)用于設(shè)置和/或更新規(guī)則處理器從而使得 可以應(yīng)用規(guī)則的功能。在添加組件作為更新監(jiān)聽器的調(diào)用中,可以包括標(biāo)志以指示組件是 否是規(guī)則用戶。因此,如果接收的標(biāo)志指示組件不是規(guī)則用戶,則在塊1614執(zhí)行的測試的 結(jié)果是“否”,并且綁定處理例程1600進(jìn)行到塊1618,這將在下文進(jìn)行更加詳細(xì)地描述。相 反,如果接收的標(biāo)志指示組件是規(guī)則用戶,則測試的結(jié)果是“是”并且綁定處理例程進(jìn)行到塊1616。在塊1616,執(zhí)行設(shè)置規(guī)則例程1600,其將數(shù)據(jù)綁定組件的規(guī)則施加和并入到在數(shù) 據(jù)模型內(nèi)保持的規(guī)則處理器。在這點上,在下文中參照圖21更加詳細(xì)描述由設(shè)置規(guī)則例程 執(zhí)行的邏輯。在綁定處理例程1600的塊1618中,產(chǎn)生調(diào)用以更新作為綁定操作的對象的組件 的用戶界面。根據(jù)組件API定義的方法可用于執(zhí)行用戶界面的更新。具體地講,組件API 使開發(fā)人員提供用于實現(xiàn)組件的“Update ()”方法的邏輯。在這點上,在下文中參照圖22 更加詳細(xì)描述可在“Update ()”方法內(nèi)實現(xiàn)的邏輯。在這個示例中,與Input3組件關(guān)聯(lián)的 "Update ()”方法將導(dǎo)致在數(shù)據(jù)模型內(nèi)保持的任務(wù)描述被顯示。然后,綁定處理例程1600 進(jìn)行到塊1620,在塊1620它結(jié)束。一旦綁定操作616完成執(zhí)行,向新數(shù)據(jù)綁定組件通知影 響數(shù)據(jù)模型("data/tasks, xml")的更新。在示例性MyTasks應(yīng)用(圖6A)內(nèi),綁定操作616是執(zhí)行的初始化應(yīng)用過程步驟 604內(nèi)的最后一個操作。當(dāng)執(zhí)行綁定操作616時,MyTasks應(yīng)用的處理保持空閑,直到發(fā)生 觸發(fā)事件。在這點上,在下文參照圖17描述觸發(fā)器激活例程1700。然而,在討論觸發(fā)器的 使用之前,將更加詳細(xì)描述由本發(fā)明提供的表達(dá)式引擎實現(xiàn)的功能的說明。在現(xiàn)有平臺內(nèi),向開發(fā)人員提供用于查詢數(shù)據(jù)并且定義應(yīng)用的計算邏輯的相同編 程工具。在這點上,在性質(zhì)上強(qiáng)制的編程語言最終將所有的應(yīng)用的邏輯表示為有序語句的 序列。盡管強(qiáng)制編程工具的有序性質(zhì)非常適于實現(xiàn)計算邏輯,但是強(qiáng)制語言的數(shù)據(jù)查詢能 力不太健壯。代替地,非強(qiáng)制語言編程工具將更加適于查詢或以其它方式訪問數(shù)據(jù)。為此, 提供表達(dá)式語言以使得當(dāng)執(zhí)行I/O時開發(fā)人員可以利用非強(qiáng)制編程工具。在這點上,表達(dá) 式被構(gòu)造為與XML語法兼容并且被劃界用于本發(fā)明提供的基于XML的編程語言內(nèi)。在這里 提供過程XML語言如何能夠容易地使用表達(dá)式的特定示例。然而,由于表達(dá)式可被合并以 用于其它XML語言內(nèi)并且還直接從對象內(nèi)的程序代碼進(jìn)行求值和使用,所以這些示例應(yīng)該 解釋為是示例性的。實現(xiàn)被構(gòu)造為執(zhí)行符合MVC設(shè)計模式的應(yīng)用的開發(fā)平臺,關(guān)于訪問可在運行時演 變的數(shù)據(jù)提出了挑戰(zhàn)。在一個實施例中,XBind提供用于引用存儲器內(nèi)對象、文檔、數(shù)據(jù)子集 等的標(biāo)準(zhǔn)化手段。如上所述,XBind是三維數(shù)據(jù)類型,包括URL、基路徑(例如,可引用XML 文檔內(nèi)的片段或整個XML文檔的XPath表達(dá)式)、和選擇(例如,多個XPath表達(dá)式)。從 下文所述的示例可清楚看出,XBind數(shù)據(jù)類型提供可在運行時演變的對象傳送它們的狀態(tài) 的標(biāo)準(zhǔn)化方法。這樣,XBind允許松散耦合的系統(tǒng)的不同部分可以以標(biāo)準(zhǔn)化方法高效地傳送 它們的狀態(tài)信息。在這點上,XBind提供向用戶界面組件綁定數(shù)據(jù)的簡單直接的方法。通 過利用選擇,能夠在XBind內(nèi)描述組件的狀態(tài),該狀態(tài)可以作為輸入提供給其它系統(tǒng)。更一 般地說,可以在任何時間針對描述對象的狀態(tài)的XBind,查詢網(wǎng)絡(luò)操作系統(tǒng)環(huán)境內(nèi)的每個對 象。因此,可以對不同對象設(shè)置描述對象(例如,組件)的狀態(tài)的XBind以“克隆”或傳達(dá)組 件的狀態(tài)。在另一個方面中,可以在網(wǎng)絡(luò)上同步與對象關(guān)聯(lián)的XBind。結(jié)果,可利用XBind 更新在遠(yuǎn)程計算機(jī)上執(zhí)行的對象以保持同步的狀態(tài)。這是本發(fā)明的各方面能夠在網(wǎng)絡(luò)上實 現(xiàn)實時協(xié)作的一種方式。在一個實施例中,可由表達(dá)式引擎應(yīng)用XPath求值。本領(lǐng)域技術(shù)人員等將認(rèn)識 到,XPath是提供用于識別和選擇在XML文檔內(nèi)的特定位置處的數(shù)據(jù)的語言的萬維網(wǎng)聯(lián) 盟(W3C)標(biāo)準(zhǔn)。此外,XPath建立用于形成對特定值的表達(dá)式求值的約定。例如,XPath
35表達(dá)式“/tasks/task/@description”用于MyTasks應(yīng)用內(nèi),它包括用于選擇名稱為 “description”的屬性的符號的縮寫語法。這個語法符合XPath約定并且用于引用滿 足特定選擇或匹配參數(shù)的XML文檔內(nèi)的數(shù)據(jù)的子集。本發(fā)明提供的表達(dá)式語言使開發(fā)人員可以引用會在運行時經(jīng)歷狀態(tài)改變的存儲 器內(nèi)對象。例如,“#MyTasks ”和“#MyTask#input3 ”表達(dá)式分別引用不同的視圖和組件對 象。利用簡單符號,開發(fā)人員能夠在對這些存儲器內(nèi)對象和它們的數(shù)據(jù)綁定的引用之間進(jìn) 行區(qū)分。例如,如果開發(fā)人員訪問綁定到“Input3”組件的數(shù)據(jù)而非對對象自身的的引用, 則可利用“ {#MyTaSkS#input3} ”表達(dá)式。這個特定表達(dá)式將求得為在在與MyTasks視圖內(nèi) 的Input3關(guān)聯(lián)的XBind內(nèi)引用的XML文檔內(nèi)發(fā)現(xiàn)的值。當(dāng)遇到包含大括號的表達(dá)式時,表 達(dá)式引擎將綁定至識別的對象的一個或多個XML節(jié)點轉(zhuǎn)換成文本或XML。在這點上,本發(fā)明 提供的視圖和組件對象知道它們的數(shù)據(jù)綁定并且總能夠針對它們的XBind進(jìn)行查詢。通過 關(guān)于實例對表達(dá)式求值,在對這些類型的表達(dá)式求值時,表達(dá)式引擎能夠識別適當(dāng)?shù)膶ο?和對應(yīng)的數(shù)據(jù)綁定。因此,表達(dá)式語言使開發(fā)人員能夠利用相同的簡單符號引用存儲器內(nèi) 對象以及它們的數(shù)據(jù)綁定。此外,表達(dá)式可以引用由URL識別的外部資源,該URL是利用通 信通道自動獲得的。與利用XPath對文檔內(nèi)的數(shù)據(jù)進(jìn)行導(dǎo)航和選擇的現(xiàn)有系統(tǒng)不同,本發(fā)明的各方面 可以利用XPath約定引用存儲器內(nèi)對象和它們的關(guān)聯(lián)數(shù)據(jù)。假定名稱為“Inputl”的組件 存在于稱作“MyView”的應(yīng)用視圖內(nèi),下面將是由本發(fā)明求得的有效表達(dá)式{#MyView#inputl#@n£ime;}在引用XML文檔、變量或者存儲器內(nèi)對象后,在關(guān)于組件XBind的表達(dá)式中的最后 一個“#”字符后應(yīng)用XPath約定。當(dāng)遇到有關(guān)XPath表達(dá)式時,組件內(nèi)的基路徑或選擇將與 參照綁定處理例程1600(圖16)描述的所提供的XPath合并。在上述的示例性表達(dá)式中, 最后一個“#”指示XPath表達(dá)式(例如,“(iname”)是相對的,從而使得這個XPath表達(dá)式 將與組件的XBind合并。然而,本發(fā)明求值的XPath表達(dá)式還可以是絕對的。在對以“/” 為開始字符表示的絕對XPath表達(dá)式求值時,本發(fā)明的各方面將忽視組件的XBind的任何 基路徑或選擇。本發(fā)明的各方面通過上述方法之外的其它方法利用XPath約定。可以在于 2007年9月28日提交的題目為“Network-Based Operation System”的共同受讓的美國臨 時專利申請No. 60/976,339內(nèi)發(fā)現(xiàn)XPath約定的使用的另外示例以及可由本發(fā)明進(jìn)行求值 的其它類型的表達(dá)式,通過引用將該臨時專利申請的內(nèi)容明確并入本文。在一個實施例中,可利用表達(dá)式語言訪問存儲器內(nèi)對象的性質(zhì)??筛鶕?jù)下面的語 法在不管這些性質(zhì)的數(shù)據(jù)類型的情況下訪問這些性質(zhì)#MyView. id#MyView#inputl. name還可以利用表達(dá)式語言調(diào)用對存儲器內(nèi)對象執(zhí)行動作的方法。在這點上,可通過 多種方法對本發(fā)明提供的存儲器內(nèi)對象進(jìn)行編碼。利用表達(dá)式語言,可直接在這些對象上 調(diào)用方法。例如,下面是本發(fā)明求值的在對象上調(diào)用方法的表達(dá)式的類型。#MyView#maximize()#MyView#inputl. clear ()此外,由本發(fā)明對接受其它表達(dá)式作為變元的高級表達(dá)式求值。換言之,表達(dá)式語
36言支持符合非強(qiáng)制編程技術(shù)的表達(dá)式的遞歸求值,如下面的示例所示#MyView#{#MyView#inputl. getN£ime( )}在這個示例中,首先在使用getName ()方法的內(nèi)部表達(dá)式內(nèi)求得Input 1組件的 名稱。識別組件名稱的遞歸求值的表達(dá)式然后被提供作為外部表達(dá)式的參數(shù)。這僅僅是與 本發(fā)明提供的XML編程語言結(jié)合地進(jìn)行集成和使用非強(qiáng)制編程工具的方法的一個示例。在網(wǎng)絡(luò)操作系統(tǒng)環(huán)境內(nèi),可響應(yīng)于觸發(fā)事件的發(fā)生執(zhí)行過程步驟和關(guān)聯(lián)的操作。 換言之,過程步驟的執(zhí)行可由事件驅(qū)動。因此,當(dāng)打開MyTasks. xml文檔600時,對觸發(fā)器 602進(jìn)行登記從而使得當(dāng)激活觸發(fā)器時可將流程導(dǎo)向適當(dāng)?shù)倪^程步驟。將參照圖17A-17B 描述觸發(fā)器激活例程1700,圖17A-17B示出了用于實現(xiàn)例程1700的對象之間的流程和交 互。如上所述,MyTasks. xml文檔600定義下面觸發(fā)器602?!磘rigger view = “ MyTasks “ component = “ buttonl “ event =〃 select" step = “ 2" >圖17所示的觸發(fā)器激活例程1700假定用戶選擇了在這個觸發(fā)器元素內(nèi)識別的 Buttonl組件,由此在塊1702激活觸發(fā)器602。在塊1704,響應(yīng)于觸發(fā)器被激活,發(fā)生觸發(fā)事件的組件對象向事件管理器914傳 遞通知監(jiān)聽器調(diào)用。在這個調(diào)用中,適當(dāng)?shù)慕M件對象提供一組事件數(shù)據(jù)并且指引事件管理 器914通知登記了通知器對象或與提供的數(shù)據(jù)匹配的其它對象的所有事件監(jiān)聽器。具體參 照圖17B,在塊1704,與MyTasks視圖對象1752關(guān)聯(lián)的Buttonl組件對象1750將向事件管 理器914傳遞通知監(jiān)聽器調(diào)用。在這個調(diào)用中,提供識別發(fā)起觸發(fā)器事件的組件的表達(dá)式 (例如,“#MyTasks#buttonl,,)以及事件類型(例如,“select,,)。在塊1706,事件管理器914向一個或多個監(jiān)聽對象警告事件的激活。具體地講,事 件管理器914執(zhí)行從Buttonl組件對象1750傳遞的事件數(shù)據(jù)與當(dāng)?shù)怯洉r間監(jiān)聽器時先前 提供的數(shù)據(jù)進(jìn)行匹配的查詢。在這點上,過程初始化例程1100 (圖11)提供對象如何在事 件管理器914內(nèi)登記時間監(jiān)聽器的描述。在一個實施例中,當(dāng)初始啟動應(yīng)用時,在過程XML 文檔內(nèi)遇到的每個觸發(fā)器將使得對應(yīng)通知器對象作為事件監(jiān)聽器預(yù)先緩存在存儲器內(nèi)。在 預(yù)計一個或多個應(yīng)用實例將激活觸發(fā)器時,當(dāng)初始啟動應(yīng)用時,通知器對象預(yù)先緩存在存 儲器內(nèi)。預(yù)先緩存的通知器對象與視圖名稱、組件名稱和事件類型關(guān)聯(lián),所述視圖名稱、組 件名稱和事件類型共同用作在塊1706內(nèi)執(zhí)行查詢的唯一關(guān)鍵字。換言之,僅當(dāng)指定視圖內(nèi) 的組件經(jīng)歷在觸發(fā)器內(nèi)識別的類型的事件時,才向?qū)?yīng)通知器對象通知事件激活。這樣,與 正在執(zhí)行的應(yīng)用實例的數(shù)目無關(guān),針對在過程XML文檔內(nèi)定義的觸發(fā)器,僅僅單個通知器 對象將登記在事件管理器914內(nèi)。即使存在應(yīng)用的多個實例,該架構(gòu)也使每一個應(yīng)用實例 能夠重用相同通知器對象。因此,由于僅僅一個觸發(fā)器按照隨后由多個應(yīng)用實例共享的通 知器對象的形式登記事件監(jiān)聽器,所以這個架構(gòu)使事件管理器914能夠更加高效地重復(fù)和 通知監(jiān)聽器。換言之,在塊914執(zhí)行的查詢的性能不取決于正在執(zhí)行的應(yīng)用實例的數(shù)目。在觸發(fā)器激活例程1700的塊1708內(nèi),識別與激活的事件(觸發(fā)器)關(guān)聯(lián)的適當(dāng) 實例。當(dāng)被警告發(fā)生事件時,變元被傳遞至事件管理器914,用于識別適當(dāng)?shù)谋O(jiān)聽對象和受 到影響的實例。在這個示例中,識別Buttonl組件對象1750的表達(dá)式被提供給事件管理器 914并且可用于通過訪問保持對所屬于的實例的引用的組件視圖對象,來識別適當(dāng)?shù)膶嵗?如上所述,當(dāng)打開應(yīng)用視圖時,對實例的引用被提供給獲得的視圖對象。因此,MyTasks視圖對象1754知道它的關(guān)聯(lián)的實例對象1758。由于在視圖的環(huán)境內(nèi)創(chuàng)建組件對象,所以在塊 1708內(nèi),Buttonl組件對象1750可利用MyTasks視圖對象1754識別適當(dāng)?shù)膶嵗?。一旦?道了適當(dāng)實例,實例對象1758被提供給過程對象內(nèi)的執(zhí)行方法。圖17B所示的架構(gòu)和上文提供的描述示出了本發(fā)明如何能夠在支持應(yīng)用邏輯的 事件驅(qū)動執(zhí)行的系統(tǒng)內(nèi)支持過程步驟的無狀態(tài)執(zhí)行。如上所述,利用單個過程XML文檔執(zhí) 行多個應(yīng)用實例。在這點上,不同應(yīng)用實例可以重復(fù)地重用過程對象,從而提供執(zhí)行應(yīng)用的 高效平臺。即使針對應(yīng)用內(nèi)的每個觸發(fā)器預(yù)先緩存僅僅一個通知器對象1756,本發(fā)明仍能 夠向過程對象1700提供適當(dāng)?shù)膶嵗?。在這點上,當(dāng)事件管理器914接收到與包括視圖、組 件和事件類型的唯一關(guān)鍵字匹配的事件時,通知器對象1756被激活。此外,事件管理器914 能夠利用提供的組件、視圖或事件監(jiān)聽對象,識別并向通知器對象1758提供適當(dāng)實例對象 1758。在觸發(fā)器激活例程1700的塊1712內(nèi),產(chǎn)生執(zhí)行應(yīng)用內(nèi)的過程步驟的調(diào)用。如上所 述,將執(zhí)行的過程步驟被緩存在通知器對象1756內(nèi)或者由事件監(jiān)聽對象獲知。因此,一旦 提供了適當(dāng)實例,通知器對象1756可以在塊1712調(diào)用執(zhí)行方法(圖12),從而提供(1)表 示應(yīng)用的當(dāng)前運行時狀態(tài)的實例對象1758和(2)將執(zhí)行的應(yīng)用的過程邏輯內(nèi)的過程步驟 (例如,“2”)。然后,觸發(fā)器激活例程1700進(jìn)行到塊1714,在塊1714它結(jié)束。其它事件監(jiān) 聽對象也可以調(diào)用過程對象步驟或者直接執(zhí)行它自身的定制代碼。當(dāng)激活MyTasks應(yīng)用內(nèi)的觸發(fā)器時,執(zhí)行流程進(jìn)行到判斷操作620。一般地說,當(dāng) 觸發(fā)器602被激活時,判斷操作620內(nèi)的邏輯執(zhí)行測試以確定任何文本是否輸入到Input4 組件內(nèi)。在這點上,將參照圖18描述實現(xiàn)判斷操作620的判斷處理例程1800。如圖18 所示,判斷處理例程1800在塊1802開始,在塊1802內(nèi),表達(dá)式被傳遞至表達(dá)式引擎以進(jìn) 行求值。在這個示例中,判斷操作620包含在塊1802將被傳遞至表達(dá)式引擎以進(jìn)行求值 的“#MyTaskS#inpUt4”的值屬性。如上所述,開發(fā)人員可以利用本發(fā)明提供的表達(dá)式語 言引用存儲器內(nèi)對象。具體地講,在塊1802被選擇并傳遞至表達(dá)式引擎以進(jìn)行求值的 “#MyTask#inpUt4”表達(dá)式引用隨應(yīng)用執(zhí)行而經(jīng)歷狀態(tài)改變的組件對象。在判斷塊1804,確定正被求值的表達(dá)式是否引用與數(shù)據(jù)綁定關(guān)聯(lián)的組件。在一些 實例中,可定義數(shù)據(jù)綁定,其中,由組件輸入和/或顯示的數(shù)據(jù)自動在組件與數(shù)據(jù)模型之間 傳播。另一方面,組件可以是“原子的”或者不與現(xiàn)有的數(shù)據(jù)綁定關(guān)聯(lián)。當(dāng)對引用原子組件 的表達(dá)式求值時,表達(dá)式引擎實現(xiàn)在操作處理器的邏輯內(nèi)訪問從組件輸入/輸出的數(shù)據(jù)或 者影響組件的狀態(tài)的其它數(shù)據(jù)的功能。通過實現(xiàn)這個功能,表達(dá)式引擎使得總可以利用基 于XML的表達(dá)式訪問這個數(shù)據(jù)。為了在塊1804確定組件是否與數(shù)據(jù)綁定關(guān)聯(lián),表達(dá)式引擎可以利用實例識別名 稱為“Input4”的組件對象。如上所述,本發(fā)明提供的組件對象知道它們的數(shù)據(jù)綁定。因 此,一旦識別了適當(dāng)組件對象,表達(dá)式引擎可以容易地確定組件是原子的還是與數(shù)據(jù)綁定 關(guān)聯(lián)。如果執(zhí)行的測試的結(jié)果指示在表達(dá)式內(nèi)引用的組件不與數(shù)據(jù)綁定關(guān)聯(lián),則判斷處理 例程1800進(jìn)行到塊1808,這將在下文中進(jìn)行更加詳細(xì)的描述。相反,如果在塊1804執(zhí)行的 測試的結(jié)果指示表達(dá)式引用與數(shù)據(jù)綁定關(guān)聯(lián)的組件,則判斷處理例程1800進(jìn)行到塊1806。如果到達(dá)塊1806,則在遇到的表達(dá)式內(nèi)引用的組件與數(shù)據(jù)綁定關(guān)聯(lián)。在這個實例 中,對表達(dá)式求值而不因數(shù)據(jù)綁定的不存而創(chuàng)建臨時XBind。更具體地講,表達(dá)式引擎在塊 1806對“#MyTasks#input4”表達(dá)式求值并且從Input4組件請求XBind。在這個示例中,由表達(dá)式引擎返回的XBind將向操作處理器提供執(zhí)行所需的任何事物。在一個實施例中,開發(fā)人員可以提供XML語義描述以訪問數(shù)據(jù)或以其它方式執(zhí)行 I/O。然而,表達(dá)式可以實際請求僅僅可從以腳本語言(例如,JavaScript)實現(xiàn)的存儲器 內(nèi)對象獲得的數(shù)據(jù)。因此,即使組件不與綁定關(guān)聯(lián),本發(fā)明仍使表達(dá)式可以利用對應(yīng)的存儲 器內(nèi)對象來操作和訪問與組件關(guān)聯(lián)的數(shù)據(jù)。例如,MyTasks應(yīng)用內(nèi)的判斷操作620包括下 面的 “ <when> ” XML 元素 622?!磜hen test = 〃 text ( ) = 〃 “ step = “ 3〃 />〈otherwise step = 〃 4〃 />when元素622包括XPath表達(dá)式“text () ”,其應(yīng)用XPath求值約定來請求向 Input4組件內(nèi)輸入文本。由于組件是原子的,所以利用現(xiàn)有的數(shù)據(jù)綁定無法獲得被請求的 數(shù)據(jù)。代替地,本發(fā)明對基于XML的表達(dá)式求值并且即使被請求的數(shù)據(jù)當(dāng)前沒有保持在數(shù) 據(jù)模型內(nèi)仍允許訪問數(shù)據(jù)。代替地,針對對象(例如,組件)創(chuàng)建臨時XBind以引用系統(tǒng)提 供的狀態(tài)文檔內(nèi)的片段。如下文中更加詳細(xì)地描述的,系統(tǒng)提供的狀態(tài)XML文檔可包含相 關(guān)組件的所有的狀態(tài)信息。在判斷處理例程1800的塊1808內(nèi),從與原子組件關(guān)聯(lián)的存儲器內(nèi)對象獲得被請 求的數(shù)據(jù)。在操作處理器內(nèi)實現(xiàn)的邏輯可以利用包括原子組件的狀態(tài)的數(shù)據(jù)。例如,如果到 達(dá)判斷處理例程1800的塊1808,則Input4組件是不與數(shù)據(jù)綁定關(guān)聯(lián)的原子組件。因此,判 斷操作620的主體內(nèi)的XPath表達(dá)式“text () ”請求包括沒有綁定至數(shù)據(jù)模型內(nèi)的已知文 檔的組件的狀態(tài)的數(shù)據(jù)。為了對這種類型的表達(dá)式正確求值,應(yīng)該可從數(shù)據(jù)模型獲得被請 求的數(shù)據(jù)。在這點上,由于在表達(dá)式內(nèi)請求的XBind不存在,所以表達(dá)式引擎能夠向Input4 組件查詢相關(guān)數(shù)據(jù)。在一個實施例中,每當(dāng)在正被求值的表達(dá)式內(nèi)引用原子組件時,利用組件的當(dāng) 前狀態(tài)更新系統(tǒng)提供的狀態(tài)XML文檔。如下文中更加詳細(xì)地描述的,然后可以創(chuàng)建臨時 XBind,其指向系統(tǒng)提供的狀態(tài)XML文檔內(nèi)的可獲得被請求的數(shù)據(jù)的適當(dāng)片段。另選地,可 以利用封裝在狀態(tài)管理器內(nèi)的功能,不斷地向系統(tǒng)提供的狀態(tài)XML文檔傳播系統(tǒng)內(nèi)的每個 組件的狀態(tài)(不管組件是原子的還是與數(shù)據(jù)綁定關(guān)聯(lián)的)。在這個實例中,如下所述,已經(jīng) 可從數(shù)據(jù)模型獲得被請求的數(shù)據(jù)并且可利用翻譯的XBind訪問該被請求的數(shù)據(jù)。值得注意 的是,該實施例便于在多個客戶機(jī)計算機(jī)上進(jìn)行應(yīng)用的狀態(tài)的同步。此外,通過以這種方式 自動向數(shù)據(jù)模傳播狀態(tài)信息,如果應(yīng)用被關(guān)閉并隨后打開,則可容易地恢復(fù)應(yīng)用的狀態(tài)。在塊1810,產(chǎn)生用于訪問從原子組件獲得的數(shù)據(jù)的臨時XBind并且將其返回到適 當(dāng)?shù)倪^程對象。當(dāng)應(yīng)用包括利用原子組件的操作時,可直接從組件對象直接獲得數(shù)據(jù)并將 其存儲在系統(tǒng)提供的狀態(tài)文檔內(nèi)。產(chǎn)生臨時用于對這個表達(dá)式求值的翻譯的XBind,以引用 狀態(tài)文檔內(nèi)的可獲得被請求的數(shù)據(jù)的位置。在對“#MyTask#inpUt4”表達(dá)式求值時,表達(dá)式 引擎可以產(chǎn)生與下面相似的XBind URL = #StateBase path = /states/state[iqid = ' #MyTasks#input4']Select =這個XBind的URL引用被分配用于存儲組件狀態(tài)信息的系統(tǒng)提供的狀態(tài)XML文 檔。此外,在塊1808,基路徑指向狀態(tài)文檔內(nèi)的存儲輸入到Input4組件的文本的節(jié)點。一旦被求值,臨時XBind從表達(dá)式引擎返回到適當(dāng)過程對象。通過以這種方式存儲狀態(tài)信息 并產(chǎn)生臨時XBind,本發(fā)明的各方面使開發(fā)人員可以利用基于XML的表達(dá)式來引用組件和 它們的數(shù)據(jù),而不管組件是否與數(shù)據(jù)綁定關(guān)聯(lián)。更一般地講,訪問XML文檔的所有操作處理 器還能夠與不與數(shù)據(jù)綁定關(guān)聯(lián)的原子對象一起工作并且對其進(jìn)行引用。如上文示例所示, 表達(dá)式中對對象(例如,組件)的引用被求得為XBind。結(jié)果,本發(fā)明的各方面使組件可以 彼此綁定。當(dāng)定義這種類型的綁定時,第二組件有效“克隆”第一組件的XBind。換言之,從 第一組件向第二組件提供同步的XBind。當(dāng)綁定的目標(biāo)是原子組件時,仍可在組件之間進(jìn)行 數(shù)據(jù)綁定。在這個實例中,第二組件將與引用描述第一組件的狀態(tài)的系統(tǒng)提供的狀態(tài)文檔 的XBind進(jìn)行關(guān)聯(lián)。由于第一組件是原子的,所以這將有效創(chuàng)建兩個組件之間的主從關(guān)系。另外如圖18所示,在塊1812調(diào)用判斷操作處理器以執(zhí)行在判斷操作606內(nèi)定義 的求值。在這點上,在調(diào)用中向判斷操作處理器傳遞參數(shù),如果操作涉及原子組件,則所述 參數(shù)可包括臨時XBind。在一個實施例中,開發(fā)人員能夠根據(jù)定義功能調(diào)用參數(shù)的操作API 和可存在于操作的主體內(nèi)的XML語義結(jié)構(gòu)來創(chuàng)建操作。在判斷操作620內(nèi),定義用于基于 對XPath表達(dá)式求值的結(jié)果指引程序執(zhí)行的流程的元素。在這個示例中,在判斷操作處理 器內(nèi)執(zhí)行串比較以確定文本是否輸入到Input4組件內(nèi)。因此,在判斷操作處理器內(nèi),XPath 表達(dá)式(例如,“text (),,)被求得為文本。在當(dāng)正被求值的表達(dá)式從原子組件引用數(shù)據(jù)的 實例中,為了對特定表達(dá)式求值而翻譯的臨時XBind被用于獲得被請求的數(shù)據(jù)。具體地講, 傳遞至判斷操作處理器的XBind可包括對可訪問從Input4組件先前提取的狀態(tài)數(shù)據(jù)的系 統(tǒng)提供的狀態(tài)文檔的引用。然后,在塊1814,產(chǎn)生執(zhí)行應(yīng)用中的適當(dāng)過程步驟的調(diào)用。在判斷操作處理器內(nèi) 執(zhí)行的求值的結(jié)果確定是否將執(zhí)行流程導(dǎo)向過程步驟608或610。當(dāng)調(diào)用判斷操作處理器 時,接收XBind以及過程和實例對象。這些接收的變元使判斷操作處理器可以基于求值的 結(jié)果容易地啟動下一個適當(dāng)過程步驟的執(zhí)行。在這點上,接收的變元可由判斷操作處理器 進(jìn)行修改或直接傳遞。然后,判斷處理例程1800進(jìn)行到塊1816,在塊1816它結(jié)束。如上所述,當(dāng)發(fā)生觸發(fā)事件602時,如果在Input4組件內(nèi)沒有輸入文本,則判斷操 作620使得執(zhí)行流程進(jìn)行到過程步驟610。僅僅過程步驟610中的操作是使得按鈕組件被 顯示的動作操作628。在這點上,可利用參照圖15A-15B在上文描述的動作操作處理器執(zhí)行 動作操作628。因此,在這里中將不會更加詳細(xì)描述當(dāng)程序流程導(dǎo)向過程步驟610時實現(xiàn)的 功能的附加描述。當(dāng)發(fā)生觸發(fā)事件602時在Input4組件內(nèi)輸入了文本時,MyTasks應(yīng)用的執(zhí)行進(jìn)行 到過程步驟608。在過程步驟608內(nèi)定義的操作是改變操作624,改變操作624使輸入到組 件的文本添加到XML文檔。在這點上,將參照圖19描述利用改變操作處理器實現(xiàn)數(shù)據(jù)更新 的示例性改變處理例程1900。如圖19所示,改變處理例程1900在塊1902開始,在塊1902執(zhí)行表達(dá)式求值。具 體地講,在塊1902,改變操作624的值屬性內(nèi)的“data/tasks, xml”表達(dá)式被求得為XBind。 在這個示例中,從求值獲得的XBind將包括弓|用“ data/tasks, xml ”文檔的根節(jié)點的基路徑 禾口 URL。如上文描述所示,針對應(yīng)用中的每個操作,操作的值屬性中的表達(dá)式被求得為 XBind。在一個實施例中,可在由操作處理器實現(xiàn)的邏輯內(nèi)對操作的主體內(nèi)的表達(dá)式求值。
40另選地,可在調(diào)用適當(dāng)操作處理器之前對操作的主體內(nèi)的表達(dá)式求值。盡管兩個實施例都 被支持,但是在操作處理器的邏輯內(nèi)對操作的主體內(nèi)的表達(dá)式求值是優(yōu)選的,這是因為它 更高效。在這點上,改變操作624包括下面的“<st0re>”XML元素626 <store type =“ append" select =“ tasks/task/idescription" value =“ {#MyTasks#input4}“在塊1904,存儲(store)元素626內(nèi)的〃 {#MyTasks#input4}“表達(dá)式被求得為 文本。如上所述,本發(fā)明提供的表達(dá)式引擎使開發(fā)人員能夠利用大括號符號對用于求值的 表達(dá)式進(jìn)行劃界??梢栽趯傩灾小⒃刂g以及應(yīng)用代碼內(nèi)的其它位置定義這些表達(dá)式。在 這個示例中,表達(dá)式引擎內(nèi)的邏輯使〃 {#MyTaskS#inpUt4}“表達(dá)式被求得為文本。通常,本發(fā)明實現(xiàn)的改變操作向開發(fā)人員提供用于對XML文檔的內(nèi)容執(zhí)行所有必 要修改的原始數(shù)據(jù)操縱工具。在這點上,提供實質(zhì)上與萬維網(wǎng)聯(lián)盟的D0M標(biāo)準(zhǔn)一致的多個 數(shù)據(jù)操縱原語(primitive)。此外,本發(fā)明的各方面提供包括替換文本(r印laceText)和刪 除子原語的附加數(shù)據(jù)操縱原語。因此,可利用本發(fā)明提供的改變操作執(zhí)行下面的示例性原 語以修改XML文檔的內(nèi)容替換、替換文本、后附加、前附加、插入、去除、去除孩子、新建、和 刪除。本領(lǐng)域技術(shù)人員等將認(rèn)識到,可對這些提供的原語進(jìn)行利用和組合以對數(shù)據(jù)模型執(zhí) 行所有必要的修改。如下文更加詳細(xì)地描述的,影響數(shù)據(jù)模型的任何改變操作將使得在事 務(wù)管理器910內(nèi)創(chuàng)建描述將執(zhí)行的確切更新的事務(wù)。在改變處理例程1900的塊1906內(nèi),由適當(dāng)過程對象調(diào)用改變操作處理器。當(dāng)?shù)?達(dá)塊1906時,執(zhí)行當(dāng)前過程的過程對象能夠?qū)⑾惹扒蟮玫腦Bind以及適當(dāng)實例和過程對象 傳遞至改變操作處理器。如下文中更加詳細(xì)地描述的,改變操作處理器利用接收的變元來 修改XML文檔的內(nèi)容。在改變處理例程1900的判斷塊1908內(nèi),確定正執(zhí)行的改變操作是否定義了數(shù)據(jù) 變換。在改變操作624內(nèi)定義的值屬性識別作為改變操作的對象的文檔(例如,“data/ tasks, xml,,)。在存儲元素626內(nèi),選擇屬性可以包含XPath表達(dá)式(例如,tasks/task/@ description),這個XPath表達(dá)式引用指定的XML文檔內(nèi)的將執(zhí)行數(shù)據(jù)修改的位置。此外, 選擇屬性可以包括對將被后附加、替換或包括在XML文檔內(nèi)的內(nèi)容進(jìn)行求值的表達(dá)式(例 如,“ {#MyTasks#input4} ”)。在一個實施例中,本發(fā)明的各方面使得能夠在將數(shù)據(jù)后附加、 替換或加入到數(shù)據(jù)模型之前在改變操作內(nèi)對數(shù)據(jù)進(jìn)行變換。例如,存儲元素626可包括引 用用于執(zhí)行特定數(shù)據(jù)變換的XSLT (可擴(kuò)展樣式表語言變換)的變換屬性。當(dāng)定義了這種類 型的數(shù)據(jù)變換時,在塊1908執(zhí)行的測試的結(jié)果為“是”并且例程1900進(jìn)行到塊1910。然 而,示例性MyTasks應(yīng)用中的改變操作624不包括變換屬性。在此實例中,在塊1908執(zhí)行 的測試的結(jié)果將是“否”,并且例程1900將進(jìn)行到塊1912,這將在下文更加詳細(xì)描述。在塊1910,基于在改變操作內(nèi)定義的邏輯應(yīng)用數(shù)據(jù)變換。在實際實施例中,改變 操作中的存儲元素可包括引用XSLT文檔的變換屬性。在塊1910,XSLT文檔內(nèi)的邏輯可被 應(yīng)用于將數(shù)據(jù)從源格式變換成目的格式。傳統(tǒng)上,XSLT已用于變換數(shù)據(jù)以支持Web頁面 的動態(tài)創(chuàng)建和修改。此外,XSLT還用于在XML商業(yè)格式語言以及它們的作為電子數(shù)據(jù)交換 (EDI)集成服務(wù)器的一部分的對應(yīng)結(jié)構(gòu)之間進(jìn)行變換。然而,這些示例僅僅是示例性的,并 且XSLT用于其它實例中。此外,結(jié)合本發(fā)明可使用其它變換語言并且XSLT的使用不應(yīng)該 解釋為是限制性的。在任何情況下,本領(lǐng)域技術(shù)人員等將認(rèn)識到,XSLT是基于XML的語言,用于定義各種標(biāo)記語言(XML、HTML、XHTML等)之間以及XML模式和實現(xiàn)不同XML模式的 XML文檔或DTD(文檔類型定義)之間的變換。在這點上,在塊1910,改變操作處理器可利 用XSLT處理器來施加數(shù)據(jù)變換。通過以這種方式支持變換的動態(tài)應(yīng)用,提供了一種增強(qiáng)開 發(fā)平臺,其中,更好地配備應(yīng)用以交換數(shù)據(jù)、交互以及集成/重用功能。計算機(jī)用戶將通常采取多個應(yīng)用,諸如電子郵件、Web瀏覽器、日歷應(yīng)用、字處理 器、媒體播放器等。然而,利用現(xiàn)有系統(tǒng),由不同應(yīng)用利用的數(shù)據(jù)格式和邏輯很少兼容。例 如,電子郵件程序允許用戶定義用于存儲和訪問與另一個用戶相關(guān)的信息的“聯(lián)系人”。另 一方面,日歷應(yīng)用允許用戶創(chuàng)建和跟蹤涉及其它用戶、組等的會議和約會。響應(yīng)于查閱來自 在電子郵件程序內(nèi)定義的聯(lián)系人的消息,用戶可能想自動在日歷應(yīng)用內(nèi)創(chuàng)建新的會議。然 而,利用現(xiàn)有系統(tǒng)不易于執(zhí)行以這種方式使得不同應(yīng)用進(jìn)行交互的支持功能。在執(zhí)行改變操作的原始數(shù)據(jù)操縱之前,在塊1910內(nèi)應(yīng)用的數(shù)據(jù)變換發(fā)生。通過支 持這種類型的數(shù)據(jù)變換的動態(tài)應(yīng)用,本發(fā)明的各方面向應(yīng)用開發(fā)人員提供利用從其它應(yīng)用 獲得的功能和數(shù)據(jù)的更好機(jī)會。在上文提供的示例中,可以執(zhí)行易于使電子郵件和日歷應(yīng) 用進(jìn)行交互的數(shù)據(jù)變換。例如,可定義XSLT變換用于將接收的電子郵件和/或聯(lián)系人轉(zhuǎn)換 成描述新的約會的數(shù)據(jù)項。在這點上,變換可利用聯(lián)系人信息、電子郵件消息的內(nèi)容、和/ 或來自用戶的輸入來建立會議的屬性。在改變操作內(nèi),可應(yīng)用這種類型的XSLT變換,使得 即使利用不同的基礎(chǔ)模式和XML結(jié)構(gòu),不同的應(yīng)用仍能夠進(jìn)行通信。在改變處理例程1900的塊1912內(nèi),對適當(dāng)URL對象進(jìn)行用于執(zhí)行在改變操作內(nèi) 表示的特定數(shù)據(jù)更新的調(diào)用。如下文更加詳細(xì)地描述的,本發(fā)明提供的URL對象用作暴露 用于執(zhí)行由改變操作處理器支持的不同類型的數(shù)據(jù)修改原語(上述)之中的每一個的方法 的輕量指針。因此,改變操作處理器利用接收到的XBind和改變操作626內(nèi)的邏輯,識別適 當(dāng)URL對象以進(jìn)行調(diào)用。應(yīng)該恰當(dāng)理解,僅僅實現(xiàn)URL對象的利用以掩蓋與文檔交互的細(xì)節(jié) 并且可以通過其它方式容易地實現(xiàn)本發(fā)明。一旦執(zhí)行了對URL對象的調(diào)用,執(zhí)行流程進(jìn)行 到在下文參照圖20描述的數(shù)據(jù)更新例程2000。然后,改變處理例程1900進(jìn)行到塊1914, 在塊1914它結(jié)束?,F(xiàn)在參照圖20A-20C,將描述數(shù)據(jù)更新例程2000和例程2000使用的對象之間的 交互。圖20所示的數(shù)據(jù)更新例程2000示出了在執(zhí)行數(shù)據(jù)更新的塊2002或塊2004開始的 兩個實例。在當(dāng)數(shù)據(jù)更新例程2000在塊2002開始的實施例中,URL對象接收在改變操作 處理器1250的環(huán)境內(nèi)執(zhí)行數(shù)據(jù)更新的調(diào)用。如上所述,應(yīng)用可以包括用于修改XML文檔的 內(nèi)容的改變操作。因此,改變處理例程1900 (圖19)可以產(chǎn)生在塊2002接收到的對指定的 URL對象1253執(zhí)行數(shù)據(jù)更新的調(diào)用。當(dāng)例程2000在塊2004開始時,對指定的URL對象1253執(zhí)行數(shù)據(jù)更新的調(diào)用源自 用戶界面組件。當(dāng)定義了綁定時,組件變得知道與綁定關(guān)聯(lián)的URL和XML文檔。例如,當(dāng)執(zhí) 行綁定操作616時,MyTasks應(yīng)用中的Input3組件將接收與“data/tasks, xml”文檔對應(yīng)的 URL對象。如下文更加詳細(xì)描述并且根據(jù)一個實施例,可采用利用HTML DOM的Web瀏覽器 來渲染用戶界面。在這個實施例中,在對應(yīng)視圖對象的環(huán)境內(nèi)創(chuàng)建的組件對象使各種事件 監(jiān)聽器登記在由Web瀏覽器利用的HTML DOM上。組件可以監(jiān)聽例如當(dāng)用戶提供輸入或者以 其它方式與由Web瀏覽器顯示的用戶界面進(jìn)行交互時發(fā)生的影響HTML DOM的事件。具體參 照圖20B,組件1252對接收的數(shù)據(jù)進(jìn)行解釋并且產(chǎn)生對它的URL對象1253的調(diào)用以實現(xiàn)數(shù)據(jù)更新事件。例如,當(dāng)在示例性MyTasks應(yīng)用內(nèi)刪除“更新呈現(xiàn)(Update Presentation) ”任 務(wù)時,創(chuàng)建并調(diào)用與“data/tasks, xml”文檔對應(yīng)的URL對象以從數(shù)據(jù)模型刪除任務(wù)描述。 如下文更加詳細(xì)地描述的,URL對象1253然后將數(shù)據(jù)更新傳送至事務(wù)管理器910。繼而,事 務(wù)管理器910將數(shù)據(jù)更新傳播至實際上使得數(shù)據(jù)更新得以實現(xiàn)的基礎(chǔ)XML文檔對象。除了 實現(xiàn)數(shù)據(jù)更新外,文檔對象1254將使得數(shù)據(jù)更新傳播至所有適當(dāng)?shù)谋O(jiān)聽數(shù)據(jù)更新對象。這 些監(jiān)聽對象常常是組件,但也可以是其它類型的對象。在監(jiān)聽XML文檔對象發(fā)生變化的遠(yuǎn) 程計算機(jī)之間可以共享XML文檔。然而,在數(shù)據(jù)更新被傳播至任何遠(yuǎn)程監(jiān)聽器之前,實現(xiàn)對 保持在客戶機(jī)端緩存器內(nèi)的本地文檔對象1254的數(shù)據(jù)更新。換言之,在本地實現(xiàn)數(shù)據(jù)更新 以后,執(zhí)行全網(wǎng)絡(luò)更新。在數(shù)據(jù)更新例程2000的塊2006,與將更新的文檔對象1254對應(yīng)的URL對象1253 使得產(chǎn)生新的事務(wù)。在這點上,在塊2006,調(diào)用事務(wù)管理器910以創(chuàng)建表示XML文檔的相 對變化的新的“事務(wù)”或XML片段。在一個實施例中,事務(wù)管理器910包括用于實現(xiàn)和回復(fù) 相對變化的XML片段內(nèi)的信息。此外,不管數(shù)據(jù)更新是源于改變操作處理器還是組件的環(huán) 境,串行化成XML的XBind被包括在在塊2006創(chuàng)建的事務(wù)內(nèi)。如下文更加詳細(xì)地描述的, 事務(wù)管理器910使得數(shù)據(jù)更新既在本地實現(xiàn)又傳播至任何遠(yuǎn)程監(jiān)聽器。在任一情況下,提 供XBind,用于識別數(shù)據(jù)模型內(nèi)的將執(zhí)行數(shù)據(jù)更新的位置和包含用于回復(fù)請求的數(shù)據(jù)操縱 操作(這里稱作為執(zhí)行“回滾”)的邏輯的XML格式化數(shù)據(jù)。在塊2008,事務(wù)管理器910使得數(shù)據(jù)更新在本地執(zhí)行。事務(wù)可以表示由對數(shù)據(jù)模 型的多個和潛在不同類型的修改構(gòu)成的會話。因此,在數(shù)據(jù)通知事件中,創(chuàng)建一個或多個更 新事件對象以表示描述對數(shù)據(jù)模型的修改的單位。另一方面,事務(wù)全面描述對數(shù)據(jù)模型進(jìn) 行的一個或多個改變以及用于回復(fù)這些變化的邏輯。此外,除了發(fā)出數(shù)據(jù)通知事件以外,文 檔對象提供用于修改在更新事件對象內(nèi)表示的基礎(chǔ)XML文檔的實際內(nèi)容的方法。具體地 講,在由URL對象1253、事務(wù)管理器910和文檔對象1254提供的對應(yīng)方法內(nèi),實現(xiàn)可對XML 文檔執(zhí)行的每個數(shù)據(jù)操縱原語(替換、后附加、前附加、插入等)。另外如圖20所示,在塊2012,事務(wù)管理器910調(diào)用通信管理器1256向任何遠(yuǎn)程監(jiān) 聽器傳播事務(wù)。在這點上,通信管理器1256使得應(yīng)用可以實例化對與遠(yuǎn)程網(wǎng)絡(luò)服務(wù)的通信 進(jìn)行抽象的通道?;诮邮盏腦Bind,通信管理器1256將識別用于在網(wǎng)絡(luò)上發(fā)送事務(wù)的適 當(dāng)通信通道(如果有的話)。如下文更加詳細(xì)地描述的,通信通道在由URL標(biāo)準(zhǔn)定義的不同 協(xié)議下進(jìn)行操作。例如,可以在在例如“http://”、“Xi0S://”或“database://”的URL內(nèi) 識別的協(xié)議內(nèi),識別適當(dāng)?shù)耐ㄐ磐ǖ?。利用根?jù)通信器API獲得的邏輯,從事務(wù)管理器910 接收的數(shù)據(jù)被翻譯成遠(yuǎn)程網(wǎng)絡(luò)服務(wù)理解的格式。在這點上,將在下文中更加詳細(xì)描述利用 通信通道執(zhí)行網(wǎng)絡(luò)通信的系統(tǒng)和方法。值得注意的是,獨立于與在網(wǎng)絡(luò)上發(fā)送對應(yīng)事務(wù),并 且在此之前執(zhí)行用于通知和更新本地數(shù)據(jù)監(jiān)聽器的邏輯。在一個實施例中,本發(fā)明被構(gòu)造 為在網(wǎng)絡(luò)上異步傳播事務(wù)。結(jié)果,網(wǎng)絡(luò)通信固有的網(wǎng)絡(luò)遲滯或其它延遲不會妨礙應(yīng)用邏輯 在本地的執(zhí)行。然后,一旦事務(wù)提供給適當(dāng)通道,數(shù)據(jù)更新例程2000進(jìn)行到塊2014,在塊 2014它結(jié)束。現(xiàn)在參照圖20C,將描述適于示出事務(wù)如何在遠(yuǎn)程客戶機(jī)之間進(jìn)行傳播的示例性 網(wǎng)絡(luò)環(huán)境。如上所述,事務(wù)管理器910使得表示在本地存儲的文檔的相對變化的事務(wù)或數(shù) 據(jù)片段被傳播至任何遠(yuǎn)程監(jiān)聽器。在圖20C所示的示例中,由客戶機(jī)2080和2082發(fā)起的事務(wù)被連續(xù)發(fā)送至保持在服務(wù)器端數(shù)據(jù)中心的XML文件系統(tǒng)2084。具體地講,客戶機(jī)2080 和2082的每個向活躍共享的文檔2093傳播事務(wù)2086-2088以及2090-2092。在客戶機(jī)端 緩存器2098內(nèi)在本地執(zhí)行的對文檔對象2094或2096的任何數(shù)據(jù)更新被識別并傳播至XML 文件系統(tǒng)2084,以使得客戶機(jī)2080和2082能夠?qū)崟r共享數(shù)據(jù)?,F(xiàn)在參照圖21,將描述關(guān)于如何應(yīng)用規(guī)則以提供更加智能的組件的附加描述。當(dāng) 被綁定至數(shù)據(jù)時,在數(shù)據(jù)模型內(nèi)應(yīng)用與組件關(guān)聯(lián)的任何規(guī)則并且向其分配唯一名稱空間。 一般地說,規(guī)則使得普通組件可以根據(jù)數(shù)據(jù)模型內(nèi)的內(nèi)容進(jìn)行解釋、學(xué)習(xí)和采取適當(dāng)動作。 換言之,不需要針對特定數(shù)據(jù)模型創(chuàng)建使用規(guī)則的組件。在這點上,上述的綁定處理例程 1600(圖16)可以確定特定組件利用規(guī)則。在這個實例中,可以調(diào)用參照圖21描述的設(shè)置 規(guī)則例程2100以應(yīng)用和合并與新組件的數(shù)據(jù)綁定關(guān)聯(lián)的規(guī)則。在一個實施例中,組件規(guī)則 的唯一 XML名稱空間被合并入數(shù)據(jù)模型中并且易于由被綁定至數(shù)據(jù)模型的組件獲得。在一 個另選實施例中,可以遠(yuǎn)程存儲與組件關(guān)聯(lián)的規(guī)則并且可以經(jīng)由Web服務(wù)或附加XML文檔 對其進(jìn)行訪問。如圖21所示,設(shè)置規(guī)則例程2100在塊2102開始,在判斷塊2104,確定是否定義了 適當(dāng)文檔的規(guī)則處理器。在這點上,規(guī)則處理器允許關(guān)于相同數(shù)據(jù)執(zhí)行與不同組件關(guān)聯(lián)的 規(guī)則。綁定至XML文檔的每個規(guī)則使用組件向保持在數(shù)據(jù)模型內(nèi)的對應(yīng)規(guī)則處理器提供邏 輯(例如,“規(guī)則”)。因此,如果利用規(guī)則的組件先前被綁定至相關(guān)文檔,則對應(yīng)規(guī)則處理 器將存在,并且例程2100進(jìn)行到塊2108,這將在下文進(jìn)行更加詳細(xì)描述。在這點上,如果多 個規(guī)則使用組件被綁定至相同文檔,則相同規(guī)則處理器用于所有這些組件。相反,如果規(guī)則 使用組件沒有先前綁定至相關(guān)文檔,則例程2100進(jìn)行到塊2106。另外如圖21所示,在塊 2106,創(chuàng)建新的規(guī)則處理器用于保持綁定至相同基礎(chǔ)數(shù)據(jù)的每個組件的規(guī)則。如上所述,提供由現(xiàn)代基于圖形的應(yīng)用使用的類型的一組普通組件。通過定義規(guī) 則,本發(fā)明提供的普通組件不需要理解關(guān)于基礎(chǔ)數(shù)據(jù)模型的任何事情。在這點上,圖8A示 出了樹組件800,樹組件800以可視方式示出了文件系統(tǒng)內(nèi)的文件夾的層級并且包括文件 夾名稱、圖標(biāo)等??啥x提供用于利用保持在數(shù)據(jù)模型內(nèi)的內(nèi)容組建普通樹組件的邏輯的 規(guī)則。例如,本發(fā)明的各方面可以在folders, xml文檔內(nèi)描述文件系統(tǒng)的內(nèi)容,在folders, xml文檔內(nèi),文檔內(nèi)的每個元素表示不同文件夾??梢愿鶕?jù)文件夾元素內(nèi)的屬性識別例 如標(biāo)識符、圖標(biāo)等的與特定文件夾關(guān)聯(lián)的數(shù)據(jù)。僅僅作為示例,可定義下面的規(guī)則來解釋 folders, xml文檔內(nèi)的內(nèi)容以在圖8A所示的樹組件800內(nèi)進(jìn)行顯示。<tree name = 〃 folder tree" >〈rule match =〃 folder" display = " iid" />〈rule match =" folder [iid =' email' ]" display =" iid" icon =" icons/mailicon. png" /></tree>在這點上,匹配(match)屬性為“folder”并且顯示(display)屬性為“@id”的第 一規(guī)則元素使得將folders, xml文檔內(nèi)的“id”屬性的內(nèi)容顯示為文件夾名稱。因此,可利 用規(guī)則來定義分配給圖8A所示的樹組件800內(nèi)的文件夾的名稱。匹配屬性為“folder id = ' email'] ”的第二規(guī)則元素使得對名稱屬性為“email”的文件夾分配與電子郵件 消息關(guān)聯(lián)的特定圖標(biāo),如圖8A所示。應(yīng)該恰當(dāng)明白,上面提供的規(guī)則僅僅是示例性的并且僅僅包括實際用于構(gòu)建樹組件800的內(nèi)容的邏輯的子集。在修改folder, xml文檔的結(jié)構(gòu) 的情況下,組件的規(guī)則易于進(jìn)行更新以說明變化。此外,按照與其它數(shù)據(jù)更新相同的方式, 向規(guī)則使用組件通知變化。具體地講,可以利用在下文更加詳細(xì)描述的數(shù)據(jù)更新事件通知 總線的通知監(jiān)聽器例程2200,創(chuàng)建事件更新對象并將其用于向組件通知變化。再次參照圖21,在塊2108應(yīng)用綁定至數(shù)據(jù)模型的組件的規(guī)則。一旦創(chuàng)建了規(guī)則處 理器,作為綁定操作的對象的組件將它的規(guī)則提供給適當(dāng)?shù)囊?guī)則處理器。在這點上,規(guī)則處 理器用作數(shù)據(jù)模型的擴(kuò)展并且管理綁定至相同文檔的不同數(shù)據(jù)綁定組件的規(guī)則。在一個實 施例中,可以在數(shù)據(jù)模型內(nèi)分配名稱空間,其分離使用組件或?qū)ο蟮牟煌?guī)則的詞匯表。通 過利用名稱空間分配和管理組件規(guī)則,規(guī)則處理器能夠按照防止在數(shù)據(jù)模型內(nèi)出現(xiàn)沖突的 方式執(zhí)行所有組件規(guī)則。在塊2108應(yīng)用新規(guī)則時,調(diào)用規(guī)則處理器并且使得執(zhí)行綁定至相關(guān)文檔的每個 組件的規(guī)則。換言之,關(guān)于數(shù)據(jù)模型的當(dāng)前版本執(zhí)行與潛在多個數(shù)據(jù)綁定組件關(guān)聯(lián)的規(guī)則。 然后,一旦執(zhí)行了所有的規(guī)則,作為綁定操作的對象的組件就知道它的對應(yīng)的由規(guī)則處理 器分配的名稱空間。具體地講,規(guī)則處理器向與新數(shù)據(jù)綁定關(guān)聯(lián)的組件傳遞用于識別分配 給組件的規(guī)則的數(shù)據(jù)模型內(nèi)的名稱空間的引用。在設(shè)置規(guī)則例程2100的塊2110,與作為綁定操作的對象的組件關(guān)聯(lián)的規(guī)則被與 其它組件的規(guī)則進(jìn)行合并。開發(fā)人員可以利用本發(fā)明提供的基于XML的語言定義組件的規(guī) 則的語義邏輯。舉例來講,規(guī)則可以包括XPath表達(dá)式、UI XML邏輯引用、描述其它組件、 變量、別名的元素以及對規(guī)則名稱空間的容器外的數(shù)據(jù)的其它引用。在這點上,不同組件的 數(shù)據(jù)綁定由于它們的關(guān)聯(lián)的應(yīng)用和規(guī)則邏輯可具有可遞關(guān)系。因此,在相同基礎(chǔ)數(shù)據(jù)上工 作的不同組件的規(guī)則也保持在數(shù)據(jù)模型內(nèi)。一旦使組件知道它的名稱空間,產(chǎn)生調(diào)用以對 組件設(shè)置新的數(shù)據(jù)。在這種情況下,用于對組件設(shè)置新數(shù)據(jù)的調(diào)用使得在與關(guān)聯(lián)于其它組 件的規(guī)則分離的名稱空間內(nèi)將組件的規(guī)則的語義邏輯包括在數(shù)據(jù)模型內(nèi)。在塊2112,產(chǎn)生調(diào)用以將在數(shù)據(jù)模型內(nèi)反映的數(shù)據(jù)更新傳播至任何數(shù)據(jù)更新監(jiān)聽 器。如上所述,文檔對象保持響應(yīng)于數(shù)據(jù)更新而通知的監(jiān)聽器的列表。當(dāng)在塊2010發(fā)生向 數(shù)據(jù)模型加入新規(guī)則時,將向?qū)?yīng)監(jiān)聽器通知數(shù)據(jù)更新。在這點上,在下文中參照圖22更 加詳細(xì)描述用于向監(jiān)聽器通知更新的邏輯。然后,設(shè)置規(guī)則例程2100進(jìn)行到塊2114,在塊 2114它結(jié)束。在以上示例中,定義綁定以使得組件自動顯示保持在數(shù)據(jù)模型內(nèi)的內(nèi)容。通過以 這種方式利用綁定,開發(fā)人員不必在應(yīng)用代碼內(nèi)提供用于對用戶界面組件設(shè)置和更新數(shù)據(jù) 的邏輯。然而,以上示例是高度簡化的并且僅僅反映本發(fā)明的一個示例性方面。在這點上, 綁定和它們的對應(yīng)XBind能夠?qū)崿F(xiàn)更加復(fù)雜的功能。在一個實施例中,本發(fā)明提供對象進(jìn)行描述、存儲和傳送它們的當(dāng)前狀態(tài)的標(biāo)準(zhǔn) 化方式。舉例來講,圖8A示出了使得用戶可導(dǎo)航并從文件系統(tǒng)選擇文件夾的樹組件800。 可以在XBind內(nèi)描述用戶選擇,這提供網(wǎng)絡(luò)操作系統(tǒng)環(huán)境內(nèi)的標(biāo)準(zhǔn)化變量格式。在圖8A所 示的示例中,用戶進(jìn)行一系列的選擇以導(dǎo)航至標(biāo)題為“videc^encoding”的文件夾??梢栽?下面的XBind內(nèi)描述關(guān)于這個特定文件夾的選擇的樹組件800的狀態(tài)URL:folders, xmlXPath:/
Selection/folders/research/work/video_encoding/以上提供的示例是簡化的并且僅僅用于說明的目的。在實際實施例中,描述樹組 件800的狀態(tài)的XBind實際上是URL:folders, xmlXPath:/Selection:/fs:folder/fs:folder[Oname = ‘ research' ]/fs:folder[i name =' work' ]/fs: folder [iname =' videoencoding]這里所述的所有的XBind可用于引用數(shù)據(jù),而不管數(shù)據(jù)存儲在哪里。因此,如果基 礎(chǔ)數(shù)據(jù)保持在網(wǎng)絡(luò)位置,則可以在下面的XBind內(nèi)描述以上選擇URL:http://www. networkdomain. com. folders, xmlBase path:/ Selection:/folders/research/work/video_encoding/在任何情況下,其它對象將常常利用將用戶選擇描述為用于執(zhí)行動作或以其它方 式實現(xiàn)應(yīng)用功能的基礎(chǔ)的XBind。如圖8B所示,列表組件850顯示可以基于從樹組件800 進(jìn)行的用戶選擇的文件系統(tǒng)數(shù)據(jù)。例如,列表組件850可被構(gòu)造為基于在樹組件800內(nèi)選擇 的文件夾顯示文檔(例如,“whit印aper. txt”、“testresults. xml ” 和 “blog. html ”)。描 述所述選擇的XBind被輸出到由樹組件800共享的數(shù)據(jù)模型。繼而,這個XBind可以被提 供作為其它監(jiān)聽對象(例如,列表組件850)的輸入。因此,提供給一個對象(即列表組件 850)的輸入與來自不同對象(即樹組件800)的先前保存到數(shù)據(jù)模型的輸出相交織。XBind 的實現(xiàn)提供了實現(xiàn)1/0的這種交織的普通變量格式,其中從數(shù)據(jù)模型訪問的值取決于先前 1/0的值。在這點上,實現(xiàn)XML虛擬機(jī)的對象的內(nèi)部計算邏輯與它們的與其它對象和系統(tǒng)的 交互去耦合。在一個方面中,XBind提供用于對交互建模并實現(xiàn)這種去耦合的標(biāo)準(zhǔn)化變量格 式。本發(fā)明提供的XBind不包含到被請求的數(shù)據(jù)的值。代替地,XBind引用能夠獲得數(shù)據(jù)的 位置,從而使得不同對象和系統(tǒng)可以利用相同的基礎(chǔ)數(shù)據(jù)進(jìn)行工作。此外,還可以對XBind 進(jìn)行變換、合并和串行化以用于基于XML的系統(tǒng)。如這里描述所示,XBind用作利用XBind 的選擇方面的對象狀態(tài)信息的載體。值得注意的是,由于XBind引用可獲得對象狀態(tài)信息 的位置,所以在沒有警告或改變引用的信息或?qū)ο蟮娜魏我粋€的情況下傳送狀態(tài)信息。當(dāng)用戶在文件系統(tǒng)內(nèi)進(jìn)行導(dǎo)航時,樹組件800可以利用XBind的所有維度 (dimension)描述選擇。例如,如果用戶要選擇樹組件800內(nèi)的“whit印aper. txt,,和 "testresults. xml”這兩個文檔,則可以在下面的XBind內(nèi)描述該選擇。URL:folders, xmlBase path: /folders/research/work/video—encoding/Selection: /folders/research/work/video_encoding/document[iname =' testresults. xml']/folders/research/work/video_encoding//document[iname =' whitepaper.txt'] 再次,以上示例用于例示目的并且不表示本發(fā)明的實際實施例。這個XBind的URL 引用描述文件系統(tǒng)的基礎(chǔ)XML文檔,并且基路徑限制至“videc^encoding”文件夾的綁定。
46此外,這個XBind的選擇包括識別用戶選擇的每個文檔的XPath表達(dá)式的陣列。與以上提 供的描述相似,這個XBind可用作其它對象執(zhí)行動作的基礎(chǔ)。舉例來講,用戶能夠產(chǎn)生刪除 選擇的文檔的事件。描述樹組件800的選擇狀態(tài)的以上XBind將作為輸入提供給實現(xiàn)文件 刪除的系統(tǒng)。如上所述,可以響應(yīng)于數(shù)據(jù)模型的變化而通知組件和其它對象。本發(fā)明的各方面 使組件可以登記為針對對特定文檔執(zhí)行的數(shù)據(jù)更新的監(jiān)聽器。當(dāng)發(fā)生數(shù)據(jù)更新時,向文檔 對象登記的每個監(jiān)聽器被通知數(shù)據(jù)更新并且可以因此更新它們的用戶界面?,F(xiàn)在參照圖 22,將描述向監(jiān)聽組件傳播數(shù)據(jù)更新的通知監(jiān)聽器例程2200。盡管參照監(jiān)聽組件對象描述 通知監(jiān)聽器例程2200,但是由于其它對象可以是數(shù)據(jù)更新監(jiān)聽器,所以這僅僅是示例性的。如圖22所示,通知監(jiān)聽器例程2200在塊2202開始,在塊2202,對XML文檔執(zhí)行數(shù) 據(jù)更新。如以上示例所示,可以在不同情況下執(zhí)行對數(shù)據(jù)模型的數(shù)據(jù)更新。當(dāng)與數(shù)據(jù)綁定 組件進(jìn)行交互時,用戶可以產(chǎn)生通過組件自動保存到數(shù)據(jù)模型的輸入。另一方面,作為執(zhí)行 在改變操作內(nèi)定義的應(yīng)用邏輯的結(jié)果,可以執(zhí)行數(shù)據(jù)更新。此外,當(dāng)利用共享的數(shù)據(jù)模型和 綁定作為通信接口時,實現(xiàn)XML虛擬機(jī)的對象執(zhí)行數(shù)據(jù)更新。例如,組件的規(guī)則的語義描述 可保存到數(shù)據(jù)模型,這使得不同的組件可以解釋相同基礎(chǔ)數(shù)據(jù)。在判斷塊2204,確定是否是對具有對應(yīng)的規(guī)則處理器的文檔執(zhí)行數(shù)據(jù)更新。如果 由于規(guī)則使用組件沒有先前綁定至該文檔而沒有定義規(guī)則處理器,則在塊2204執(zhí)行的測 試的結(jié)果是“否”并且通知監(jiān)聽器例程2200進(jìn)行到塊2208,這將在下文進(jìn)行更加詳細(xì)描述。 相反,如果相關(guān)文檔具有對應(yīng)的規(guī)則處理器,則通知監(jiān)聽器例程2200進(jìn)行到塊2206。在塊2206,調(diào)用與經(jīng)歷數(shù)據(jù)更新的文檔關(guān)聯(lián)的規(guī)則處理器。通過調(diào)用該規(guī)則處理 器,實現(xiàn)邏輯以確保由每個數(shù)據(jù)綁定組件理解的規(guī)則名稱空間是當(dāng)前的并且保留數(shù)據(jù)模型 的完整性。在這點上,在塊2002執(zhí)行的數(shù)據(jù)更新可以涉及在規(guī)則處理器中加入邏輯或者對 邏輯進(jìn)行修改。例如,當(dāng)定義了新數(shù)據(jù)綁定時,設(shè)置規(guī)則例程2100 (圖21)使得與數(shù)據(jù)綁定 關(guān)聯(lián)的新組件的規(guī)則與其它組件的規(guī)則一起合并在數(shù)據(jù)模型內(nèi)。在通知監(jiān)聽器例程2200 內(nèi)向綁定至相同基礎(chǔ)文檔的任何監(jiān)聽組件通知對規(guī)則處理器的數(shù)據(jù)更新。在上述的設(shè)置規(guī)則例程2100(圖21)內(nèi),規(guī)則處理器使得執(zhí)行在數(shù)據(jù)模型的當(dāng)前 版本內(nèi)反映的所有規(guī)則。然后,向與新數(shù)據(jù)綁定關(guān)聯(lián)的組件提供與數(shù)據(jù)模型內(nèi)的組件的對 應(yīng)規(guī)則相關(guān)的當(dāng)前名稱空間信息。然而,由于加入新規(guī)則會影響其它規(guī)則使用組件的綁定, 所以更新通知也提供給這些規(guī)則使用組件。因此,當(dāng)在塊2206被調(diào)用時,規(guī)則處理器使得 執(zhí)行在數(shù)據(jù)模型的當(dāng)前版本內(nèi)反映的所有規(guī)則。結(jié)果,規(guī)則處理器能夠?qū)?dāng)前名稱空間信 息和最新的規(guī)則提供給作為規(guī)則用戶的任何監(jiān)聽組件。繼而,對組件設(shè)置這個新數(shù)據(jù),由此 使得能夠在監(jiān)聽組件的數(shù)據(jù)綁定內(nèi)反映新規(guī)則的數(shù)據(jù)更新。一旦規(guī)則處理器完成,在塊2208調(diào)用與監(jiān)聽組件關(guān)聯(lián)的“Update () ”方法。由于 根據(jù)一組組件API定義組件,所以在“Update ()”方法內(nèi)執(zhí)行的邏輯是可配置的。換言之, 每個組件將不會實現(xiàn)它的“Update ()”方法內(nèi)的相同邏輯。代替地,開發(fā)人員可以采用這 個邏輯并且創(chuàng)建有效擴(kuò)展XML虛擬機(jī)的能力的新組件。因此,參照由本發(fā)明提供的組件提 供下文描述并且下文描述僅僅代表可在“Update () ”方法內(nèi)實現(xiàn)的邏輯。在判斷塊2210,確定是否在塊2202執(zhí)行了初始數(shù)據(jù)更新。在一個實施例中,通過 事務(wù)管理器910指引數(shù)據(jù)更新??梢詣?chuàng)建表示用于實現(xiàn)數(shù)據(jù)更新的原子單位的一個或多個
47事件更新對象,并且接下來在對監(jiān)聽組件的“Update ()”方法(在塊2208接收的)的調(diào)用 中提供所述事件更新對象。在一個實施例中,如果在對“Update()”方法的調(diào)用中接收到 事件更新對象,則數(shù)據(jù)更新不是初始更新,并且通知監(jiān)聽器例程2200進(jìn)行到塊2214,這將 在下文進(jìn)行更加詳細(xì)的描述。如果在對“Update()”方法的調(diào)用中沒有接收到事件更新對 象,則例程2200確定正執(zhí)行初始數(shù)據(jù)更新并且進(jìn)行到塊2212。在塊2212,利用綁定至組件的基礎(chǔ)數(shù)據(jù)的完整表示,以可視方式渲染組件的用戶 界面。如果到達(dá)塊2212,則正執(zhí)行初始數(shù)據(jù)更新,并且應(yīng)該在組件的用戶界面內(nèi)反映組件 上設(shè)置的所有數(shù)據(jù)。在這點上,在下文中參照圖23更加詳細(xì)描述使得在組件的用戶界面內(nèi) 渲染XML格式化數(shù)據(jù)的例程。然而,應(yīng)該適當(dāng)明白,如何執(zhí)行渲染取決于開發(fā)人員而不是由 組件API進(jìn)行規(guī)定。如下文中更加詳細(xì)地描述的,可以利用各種技術(shù)(包括但不限于XSLT、 JavaScript、HTML、VML/SVG 或 Adobe Flash)進(jìn)行渲染。如上所述,當(dāng)調(diào)用監(jiān)聽組件的“Update () ”方法時,可以提供一個或多個事件更新 對象。如圖22所示,選擇表示描述數(shù)據(jù)更新的原子單位的接收的事件更新對象以用于塊 2212的處理。在一個實施例中,實現(xiàn)邏輯以使得在監(jiān)聽組件的用戶界面內(nèi)反映在一個或多 個更新對象內(nèi)表示的數(shù)據(jù)更新。在判斷塊2214,確定選擇的事件更新對象是否表示影響監(jiān)聽組件的數(shù)據(jù)更新。如 上所述,發(fā)起數(shù)據(jù)更新的組件或操作提供XBind,該XBind引用數(shù)據(jù)模型中的受數(shù)據(jù)更新影 響的位置。描述對數(shù)據(jù)模型執(zhí)行的改變的這個變量被包括在傳播至每個監(jiān)聽組件的事件更 新對象內(nèi)。在這點上,XBind還用于描述數(shù)據(jù)到監(jiān)聽組件的用戶界面的綁定。在一個實施 例中,描述監(jiān)聽組件的數(shù)據(jù)綁定的XBind可與提供的描述數(shù)據(jù)更新的XBind進(jìn)行比較。利 用公共變量格式(例如,XBind)使監(jiān)聽組件可以執(zhí)行比較并且確定組件的用戶界面是否受 到數(shù)據(jù)更新的影響。如果這個比較的結(jié)果指示監(jiān)聽組件沒有受到數(shù)據(jù)更新的影響,則通知 監(jiān)聽器例程2200進(jìn)行到塊2222,這將在下文進(jìn)行更加詳細(xì)描述。相反,如果監(jiān)聽組件的用 戶界面的數(shù)據(jù)綁定受到數(shù)據(jù)更新的影響,則通知監(jiān)聽器例程2200進(jìn)行到塊2216。在一個方面中,本發(fā)明支持對組件的用戶界面的可視顯示的局部更新。在判斷塊 2216,確定監(jiān)聽組件是否可以執(zhí)行局部更新。在這點上,如果在監(jiān)聽組件的“Update () ”方 法內(nèi)提供支持局部更新的邏輯,則通知監(jiān)聽器例程2200進(jìn)行到塊2220,這將在下文進(jìn)行更 加詳細(xì)描述。相反,如果監(jiān)聽組件不支持局部更新,則通知監(jiān)聽器例程2200進(jìn)行到塊2218, 在塊2218,“Update () ”方法基于在組件數(shù)據(jù)綁定內(nèi)反映的所有數(shù)據(jù),渲染組件的用戶界 面。在這點上,在下文中參照圖23更加詳細(xì)描述在組件的用戶界面上渲染格式化XML的例 程。在通知監(jiān)聽器例程2200的塊2220內(nèi),執(zhí)行對組件的用戶界面的局部更新。當(dāng)支持 局部更新時,僅僅利用受數(shù)據(jù)更新影響的組件數(shù)據(jù)綁定中的數(shù)據(jù)執(zhí)行局部更新。在塊2220, 利用提供的XBind,可以識別該數(shù)據(jù)并且對組件設(shè)置該數(shù)據(jù)。組件的“Update() ”方法使得 基于現(xiàn)在在組件數(shù)據(jù)綁定內(nèi)反映的局部更新,渲染組件的用戶界面。在判斷塊2222,確定是否將在組件的用戶界面內(nèi)反映任何附加更新。因此,如果 先前沒有選擇在對“Update () ”方法的調(diào)用中接收的任何事件對象,則例程2200返回到塊 2212,并且塊2212-2220進(jìn)行重復(fù)直到選擇和處理了每個事件更新對象。然后,一旦在組件 的用戶界面內(nèi)反映了在數(shù)據(jù)更新內(nèi)表示的所有改變,例程2200進(jìn)行到塊2224,在塊2224它結(jié)束。如以前參照圖4A-4B所述,可以在Web瀏覽器的環(huán)境內(nèi)在客戶機(jī)計算機(jī)上實現(xiàn)網(wǎng) 絡(luò)操作系統(tǒng),作為孤立應(yīng)用或機(jī)器操作系統(tǒng)。在這點上,將參照圖23描述渲染例程2300, 渲染例程2300執(zhí)行處理從以圖形方式渲染并初始化應(yīng)用的組件和對話框。盡管在下文中 具體參照特定Web瀏覽器技術(shù),但是應(yīng)該適當(dāng)明白,可以在不利用Web瀏覽器的情況下實現(xiàn) 本發(fā)明。此外,在一個另選實施例中,可以不同地實現(xiàn)渲染例程2300以解決瀏覽器特有的 變化。因此,在下文參照圖23提供的描述僅僅是示例性的并且可以在各種平臺上不同地執(zhí) 行。如圖23所示,渲染例程2300在塊2302開始,在塊2302,實例化和調(diào)用視圖對象以 渲染新應(yīng)用視圖。如上所述,本發(fā)明提供的數(shù)據(jù)類型識別器可使得當(dāng)打開UI XML文檔時可 以實例化新的視圖對象。然后,在塊2304,視圖對象產(chǎn)生獲得新對話框?qū)ο蟮恼埱?。一般?說,對話框用作應(yīng)用的組件的框并且包括用于對應(yīng)用的視圖的可視表示進(jìn)行最小化、擴(kuò)展 和操縱的控件。在一個實施例中,提供對話框管理器,其被配置為回收對話框?qū)ο?,由此減 小消耗的內(nèi)存量。因此,如果先前創(chuàng)建的對話框?qū)ο蟛辉偈褂玫员3衷诖鎯ζ鲀?nèi),則現(xiàn)有 的對話框?qū)ο髮⒈恢匦路峙浣o新的應(yīng)用視圖。在渲染例程2300的塊2306,視圖對象作為監(jiān)聽器登記在對應(yīng)的view, xml文檔上。 與用戶界面組件相似,視圖對象可以登記為針對對描述視圖的數(shù)據(jù)模型執(zhí)行的數(shù)據(jù)更新的 監(jiān)聽器。如下文更加詳細(xì)地描述的,當(dāng)發(fā)生源于Web瀏覽器的指定事件時,在其中視圖對象 登記為監(jiān)聽器的view, xml文檔將被更新。通常,當(dāng)提供輸入或者用戶以其它方式與系統(tǒng)進(jìn) 行交互時,事件將是用戶產(chǎn)生的。在渲染例程2300的塊2308,應(yīng)用的用戶界面的基于XML的描述被變換和轉(zhuǎn)換成基 于HTML的表示。如上所述,本發(fā)明使開發(fā)人員能夠利用UI XML編程語言按語義描述應(yīng)用 的視圖的可視表示。在這點上,UI XML編程語言不需要開發(fā)人員提供任何計算或腳本邏輯。 代替地,在應(yīng)用的UI XML文檔內(nèi)僅僅提供圖形元素及其關(guān)系的抽象描述。在利用Web瀏覽 器的實例中,可以定義XSLT以將UI XML邏輯變換成HTML或適于由Web瀏覽器渲染的其它 標(biāo)記格式。值得注意的是,當(dāng)在塊2308對UI XML邏輯進(jìn)行變換時,與應(yīng)用的組件關(guān)聯(lián)的唯 一標(biāo)識符被包括在由Web瀏覽器渲染的結(jié)果HTML DOM文檔內(nèi)。一旦執(zhí)行了變換時,Web瀏 覽器將渲染與應(yīng)用的視圖關(guān)聯(lián)的圖形元素。在塊2310,實例化包含組件的計算邏輯的對象并且將它與對應(yīng)的視圖對象進(jìn)行關(guān) 聯(lián)。在一個實施例中,遍歷描述應(yīng)用用戶界面邏輯的UIXML文檔。選擇在UI XML文檔內(nèi)表 示的每個組件并且實例化對應(yīng)的組件對象。在一個實施例中,本發(fā)明提供組件的計算邏輯 與它的圖形表示之間的分離。換言之,組件的可視表示的UI XML描述不包括任何計算邏輯 并且可以通過各種方式以及針對不同平臺進(jìn)行變換,而不會影響組件的行為。在這點上, 在塊2310實例化的組件對象對組件的計算邏輯進(jìn)行編碼,其中,可以以腳本編程語言(例 如,JavaScript、SilverLight或Adobe Flash)表示組件的計算邏輯。然而,開發(fā)人員沒 有使用腳本語言定義組件的行為。代替地,開發(fā)人員使用UI XML語言定義組件的期望行 為。如果需要新的組件,開發(fā)人員可以根據(jù)組件API創(chuàng)建新的組件。在這點上,每個組件對 象實現(xiàn)基于根據(jù)組件API接收的信息的某些方法。這些方法包括用于對組件設(shè)置數(shù)據(jù)的 "Initialize() ”方法和用于對組件的用戶界面執(zhí)行更新的“Update ()”方法??梢栽诮M件內(nèi)實現(xiàn)未在這里進(jìn)行討論的許多方法,例如,當(dāng)關(guān)閉應(yīng)用視圖時去除組件的“UnloacK ) ”。 然而,只要存在由組件API定義的基本方法,就能夠利用任何可用的渲染技術(shù)實現(xiàn)組件。換 言之,組件不需要利用XSLT到HTML渲染它們的用戶界面,即使這是在這里中主要描述的實 施例。另外,能夠通過使用傳統(tǒng)編程邏輯的組件描述渲染邏輯。在塊2312,初始化在塊2310實例化的組件對象的計算行為。當(dāng)對應(yīng)用的視圖的 UI XML邏輯進(jìn)行變換時,與一個或多個組件關(guān)聯(lián)的標(biāo)識符被包括在由Web瀏覽器渲染的結(jié) 果HTML DOM文檔內(nèi)。在塊2312初始化組件的行為時,使用view, xml文檔,視圖對象識別 HTML DOM內(nèi)與組件有關(guān)的適當(dāng)引用。通過解釋view, xml文檔,視圖對象能夠?qū)嵗c產(chǎn) 生的HTML DOM對應(yīng)的組件對象并且將每個組件對象連接到對應(yīng)的用戶界面。這樣,在組件 的用戶界面上調(diào)用組件的計算行為和邏輯。一旦組件與它的各用戶界面關(guān)聯(lián),根據(jù)利用組 件API在每個組件內(nèi)實現(xiàn)的“Initialize )”方法設(shè)置組件的缺省狀態(tài)和/或值。當(dāng)在應(yīng) 用的UIXML文檔內(nèi)表示的所有組件已被初始化時,渲染例程2300進(jìn)行到塊2314,在塊2314 它結(jié)束。一般地說,由渲染例程2300執(zhí)行的功能使視圖對象便于在基于XML的應(yīng)用與由 Web瀏覽器利用的HTML DOM之間進(jìn)行通信。響應(yīng)于Web瀏覽器內(nèi)事件的發(fā)生,可以通知受到 影響的組件和視圖對象,并且在處理后,將事件傳播至適當(dāng)事件監(jiān)聽器(例如,過程XML文 檔中的觸發(fā)器或事件監(jiān)聽對象)。如上所述,一旦定義了綁定,當(dāng)調(diào)用組件對應(yīng)的“Update ( )”方法時,能夠以全部更新或局部更新的方式改變Web瀏覽器內(nèi)的組件的圖形表示。值得注意的是,組件API僅僅需要組件實現(xiàn)一組基本的計算邏輯。結(jié)果,組件可易 于被構(gòu)造為使用HTML之外的渲染技術(shù)并且仍知道數(shù)據(jù)更新,并且能夠綁定到數(shù)據(jù)。在一個 另選實施例中,可以利用 Adobe Flash,Micorsoft SilverLight、Java Applet 或者能 夠在執(zhí)行每個客戶機(jī)端組件計算邏輯的XML虛擬機(jī)的計算邏輯內(nèi)進(jìn)行調(diào)用的任何其它渲 染技術(shù)來初始化并且渲染組件。此外,當(dāng)在不同類型的計算裝置上實現(xiàn)本發(fā)明時,可以通過 不同方式執(zhí)行上述的渲染例程2300。當(dāng)沒有利用Web瀏覽器時,可以渲染應(yīng)用的用戶界面 邏輯而不需要在塊2308執(zhí)行XML與HTML之間的變換。代替地,可以提供圖形基元,這些圖 形基元適于被實現(xiàn)和調(diào)用以在“Initialize() ”和/或“Update ()”方法內(nèi)渲染組件的用 戶界面,并且利用傳統(tǒng)的編程語言(如C、C++、Java或Microsoft. SilverLight)來建立。XI0S通信總覽針對網(wǎng)絡(luò)操作系統(tǒng)編寫的XI0S應(yīng)用利用模型_視圖_控制器(MVC)模型。為此, XI0S應(yīng)用主要與數(shù)據(jù)模型(數(shù)據(jù)源的內(nèi)容的抽象)進(jìn)行交互。XI0S應(yīng)用與數(shù)據(jù)源之間的 這個抽象層允許將XI0S應(yīng)用與在數(shù)據(jù)源內(nèi)進(jìn)行的變化進(jìn)行隔離。換言之,數(shù)據(jù)源中的變化 并不一定要求XI0S應(yīng)用中的變化。圖24示出了在這個框架內(nèi)XI0S應(yīng)用2402如何與各種示例性數(shù)據(jù)源進(jìn)行交互的 一個實施例的總覽。在MVC條件下,XI0S應(yīng)用2402主要與數(shù)據(jù)模型進(jìn)行交互。在這種架 構(gòu)的一個實施例中,XI0S應(yīng)用2402通過與表示每個數(shù)據(jù)源的數(shù)據(jù)模型的XML文檔進(jìn)行交 互,與各種數(shù)據(jù)源的數(shù)據(jù)模型進(jìn)行交互。在另一個實施例中,XI0S應(yīng)用2402直接與暴露上 述的數(shù)據(jù)模型的編程對象進(jìn)行交互。下文描述主要涉及XI0S應(yīng)用2402與XML文檔進(jìn)行交 互的實施例,但是本領(lǐng)域技術(shù)人員將認(rèn)識到,可以替換MVC模式的其它實施方式。通過通信管理器2412處理與給定數(shù)據(jù)源的通信,其中,在運行時通信管理器2412可以嵌入在系統(tǒng)環(huán)境對象902 (圖9)內(nèi)。通信管理器2412管理一組通信器實例,這組通信 器實例中的每一個實現(xiàn)通信器API2410。通信器API 2410暴露可應(yīng)用于任何給定數(shù)據(jù)源的 普通操作。例如,通信器API 2410使得XI0S應(yīng)用2402可以加載、修改、創(chuàng)建或刪除文檔, 表示連接到數(shù)據(jù)源、修改存儲在數(shù)據(jù)源內(nèi)的數(shù)據(jù)、在數(shù)據(jù)源內(nèi)創(chuàng)建新的數(shù)據(jù),從數(shù)據(jù)源查詢 或去除數(shù)據(jù)等?;谥焕肬RL就能夠訪問任何數(shù)據(jù)源的思想建立通信器API2410。實現(xiàn)通信器 API 2410的通信器能夠經(jīng)由URL訪問它的數(shù)據(jù),并且返XI0S應(yīng)用2402能夠作為數(shù)據(jù)模型 進(jìn)行操縱的XML文檔。利用這種簡單方法,使用返回的XML文檔的XI0S應(yīng)用2402不需要 知道文檔從哪個通道到達(dá)或者創(chuàng)建了它的基礎(chǔ)數(shù)據(jù)源的種類。具有使用、操縱和創(chuàng)建數(shù)據(jù) 的統(tǒng)一方式,簡化了應(yīng)用開發(fā)以及數(shù)據(jù)抽象方案的實現(xiàn)。XI0S應(yīng)用2402還可易于從一個數(shù) 據(jù)源改變成另一個數(shù)據(jù)源和/或?qū)?shù)據(jù)源進(jìn)行變換。通信管理器2412實例化給出的通信器,由此響應(yīng)于從XI0S應(yīng)用2402接收到對 URL的請求而創(chuàng)建通道。提供通道的名稱或類型作為URL協(xié)議,并且URL的其余部分向通 道提供信息。通道然后以通道特有的方式處理信息。例如,web搜索通道可以接受例如 "websearch://example+search+terms"的 URL。協(xié)議"websearch,,能夠指示通信管理器 2412向web搜索通道傳遞URL,并且web搜索通道能夠利用位置“example+search+terms,, 建立要提交給web搜索引擎的搜索查詢。作為另一個通道的示例,當(dāng)傳送了例如“imap:// servername/userl/inbox/messagel"的URL時,可以以相似方式經(jīng)由IMAP通道訪問IMAP 文件夾存儲的收件箱內(nèi)的消息。在一些情況下,簡單URL可被傳遞至由特定通信器實現(xiàn)的通信器API 2410的功 能,例如,加載功能或保存功能。在另外情況下,動作URL可被傳遞至通信器。當(dāng)需要提供 由通信器API 2410提供的標(biāo)準(zhǔn)數(shù)據(jù)讀取/編輯/寫入/后附加操作以外的附加功能時,動 作URL可用于通信器內(nèi)。動作URL能夠提供通信器特有的功能,這些通信器特有的功能使 用基礎(chǔ)數(shù)據(jù)模型、其它資源或者基礎(chǔ)數(shù)據(jù)模型及其它資源。一個示例可以是使得通信器執(zhí) 行基礎(chǔ)數(shù)據(jù)模型的復(fù)雜處理的動作URL,由此使程序員不必在程序代碼內(nèi)執(zhí)行該處理。另 一個示例可以是提供基于基礎(chǔ)數(shù)據(jù)源之外的數(shù)據(jù)或功能的功能性。動作URL的格式與傳 遞至通信器API 2410的任何其它URL的格式相似“channel_name://function (paraml, param2,. . param n) ”,其中,"channel_name,,確定處理動作 URL 的通信器,"function” 由 通信器用于確定執(zhí)行什么處理,“paraml,param2,. . . param n”是要傳送至函數(shù)的參數(shù)的列 表。在一個實施例中,對動作URL的請求返回XML文檔。在圖24中示出了數(shù)據(jù)模型文檔、通信器和數(shù)據(jù)源的三個示例。一個示例是數(shù)據(jù)模 型文檔2404和用于與例如Google、Yahoo !、MSN LiveSearch等的web搜索服務(wù)2426進(jìn) 行通信的通信器2414。XI0S應(yīng)用2402從文檔管理器912請求web搜索模型文檔2404,該 web搜索模型文檔2404抽象與web搜索服務(wù)2426的通信。當(dāng)XI0S應(yīng)用2402與web搜索 模型文檔2404進(jìn)行交互時,文檔管理器912利用通信器API2410與web搜索通信器2414 進(jìn)行通信。繼而,web搜索通信器2414將經(jīng)由通信器API 2410提交的請求翻譯成由暴露 web搜索服務(wù)2426的功能的S0AP接口 2420理解的格式。因此,當(dāng)XI0S應(yīng)用2402從文檔 管理器912請求例如“websearch://example+search+terms”的URL時,返回表示搜索結(jié)果 的例如web搜索模型文檔2404的XML文檔。
圖24所示的另一個示例是SQL模型文檔2406。與web搜索模型文檔2404 —樣, XI0S應(yīng)用2402操縱SQL模型文檔2406。這個文檔的變化使文檔管理器912通過通信器 API 2410調(diào)用SQL通信器2416。SQL通信器2416將來自通信器API 2410的調(diào)用翻譯成 SQL web服務(wù)2422理解的格式。SQL web服務(wù)2422是允許對SQL數(shù)據(jù)庫2428進(jìn)行訪問的 SQL API 2432 的前端。作為圖24所示的又一個示例,XI0S應(yīng)用2402可以請求例如IMAP模型文檔2408 的文檔。當(dāng)XI0S應(yīng)用2402操縱IMAP模型文檔2408時,文檔管理器912通過通信器API 2410與IMAP通信器2418進(jìn)行通信。IMAP通信器2418將來自通信器API 2410的請求翻 譯成IMAP web服務(wù)2424理解的格式。IMAP web服務(wù)2424是IMAP服務(wù)器2430上的標(biāo)準(zhǔn) IMAP接口 2434的前端。由客戶機(jī)端組件2400的通信管理器2412容留例如web搜索通信器2414、SQL通信 器2416和IMP通信器2418的各通信器實例。通信管理器2412負(fù)責(zé)從文檔管理器912接 收包含URL的請求以及響應(yīng)于每個請求實例化所需通信器以形成通道。例如,如果通信管 理器2412接收到對以imap://開始的URL的請求,則通信管理器2412將實例化IMAP通信 器2418 (如果當(dāng)前沒有實例化IMP通信器2418)并且將請求傳遞至該IMP通信器2418。如圖24所示,可以通過基于web的前端(例如,SOAP接口 2420、SQL web服務(wù)2422 和IMAP web服務(wù)2424)訪問每個數(shù)據(jù)源(web服務(wù)2426、SQL數(shù)據(jù)庫2428和IMAP服務(wù)器 2430)。當(dāng)客戶機(jī)端組件2400僅僅與可經(jīng)由HTTP訪問的數(shù)據(jù)源進(jìn)行通信時,客戶機(jī)端組件 2400得到能夠重用大量現(xiàn)有通信功能(例如包含在標(biāo)準(zhǔn)web瀏覽器、代理服務(wù)器、防火墻等 內(nèi)的功能)的好處。然而,還可以創(chuàng)建不需要HTTP使能數(shù)據(jù)源作為后端的通信器。例如, 利用適當(dāng)?shù)耐ㄐ牌?,可以去除IMAP web服務(wù)2424或SQL web服務(wù)2422,并且IMAP通信器 2418和SQL通信器2416然后能夠分別直接與IMAP接口 2434或SQLAPI 2432進(jìn)行通信。XI0S文件系統(tǒng)_服務(wù)器端組件圖25示出了 XML文件系統(tǒng)服務(wù)器端組件2500的一個實施例的總覽。如圖24所 示,客戶機(jī)端組件2400包括在XML-FS模型文檔2502內(nèi)實現(xiàn)的、可通過文檔管理器912由 XI0S應(yīng)用2402獲得的數(shù)據(jù)模型。當(dāng)XI0S應(yīng)用2402與XML-FS模型文檔2502進(jìn)行交互時, 文檔管理器912通過通信器API 2410與由通信管理器2412容留的XI0S通信器2504進(jìn)行 通信。XI0S通信器2504繼而與服務(wù)器端組件2500進(jìn)行通信。服務(wù)器端組件2500包括客 戶機(jī)接口組件2506和數(shù)據(jù)存儲組件2514??蛻魴C(jī)接口組件2506是與XI0S通信器2504進(jìn)行通信的主要組件。XML web服務(wù) 2510 (連同它的基于web的HTTP前端2508)和事務(wù)協(xié)調(diào)器2522是XI0S通信器2504與服 務(wù)器端組件2500進(jìn)行通信的主要方式。XML web服務(wù)2510暴露XML文件系統(tǒng)內(nèi)的功能,例 如,文件創(chuàng)建、文件恢復(fù)、文件刪除、文件搜索等。事務(wù)協(xié)調(diào)器2522 (將在下文中進(jìn)行更加詳 細(xì)描述)幫助在超過一個的客戶機(jī)當(dāng)前訪問相同文件時協(xié)調(diào)數(shù)據(jù)存儲2514中的文件的變 化,并且用作緩存機(jī)構(gòu)。消息服務(wù)器2512 (同樣將在下文中進(jìn)行更加詳細(xì)描述)用于經(jīng)由 XI0S通信器2504向客戶機(jī)端組件2400通知XML文件系統(tǒng)2500內(nèi)由XI0S通信器2504已 訂閱的對象的變化。如圖中所示,XI0S通信器2504與XML web服務(wù)2510之間的通信是雙向的。換言 之,XI0S通信器2504既向XML web服務(wù)2510發(fā)送信息又從XML web服務(wù)2510接收信息。相反,消息服務(wù)器2512主要向XI0S通信器2504推送信息。數(shù)據(jù)存儲組件2514包括文件服務(wù)器2516、索引服務(wù)器2518和文件夾數(shù)據(jù)庫 2520。在一個實施例中,XML文件系統(tǒng)在三個分立的部分存儲文件數(shù)據(jù)。包含在文件內(nèi)的原 始數(shù)據(jù)作為文件存儲在文件服務(wù)器2516上。文件名、作者、修改日期、訪問控制表(ACL)和 與每個文件關(guān)聯(lián)的其它公共文件信息被存儲在文件夾數(shù)據(jù)庫2520內(nèi)。文件夾數(shù)據(jù)庫2520 還存儲文件在其中進(jìn)行組織的文件夾層級,包括每個文件夾的ACL以及例如相關(guān)圖標(biāo)、文 件夾渲染類型(例如,指示文件夾包含圖片,并且因此應(yīng)該利用圖片縮略圖進(jìn)行渲染)等的 附加文件夾元數(shù)據(jù)。索引服務(wù)器2518存儲用于例如通過利用全文搜索來搜索元數(shù)據(jù)而識 別和定位文件的附加元數(shù)據(jù)。盡管在圖25中這些組件的每個被描述為一個服務(wù)器上的分立組件,但是本領(lǐng)域 技術(shù)人員將認(rèn)識到,可以在分立的物理硬件上容留這些組件中的一個或多個。另選地,這些 組件中的一個或多個可以被分離成多個組件,在服務(wù)器端組件2500內(nèi)進(jìn)行復(fù)制,或者將它 們的功能組合到一個組件中。例如,可以在同一物理機(jī)器上全部容留XML web服務(wù)2510、 消息服務(wù)器2512、事務(wù)協(xié)調(diào)器2522、索引服務(wù)器2518、文件服務(wù)器2516和文件夾數(shù)據(jù)庫 2520。作為另一個示例,文件夾數(shù)據(jù)庫2520可以與其余組件分離,作為獨立的基于SQL的 數(shù)據(jù)存儲,或者文件服務(wù)器2516可以位于專用的高容量文件存儲系統(tǒng)上。另外,XML文件 系統(tǒng)可以僅僅包括一個服務(wù)器端組件2500或者可以包括很多個。在一個實施例中,XI0S通信器2504可以總與相同服務(wù)器端組件2500進(jìn)行通信。 服務(wù)器端組件2500然后將利用包含在由XI0S通信器2504請求的URL內(nèi)的信息,確定適當(dāng) 的XML web服務(wù)2510、消息服務(wù)器2512等以對請求提供服務(wù)。通過XI0S通信器2504進(jìn)行 接觸的服務(wù)器端組件2500還可以向更適當(dāng)?shù)姆?wù)器端組件2500轉(zhuǎn)發(fā)請求。這樣,使客戶 機(jī)端組件2400與由服務(wù)器端組件2500實現(xiàn)的任何負(fù)載平衡、冗余、或者定標(biāo)架構(gòu)的復(fù)雜性 隔罔。圖26示出了消息服務(wù)器2512的內(nèi)容的一些細(xì)節(jié)的一個實施例。消息服務(wù)器2512 包含使用XML文件系統(tǒng)的每個客戶機(jī)的訂閱列表。例如,圖26示出了兩個客戶機(jī)客戶機(jī) 1 2606和客戶機(jī)2 2608。客尸機(jī)1 2606與客戶機(jī)1訂閱列表2602關(guān)聯(lián),客戶機(jī)2 2608 與客戶機(jī)2訂閱列表2604關(guān)聯(lián)。每個訂閱列表包含當(dāng)更新對象時客戶機(jī)希望被通知的由服務(wù)器端組件2500存儲 的對象的列表。客戶機(jī)1訂閱列表2602指示客戶機(jī)1 2606希望被通知foo. doc (文件)、 bar. doc (也是文件)的變化、用戶3狀態(tài)的變化、組1文件夾列表的變化,以及由服務(wù)器端 組件2500存儲的其它對象和信息的變化。當(dāng)由另一個客戶機(jī)更新、刪除、重命名、打開foo. doc和bar. doc中的任一個或者它們通過某其它方式被改變時,對這些文件的訂閱將使得 消息服務(wù)器2512更新客戶機(jī)1 2606。當(dāng)用戶3的狀態(tài)改變時,例如,用戶3上線或離線, 用戶3指示他忙、用戶3輸入空閑狀態(tài)等,關(guān)于用戶3的狀態(tài)的條目將使得客戶機(jī)1 2606 被更新。當(dāng)更新、刪除屬于組1的文件夾或者對這些文件夾添加項目或者通過某其它方式 改變這些文件夾時,關(guān)于組1文件夾列表的條目將使得客戶機(jī)12606被更新??蛻魴C(jī)2訂 閱列表2604中的條目與客戶機(jī)1訂閱列表2602中的條目相似并且以相似的方式運轉(zhuǎn),但 是與客戶機(jī)1 2606相對,將使得客戶機(jī)2 2608被更新。在一個實施例中,通過消息服務(wù)器 2512經(jīng)由長輪詢發(fā)送通知,但是代替地可以使用向客戶機(jī)推送信息的其它合適的技術(shù)。
53
當(dāng)例如客戶機(jī)1 2606的客戶機(jī)初始連接到服務(wù)器端組件2500時,客戶機(jī)1 2606 可以通過XI0S通信器2504請求向訂閱列表添加對象。在一個實施例中,XI0S通信器2504 向它的內(nèi)部訂閱列表添加文檔,并且作為響應(yīng),文檔管理器912(或者客戶機(jī)端組件2400的 另一個子組件)向XML web服務(wù)2510發(fā)出請求。XI0S通信器2504與XML web服務(wù)2510 進(jìn)行通信,指示消息服務(wù)器2512向客戶機(jī)1 2606的訂閱列表添加對象。由于之前客戶機(jī) 1 2606尚未連接過,所以消息服務(wù)器2512為客戶機(jī)1創(chuàng)建新的訂閱列表,例如,客戶機(jī)1訂 閱列表2602。這個列表將通過關(guān)鍵字2610進(jìn)行識別。關(guān)鍵字2610包括優(yōu)選地難以猜測的 唯一標(biāo)識符。這個關(guān)鍵字2610然后經(jīng)由XML web服務(wù)2510和XI0S通信器2504被發(fā)送回 客戶機(jī)1 2606,從而使得客戶機(jī)1 2606知道關(guān)鍵字2610。在一個實施例中,XML web服務(wù) 2510和消息服務(wù)器2512簡單在一起工作以產(chǎn)生關(guān)鍵字2610,這個關(guān)鍵字2610然后被發(fā)送 給客戶機(jī)1 2606。在這個實施例中,客戶機(jī)1 2606(與XML web服務(wù)2510相對)指示消息 服務(wù)器2512向客戶機(jī)1 2606的訂閱列表添加對象。如上所述,例如客戶機(jī)1 2606的客戶機(jī)當(dāng)?shù)卿洉r將由XML文件系統(tǒng)進(jìn)行認(rèn)證以提 供安全性。在一個實施例中,該認(rèn)證在消息服務(wù)器2512與客戶機(jī)1 2606之間不重復(fù)。除了 先前的認(rèn)證以外,這個實施例中的關(guān)鍵字2610的難猜性質(zhì)針對竊聽客戶機(jī)1訂閱列表2602 的第三方應(yīng)該提供了足夠的安全性。與更加資源密集的認(rèn)證技術(shù)相對,利用關(guān)鍵字2610對 消息服務(wù)器2512的客戶機(jī)提供安全性的另一個優(yōu)點在于減小了消息服務(wù)器2512上的負(fù) 載。圖27示出了消息服務(wù)器2512的操作的一個實施例的另一個方面。在這幅圖中, 利用下面的三個訂閱列表來描述消息服務(wù)器2512 客戶機(jī)1訂閱列表2602、客戶機(jī)2訂閱 列表2604和客戶機(jī)3訂閱列表2702。在XML web服務(wù)的操作的過程中,當(dāng)被監(jiān)視的對象發(fā) 生變化時通知事務(wù)協(xié)調(diào)器2522。事務(wù)協(xié)調(diào)器2522然后通知消息服務(wù)器2512 應(yīng)該將通知 發(fā)送給訂閱了該對象的所有客戶機(jī)。本領(lǐng)域技術(shù)人員將認(rèn)識到,由于消息服務(wù)器2512包含使用XMLweb服務(wù)的每個客 戶機(jī)的訂閱列表并且每個訂閱列表包含關(guān)聯(lián)的客戶機(jī)正在監(jiān)聽的每個對象的條目,所以存 儲在消息服務(wù)器2512上的數(shù)據(jù)量和必須由消息服務(wù)器2512發(fā)送的通知的數(shù)目將隨著連接 到XML web服務(wù)的客戶機(jī)的數(shù)目而非常快地增漲。減小消息服務(wù)器2512所需的工作量的 一種方式是通過利用消息鏈2704。消息鏈2704是將監(jiān)聽給定對象的每個訂閱列表進(jìn)行關(guān) 聯(lián)的鏈表。例如,在圖27中,消息鏈2704將正在監(jiān)聽對象bar. doc的消息服務(wù)器2512上 的每個訂閱列表進(jìn)行鏈接。通過利用這個消息鏈2704,當(dāng)向消息服務(wù)器2512通知bar. doc 發(fā)生變化時,消息服務(wù)器2512首先通過通知客戶機(jī)1,然后通過通知客戶機(jī)2,然后通過通 知客戶機(jī)3,僅需遍歷消息鏈2704的鏈表。這去除了消息服務(wù)器2512確定大量的訂閱列 表中的哪一個包含對bar. doc的引用的需要,由此節(jié)省了處理時間并且提高了消息服務(wù)器 2512的效率。盡管為了簡化而在圖27中僅僅示出了一個消息鏈2704,但是應(yīng)該明白,可存 在與XML文件系統(tǒng)內(nèi)當(dāng)前正由客戶機(jī)監(jiān)視的每個對象關(guān)聯(lián)的一個消息鏈。XI0S文件系統(tǒng)_文件操作如上所述,XML文件系統(tǒng)存儲表示存儲在文件夾數(shù)據(jù)庫2520中的系統(tǒng)內(nèi)的文件夾 的層級的信息。XI0S應(yīng)用2402可以通過由XI0S通信器2504從XML web服務(wù)2510取回的 folders, xml文件,與文件夾層級進(jìn)行交互。
圖28A-28D示出了用于取folders, xml文件的示例性方法2800的一個實施例。 從開始塊2802開始,方法2800進(jìn)行到塊2804,在塊2804,XI0S應(yīng)用2402創(chuàng)建對folders, xml文件的文件請求并且將該文件請求提交給文檔管理器912。在一個實施例中,這個請求 包括文件夾標(biāo)識符(“文件夾ID”),該文件夾標(biāo)識符既唯一識別文件夾又提供服務(wù)器端組 件2500可用于指示文件夾數(shù)據(jù)庫2520的存儲文件夾信息的位置的信息。folders, xml文 件可以包含屬于與文件夾ID關(guān)聯(lián)的文件夾的信息以及與該文件夾內(nèi)的子文件夾關(guān)聯(lián)的信 息。如上所述,folders, xml文件還可以包含與每個文件夾關(guān)聯(lián)的附加元數(shù)據(jù)。在一個實施 例中,由XI0S應(yīng)用2402提交的請求采取URL的形式。在另一個實施例中,XI0S應(yīng)用2402 可以簡單地從文檔管理器912請求folders, xml文件,文檔管理器912將形成表示請求的 URL。在一個實施例中,文檔管理器912可能已經(jīng)具有folders, xml文件的緩存副本,在 這種情況下,文檔管理器912將簡單地向XI0S應(yīng)用2402提供文檔的緩存副本。然而,本文 的其余部分假定在文檔管理器912內(nèi)不存在請求的文檔的緩存副本。方法2800進(jìn)行到塊 2806,在塊2806,文檔管理器912從通信管理器2412獲得XI0S通信器2504并且將文件請 求傳遞至XI0S通信器2504的加載功能。方法2800然后進(jìn)行到塊2808,在塊2808,XI0S 通信器2504將對folders, xml文件的請求發(fā)送至服務(wù)器端組件2500的適當(dāng)XML web服務(wù) 2510,所述請求包括文件夾ID。接下來,在塊2810,服務(wù)器端組件對用戶進(jìn)行認(rèn)證,并且將 請求路由至XML web服務(wù)2510。方法2800然后進(jìn)行到塊2812,在塊2812,XML web服務(wù) 2510至少部分地基于文件夾ID的內(nèi)容,確定容留與文件夾ID關(guān)聯(lián)的文件夾樹的文件夾數(shù) 據(jù)庫。方法2800然后進(jìn)行到繼續(xù)終端(“終端A1”)。從終端A1 (圖28B)開始,方法2800進(jìn)行到塊2814,在塊2814,XML web服務(wù)2510 查詢適當(dāng)?shù)奈募A數(shù)據(jù)庫2520以取回與請求的文件夾關(guān)聯(lián)的信息。這個取回的信息可以 包括文件夾訪問控制表(ACL),并且還可以包括附加的文件夾元數(shù)據(jù)信息。接下來,方法 2800進(jìn)行到繼續(xù)終端(“終端B”),然后進(jìn)行到塊2816,在塊2816,XML web服務(wù)2510向 folders, xml文件添加文件夾信息。在一個實施例中,添加到folders, xml文件的文件夾信 息不包括文件夾ACL。代替地,folders, xml暗示請求用戶至少已經(jīng)讀取訪問了 folders, xml文件內(nèi)的每個文件夾??梢栽谶@個實施例中經(jīng)由獨立的請求獲得關(guān)于文件夾的ACL的 更加詳細(xì)的信息。這種技術(shù)的一些優(yōu)點的示例為folders, xml文件的大小以及由服務(wù)器端 組件2500執(zhí)行的處理的復(fù)雜度保持為最小。在這點上,由XML web服務(wù)2510構(gòu)建的folders, xml文件包含僅僅屬于由文件 夾ID識別的文件夾的信息。對folders, xml文件的對給定文件夾的請求還將返回屬于被 請求的文件夾的子文件夾的信息。由于多個文件夾(這些文件夾中的每個可能具有不同的 關(guān)聯(lián)許可(因此具有不同的ACL))的文件夾信息將在一個folders, xml文件中被返回給客 戶機(jī),所以重要的是僅僅關(guān)于具有匹配ACL的文件夾的信息被包括在給定的folders, xml 文件內(nèi)。然后,方法2800進(jìn)行到塊2818,在塊2818,XML web服務(wù)2510查詢文件夾數(shù)據(jù)庫 2520以取回與由文件夾ID識別的文件夾的直接子文件夾關(guān)聯(lián)的信息,包括每個子文件夾 的文件夾ID和ACL。然后,利用該查詢的結(jié)果,方法2800進(jìn)行到從塊2820開始的FOR循環(huán) 和指示FOR循環(huán)的開始的繼續(xù)終端(“終端C”)。從終端C開始,方法2800進(jìn)行到塊2822, 在塊2822,XML web服務(wù)2510將子文件夾的ACL與被請求的文件夾的ACL進(jìn)行比較。方法
552800然后進(jìn)行到另一個繼續(xù)終端(“終端A2”)。從終端A2 (圖28C)開始,方法2800繼續(xù)到判斷塊2824,在塊2824,執(zhí)行測試以確 定子文件夾的ACL是否與被請求的文件夾的ACL匹配。如果判斷塊2824的測試的結(jié)果為 “是”,則方法2800返回終端B,在塊2816將當(dāng)前子文件夾添加到folders, xml文件,并且方 法2800對當(dāng)前子文件夾的任何進(jìn)一步的子文件夾進(jìn)行遞歸處理。否則,如果判斷塊2824 的測試的結(jié)果是“否”,則方法2800進(jìn)行到塊2826,在塊2826,與關(guān)于子文件夾的任何其它 信息相對,XML web服務(wù)2510向folders, xml文件添加引用子文件夾的XLINK。方法2800 然后進(jìn)行到判斷塊2828,在塊2828,執(zhí)行測試以確定是否還存在任何其它子文件夾。利用XLINK向客戶機(jī)提供足夠信息以請求包含具有不同ACL的子文件夾的新 folders, xml文件,而不會向客戶機(jī)暴露要求單獨許可檢查的信息。這是重要的,因為如上 所述,folders, xml文件包含客戶機(jī)至少已經(jīng)讀取訪問了包含在folders, xml內(nèi)的每個文 件夾的隱式斷言。如果一子文件夾具有與被請求的文件夾不同的ACL(例如,如果該子文件 夾被一不同的用戶擁有,如果該子文件夾在一不同組內(nèi)進(jìn)行共享等),則對于該子文件夾這 種隱式斷言可能不為真。利用XLINK允許在仍保持這種隱式斷言的真實性的同時向客戶機(jī) 提供關(guān)于該子文件夾的最小信息。如果在判斷塊2828的測試的結(jié)果是“是”,則方法2800進(jìn)行到繼續(xù)終端C,并且對 下一個子文件夾進(jìn)行處理。否則,如果在判斷塊2828的測試的結(jié)果是“否”,則方法2800進(jìn) 行到另一個繼續(xù)終端(“終端A3”)。從終端A3 (圖28D)開始,方法2800進(jìn)行到塊2830,在塊2830,XML web服務(wù)2510 緩存完整的folders, xml文件的副本以加快對相同文件夾的未來請求的處理(假定在客 戶機(jī)請求之間沒有對文件夾層級進(jìn)行改變,在這種情況下,將重新產(chǎn)生緩存的folders, xml 文件)。接下來,在塊2832,XML web服務(wù)2510將完整的folders, xml文件返回到XI0S通 信器2504。方法2800然后進(jìn)行到塊2834,在塊2834,XI0S通信器2504向文檔管理器912 提供folders, xml文件。接下來,在塊2836,文檔管理器912緩存folders, xml文件,并且 向XI0S應(yīng)用2402提供folders, xml文件。方法2800然后進(jìn)行到完成塊2836并且結(jié)束。圖28E示出了由上述的方法2800的實施例產(chǎn)生的folders, xml文件2840的一個 示例。為了圖28E,假定XML文件系統(tǒng)2500存儲例如在圖8A的樹組件800內(nèi)描述的文件夾 層級的文件夾層級,并且用戶已經(jīng)對文件夾“RESEARCH”請求了 folders, xml文件。另外, 在圖28E中描述了一組行號2842,以便于進(jìn)行討論。如圖28E所示,方法2800響應(yīng)于請求創(chuàng)建了 folders, xml文件2840。文件2840的 第1-4行包含用于識別文檔剩余部分的XML版本和模式的頭信息。方法2800創(chuàng)建被請求的 文件夾“RESEARCH”的條目(第6行),然后列舉被請求的文件夾的子文件夾以添加具有匹 配的ACL的任何其它文件夾。在這種情況下,在圖8A中以及在文件2840的第7、8和12行 的文件夾“PERSONAL”、“WORK”和“LETTERS”分別被發(fā)現(xiàn)具有匹配的ACL。該方法還繼續(xù)添 加同樣具有匹配的ACL的這些文件夾的任何子文件夾。在這種情況下,文件夾“PERSONAL” 和“LETTERS”不具有任何子文件夾,但是文件夾“WORK”具有帶有匹配的ACL的兩個子文 件夾,即,在第9和10行發(fā)現(xiàn)的“BROWSERS”和“VIDEO ENCODING”。對于每個文件夾,方法 2800向文件2840添加有限的元數(shù)據(jù)信息。在這里所示的實施例中,方法2800添加包括每 個文件夾的“name” (名稱)、“id”和“type” (類型)的元數(shù)據(jù),但是在其它實施例中,可以添加更多或更少的元數(shù)據(jù)。另外,盡管為了簡化所示的“ id”元素是整數(shù)值,但是“ id”值可 以包含如上所述的用于指示存儲文件夾信息的文件夾數(shù)據(jù)庫2520的更加復(fù)雜的信息。另 選地,例如整數(shù)值的簡單值可用于“id”元素,并且可執(zhí)行查詢以確定存儲文件夾信息的文 件夾數(shù)據(jù)庫2520。方法2800還創(chuàng)建文件夾“EMAIL”的條目,文件夾“EMAIL”不具有與“RESEARCH” 文件夾的ACL匹配的ACL。第13-19行所示的“EMAIL”文件夾的條目包含關(guān)于該文件夾的 最小信息,僅僅顯示它的“name”元素。它還包含XLINK,用戶可遍歷該XLINK以產(chǎn)生包含 “EMIAL”文件夾(以及具有與“EMAIL”文件夾ACL匹配的ACL的任何子文件夾)的信息的 新的folders, xml文件。在一個實施例中,folders, xml文件包含關(guān)于文件夾層級的信息,但不包含關(guān)于文 件夾內(nèi)的各個文件的信息。圖29示出了當(dāng)folders, xml文件不包含文件列表信息時取回 給定文件夾內(nèi)的文件的列表的方法2900的一個實施例。從開始塊2902開始,方法2900進(jìn) 行到塊2904,在塊2904,XI0S應(yīng)用2402創(chuàng)建文件列表請求并且將文件列表請求提交給文 檔管理器912,該文件列表請求包括指定文件夾的文件夾ID。如上所述,文件夾ID包含指 示存儲關(guān)于指定文件夾的內(nèi)容的信息的文件夾數(shù)據(jù)庫2520的信息。文件列表請求還可以 包括其它選項,例如,期望文件類型的過濾器、排序偏愛、日期范圍過濾器等。接下來,方法 2900繼續(xù)到塊2906,在塊2906,文檔管理器912從通信管理器2412獲得XI0S通信器2504, 并且將文件列表請求傳遞至XI0S通信器2504。接下來,在塊2908,XI0S通信器2504向服 務(wù)器端組件2500的適當(dāng)XML web服務(wù)2510發(fā)送查詢。方法2900然后繼續(xù)到塊2910,在塊 2910,服務(wù)器端組件2500對用戶進(jìn)行認(rèn)證并且將請求路由至XML web服務(wù)2510,XML web 服務(wù)2510檢查對被請求的文件夾2910的許可。為了檢查對被請求的文件夾的許可,XML web服務(wù)2510可以查詢文件夾數(shù)據(jù)庫2520以取回給定父文件夾的ACL,并且確定該ACL是 否向認(rèn)證的用戶授權(quán)訪問。一旦用戶得到認(rèn)證并且許可得到驗證,方法2900進(jìn)行到塊2912,在塊2912,XML web服務(wù)2510確定與被請求的文件夾ID對應(yīng)的索引服務(wù)器2518并且向索引服務(wù)器2518 發(fā)送查詢。如上所述,XML web服務(wù)2510可利用包含在文件夾ID內(nèi)的信息確定對應(yīng)的索 引服務(wù)器2518。接下來,在塊2914,索引服務(wù)器2518查詢索引以獲取被請求的文件夾的文 件列表,并且處理關(guān)于列表內(nèi)的每個文件的ACL的結(jié)果。在一個實施例中,索引服務(wù)器2518 的索引是文件信息的全文索引,并且每個文件的索引字段之一包含父文件夾的文件夾ID。 通過對關(guān)于列表內(nèi)的每個文件的ACL的結(jié)果進(jìn)行處理,保證僅僅認(rèn)證的用戶訪問的文件被 添加到文件夾列表。在一個實施例中,為了節(jié)省處理時間省去了這個處理,并且改為當(dāng)用戶 嘗試訪問這些文件之一時強(qiáng)制用戶許可。接下來,在塊2916,索引服務(wù)器2518將由索引返回的文件的列表以及從索引獲取 的有限的文件元數(shù)據(jù)進(jìn)行格式化為合適格式(例如,AT0M、RSS或者其它合適格式)的潰源 (feed),并且將其返回給客戶機(jī)端組件2400。有限的文件元數(shù)據(jù)可以包括例如最后修改日 期、作者、文件類型等的項目。方法2900然后繼續(xù)到結(jié)束塊2918并且結(jié)束。由于數(shù)據(jù)以協(xié)作方式存儲在XML文件系統(tǒng)內(nèi)并且多個客戶機(jī)可以更新給定的父 文件夾或者創(chuàng)建相同文件,所以在一些實施例中在XML文件系統(tǒng)內(nèi)的文件的簡單創(chuàng)建可以 包括文件創(chuàng)建客戶機(jī)與服務(wù)器端組件2500之間的協(xié)調(diào)。圖30A-30C示出了用于在XML文件系統(tǒng)內(nèi)創(chuàng)建文件的方法3000的一個實施例。從開始塊3002開始,方法3000進(jìn)行到塊 3004,在塊3004,XI0S應(yīng)用2402指定新文件的文件名稱和目的文件夾,并且對原始文件數(shù) 據(jù)內(nèi)容進(jìn)行初始化。對原始文件數(shù)據(jù)內(nèi)容進(jìn)行初始化可以創(chuàng)建新的空文件,或者可以將現(xiàn) 有的內(nèi)容插入到原始文件數(shù)據(jù)內(nèi)(例如當(dāng)用戶首先保存她已經(jīng)開始創(chuàng)建的內(nèi)容時)。接下 來,在塊3006,XI0S應(yīng)用2402向文檔管理器912提交文件創(chuàng)建請求,該文件創(chuàng)建請求包括 文件名稱、目的文件夾ID和原始文件數(shù)據(jù)內(nèi)容。在一個實施例中,這個請求的至少一部分 被格式化為URL。方法3000然后進(jìn)行到塊3008,在塊3008,文檔管理器912從通信管理器 2412獲得XI0S通信器2504,并且將文件創(chuàng)建請求傳遞至XI0S通信器2504。接下來,在塊 3010,XI0S通信器2504向服務(wù)器端組件2500的XML web服務(wù)2510發(fā)送創(chuàng)建新文件的請 求。方法3000然后進(jìn)行到塊3012,在塊3012,服務(wù)器端組件2500對用戶進(jìn)行認(rèn)證并且將 請求路由至XML web服務(wù)2510。接下來,方法3000然后進(jìn)行到塊3014,在塊3014,XML web服務(wù)2510確定容留目 的文件夾的文件夾數(shù)據(jù)庫,并且檢查用戶具有在目的文件夾內(nèi)創(chuàng)建文件的許可。如上所述, 目的文件夾的文件夾ID包含使得XML web服務(wù)2510確定包含與目的文件夾關(guān)聯(lián)的信息的 文件夾數(shù)據(jù)庫的信息。同樣如上所述,XML web服務(wù)2510通過查詢文件夾數(shù)據(jù)庫2520以 獲取目的文件夾的ACL并且確定該ACL是否向認(rèn)證的用戶授予了適當(dāng)權(quán)限,能夠保證用戶 具有創(chuàng)建文件的許可。方法3000然后進(jìn)行到繼續(xù)終端(“終端A1”)。從終端A1 (圖30B)開始,方法3000進(jìn)行到塊3016,在塊3016,XML web服務(wù)2510 檢查指定的目的文件夾是否是特殊文件夾。在一個實施例中,在XML文件系統(tǒng)內(nèi)存在兩種 類型的文件夾存儲文件夾和特殊文件夾。由于存儲文件夾主要用于存儲文件和其它文件 夾,所以存儲文件夾更像傳統(tǒng)文件系統(tǒng)內(nèi)的文件夾。與之相對,XML文件系統(tǒng)利用特殊文件 夾來抽象另一種形式的通信。這使得XI0S應(yīng)用2402可以按照它與存儲內(nèi)的文件進(jìn)行交互 的相同方式,與該另一形式的通信進(jìn)行交互,從而簡化了應(yīng)用開發(fā)。例如,特殊文件夾可被 指定為電子郵件特殊文件夾,并且在電子郵件特殊文件夾內(nèi)創(chuàng)建新的文件將使得發(fā)送一個 電子郵件。在一個實施例中,對于每個用戶存在兩個特殊文件夾入局特殊文件夾或“收件 箱”,以及出局特殊文件夾或“發(fā)件箱”。在其它實施例中,存在更多或更少的特殊文件夾。方法3000繼續(xù)到判斷塊3018,在判斷塊3018,執(zhí)行測試以確定指定的目的文件夾 是否是特殊文件夾。如果判斷塊3018的測試的結(jié)果是“是”,則方法3000進(jìn)行到塊3019, 在塊3019,請求被發(fā)送至與特殊文件夾關(guān)聯(lián)的服務(wù)器過程以進(jìn)行進(jìn)一步處理。在下文中關(guān) 于圖36所示的方法3600以及所附文字,討論這種處理的實施例的一個示例。方法3000然 后進(jìn)行到繼續(xù)終端(“終端B”)。盡管圖30B示出了當(dāng)在特殊文件夾內(nèi)創(chuàng)建新文件之前發(fā)生例如方法3600的方法, 但是并非一定是這種情況。在一個實施例中,可以改為在創(chuàng)建文件以后(例如在終端B(圖 30C)后)執(zhí)行在判斷塊3018執(zhí)行的測試。在這種實施例中,與直接對來自客戶機(jī)的請求進(jìn) 行操作相對,監(jiān)視特殊文件夾的服務(wù)器過程將對在特殊文件夾內(nèi)創(chuàng)建的文件進(jìn)行操作。通 過對特殊文件夾的內(nèi)容進(jìn)行輪詢能夠向服務(wù)器過程通知文件的創(chuàng)建。另選地,通過創(chuàng)建與 消息服務(wù)器上的過程關(guān)聯(lián)的訂閱列表,向訂閱列表添加特殊文件夾,并且由此例如在方法 3000的塊3030從消息服務(wù)器接收關(guān)于文件的創(chuàng)建的通知,能夠向服務(wù)器過程通知文件的 創(chuàng)建。
如果判斷塊3018的測試的結(jié)果是“否”,則方法3000進(jìn)行到塊3020,在塊3020,文 件服務(wù)器2516在與文件服務(wù)器關(guān)聯(lián)的存儲位置為新文件的原始文件數(shù)據(jù)分配空間,并且 將初始的原始文件數(shù)據(jù)存儲在該存儲位置。接下來,在塊3022,文件夾數(shù)據(jù)庫2520在文件 夾數(shù)據(jù)庫內(nèi)為新文件創(chuàng)建條目,該條目包含與文件關(guān)聯(lián)的有限的元數(shù)據(jù),包括文件名、創(chuàng)建 日期、唯一文件ID、存儲位置等。在一個實施例中,文件可以具有與一個文件ID關(guān)聯(lián)的多于 一個的文件流。在這種情況下,文件服務(wù)器2516為每個流分配在存儲位置的獨立空間,并 且存儲在文件夾數(shù)據(jù)庫2520內(nèi)的元數(shù)據(jù)將文件ID與所有的存儲位置進(jìn)行關(guān)聯(lián)。XML文件 系統(tǒng)通過文件的可用元數(shù)據(jù)向客戶機(jī)暴露與文件關(guān)聯(lián)的所有流。方法3000然后進(jìn)行到塊3024,在塊3024,文件夾數(shù)據(jù)庫2520將新文件與指定的 目的文件夾進(jìn)行關(guān)聯(lián)。在父文件夾與新文件之間創(chuàng)建的關(guān)聯(lián)使得當(dāng)搜索包含在文件夾內(nèi)的 文件時,XML web服務(wù)2510能夠利用文件夾ID查詢文件夾數(shù)據(jù)庫2520和索引服務(wù)器2518 以發(fā)現(xiàn)文件。方法3000然后進(jìn)行到另一個繼續(xù)終端(“終端A2”)。從終端A2(圖30C)開始,方法3000進(jìn)行到塊3026,在塊3026,XML web服務(wù)2510 將新文件的元數(shù)據(jù)發(fā)送至索引服務(wù)器2518。這個元數(shù)據(jù)可以是由文件夾數(shù)據(jù)庫存儲的相 同元數(shù)據(jù),它被復(fù)制到索引服務(wù)器2518以便于元數(shù)據(jù)的快速全文搜索。發(fā)送至索引服務(wù)器 2518的元數(shù)據(jù)還可以包括存儲在文件夾數(shù)據(jù)庫內(nèi)的信息之外的有利于全文索引的另外信 息,例如,用戶或應(yīng)用指定的特性、作者信息、用戶評論等。發(fā)送至索引服務(wù)器2518的元數(shù) 據(jù)還可以包括直接從與文件關(guān)聯(lián)的一個或多個文件流提取的信息。接下來,在塊3028,XML web服務(wù)2510向消息服務(wù)器2512發(fā)送在指定的目的文件 夾內(nèi)創(chuàng)建新文件的通知。另選地,當(dāng)檢測到新文件與父文件夾的關(guān)聯(lián)時,可由文件夾數(shù)據(jù)庫 2520或索引服務(wù)器2518發(fā)送這個通知。方法3000然后進(jìn)行到塊3030,在塊3030,消息服 務(wù)器2512向在訂閱列表內(nèi)具有指定的目的文件夾的每個客戶機(jī)發(fā)送更新通知。接下來,在 塊3032,客戶機(jī)通過XML web服務(wù)2510向消息服務(wù)器2512發(fā)送請求,以向客戶機(jī)的訂閱列 表添加新文件,這個請求包括文件ID。接下來,在塊3034,消息服務(wù)器2512向客戶機(jī)的訂 閱列表添加新文件。然后,方法3000進(jìn)行到終端B,然后進(jìn)行到結(jié)束塊3036,在結(jié)束塊3036 方法3000結(jié)束。圖31A-31E示出了用于打開XML文件系統(tǒng)內(nèi)的現(xiàn)有文件的方法3100的一個實施 例。從開始塊3102開始,方法3100進(jìn)行到在繼續(xù)終端(“終端B”)與退出終端(“終端 C”)之間定義的一組方法步驟3104。這組方法步驟3104描述了打開沒有進(jìn)行共享的現(xiàn)有 文件(換言之,當(dāng)前沒有由另一個客戶機(jī)打開的文件)的方法。從終端B(圖31B)開始,方 法3100進(jìn)行到塊3110,在塊3110,第一客戶機(jī)上的XI0S應(yīng)用2402從文檔管理器912請求 文件,這個請求包括文件ID。在一個實施例中,請求是URL的形式。該請求可以包括被并入 新產(chǎn)生的URL內(nèi)的文件ID,或者第一客戶機(jī)可以已經(jīng)獲得了能夠?qū)ξ募ぶ返腢RL,例如包 括在文件列表內(nèi)的文件URL。在一個實施例中,URL可以不包含文件ID自身,但是改為包括 可導(dǎo)出文件ID的信息。接下來,在塊3112,文檔管理器912從通信管理器2412獲得XI0S通信器2504并 且向XI0S通信器2504傳遞文件請求。方法3100然后進(jìn)行到塊3114,在塊3114,XI0S通信 器2504向服務(wù)器端組件2506的適當(dāng)XML web服務(wù)2510發(fā)送對文件的請求,這個請求包括 文件ID。如上所述,請求可以是包括文件ID的URL的形式,或者代替地可包括可導(dǎo)出文件ID的信息。接下來,在塊3116,服務(wù)器端組件2506對用戶進(jìn)行認(rèn)證并且將請求路由至XML web 服務(wù) 2510。在一個實施例中,包含在請求內(nèi)的文件ID或文件URL還包含指示文件所駐留的文 件服務(wù)器2516的信息,以幫助XML web服務(wù)2510確定適當(dāng)?shù)奈募A數(shù)據(jù)庫2520、文件服務(wù) 器2516或事務(wù)協(xié)調(diào)器2522以獲得文件。在另一個實施例中,該請求還可以包括父文件夾 的文件夾ID,并且XML web服務(wù)2510可以基于包含在文件夾ID內(nèi)的信息,確定用于獲得文 件的適當(dāng)數(shù)據(jù)存儲服務(wù)器。對于一個文件請求必須進(jìn)行聯(lián)系的不同服務(wù)器的數(shù)目以及相應(yīng) 地在文件ID或文件URL內(nèi)提供的信息量,取決于如何對數(shù)據(jù)庫進(jìn)行劃分,從而取決于由特 定實施例提供的可伸縮性的量。接下來,在塊3117,XML web服務(wù)2510檢查第一客戶機(jī)的用戶具有打開文件的許 可,并且將對文件的請求提交給適當(dāng)?shù)氖聞?wù)協(xié)調(diào)器2522。在一個實施例中,XML web服務(wù) 2510通過從適當(dāng)?shù)奈募A數(shù)據(jù)庫2520獲取文件的ACL并且通過檢查該ACL是否允許認(rèn)證 的用戶訪問文件,來檢查客戶機(jī)許可。接下來,在塊3118,事務(wù)協(xié)調(diào)器2522指示消息服務(wù) 器2512向第一客戶機(jī)的訂閱列表添加被請求的文件。方法3100然后進(jìn)行到塊3119,在塊 3119,事務(wù)協(xié)調(diào)器2522確定當(dāng)前是否共享該文件。方法3100然后進(jìn)行到繼續(xù)終端(“終端 B1”)。從終端B1 (圖31C)開始,方法3100進(jìn)行到判斷塊3120,在判斷塊3120,執(zhí)行測試 以確定當(dāng)前是否共享文件。如果判斷塊3120的測試的結(jié)果是“是”,則方法進(jìn)行到繼續(xù)終端 (“終端D1”)。否則,如果判斷塊3120的測試的結(jié)果是“否”,則方法3100進(jìn)行到塊3122, 在塊3122,事務(wù)協(xié)調(diào)器2522查詢適當(dāng)?shù)奈募A數(shù)據(jù)庫2520以確定存儲原始文件數(shù)據(jù)的文 件服務(wù)器2516。接下來,在塊3124,事務(wù)協(xié)調(diào)器2522從適當(dāng)?shù)奈募?wù)器2516獲取原始 文件數(shù)據(jù)。然后,在塊3126,事務(wù)協(xié)調(diào)器2522將原始文件數(shù)據(jù)返回到XML web服務(wù)2510 并且將共享標(biāo)志設(shè)置為“假”。接下來,在塊3128,XML web服務(wù)2510將原始文件數(shù)據(jù)返回 到第一客戶機(jī)的XI0S通信器2504并且將共享標(biāo)志設(shè)置為“假”。方法3100然后進(jìn)行到塊 3129,在塊3129,XI0S通信器2504向文檔管理器912提供對原始文件數(shù)據(jù)的訪問,文檔管 理器912繼而向XI0S應(yīng)用2402提供對原始文件數(shù)據(jù)的訪問。方法3100然后進(jìn)行到另一 個繼續(xù)終端(“終端C”)。從終端C (圖31A)開始,方法3100進(jìn)行到在終端D與終端E之間定義的一組方法 步驟3106,這組方法步驟3106描述了打開正由另一個客戶機(jī)共享的現(xiàn)有文件的方法。為了 說明,這組方法步驟3106假定第一客戶機(jī)已經(jīng)執(zhí)行了這組方法步驟3104,并且因此第一客 戶機(jī)已經(jīng)打開了被請求的文件。從終端D (圖31D)開始,方法3100進(jìn)行到塊3130,在塊3130,第二客戶機(jī)上的XI0S 應(yīng)用2402經(jīng)由文檔管理器912和XI0S通信器2504向服務(wù)器端組件2514發(fā)送文件請求, 這個文件請求包括文件ID。如上所述,請求可以是包括文件ID的URL的形式,或者可以是 包括可導(dǎo)出文件ID的信息的URL的形式。由于在上文中詳細(xì)描述了包括塊3130的動作的 各個動作,所以為了簡短在這里省去了這些更加詳細(xì)的描述。接下來,在塊3132,服務(wù)器端 組件2514對第二客戶機(jī)的用戶進(jìn)行認(rèn)證,并且向XML web服務(wù)2510路由請求。方法3100 然后進(jìn)行到塊3134,在塊3134,XML web服務(wù)2510檢查第二客戶機(jī)的用戶具有打開文件的 許可,并且將對文件的請求提交給適當(dāng)?shù)氖聞?wù)協(xié)調(diào)器2522。方法3100然后進(jìn)行到塊3136,
60在塊3136,事務(wù)協(xié)調(diào)器2522指示消息服務(wù)器2512將文件添加到第二客戶機(jī)的訂閱列表。 本領(lǐng)域技術(shù)人員將認(rèn)識到,到此時,關(guān)于在塊3110-3116之間以及對應(yīng)塊3130-3136之間定 義的方法的相似度,在用于打開被共享的文件和用于打開沒有被共享的文件的方法之間幾 乎沒有差別。接下來,在塊3138,事務(wù)協(xié)調(diào)器2522確定當(dāng)前正共享被請求的文件。此刻,用于打 開被共享的文件的方法與用于打開沒有被共享的文件的方法不同。方法3100進(jìn)行到終端 D1,然后進(jìn)行到塊3140,在塊3140,事務(wù)協(xié)調(diào)器2522查詢文件夾數(shù)據(jù)庫2520以確定存儲原 始文件數(shù)據(jù)的文件服務(wù)器2516。接下來,在塊3142,事務(wù)協(xié)調(diào)器2522從適當(dāng)?shù)奈募?wù)器 2516獲取原始文件數(shù)據(jù)的副本并且進(jìn)行緩存。接下來,在塊3144,事務(wù)協(xié)調(diào)器2522指示消 息服務(wù)器2512向第一客戶機(jī)通知文件現(xiàn)在被共享。方法3100然后進(jìn)行到另一個繼續(xù)終端 (“終端 D2,,)。從終端D2 (圖31E)開始,方法3100進(jìn)行到塊3146,在塊3146,事務(wù)協(xié)調(diào)器2522 向XML web服務(wù)2510發(fā)送原始文件數(shù)據(jù)并且將共享標(biāo)志設(shè)置為“真”。這將通知XML web 服務(wù)2510和XI0S通信器2504,與文件沒有被共享的情況不同地對待原始文件數(shù)據(jù)。接下 來,在塊3148,XML web服務(wù)2510將原始文件數(shù)據(jù)返回到第二客戶機(jī)并且將共享標(biāo)志設(shè)置 為“真”。方法3100然后進(jìn)行到塊3150,在塊3150,消息服務(wù)器2512至少向第一客戶機(jī)通 知文件現(xiàn)在被共享。方法3100然后進(jìn)行到塊3152,在塊3152,響應(yīng)于接收到文件現(xiàn)在被共 享的通知,第一客戶機(jī)將任何先前未提交的事務(wù)發(fā)送給XML web服務(wù)2510。如下所述,當(dāng)?shù)谝豢蛻魴C(jī)上的文件數(shù)據(jù)模型發(fā)生變化時,第一客戶機(jī)的事務(wù)管理 器910可以收集這些變化,而不立即將它們發(fā)送至XMLweb服務(wù)2510以進(jìn)行存儲。這在第 一客戶機(jī)在離線模式下操作的情況下是尤其有可能的,但是由于高網(wǎng)絡(luò)延遲、高處理器負(fù) 載等它也可能會發(fā)生。當(dāng)?shù)谝豢蛻魴C(jī)接收到文件現(xiàn)在被共享的通知時,事務(wù)管理器910取 得任何未提交的事務(wù)并且將它們發(fā)送給XML web服務(wù)2510。在方法3100的塊3154,XML web服務(wù)2510在接收到這些事務(wù)以后,將未提交的事 務(wù)發(fā)送給事務(wù)協(xié)調(diào)器2522,事務(wù)協(xié)調(diào)器2522向由事務(wù)協(xié)調(diào)器2522存儲的原始文件數(shù)據(jù)的 緩存版本提交未保存的事務(wù)。這些事務(wù)將最終被提交給文件服務(wù)器2516上的原始文件數(shù) 據(jù)。在一個實施例中,當(dāng)保持文件的客戶機(jī)執(zhí)行保存命令時,事務(wù)將被提交。在另一個實施 例中,在預(yù)定時段后改變將被提交。在另一個實施例中,在文檔的所有客戶機(jī)用戶已經(jīng)斷開 連接后改變將被提交。接下來,在塊3156,事務(wù)協(xié)調(diào)器2522指示消息服務(wù)器2512向所有監(jiān) 聽客戶機(jī)通知提交的改變。方法3100然后進(jìn)行到塊3158,在塊3158,第一客戶機(jī)和第二客 戶機(jī)從消息服務(wù)器接收提交的改變的通知。接下來,方法3100進(jìn)行到終端E并且結(jié)束。網(wǎng)絡(luò)操作系統(tǒng)客戶機(jī)組件啟動圖32A示出了啟動網(wǎng)絡(luò)操作系統(tǒng)的客戶機(jī)端組件2400的方法3200的一個實施 例。從開始塊3202開始,方法3200進(jìn)行到塊3204,在塊3204,客戶機(jī)端組件2400的引導(dǎo) 加載器實例化系統(tǒng)環(huán)境對象902 (圖9)及其關(guān)聯(lián)的管理器,并且啟動到XML文件系統(tǒng)2500 的通信通道。在一些實施例中,由于XML虛擬機(jī)已經(jīng)包含在客戶機(jī)端組件2400內(nèi),所以不 需要利用引導(dǎo)加載器。例如,這將是在Web瀏覽器之外作為獨立應(yīng)用(例如在移動裝置內(nèi), 在機(jī)頂盒或瘦客戶機(jī)組件上)實現(xiàn)客戶機(jī)端組件2400的實施例中的情況。這還將是作為 不需要主機(jī)操作系統(tǒng)進(jìn)行執(zhí)行的機(jī)器操作系統(tǒng)實現(xiàn)的實施例的情況。網(wǎng)絡(luò)操作系統(tǒng)能夠通過經(jīng)由任何網(wǎng)絡(luò)連接(包括但不限于在互聯(lián)網(wǎng)上利用HTTP協(xié)議)獲取文件(包括定義啟 動過程的文件)進(jìn)行工作。即使沒有在方法3200中描述的啟動過程,網(wǎng)絡(luò)操作系統(tǒng)仍將工 作,但是將通過用戶人工執(zhí)行配置步驟驅(qū)動任何初始配置。與傳統(tǒng)的操作系統(tǒng)不同,客戶機(jī)端組件2400的一些實施例可以容留在另一個程 序內(nèi),例如位于現(xiàn)有的Web瀏覽器內(nèi)。對于這些實施例,可以通過利用主機(jī)程序、HTTP查詢 參數(shù)、HTTP cookies或者與客戶機(jī)關(guān)聯(lián)的其它配置參數(shù)(例如,IP、位置、機(jī)器、瀏覽器ID 等)而導(dǎo)航到的位置URL,來確定關(guān)于啟動序列的特定設(shè)置,包括與哪個特定XML文件系統(tǒng) 2500進(jìn)行連接或者啟動哪個通信通道。例如,將Web瀏覽器導(dǎo)向http://0sl. icloud. com 可使得客戶機(jī)端組件2400連接到第一 XML文件系統(tǒng)2500,并且將Web瀏覽器導(dǎo)向http:// os2. icloud. com可使得客戶機(jī)端組件2400連接到在與第一 XML文件系統(tǒng)2500不同的位置 處容留的第二 XML文件系統(tǒng)2500。在一個實施例中,在啟動序列期間,客戶機(jī)端組件2400可以啟動到XML文件系統(tǒng) 2500以外的數(shù)據(jù)源的通信通道(或這兩者),或者可以連接到遠(yuǎn)程數(shù)據(jù)源或者可以訪問本 地數(shù)據(jù)源。例如,一個文件系統(tǒng)可以是通過服務(wù)提供商數(shù)據(jù)中心提供的全局XI0S文件系 統(tǒng)。在啟動序列期間連接的另一個文件系統(tǒng)可以安裝在企業(yè)網(wǎng)絡(luò)的本地。在啟動序列期間 連接的第三文件系統(tǒng)可以提供對用戶的本地硬盤驅(qū)動器的訪問。圖32B示出了在啟動期間 作為驅(qū)動器由客戶機(jī)端組件2400綁定的數(shù)據(jù)源的幾個示例。例如,本地機(jī)器的驅(qū)動器已經(jīng) 被綁定作為“本地驅(qū)動器”。另外,XML文件系統(tǒng)2500內(nèi)的文件夾被綁定作為“共享族文件 夾”。作為另一個示例,組的根文件夾已被綁定作為“1992級重聚”。重要的是,盡管這些數(shù) 據(jù)源的每個存儲在不同地方并且經(jīng)由不同技術(shù)進(jìn)行訪問,但是從XI0S應(yīng)用2402隱藏了這 些差別,從而將每個數(shù)據(jù)源簡單看作可訪問的驅(qū)動器。盡管這些示例不是窮盡的,但是它們 意圖顯示啟動序列可以連接到一個或多個文件系統(tǒng)。一旦用戶被認(rèn)證,啟動序列可以以用 戶特定的啟動序列繼續(xù),該用戶特定的啟動序列可以包括對附加文件系統(tǒng)的連接以及附加 通道的初始化。在另一個程序內(nèi)容留的網(wǎng)絡(luò)操作系統(tǒng)和傳統(tǒng)的操作系統(tǒng)的實施例之間的另一個 差別在于,關(guān)于主機(jī)程序執(zhí)行的操作可以中斷客戶機(jī)端組件2400的執(zhí)行。例如,在用戶成 功地完成啟動序列并且登錄到網(wǎng)絡(luò)操作系統(tǒng)后,主機(jī)程序可以執(zhí)行重新加載客戶機(jī)端組件 2400的操作。在一些實施例中,客戶機(jī)端組件2400通過使得在重新加載后的客戶機(jī)端組件 2400可以獲得重新加載之前的網(wǎng)絡(luò)操作系統(tǒng)的登錄狀態(tài)以恢復(fù)其狀態(tài),來處理這種情形。 為此,在塊3206 (圖32A),客戶機(jī)端組件2400檢查用戶是否已經(jīng)登錄。方法3200繼續(xù)到判 斷塊3208,在判斷塊3208,執(zhí)行測試以確定用戶是否已經(jīng)登錄。如果判斷塊3208的測試的 結(jié)果是“是”,則方法3200進(jìn)行到繼續(xù)終端(“終端A”),從而跳過啟動方法的登錄部分。如果判斷塊3208的測試的結(jié)果是“否”,則方法3200進(jìn)行到塊3210,在塊3210,客 戶機(jī)端組件2400打開與通信通道關(guān)聯(lián)的登錄應(yīng)用??梢酝ㄟ^通信通道確定要啟動的特定 登錄應(yīng)用,但是通常登錄應(yīng)用將安全地請求用戶的證明,例如用戶名稱和密碼。存在登錄過 程的其它實施例,其中,在開始引導(dǎo)加載之前請求登錄信息并且將該登錄信息直接傳遞至 通信通道以進(jìn)行認(rèn)證而不需要另外的用戶交互。在沒有引導(dǎo)加載器的實施例中,客戶機(jī)端 組件2400可以將登錄信息直接傳遞至通信通道以進(jìn)行認(rèn)證。還可以有變型,其中,在直接 加載后,引導(dǎo)加載器自己請求登錄信息并且然后將該信息傳遞至通信通道,而不利用單獨的登錄應(yīng)用。接下來,在塊3212,通信通道對用戶證明進(jìn)行處理。通信通道可以通過將用戶 證明發(fā)送至認(rèn)證服務(wù)或者通過在本地對它們進(jìn)行處理,來對用戶證明進(jìn)行處理。方法3200然后進(jìn)行到終端A。從終端A開始,方法3200進(jìn)行到塊3214,在塊3214, 通信通道向客戶機(jī)端組件2400提供用戶的settings, xml文件,客戶機(jī)端組件2400利用 settings, xml文件執(zhí)行用戶特定的啟動序列并且安裝所有指定的虛擬驅(qū)動器。通信通道 可以從遠(yuǎn)程數(shù)據(jù)源獲得settings, xml文件,從本地數(shù)據(jù)源獲得settings, xml文件,或者基 于通信通道特定的缺省值產(chǎn)生缺省settings, xml文件。settings, xml文件包含用于配置 網(wǎng)絡(luò)操作系統(tǒng)的用戶特定設(shè)置的集合。這些設(shè)置可以包括但不限于用戶名稱、電子郵件地 址、各種應(yīng)用的設(shè)置、當(dāng)啟動時要安裝的虛擬驅(qū)動器(通信通道)以及關(guān)聯(lián)的根文件夾ID 的集合(包括組,如下所述)、好友列表和啟動序列。包含在settings, xml文件內(nèi)的啟動序 列指定在成功登錄后客戶機(jī)端組件2400應(yīng)該啟動哪些程序,包括打開哪個桌面管理器、控 制臺或開始應(yīng)用。接下來,方法進(jìn)行到結(jié)束塊3216并且結(jié)束。在一些實施例中,settings, xml文件勝于表示網(wǎng)絡(luò)操作系統(tǒng)內(nèi)的各個項目的元數(shù) 據(jù)的被動容器,并且啟動應(yīng)用在驅(qū)動啟動序列時發(fā)揮更加重要的作用。例如,在一個實施例 中,啟動應(yīng)用被執(zhí)行,然后執(zhí)行第二應(yīng)用(例如桌面應(yīng)用)以向用戶顯示桌面。盡管在這個 實施例中將由啟動應(yīng)用來執(zhí)行這個序列,但是啟動應(yīng)用也可以通過咨詢settings, xml文 件來確定要執(zhí)行哪個第二應(yīng)用。網(wǎng)絡(luò)操作系統(tǒng)組和好友在網(wǎng)絡(luò)操作系統(tǒng)中,組用于迅速高效地在用戶之間實現(xiàn)協(xié)作和文件共享。與其它 系統(tǒng)不同,在網(wǎng)絡(luò)操作系統(tǒng)內(nèi)創(chuàng)建新組以及實現(xiàn)協(xié)作和文件共享的負(fù)擔(dān)非常輕。例如,在一 個實施例中,用戶僅需右擊以創(chuàng)建新組,這將自動創(chuàng)建公共存儲文件夾并且使得組的成員 可以交換消息,創(chuàng)建新身份以與組的其它成員進(jìn)行交互,并且彼此實時協(xié)作。一個組當(dāng)創(chuàng)建時存儲組信息的集合。這個組信息包括根文件夾ID,如上所述,根 文件夾ID用作對XML文件系統(tǒng)2500內(nèi)的存儲位置的引用。僅僅組成員可以訪問位于該 存儲位置的文件夾和文件。如上所述,當(dāng)啟動客戶機(jī)端組件2400時,對于登錄用戶獲得 settings, xml文件。這個settings, xml文件包含對用戶為其成員的組的引用的集合。通 過向通信管理器2412提供對期望組的引用從而啟動適當(dāng)?shù)耐ㄐ牌骱屯ㄐ磐ǖ?,客戶機(jī)端 組件2400然后可利用這些引用掛接組,就像它是任何其它存儲位置或文件系統(tǒng)一樣。圖33示出了用于掛接網(wǎng)絡(luò)操作系統(tǒng)組的方法3300的一個實施例。從開始塊 3302開始,方法3300進(jìn)行到塊3304,在塊3304,客戶機(jī)端組件2400對組啟動通信通道。 接下來,在塊3306,通信通道對與用戶關(guān)聯(lián)的用戶證明進(jìn)行處理。通信通道可以針對組特 有的任何附加證明(例如,成員資格名稱和密碼)提示用戶,或者它可以針對容易的單次 簽注(sign-on)重用用戶登錄。假定通信通道能夠驗證用戶證明,方法3300然后進(jìn)行到 塊3308,在塊3308,通信通道利用從用戶settings, xml文件獲得的根文件夾ID獲得組 folders, xml文件。接下來,在塊3310,客戶機(jī)端組件2400向客戶機(jī)上的現(xiàn)有folders, xml 文件添加對組folders, xml文件的引用。(在上文中關(guān)于圖28A-28D更加詳細(xì)描述了現(xiàn)有 folders, xml文件的創(chuàng)建,并且在啟動期間經(jīng)由該過程或另一個過程的實施例創(chuàng)建至少一 個folders, xml文件)。這個引用可以表示到通信管理器XML文檔#CommunicatinManager 的虛擬通道,這個文檔包含客戶機(jī)上的所有開放通信通道的列表。接下來,在塊3312,如果存在一個組的autostart, xml文件則通信通道獲得這個autostart, xml文件,并且客戶機(jī) 端組件2400執(zhí)行在autostart, xml文件內(nèi)指定的指令或應(yīng)用。該autostart, xml文件使 組管理員能夠指定當(dāng)?shù)卿浀浇M時總由組成員執(zhí)行的公共程序,例如,審核程序、歡迎屏幕、 公共桌面配置、表示組的社團(tuán)等。組還可以指定用戶可選擇作為當(dāng)?shù)卿浵到y(tǒng)時的它們的用 戶啟動序列的另選啟動序列。方法3300然后進(jìn)入結(jié)束塊3314并且結(jié)束。在一些實施例中,由于文件存儲位置具有大多數(shù)的與組的特征相同的特征,所以 方法3300還可用于掛接文件存儲位置。文件存儲位置缺少具有作為文件存儲位置的成員 (在上文中針對組描述)的關(guān)聯(lián)的概念,但是掛接文件存儲位置以及訪問這個位置內(nèi)的文 件的過程是非常相似的。文件存儲位置甚至可以包括如上所述的autostart, xml文件。組功能或文件存儲位置還可用于實現(xiàn)社團(tuán)。文件存儲位置可用于創(chuàng)建社團(tuán)而不需 要特定的成員資格。換言之,所有用戶將自動成為社團(tuán)的成員。另一方面,組功能可用于創(chuàng) 建僅僅成員資格社團(tuán)。上述的組信息還可以包括成員資格的集合。成員資格是用戶與組之間的關(guān)聯(lián), 并且表示用戶是組的成員的事實。每個成員資格可以具有將向組的其它成員顯示的關(guān)聯(lián) 名稱,由此當(dāng)在組內(nèi)進(jìn)行交互時為用戶創(chuàng)建新的身份。由于當(dāng)用戶加入組時用戶可以創(chuàng) 建成員資格名稱,所以用戶能夠在保持它們的私密的同時加入具有多變主題的組。例如, 名稱為“組1”的組可以具有成員資格的集合,用于指示用戶名稱為“Alice”的用戶和用 戶名稱為“Bob”的用戶均是組1的成員。指示Alice是組1的成員的第一成員資格可 以與Alice的用戶名稱相同或相似,例如為“AliceGroupOne”。指示Bob是組1的成員 的第二成員資格可與Bob的用戶名稱不同,例如為“AnonymousGroupMember”。當(dāng)Alice 搜索其它組成員時,她訪問成員資格名稱的列表而非關(guān)聯(lián)的用戶名稱。于是,她將看見 "AnonymousGroupMember"是組的成員,但是她不會知道"AnonymousGroupMember"實際與 “Bob”關(guān)聯(lián)。另選地,組中的成員可以選擇使得關(guān)聯(lián)的用戶名稱公開,在這種情況下,Alice 將能夠識別 “AnonymousGroupMember” 與 “Bob” 關(guān)聯(lián)。消息發(fā)送服務(wù)能夠處理用戶間通信中的多個用戶身份。由于一個用戶能夠以兩個 不同條目的形式在他的好友列表內(nèi)保持同一好友,而不知道這實際是同一個人,所以對于 系統(tǒng)的好友處理這也是這樣的。用戶還將從兩個不同的條目接收不同的即時消息而不知道 它們都是由同一人發(fā)送的。聯(lián)機(jī)狀態(tài)與離線狀態(tài)之間的轉(zhuǎn)變在網(wǎng)絡(luò)操作系統(tǒng)的一些實施例中,客戶機(jī)端組件2400能夠在正常的聯(lián)機(jī)狀態(tài)下 以及在離線狀態(tài)下工作,其中在離線狀態(tài)下,客戶機(jī)端組件2400沒有訪問任何服務(wù)器端資 源。在客戶機(jī)端組件2400內(nèi)提供這個功能的一個優(yōu)點在于它幫助客戶機(jī)端組件2400無 縫支持一個在聯(lián)機(jī)模式和離線模式下都操作的應(yīng)用,同時將應(yīng)用開發(fā)人員支持這兩種模式 所需的工作量最小化。圖34示出了第一客戶機(jī)的客戶機(jī)端組件2400從聯(lián)機(jī)狀態(tài)轉(zhuǎn)變到離線狀態(tài)的方法 3400的一個實施例。這個方法3400假定第一客戶機(jī)的客戶機(jī)端組件2400先前經(jīng)由例如方 法3200的方法啟動并連接到XML文件系統(tǒng)2500。從開始塊3402開始,方法3400進(jìn)行到塊 3404,在塊3404,第一客戶機(jī)的客戶機(jī)端組件2400通過向XML文件系統(tǒng)2500的XML web服 務(wù)2510發(fā)送通知,將第一客戶機(jī)的狀態(tài)設(shè)置為離線狀態(tài)。然后其它客戶機(jī)利用相同的XML 64web服務(wù)檢查這個狀態(tài)以確定第一客戶機(jī)是離線的。接下來,在塊3406,XML web服務(wù)2510 指示消息服務(wù)器2512向訂閱第一客戶機(jī)的狀態(tài)的所有其它客戶機(jī)發(fā)送第一客戶機(jī)離線的 通知。通常,連接到XML文件系統(tǒng)2500并且與與第一客戶機(jī)相同的組關(guān)聯(lián)的其它客戶機(jī)將 向消息服務(wù)器2512上的他們的訂閱列表添加第一客戶機(jī)。消息服務(wù)器2512通過實質(zhì)與在 上文中更加詳細(xì)描述的關(guān)于文件更新的通知相同的方式發(fā)出通知??蛻魴C(jī)端組件2400以及由客戶機(jī)端組件2400執(zhí)行的應(yīng)用為了在無法訪問XML文 件系統(tǒng)2500的情況下繼續(xù)工作,客戶機(jī)端組件2400必須在第一客戶機(jī)上緩存來自XML文 件系統(tǒng)2500的任何所需資源。為此,方法3400進(jìn)行到塊3408,在塊3408,第一客戶機(jī)的應(yīng) 用管理器904下載在與當(dāng)前由客戶機(jī)端組件2400執(zhí)行的每個實例關(guān)聯(lián)的應(yīng)用包內(nèi)指示的 所有仍存在的尚未下載的資源。應(yīng)用開發(fā)人員可以指示客戶機(jī)端組件2400應(yīng)該緩存應(yīng)用 包中的哪些資源以實現(xiàn)應(yīng)用的離線使用。另選地,客戶機(jī)端組件2400可以通過分析由應(yīng)用 包的組件使用的引用,自動確定應(yīng)該緩存什么資源。在一些實施例中,應(yīng)用管理器904可以執(zhí)行用于確定應(yīng)該在第一客戶機(jī)上緩存什 么資源的附加的可選步驟。例如,方法3400可進(jìn)行到塊3410,在塊3410,第一客戶機(jī)的應(yīng)用 管理器904下載由每個實例動態(tài)加載的任何資源。這些資源將不由與實例關(guān)聯(lián)的應(yīng)用包引 用,但是將改為在執(zhí)行時由實例進(jìn)行確定。方法3400然后可以進(jìn)行到塊3412,在塊3412, 第一客戶機(jī)的應(yīng)用管理器904下載與每個打開的視圖文件關(guān)聯(lián)的資源。如動態(tài)加載的資源 一樣,每個打開的視圖文件可與沒有由應(yīng)用包進(jìn)行引用的資源進(jìn)行關(guān)聯(lián)。方法3400還可以 進(jìn)行到塊3414,在塊3414,應(yīng)用管理器904相似地下載與每個過程關(guān)聯(lián)的資源。本領(lǐng)域技 術(shù)人員將認(rèn)識到,由于塊3410-3414是可選的,所以可以在方法3400的實施例中執(zhí)行這些 塊中的一個、多個或者不執(zhí)行這些塊中的任何一個。在塊3408內(nèi)以及在塊在3410-3414中的多個塊內(nèi)或者零個塊內(nèi)下載資源后,方法 3400然后進(jìn)行到塊3416,在塊3416,第一客戶機(jī)的客戶機(jī)端組件2400設(shè)置指示第一客戶機(jī) 離線的系統(tǒng)標(biāo)志。這個系統(tǒng)標(biāo)志可用于改變客戶機(jī)端組件2400以及在第一客戶機(jī)上執(zhí)行 的應(yīng)用的行為。例如,在一個實施例中,方法3400進(jìn)行到塊3418,在塊3418,第一客戶機(jī)的 客戶機(jī)端組件2400對后來的文件操作進(jìn)行排隊,并且第一客戶機(jī)的每個通道緩存后來的 描述對文件的修改的事務(wù),而不是立即向XML文件系統(tǒng)2500發(fā)送文件操作和事務(wù)。由于客 戶機(jī)端組件2400在離線時對文件操作進(jìn)行排隊并且緩存事務(wù),所以對于網(wǎng)絡(luò)操作系統(tǒng)的 用戶看起來在第一客戶機(jī)離線時并沒有發(fā)生任何變化。由客戶機(jī)端組件2400執(zhí)行的應(yīng)用還可以基于系統(tǒng)標(biāo)志,例如通過禁用需要網(wǎng)絡(luò) 連接的功能來改變它們的行為。如果第一客戶機(jī)的用戶嘗試執(zhí)行需要網(wǎng)絡(luò)連接的動作,則 客戶機(jī)端組件2400自身可以例如通過顯示錯誤消息來進(jìn)一步改變它的行為。方法3400然 后進(jìn)入結(jié)束塊3402并且結(jié)束。圖35示出了當(dāng)?shù)谝豢蛻魴C(jī)已經(jīng)執(zhí)行了例如方法3400的方法并且已經(jīng)在離線狀態(tài) 下操作時返回聯(lián)機(jī)狀態(tài)的方法3500的一個實施例。從開始塊3502開始,方法3500進(jìn)行到 塊3504,在塊3504,第一客戶機(jī)進(jìn)行聯(lián)機(jī),并且第一客戶機(jī)的客戶機(jī)端組件2400向XML web 服務(wù)2510發(fā)送聯(lián)機(jī)狀態(tài)的通知。第一客戶機(jī)可以通過針對不限于局域網(wǎng)、無線網(wǎng)、撥號網(wǎng) 絡(luò)等之一建立或重新建立連接進(jìn)行聯(lián)機(jī)。另選地,當(dāng)已經(jīng)建立了網(wǎng)絡(luò)連接時,當(dāng)用戶指示希 望進(jìn)行聯(lián)機(jī)時第一客戶機(jī)可以進(jìn)行聯(lián)機(jī)。接下來,在塊3506,XML web服務(wù)2510指示消息
65服務(wù)器2512向訂閱第一客戶機(jī)的狀態(tài)的所有客戶機(jī)發(fā)送第一客戶機(jī)聯(lián)機(jī)的通知。方法3500然后進(jìn)行到塊3508,在塊3508,第一客戶機(jī)的事務(wù)管理器910從XML web服務(wù)2510下載緩存在第一客戶機(jī)上的文檔的任何變化。在一個實施例中,這些下載的 變化是在第一客戶機(jī)離線時由其它客戶機(jī)對XML文件系統(tǒng)2500內(nèi)的文檔進(jìn)行的變化。接 下來,在塊3510,第一客戶機(jī)的事務(wù)管理器910解決緩存的文檔與下載的變化之間的任何 沖突。在一個實施例中,事務(wù)管理器910僅僅檢測到?jīng)_突存在,并且提示用戶人工解決沖突 (通過創(chuàng)建新文件以包含緩存的變化,以取消緩存的變化而選擇下載的變化等)。在另一個 實施例中,事務(wù)管理器910執(zhí)行判斷應(yīng)該保留哪些變化以及應(yīng)該丟棄哪些變化的算法。接下來,在塊3512,第一客戶機(jī)的事務(wù)管理器910向XML web服務(wù)2510發(fā)送任何 排隊的文件操作。例如,如果在離線時第一客戶機(jī)的用戶嘗試創(chuàng)建、刪除或重命名XML文件 系統(tǒng)2500內(nèi)的任何文件,則此刻這些文件操作將被發(fā)送至XML文件系統(tǒng)2500。在一個實施 例中,XML文件系統(tǒng)2500將檢測與由其它用戶進(jìn)行的變化的任何沖突(例如,對先前刪除 的文件進(jìn)行重新命名的嘗試等)并且適當(dāng)?shù)剡M(jìn)行回應(yīng)。方法3500然后進(jìn)行到塊3514,在塊3514,第一客戶機(jī)的客戶機(jī)端組件2400通過 XML web服務(wù)2510聯(lián)系消息服務(wù)器2512以向第一客戶機(jī)的訂閱列表重新添加任何監(jiān)視對 象。接下來,在塊3516,第一客戶機(jī)的客戶機(jī)端組件2400設(shè)置指示第一客戶機(jī)處于聯(lián)機(jī)狀 態(tài)的系統(tǒng)標(biāo)志。在一個實施例中,設(shè)置這個系統(tǒng)標(biāo)志使客戶機(jī)端組件2400和應(yīng)用返回到它 們的正常的網(wǎng)絡(luò)連接的操作狀態(tài)。方法3500然后進(jìn)行到結(jié)束塊3518并且結(jié)束。此刻,第 一客戶機(jī)的XML文件系統(tǒng)然后與網(wǎng)絡(luò)操作系統(tǒng)的服務(wù)器端組件2500進(jìn)行同步并且聯(lián)機(jī)。XML文件系統(tǒng)特殊文件夾如上所述,XML文件系統(tǒng)2500內(nèi)的某些文件夾可被指定為特殊文件夾。在一個實 施例中,特殊文件夾的條目以與普通文件夾的條目相同的方式被存儲在文件夾數(shù)據(jù)庫2520 內(nèi),但是設(shè)置標(biāo)志以指示該文件夾是特殊文件夾。在一個實施例中,特殊文件夾在文件夾數(shù) 據(jù)庫2520內(nèi)的條目還包含處理在特殊文件夾內(nèi)創(chuàng)建文件的請求的許多服務(wù)器過程之一的 指示。在另一個實施例中,一個服務(wù)器過程處理在特殊文件夾內(nèi)創(chuàng)建文件的所有請求,并且 基于例如文件的文件類型的文件的內(nèi)容來確定如何處理文件。這些特殊文件夾不是提供文件存儲,而是可以用作對例如用戶之間的異步消息發(fā) 送的一些其它數(shù)據(jù)處理例程的抽象。這種異步消息發(fā)送的一個示例是用于接收和處理向其 它用戶發(fā)出的消息的發(fā)件箱文件夾的使用。用于用戶間通信的特殊文件夾的使用提供了許 多優(yōu)點。例如,它簡化了客戶機(jī)應(yīng)用開發(fā)。XI0S應(yīng)用2402可以通過簡單使用熟悉的文件創(chuàng) 建例程,利用與特殊文件夾關(guān)聯(lián)的消息發(fā)送協(xié)議,并且不需要艱難對付通信協(xié)議的基礎(chǔ)細(xì) 節(jié)。作為另一個示例,如上所述,用于用戶間通信的特殊文件夾的使用使XI0S應(yīng)用2402能 夠補(bǔ)充支持包括在XML文件系統(tǒng)2500內(nèi)的組功能。于是,使用特殊文件夾進(jìn)行消息發(fā)送的 XI0S應(yīng)用2402不需要增加用于實現(xiàn)安全性、組成員資格、好友列表、尋址、匿名等的額外代 碼,這是因為對于這些特征它可以簡單依賴XML文件系統(tǒng)2500的基礎(chǔ)功能。圖36示出了處理在發(fā)件箱特殊文件夾內(nèi)創(chuàng)建新文件的請求的方法3600的一個實 施例。盡管這種請求對于在客戶機(jī)上執(zhí)行的XI0S應(yīng)用2402而言看起來如同它是創(chuàng)建文件 的請求,但是服務(wù)器將把這個請求視為向第二用戶發(fā)送消息的請求。從開始塊3602開始, 方法3600進(jìn)行到塊3604,在塊3604,與第一用戶的發(fā)件箱文件夾關(guān)聯(lián)的服務(wù)器過程接收在發(fā)件箱特殊文件夾內(nèi)創(chuàng)建新文件的請求。接下來,在塊3606,服務(wù)器過程從該請求提取預(yù)期 收件人的地址。方法3600然后進(jìn)行到塊3608,在塊3608,服務(wù)器過程識別與預(yù)期收件人的 地址關(guān)聯(lián)的第二用戶。上述的XML文件系統(tǒng)2500的組和好友列表功能允許多個不同類型的尋址以識別 第二用戶。例如,第一用戶可以直接將消息尋址到第二用戶的用戶名稱。作為另一個示例, 第一用戶可以將消息尋址到與第二用戶關(guān)聯(lián)的成員資格名稱。在這種情況下,第二用戶的 匿名將被保護(hù),但是第一用戶仍能夠?qū)⑾ぶ返降诙脩?。作為又一個示例,第一用戶可 以將消息尋址都例如電話編號的存儲在與第二用戶關(guān)聯(lián)的元數(shù)據(jù)中的地址。服務(wù)器過程將 確定已利用哪種類型的尋址并且將由此識別第二用戶。接下來,在塊3610,服務(wù)器過程確定第二用戶的收件箱文件夾ID。在一個實施例 中,這僅涉及在文件夾數(shù)據(jù)庫2520內(nèi)搜索與第二用戶關(guān)聯(lián)的收件箱文件夾。方法3600然 后進(jìn)行到塊3612,在塊3612,服務(wù)器過程利用收件箱文件夾ID在第二用戶的收件箱文件夾 內(nèi)創(chuàng)建新文件,這個新文件包含包括在請求內(nèi)的數(shù)據(jù)。在在特殊文件夾內(nèi)已經(jīng)創(chuàng)建文件的 實施例中(與服務(wù)器過程直接處理文件創(chuàng)建請求相對),服務(wù)器過程簡單地將新文件從第 一用戶的發(fā)件箱文件夾移動至第二用戶的收件箱文件夾。接下來,方法3600進(jìn)行到結(jié)束塊 3614并且結(jié)束。示例應(yīng)用-聊天如上所述,網(wǎng)絡(luò)操作系統(tǒng)的一個優(yōu)點在于嵌入在網(wǎng)絡(luò)操作系統(tǒng)內(nèi)的特征使得可以 迅速開發(fā)出可重用、可伸縮、跨平臺的包含充分安全性和匿名功能的協(xié)作組件。利用這些特 征的許多優(yōu)點的示例性應(yīng)用的一個實施例是下文所述的聊天應(yīng)用。圖37以高級別示出了聊天應(yīng)用3700及其對應(yīng)的共享數(shù)據(jù)文件3710的一個實施 例。替代對新通信協(xié)議和認(rèn)證方案進(jìn)行設(shè)計和編碼,聊天應(yīng)用3700通過利用駐留在XML文 件系統(tǒng)2500內(nèi)的共享數(shù)據(jù)文件3710執(zhí)行聊天會話中的參與者之間的通信。聊天應(yīng)用3700 的界面包括四個主要組件主窗口組件3712、文本顯示組件3702、文本輸入組件3704和按 鈕組件3706。當(dāng)開始聊天會話時,文本顯示組件3702經(jīng)由綁定3708被綁定至共享數(shù)據(jù)文 件3710,從而使得在聊天會話中由任何參與者對共享數(shù)據(jù)文件3710進(jìn)行的改變將被反映 在文本顯示組件3710內(nèi)(為清楚而從圖37省去了這個文本)。圖38以高級別示出了聊天應(yīng)用3700的文本顯示組件3702和按鈕組件3706也被 綁定至共享數(shù)據(jù)文件3710。當(dāng)用戶向文本輸入組件3704輸入文本并點擊按鈕組件3706時, 共享數(shù)據(jù)文件3710中發(fā)生變化。這種變化將然后被傳播至綁定至共享數(shù)據(jù)文件3710的所 有組件,包括文本顯示組件3702。圖39以高級別示出了第一用戶3902的聊天應(yīng)用與第二用戶3904的聊天應(yīng)用之 間的聊天會話中的共享數(shù)據(jù)文件3710的更新。在這幅圖中,第一用戶3902的聊天應(yīng)用的 文本顯示組件3702和第二用戶3904的聊天應(yīng)用的文本顯示組件3702被綁定至共享數(shù)據(jù) 文件3710,并且因此顯示共享數(shù)據(jù)文件3710的內(nèi)容。第一用戶已經(jīng)向文本輸入組件3704 輸入了文本并且點擊了按鈕組件3706。按鈕組件3706與觸發(fā)器關(guān)聯(lián),其中,當(dāng)點擊按鈕組 件時,這個觸發(fā)器使得執(zhí)行從文本輸入組件3704讀取文本,將文本3906后附加到共享數(shù)據(jù) 文件3710,并且從文本輸入組件3704清除文本的步驟。用于更新共享數(shù)據(jù)文件3710的這個過程幫助顯示網(wǎng)絡(luò)操作系統(tǒng)的至少一個優(yōu)
67點開發(fā)人員僅需將上述的四個組件進(jìn)行關(guān)聯(lián)并且創(chuàng)建綁定至文本輸入組件的規(guī)則,以實 現(xiàn)這個功能。在這些場景后面,網(wǎng)絡(luò)操作系統(tǒng)將處理更新共享數(shù)據(jù)文件3710的大量細(xì)節(jié)。 例如,在一個實施例中,緩存的共享數(shù)據(jù)文件3710的副本由文檔管理器912存儲在客戶機(jī) 端緩存器內(nèi)。對應(yīng)的URL對象接收更新共享數(shù)據(jù)文件3710的請求,這使得事務(wù)管理器910 創(chuàng)建表示所述改變的事務(wù)。事務(wù)管理器910通過使得事務(wù)經(jīng)由XI0S通信器2504和XI0S 通道被提交給XML web服務(wù)2510,將事務(wù)傳播至遠(yuǎn)程監(jiān)聽器。XML web服務(wù)2510注意到文 本被共享并且將提交的事務(wù)轉(zhuǎn)發(fā)至事務(wù)協(xié)調(diào)器2522。事務(wù)協(xié)調(diào)器2522然后提交事務(wù),更新 XML文件系統(tǒng)2500內(nèi)的共享數(shù)據(jù)文件3710。圖40以高級別示出了聊天應(yīng)用3700的一個實施例中的經(jīng)由共享數(shù)據(jù)文件3710 的變化的傳播的、聊天消息的發(fā)送。如上所述,第一客戶機(jī)3902的聊天應(yīng)用和第二客戶機(jī) 3904的聊天應(yīng)用的文本顯示組件3702都被綁定至共享數(shù)據(jù)文件3710。于是,當(dāng)XML文件 系統(tǒng)2500更新共享數(shù)據(jù)文件3710時,向綁定組件的每個通知變化并且相應(yīng)地對其進(jìn)行更新。有利的是,這使開發(fā)人員能夠使UI組件通過數(shù)據(jù)更新事件傳播總是自動顯示與 共享數(shù)據(jù)文件3710同步的正確信息,并且由此不需要編寫任何代碼而改為通過簡單地將 組件綁定至共享數(shù)據(jù)文件3710就完成了聊天通信。如同共享數(shù)據(jù)文件3710的更新一樣, 網(wǎng)絡(luò)操作系統(tǒng)處理這個事務(wù)的大量細(xì)節(jié)。例如,在一個實施例中,當(dāng)事務(wù)協(xié)調(diào)器2522提交 事務(wù)時,它指示消息服務(wù)器2512向訂閱共享數(shù)據(jù)文件3710的變化的每個客戶機(jī)通知共享 數(shù)據(jù)文件3710已經(jīng)被更新。消息服務(wù)器2512向每個客戶機(jī)發(fā)送這些通知,該客戶機(jī)從通 知提取更新的信息或者聯(lián)系XML文件系統(tǒng)2500以獲得文件的最新版本。在這點上,第一客 戶機(jī)的事務(wù)管理器910將認(rèn)識到第一客戶機(jī)提交了改變,并且將不會重復(fù)更新它的共享數(shù) 據(jù)文件3710的緩存版本。其它客戶機(jī)的事務(wù)管理器910將使得這些變化被并入它們各自 的共享數(shù)據(jù)文件3710的緩存版本。當(dāng)其它數(shù)據(jù)更新發(fā)生時,任何監(jiān)聽組件(包括第一客戶 機(jī)3902的聊天應(yīng)用和第二客戶機(jī)3904的聊天應(yīng)用的文本顯示組件3702)將被通知文件已 經(jīng)被更新。文本顯示組件3702然后將相應(yīng)地以添加的內(nèi)容3906被自動更新。圖41示出了通過針對客戶機(jī)之間的協(xié)作式通信利用共享數(shù)據(jù)文件3710實現(xiàn)的附 加特征。也就是說,當(dāng)對給定的共享數(shù)據(jù)文件3710的更新被傳播至訂閱共享數(shù)據(jù)文件3710 的任何數(shù)目的客戶機(jī)時,在超過兩個的參與者之間進(jìn)行協(xié)作式通信不需要額外工作。如圖 41所示,任何數(shù)目的其它客戶機(jī)(例如,第三客戶機(jī)4102和第四客戶機(jī)4104)能夠加入第 一客戶機(jī)3902與第二客戶機(jī)3904之間的會話,而不需要任何另外的設(shè)計變化。如上所述, 每個客戶機(jī)將綁定至共享數(shù)據(jù)文件3710并且接收更新。向給定的用戶的聊天好友列表添加聯(lián)系人以及建立單獨聊天會話還可以示出包 含在網(wǎng)絡(luò)操作系統(tǒng)內(nèi)包含的許多特征。在一個實施例中,第一用戶可以僅僅發(fā)送或從第 二用戶(其是第一用戶的好友列表的成員并且同意與第一用戶進(jìn)行聊天通信)接收聊天 消息。第一用戶的好友列表可以存儲在XML文件系統(tǒng)2500內(nèi)的文檔內(nèi),或者可以作為 settings, xml文件的一部分進(jìn)行存儲和發(fā)送。為了向好友列表添加第二用戶,第一用戶首 先必須搜索用戶。在一個實施例中,為了保留屬于組的用戶的匿名,第一用戶將僅僅能夠搜 索成員資格名稱,這些成員資格名稱的每個與用戶和第一用戶所屬的組關(guān)聯(lián)。在一個實施 例中,第一用戶還將能夠搜索全局組,在這個全局組內(nèi),存在用戶的真實名稱的指示,但是
68沒有與在組內(nèi)發(fā)現(xiàn)的名稱的聯(lián)系。在任一情況下,搜索將與第二用戶關(guān)聯(lián)的地址返回到第一用戶。第一用戶然后將 向第二用戶的地址發(fā)送向第一用戶的好友列表添加第二用戶的請求。在一個實施例中,利 用與上述的方法3600相似的方法完成這個操作,其中,第一用戶在第一用戶的發(fā)件箱文件 夾內(nèi)創(chuàng)建構(gòu)成好友列表請求的文件,這個文件然后通過服務(wù)器過程被路由和傳送到第二用 戶的收件箱文件夾。在第二用戶的客戶機(jī)上,從第二用戶的收件箱獲取該請求,并且顯示對 話框以詢問第二用戶她是否希望允許第一用戶將她添加到他的好友列表。當(dāng)?shù)诙脩艋貞?yīng) 時,消息以相似方式被發(fā)送回第一用戶以完成將第二用戶添加到第一用戶的好友列表,并 且第一用戶然后將能夠開始與第二用戶的聊天會話。對于開始與第二用戶進(jìn)行聊天會話的第一用戶,發(fā)生相似過程。第一用戶的聊天 應(yīng)用創(chuàng)建共享數(shù)據(jù)文件3710,將它的文本顯示組件3702綁定至共享數(shù)據(jù)文件3710,并且向 第二用戶的地址發(fā)送開始聊天會話的請求。請求如上所述被傳遞。如果第二用戶接受請求, 則通知被發(fā)送至第一用戶的聊天應(yīng)用,第一用戶的聊天應(yīng)用然后向第二用戶的聊天應(yīng)用發(fā) 送共享數(shù)據(jù)文件3710的文檔ID。第二用戶的聊天應(yīng)用將它的文本顯示組件3702綁定至共 享數(shù)據(jù)文件3710,并且聊天會話可以如上所述進(jìn)行。盡管關(guān)于聊天描述了這些特征,但是本領(lǐng)域技術(shù)人員認(rèn)識到,能夠利用共享數(shù)據(jù) 文件實現(xiàn)例如消息板、電子郵件等的其它形式的服務(wù)器中介通信。另外,共享數(shù)據(jù)文件能夠 用于協(xié)調(diào)不需要服務(wù)器進(jìn)行中介的其它形式的通信。例如,第一用戶和第二用戶能夠利用 共享數(shù)據(jù)文件針對例如VOIP或視頻會議的對等通信,協(xié)商帶寬設(shè)置、加密設(shè)置等。另外,盡管為了簡化,以上聊天的描述假定聊天應(yīng)用處理到達(dá)收件箱文件夾的所 有消息,但是客戶機(jī)上的附加組件可以管理進(jìn)入的消息。在一個實施例中,客戶機(jī)上的組件 對出現(xiàn)于收件箱文件夾內(nèi)的每個消息進(jìn)行分析,并且確定用于處理該消息的適當(dāng)應(yīng)用。組 件然后啟動該應(yīng)用并且將消息傳遞至該應(yīng)用以進(jìn)行進(jìn)一步處理。通過這種方式,不用已經(jīng) 運行聊天應(yīng)用,就能夠處理進(jìn)入的聊天請求或伙伴列表請求。圖42示出了在創(chuàng)建XIOS應(yīng)用時利用可重用組件的另一個優(yōu)點。此圖示出了在Web 瀏覽器內(nèi)容留的網(wǎng)絡(luò)操作系統(tǒng)的一個實施例,并且還可以代表在例如客戶機(jī)端組件2400 的孤立應(yīng)用或機(jī)器操作系統(tǒng)實現(xiàn)方式的其它實施例內(nèi)網(wǎng)絡(luò)操作系統(tǒng)的樣子。Web瀏覽器內(nèi) 的每個框表示用可重用組件(例如,電子郵件組件、時鐘組件、web搜索組件、組消息組件和 天氣報告組件)創(chuàng)建的XI0S應(yīng)用2402。與只在孤立聊天應(yīng)用內(nèi)的情況相對,右下方的框顯 示在這個web瀏覽器內(nèi)聊天應(yīng)用組件的重用。由于可重用組件不需要重新編寫以在不同環(huán) 境下工作,所以使用可重用組件能夠迅速開發(fā)這種復(fù)合成應(yīng)用。能夠創(chuàng)建合成應(yīng)用的另一 個優(yōu)點在于從數(shù)據(jù)模型提供給應(yīng)用的基礎(chǔ)數(shù)據(jù)可從多個完全不同的源合并而成,于是使 得應(yīng)用能夠從大量數(shù)據(jù)源的合成品進(jìn)行工作。示例應(yīng)用-重聚圖43示出了利用系統(tǒng)的實施例容易創(chuàng)建的示例協(xié)作。1992級重聚應(yīng)用是能夠呈 現(xiàn)給組的成員的功能的一個示例。如以上關(guān)于圖42所述,圖43示出了引用多個數(shù)據(jù)源的 組件的集合。1992級重聚應(yīng)用示出了能夠作為當(dāng)綁定組文件夾時加載的autostart, xml文 件的一部分進(jìn)行啟動的組件的集合。如以上圖32B所示,1992級重聚組文件夾可作為數(shù)據(jù) 源由客戶機(jī)進(jìn)行綁定,在這種情況下,它將被顯示為用戶界面內(nèi)的驅(qū)動器。當(dāng)用戶之后打開那個數(shù)據(jù)源時(或者當(dāng)用戶首先綁定數(shù)據(jù)源時),與組文件夾關(guān)聯(lián)的autostart, xml文檔將 使得顯示例如活動調(diào)度、重聚活動地圖、重聚倒計時等的組件的集合。除了這些組件的自動顯示以外,組功能還將提供安全性。例如,僅僅組的成員能夠 觀看相冊內(nèi)的條目,它可以僅是存儲在組文件夾層級內(nèi)的文件夾的視圖。如在顯示組的其 它聯(lián)機(jī)成員的圖43的聊天組件中所示,組功能還將提供與組的其它成員的容易的協(xié)作,而 不用首先要求用戶向好友列表添加其它組成員。盡管示出和描述了說明性實施例,但是應(yīng)該明白,在不脫離本發(fā)明的精神和范圍 的情況下可以進(jìn)行各種改變。
權(quán)利要求
一種平臺獨立的XML虛擬機(jī),該XML虛擬機(jī)接受以XML編程語言編寫的應(yīng)用代碼作為輸入并且執(zhí)行在計算裝置上執(zhí)行所述應(yīng)用代碼的方法,該方法包括定義用于執(zhí)行包括應(yīng)用的一組運行時對象,所述應(yīng)用包括被構(gòu)造為將操作意義耦合到應(yīng)用的過程代碼的執(zhí)行的實例對象;提供執(zhí)行在應(yīng)用的過程代碼中定義的操作的低級結(jié)構(gòu)(“操作處理器”);以及執(zhí)行使無狀態(tài)過程對象向操作處理器提供實例對象的邏輯,該實例對象說明當(dāng)執(zhí)行應(yīng)用的過程代碼時應(yīng)用的運行時狀態(tài)的變化。
2.根據(jù)權(quán)利要求1所述的XML虛擬機(jī),其中,定義用于執(zhí)行應(yīng)用的一組運行時對象包 括定義所述實例對象所特有的劃定應(yīng)用實例的邊界的本地化關(guān)系層級。
3.根據(jù)權(quán)利要求1所述的XML虛擬機(jī),其中,執(zhí)行使無狀態(tài)過程對象用于執(zhí)行應(yīng)用過程 代碼的邏輯包括提供觸發(fā)器事件總線,該觸發(fā)器事件總線被構(gòu)造為使用由多個應(yīng)用實例共 享的單個通知器對象登記應(yīng)用中的觸發(fā)器。
4.根據(jù)權(quán)利要求1所述的XML虛擬機(jī),其中,執(zhí)行使無狀態(tài)過程對象用于執(zhí)行應(yīng)用過程 代碼的邏輯包括提供表達(dá)式引擎,該表達(dá)式引擎被構(gòu)造為關(guān)于適當(dāng)?shù)膽?yīng)用實例對在應(yīng)用代 碼中利用的全局命名對象進(jìn)行求值。
5.本文所述和所示的XML虛擬機(jī)及使用其的方法。
全文摘要
本發(fā)明涉及網(wǎng)絡(luò)操作系統(tǒng)。一般地說,本發(fā)明涉及一種提供利用計算機(jī)網(wǎng)絡(luò)的連接性的更高效方式的網(wǎng)絡(luò)操作系統(tǒng)。在一個實施例中,實現(xiàn)XML虛擬機(jī)以接受以XML編程語言編寫的高級應(yīng)用代碼作為輸入。提供用于將以XML編程語言編寫的應(yīng)用代碼翻譯或解釋成適于跨計算機(jī)平臺執(zhí)行的代碼的功能。此外,XML虛擬機(jī)支持模型視圖控制器(MVC)設(shè)計模式,該設(shè)計模式便于從應(yīng)用到公共數(shù)據(jù)模型的真實數(shù)據(jù)抽象。可以創(chuàng)建和執(zhí)行多實例應(yīng)用,這些實例的每一個潛在支持多個視圖。
文檔編號G06F15/16GK101861582SQ200880116398
公開日2010年10月13日 申請日期2008年9月29日 優(yōu)先權(quán)日2007年9月28日
發(fā)明者D·阿圖爾松, M·布瑞斯塔維 申請人:埃克斯里昂股份公司