專利名稱:繼承維基頁(yè)面的維基頁(yè)面布局的方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及改進(jìn)的數(shù)據(jù)處理系統(tǒng),具體地說(shuō),涉及用于編程模型的方法和裝置。更具體地說(shuō),本發(fā)明涉及用于使用瀏覽器操縱內(nèi)容的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。
背景技術(shù):
因特網(wǎng)是通過(guò)將消息從發(fā)送網(wǎng)絡(luò)協(xié)議轉(zhuǎn)換為接收網(wǎng)絡(luò)協(xié)議的過(guò)程中處理數(shù)據(jù)傳輸?shù)木W(wǎng)關(guān)聯(lián)接在一起的計(jì)算機(jī)和網(wǎng)絡(luò)所構(gòu)成的全球網(wǎng)絡(luò)。在因特網(wǎng)上,任何計(jì)算機(jī)都能與任何其他計(jì)算機(jī)進(jìn)行通信,其中信息通過(guò)各種稱為協(xié)議的語(yǔ)言在因特網(wǎng)上傳送。因特網(wǎng)上最常用的協(xié)議集稱為傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)。
因特網(wǎng)給通信和商業(yè)帶來(lái)了革命性的變化,同時(shí)也成為信息和娛樂(lè)的來(lái)源。其中一種常用的軟件類型稱為維基(Wiki)軟件。維基軟件是一款運(yùn)行維基環(huán)境的協(xié)作軟件。在可由一組用戶通過(guò)界面訪問(wèn)的共享環(huán)境中提供該軟件。維基應(yīng)用是一種允許用戶操縱內(nèi)容的網(wǎng)站。用戶可以快速而輕松地添加、刪除或以其他方式編輯和更改內(nèi)容。維基應(yīng)用通常用作有效的協(xié)作編寫(xiě)工具。維基應(yīng)用的當(dāng)前使用關(guān)注于協(xié)作內(nèi)容創(chuàng)建,例如聯(lián)機(jī)百科全書(shū)或其他知識(shí)庫(kù)。用戶通常可以在共享環(huán)境中創(chuàng)建內(nèi)容。在這種環(huán)境下,將保存對(duì)頁(yè)面的修訂以便允許恢復(fù)先前的版本。進(jìn)一步地,提供標(biāo)記快捷方式來(lái)創(chuàng)建頁(yè)間鏈接。進(jìn)一步地,通常使用“所見(jiàn)即所得”(WYSIWYG)編輯模式/編輯器。
發(fā)明內(nèi)容
示例性實(shí)施例描述了一種用于繼承頁(yè)面的頁(yè)面布局的計(jì)算機(jī)實(shí)現(xiàn)的方法、計(jì)算機(jī)程序產(chǎn)品和數(shù)據(jù)處理系統(tǒng)。響應(yīng)于接收到從客戶端瀏覽器顯示當(dāng)前頁(yè)面的請(qǐng)求,判定所述當(dāng)前頁(yè)面是否具有一組父輩頁(yè)面。布置所述一組父輩頁(yè)面,以使所述一組父輩頁(yè)面中的最近父輩頁(yè)面首先出現(xiàn)在父輩頁(yè)面列表中。標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面。將所標(biāo)識(shí)的布局頁(yè)面與所述當(dāng)前頁(yè)面進(jìn)行組合以形成組合頁(yè)面。將所述組合頁(yè)面發(fā)送到所述客戶端瀏覽器。
下面將僅通過(guò)實(shí)例的方式參考附圖描述本發(fā)明的優(yōu)選實(shí)施例,這些附圖是 圖1是其中可實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)處理系統(tǒng)網(wǎng)絡(luò)的圖形表示; 圖2是其中可實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)處理系統(tǒng)的方塊圖; 圖3是示出根據(jù)本發(fā)明的示例性實(shí)施例的在生成和使用維基應(yīng)用中使用的組件的圖; 圖4是示出根據(jù)本發(fā)明的示例性實(shí)施例的維基體系結(jié)構(gòu)的圖; 圖5是示出根據(jù)本發(fā)明的示例性實(shí)施例的呈現(xiàn)頁(yè)面的數(shù)據(jù)流的圖; 圖6是示出根據(jù)本發(fā)明的示例性實(shí)施例的維基應(yīng)用的客戶端和服務(wù)器上的組件的圖; 圖7是根據(jù)本發(fā)明的示例性實(shí)施例的拖動(dòng)活動(dòng)內(nèi)容的示例性顯示屏幕; 圖8是根據(jù)本發(fā)明的示例性實(shí)施例的編輯命令屬性的顯示屏幕; 圖9是根據(jù)本發(fā)明的示例性實(shí)施例的頁(yè)面樹(shù)視圖; 圖10是根據(jù)本發(fā)明的示例性實(shí)施例的維基頁(yè)面的顯示屏幕; 圖11是根據(jù)本發(fā)明的示例性實(shí)施例的抽象語(yǔ)法樹(shù)的方塊圖; 圖12是根據(jù)本發(fā)明的示例性實(shí)施例的命令的方塊圖; 圖13是示出根據(jù)本發(fā)明的示例性實(shí)施例的編輯組件的屬性的圖; 圖14是示出根據(jù)本發(fā)明的示例性實(shí)施例的維基應(yīng)用的客戶端和服務(wù)器上的命令之間的數(shù)據(jù)流的圖; 圖15是示出根據(jù)本發(fā)明的示例性實(shí)施例的初始頁(yè)面呈現(xiàn)過(guò)程期間服務(wù)器上的命令之間的數(shù)據(jù)流的圖; 圖16是示出根據(jù)本發(fā)明的示例性實(shí)施例的響應(yīng)于用戶的頁(yè)面請(qǐng)求而生成的維基頁(yè)面的圖; 圖17是示出根據(jù)本發(fā)明的示例性實(shí)施例的在客戶端瀏覽器處顯示的所呈現(xiàn)頁(yè)面的圖; 圖18是示出根據(jù)本發(fā)明的示例性實(shí)施例的在客戶端瀏覽器處加載并顯示新的頁(yè)面之后在客戶端側(cè)數(shù)據(jù)中心上的組件間的數(shù)據(jù)流的圖; 圖19A和19B是示出根據(jù)本發(fā)明的示例性實(shí)施例的在頁(yè)面更新期間在客戶端側(cè)數(shù)據(jù)中心和服務(wù)器側(cè)數(shù)據(jù)中心之間的數(shù)據(jù)流的圖; 圖20是示出根據(jù)本發(fā)明的示例性實(shí)施例的在頁(yè)面更新期間在服務(wù)器側(cè)數(shù)據(jù)中心和客戶端側(cè)數(shù)據(jù)中心之間的消息流的圖; 圖21是示出根據(jù)本發(fā)明的示例性實(shí)施例的服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象的圖; 圖22是示出根據(jù)本發(fā)明的示例性實(shí)施例的客戶端側(cè)數(shù)據(jù)中心對(duì)象的圖; 圖23是示出根據(jù)本發(fā)明的示例性實(shí)施例的將維基頁(yè)面內(nèi)容嵌入維基布局頁(yè)面正文的過(guò)程的方塊圖; 圖24是示出根據(jù)本發(fā)明的示例性實(shí)施例的用于確定頁(yè)面組件內(nèi)容的可視性的復(fù)選框的方塊圖; 圖25是根據(jù)本發(fā)明的示例性實(shí)施例的創(chuàng)建維基頁(yè)面的過(guò)程的流程圖; 圖26是根據(jù)本發(fā)明的示例性實(shí)施例的顯示頁(yè)面的過(guò)程的流程圖; 圖27是根據(jù)本發(fā)明的示例性實(shí)施例的生成頁(yè)面樹(shù)視圖的過(guò)程的流程圖; 圖28是根據(jù)本發(fā)明的示例性實(shí)施例的拖動(dòng)活動(dòng)內(nèi)容的過(guò)程的流程圖; 圖29是根據(jù)本發(fā)明的示例性實(shí)施例的組合維基頁(yè)面內(nèi)容的過(guò)程的流程圖; 圖30是根據(jù)本發(fā)明的示例性實(shí)施例的編輯命令的過(guò)程的流程圖; 圖31是根據(jù)本發(fā)明的示例性實(shí)施例的呈現(xiàn)維基命令的過(guò)程的流程圖; 圖32是根據(jù)本發(fā)明的示例性實(shí)施例的屬性編輯預(yù)備過(guò)程的流程圖; 圖33是根據(jù)本發(fā)明的示例性實(shí)施例的屬性編輯過(guò)程的流程圖; 圖34是根據(jù)本發(fā)明的示例性實(shí)施例的選擇屬性編輯器的過(guò)程的流程圖; 圖35是根據(jù)本發(fā)明的示例性實(shí)施例的刪除頁(yè)面的過(guò)程的流程圖; 圖36是根據(jù)本發(fā)明的示例性實(shí)施例的修訂頁(yè)面的過(guò)程的流程圖; 圖37是根據(jù)本發(fā)明的示例性實(shí)施例的復(fù)制頁(yè)面的過(guò)程的流程圖; 圖38是根據(jù)本發(fā)明的示例性實(shí)施例的重命名頁(yè)面的過(guò)程的流程圖; 圖39是根據(jù)本發(fā)明的示例性實(shí)施例的取消刪除頁(yè)面的過(guò)程的流程圖; 圖40是根據(jù)本發(fā)明的示例性實(shí)施例的選項(xiàng)板構(gòu)建的過(guò)程的流程圖; 圖41是根據(jù)本發(fā)明的示例性實(shí)施例的配置過(guò)程的流程圖; 圖42是根據(jù)本發(fā)明的示例性實(shí)施例的導(dǎo)出過(guò)程的流程圖; 圖43是根據(jù)本發(fā)明的示例性實(shí)施例的導(dǎo)入過(guò)程的流程圖; 圖44是根據(jù)本發(fā)明的示例性實(shí)施例的檢索和分析樹(shù)的過(guò)程的流程圖; 圖45是根據(jù)本發(fā)明的示例性實(shí)施例的處理網(wǎng)頁(yè)以便在維基中顯示的過(guò)程; 圖46是根據(jù)本發(fā)明的示例性實(shí)施例的處理事件的流程圖; 圖47是根據(jù)本發(fā)明的示例性實(shí)施例的實(shí)例化服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象時(shí)發(fā)生的操作的流程圖; 圖48是根據(jù)本發(fā)明的示例性實(shí)施例的實(shí)例化客戶端側(cè)數(shù)據(jù)中心對(duì)象時(shí)發(fā)生的操作的流程圖; 圖49是根據(jù)本發(fā)明的示例性實(shí)施例的服務(wù)器側(cè)數(shù)據(jù)中心接收到來(lái)自客戶端側(cè)數(shù)據(jù)中心的處理事件的請(qǐng)求時(shí)發(fā)生的操作的流程圖; 圖50是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)生成者命令處理事件時(shí)發(fā)生的操作的流程圖; 圖51是示出根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)使用者命令處理事件時(shí)發(fā)生的操作的流程圖; 圖52是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)客戶端側(cè)數(shù)據(jù)中心接收事件時(shí)發(fā)生的操作的流程圖; 圖53是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)服務(wù)器側(cè)數(shù)據(jù)中心處理事件時(shí)發(fā)生的操作的流程圖; 圖54是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)客戶端側(cè)數(shù)據(jù)中心判定是否將事件發(fā)送到服務(wù)器進(jìn)行處理時(shí)發(fā)生的操作的流程圖; 圖55是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)作為processClientEvent方法調(diào)用的結(jié)果,服務(wù)器側(cè)數(shù)據(jù)中心從客戶端側(cè)數(shù)據(jù)中心接收到事件時(shí)發(fā)生的操作的流程圖; 圖56是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)維基變?cè)獙?duì)象執(zhí)行最小充分變?cè)幚頃r(shí)發(fā)生的操作的流程圖; 圖57是根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)維基變?cè)獙?duì)象判定是否設(shè)置了命令的最小必要變?cè)獣r(shí)發(fā)生的操作的流程圖; 圖58是示出根據(jù)本發(fā)明的示例性實(shí)施例的用于檢測(cè)是否應(yīng)觸發(fā)argument/available事件的setClientArguments方法的流程圖; 圖59是示出根據(jù)本發(fā)明的示例性實(shí)施例的使用維基頁(yè)面定義維基頁(yè)面布局的操作的流程圖; 圖60是根據(jù)本發(fā)明的示例性實(shí)施例的呈現(xiàn)維基頁(yè)面的操作的流程圖; 圖61是根據(jù)本發(fā)明的示例性實(shí)施例的服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象類的類定義的圖示; 圖62是根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心管理方法類的一組方法接口的圖示; 圖63A是根據(jù)本發(fā)明的示例性實(shí)施例的生成者和使用者方法類的一組方法接口的圖示; 圖63B是根據(jù)本發(fā)明的示例性實(shí)施例的主題方法類的一組方法接口的圖示; 圖64是根據(jù)本發(fā)明的示例性實(shí)施例的事件處理方法類的一組方法接口的圖示; 圖65是根據(jù)本發(fā)明的示例性實(shí)施例的命令管理方法類的一組方法接口的圖示; 圖66是根據(jù)本發(fā)明的示例性實(shí)施例的客戶端側(cè)數(shù)據(jù)中心對(duì)象類的類定義的圖示; 圖67是根據(jù)本發(fā)明的示例性實(shí)施例的生成者和使用者方法類的一組方法接口的圖示; 圖68是根據(jù)本發(fā)明的示例性實(shí)施例的主題方法的一組方法接口的圖示; 圖69是根據(jù)本發(fā)明的示例性實(shí)施例的事件處理方法的一組方法接口的圖示; 圖70是根據(jù)本發(fā)明的示例性實(shí)施例的命令管理方法的一組方法接口的圖示; 圖71是根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心主題對(duì)象類的類定義和方法接口的圖示; 圖72是根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心事件對(duì)象類的類定義和方法接口的圖示; 圖73是根據(jù)本發(fā)明的示例性實(shí)施例的維基變?cè)獙?duì)象類的類定義的圖示;以及 圖74是根據(jù)本發(fā)明的示例性實(shí)施例的檢測(cè)是否觸發(fā)argument/available事件的算法的偽代碼的圖示。
具體實(shí)施例方式 現(xiàn)在參考附圖,具體地說(shuō),參考圖1-2,提供了其中可實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)處理環(huán)境的相應(yīng)示意圖的描述。應(yīng)該理解圖1-2僅是示例,并非旨在斷言或暗示對(duì)其中可實(shí)現(xiàn)不同實(shí)施例的環(huán)境的任何限制??梢詫?duì)所示環(huán)境做出許多修改。
現(xiàn)在參考附圖,圖1示出了可以在其中實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)處理系統(tǒng)網(wǎng)絡(luò)的圖形表示。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是可以在其中實(shí)現(xiàn)各實(shí)施例的計(jì)算機(jī)網(wǎng)絡(luò)。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100包含網(wǎng)絡(luò)102,網(wǎng)絡(luò)102是用于提供在網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100內(nèi)連接在一起的各種設(shè)備和計(jì)算機(jī)之間的通信鏈路的介質(zhì)。網(wǎng)絡(luò)102可以包括連接,例如有線、無(wú)線通信鏈路、或光纜。
在所示實(shí)例中,服務(wù)器104和106連同存儲(chǔ)單元108一起與網(wǎng)絡(luò)102相連。此外,客戶端110、112和114與網(wǎng)絡(luò)102相連。這些客戶端110、112和114可以例如是個(gè)人計(jì)算機(jī)或網(wǎng)絡(luò)計(jì)算機(jī)。在所示實(shí)例中,服務(wù)器104將諸如引導(dǎo)文件、操作系統(tǒng)映像和應(yīng)用之類的數(shù)據(jù)提供給客戶端110、112和114。在此實(shí)例中,客戶端110、112和114是服務(wù)器104的客戶端。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100可以包括其他服務(wù)器、客戶端以及其他未示出的設(shè)備。
在所示實(shí)例中,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是因特網(wǎng),同時(shí)網(wǎng)絡(luò)102代表全球范圍內(nèi)使用傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)協(xié)議集來(lái)相互通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合。在因特網(wǎng)的核心是主節(jié)點(diǎn)或主機(jī)之間的高速數(shù)據(jù)通信線路的主干,它包括數(shù)以千計(jì)的商業(yè)、政府、教育以及其他路由數(shù)據(jù)和消息的計(jì)算機(jī)系統(tǒng)。當(dāng)然,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100也可以被實(shí)現(xiàn)為許多不同類型的網(wǎng)絡(luò),例如企業(yè)內(nèi)部互聯(lián)網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)。圖1旨在作為一個(gè)實(shí)例,并非旨在作為對(duì)不同實(shí)施例的體系結(jié)構(gòu)限制。
現(xiàn)在參考圖2,圖2示出了其中可實(shí)現(xiàn)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)處理系統(tǒng)的方塊圖。數(shù)據(jù)處理系統(tǒng)200是計(jì)算機(jī)(如圖1中的服務(wù)器104或客戶端110)的實(shí)例,實(shí)現(xiàn)本發(fā)明的各種示例性實(shí)施例的過(guò)程的計(jì)算機(jī)可用代碼或指令可以位于其中。
在所示實(shí)例中,數(shù)據(jù)處理系統(tǒng)200采用包括北橋及存儲(chǔ)控制器集線器(MCH)202和南橋及輸入/輸出(I/O)控制器集線器(ICH)204的集線器體系結(jié)構(gòu)。處理單元206、主存儲(chǔ)器208以及圖形處理器210與北橋及存儲(chǔ)控制器集線器202相連。圖形處理器210可以例如通過(guò)加速圖形端口(AGP)與MCH相連。
在所示實(shí)例中,局域網(wǎng)(LAN)適配器212與南橋及I/O控制器集線器204相連,音頻適配器216、鍵盤(pán)和鼠標(biāo)適配器220、調(diào)制解調(diào)器222、只讀存儲(chǔ)器(ROM)224、通用串行總線(USB)端口及其他通信端口232,以及PCI/PCIe設(shè)備234通過(guò)總線238與南橋及I/O控制器集線器204相連,并且硬盤(pán)驅(qū)動(dòng)器(HDD)226和CD-ROM驅(qū)動(dòng)器230通過(guò)總線240與南橋及I/O控制器集線器204相連。PCI/PCIe設(shè)備可以例如包括以太網(wǎng)適配器、附加卡以及筆記本計(jì)算機(jī)的PC卡。ROM 224可以例如是閃速二進(jìn)制輸入/輸出系統(tǒng)(BIOS)。硬盤(pán)驅(qū)動(dòng)器226和CD-ROM驅(qū)動(dòng)器230可以例如使用集成驅(qū)動(dòng)電子設(shè)備(IDE)或串行高級(jí)技術(shù)附件(SATA)接口。超級(jí)I/O(SIO)設(shè)備236還可以通過(guò)總線238與南橋及I/O控制器集線器204相連,如圖所示。
在圖2的示例性實(shí)施例中,操作系統(tǒng)在處理器206上運(yùn)行,并協(xié)調(diào)和提供對(duì)數(shù)據(jù)處理系統(tǒng)200內(nèi)的各種組件的控制。所述操作系統(tǒng)可以是諸如Microsoft
Windows
XP之類的商業(yè)操作系統(tǒng)(Microsoft和Windows是Microsoft Corporation在美國(guó)和/或其他國(guó)家/地區(qū)的商標(biāo))。諸如JavaTM編程系統(tǒng)之類的面向?qū)ο蟮木幊滔到y(tǒng)可以與操作系統(tǒng)一起運(yùn)行并從在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的JavaTM程序或應(yīng)用來(lái)提供對(duì)操作系統(tǒng)的調(diào)用(Java和所有基于Java的商標(biāo)是Sun Microsystems,Inc.在美國(guó)和/或其他國(guó)家/地區(qū)的商標(biāo))。
所述操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)以及應(yīng)用或程序的指令位于諸如硬盤(pán)驅(qū)動(dòng)器226之類的存儲(chǔ)設(shè)備上,并可以加載到主存儲(chǔ)器208內(nèi)以便由處理器206執(zhí)行。所述示例性實(shí)施例的過(guò)程可以由處理器206使用計(jì)算機(jī)可執(zhí)行指令來(lái)執(zhí)行,所述可執(zhí)行指令可以位于諸如主存儲(chǔ)器208、只讀存儲(chǔ)器204之類的存儲(chǔ)器之中,也可以位于一個(gè)或多個(gè)外圍設(shè)備中。
圖1-2中的硬件可以根據(jù)實(shí)施方式而不同。除了圖1-2中所示的硬件以外,或替代圖1-2中所示的硬件,還可以使用諸如閃存、等效的非易失性存儲(chǔ)器或光盤(pán)驅(qū)動(dòng)器之類的其他內(nèi)部硬件或外圍設(shè)備。同樣,所述示例性實(shí)施例的各過(guò)程還可以應(yīng)用于多處理器數(shù)據(jù)處理系統(tǒng)。
在某些示例性實(shí)例中,數(shù)據(jù)處理系統(tǒng)200可以是個(gè)人數(shù)字助理(PDA),其通常具備閃存來(lái)提供用于存儲(chǔ)操作系統(tǒng)文件和/或用戶生成的數(shù)據(jù)的非易失性存儲(chǔ)器。諸如總線238和240之類的總線系統(tǒng)可以包含一條或多條總線,例如系統(tǒng)總線、I/O總線以及PCI總線。當(dāng)然,可以使用在與結(jié)構(gòu)或體系結(jié)構(gòu)連接的不同的組件或設(shè)備之間提供數(shù)據(jù)傳輸?shù)娜我忸愋偷耐ㄐ沤Y(jié)構(gòu)或體系結(jié)構(gòu)來(lái)實(shí)現(xiàn)所述總線系統(tǒng)。通信單元包括可以包括一個(gè)或多個(gè)用于傳輸和接收數(shù)據(jù)的設(shè)備,例如調(diào)制解調(diào)器或網(wǎng)絡(luò)適配器。存儲(chǔ)器可以例如是主存儲(chǔ)器208或諸如在北橋及存儲(chǔ)控制器集線器202中找到的高速緩存。處理單元可以包括一個(gè)或多個(gè)處理器或CPU。圖1-2中所示的實(shí)例以及上述實(shí)例并非旨在暗示體系結(jié)構(gòu)限制。例如,除了采取PDA的形式以外,數(shù)據(jù)處理系統(tǒng)200還可以是平板電腦、膝上型計(jì)算機(jī)或電話設(shè)備。
在示例性實(shí)例中,服務(wù)器104托管維基應(yīng)用。服務(wù)器104處的環(huán)境允許諸如客戶端110、112和114之類的客戶端根據(jù)示例性實(shí)施例協(xié)作并開(kāi)發(fā)應(yīng)用。這些應(yīng)用可以例如包括與天氣相關(guān)的應(yīng)用、學(xué)校的注冊(cè)和登記簿、電子郵件應(yīng)用以及其他類型的面向商業(yè)的應(yīng)用。不同的實(shí)施例可以包括在服務(wù)器側(cè)、客戶端側(cè)或兩者處提供協(xié)作環(huán)境以根據(jù)示例性實(shí)施例開(kāi)發(fā)維基應(yīng)用的過(guò)程。
所述示例性實(shí)施例認(rèn)識(shí)到,當(dāng)前維基應(yīng)用并不適合于作為知識(shí)庫(kù)或文檔的文本和文件的協(xié)作以外的應(yīng)用協(xié)作開(kāi)發(fā)。
現(xiàn)在參考圖3,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的在生成和使用維基應(yīng)用中所用的組件的圖。在該實(shí)例中,用戶可以與客戶端環(huán)境300交互以生成和使用維基環(huán)境302所支持的應(yīng)用。客戶端環(huán)境300是在諸如圖1中的客戶端110之類的客戶端上執(zhí)行的軟件應(yīng)用或環(huán)境。維基環(huán)境302在諸如圖1中的服務(wù)器104之類的數(shù)據(jù)處理系統(tǒng)上執(zhí)行。
在這些實(shí)例中,客戶端環(huán)境300處的用戶可以向維基環(huán)境302發(fā)送對(duì)頁(yè)面的請(qǐng)求。在這些實(shí)例中,用戶在客戶端環(huán)境300中通過(guò)瀏覽器做出所述請(qǐng)求。維基環(huán)境302將頁(yè)面返回給用戶。在這些示例性實(shí)例中,所述頁(yè)面包括允許用戶操縱和選擇要生成的頁(yè)面的內(nèi)容的JavaScrip。在所述示例性實(shí)施例中,這些頁(yè)面是為用戶提供對(duì)應(yīng)用的訪問(wèn)的協(xié)作網(wǎng)頁(yè)。這些應(yīng)用是可由客戶端計(jì)算機(jī)處的用戶使用和修改的協(xié)作應(yīng)用。
具體地說(shuō),不同的示例性實(shí)施例提供了一種使用戶使用協(xié)作編寫(xiě)工具的功能以外的功能生成應(yīng)用的方法和裝置。
這些實(shí)例中的許多功能是通過(guò)PHP超文本預(yù)處理器(PHP)提供的。PHP是一種用于創(chuàng)建在維基環(huán)境302中執(zhí)行的Web應(yīng)用的編程語(yǔ)言。PHP是一種內(nèi)嵌超文本標(biāo)記語(yǔ)言的開(kāi)源腳本編寫(xiě)語(yǔ)言,旨在作為用于生成動(dòng)態(tài)Web內(nèi)容的高級(jí)工具。
根據(jù)具體實(shí)施方式
的不同,可以使用諸如Java虛擬機(jī)(JVM)之類的虛擬機(jī)來(lái)促進(jìn)所述示例性實(shí)施例中提供的不同功能。同樣,還可以使用JavaScript以外的其他腳本編寫(xiě)語(yǔ)言來(lái)實(shí)現(xiàn)這些過(guò)程,具體取決于特定的實(shí)施例。
現(xiàn)在參考圖4,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的維基體系結(jié)構(gòu)的圖。在這些特定的實(shí)例中,此體系結(jié)構(gòu)是一種非常易于完成(QED)的維基體系結(jié)構(gòu)。如圖所示,維基環(huán)境400包含維基引擎402。該引擎包括請(qǐng)求處理機(jī)404、命令處理器406以及頁(yè)面編寫(xiě)器408。請(qǐng)求處理機(jī)404從客戶端接收請(qǐng)求。
例如,用戶可以將統(tǒng)一資源定位器(URL)形式的統(tǒng)一資源標(biāo)識(shí)符(URI)發(fā)送到維基環(huán)境200。由請(qǐng)求處理機(jī)404接收該請(qǐng)求以便處理。在這些實(shí)例中,將針對(duì)請(qǐng)求處理機(jī)404處理的每個(gè)請(qǐng)求生成一個(gè)頁(yè)面。請(qǐng)求處理機(jī)404還生成“頁(yè)面片段(page fragment)”以便處理基于AJAX的交互,所述頁(yè)面片段是超文本標(biāo)記語(yǔ)言源片段,而非完整的超文本標(biāo)記頁(yè)面。
命令處理器406處理不同的命令來(lái)構(gòu)建頁(yè)面或頁(yè)面片段,以響應(yīng)請(qǐng)求處理機(jī)404接收到的請(qǐng)求。此外,命令處理器406在命令以及文本片段的處理完成之后呈現(xiàn)頁(yè)面。頁(yè)面編寫(xiě)器408也參與生成用戶所請(qǐng)求的頁(yè)面。在這些實(shí)例中,頁(yè)面編寫(xiě)器408用于頁(yè)面的布局、頁(yè)面正文內(nèi)容以及腳本收集。
維基環(huán)境400還包括輔助功能410。在此實(shí)例中,輔助功能410包括列表412、注釋414、電子郵件416以及附件418。使用列表412,用戶可以生成供其他用戶查看的列表。此外,使用注釋414,用戶可以向不同的頁(yè)面添加注釋或其他文本。附件418允許用戶將文件附加到特定頁(yè)面。電子郵件416可用于在頁(yè)面更新或修改之后通知用戶,或允許用戶將電子郵件作為附件發(fā)送到頁(yè)面。電子郵件416還允許一個(gè)或多個(gè)用戶接收有關(guān)對(duì)指定頁(yè)面的更改的消息。用戶可以訂閱維基的富集站點(diǎn)概要(RSS)種子(feed)來(lái)確定維基頁(yè)面何時(shí)更改。
此外,維基環(huán)境400包含維基命令420。示例性實(shí)施例中的維基命令420包含兩類命令內(nèi)置命令422和定制命令424。內(nèi)置命令422是維基環(huán)境400中存在的命令或服務(wù)。定制命令424引用通過(guò)外部源提供的命令?;旧?,這些命令允許用戶包括和處理頁(yè)面數(shù)據(jù)。
在一個(gè)或多個(gè)實(shí)施例中,維基命令420包括使用面向服務(wù)的體系結(jié)構(gòu)(SOA)。此類SOA命令允許用戶將服務(wù)與頁(yè)面包括在一起。在這些實(shí)例中,命令可以使用與其運(yùn)行所在的應(yīng)用和計(jì)算平臺(tái)無(wú)關(guān)的良好定義的接口來(lái)引用服務(wù)。
在所示實(shí)例中,服務(wù)是軟件模塊。這些類型的服務(wù)通?;跇?biāo)準(zhǔn)兼容接口,例如Web服務(wù)描述語(yǔ)言(WSDL)。當(dāng)然,維基命令420所引用的服務(wù)可以包含任何類型的接口。這些命令可以采取各種形式。例如,所述命令可以是金融、天氣、測(cè)繪、新聞和事件、搜索、政府或國(guó)際信息。
數(shù)據(jù)庫(kù)426包含諸如用戶所請(qǐng)求和創(chuàng)建的頁(yè)面之類的信息。進(jìn)一步地,頁(yè)面的修訂、附件、注釋以及其他信息存儲(chǔ)在數(shù)據(jù)庫(kù)426中。在示例性實(shí)施例中,信息通常以表428的形式存儲(chǔ)在數(shù)據(jù)庫(kù)426中。
現(xiàn)在參考圖5,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的呈現(xiàn)頁(yè)面的數(shù)據(jù)流的圖。在這些實(shí)例中,當(dāng)頁(yè)面的處理完成并準(zhǔn)備傳輸?shù)娇蛻舳藭r(shí),將在服務(wù)器上呈現(xiàn)該頁(yè)面。通過(guò)諸如圖4中的維基引擎402之類的維基引擎來(lái)操縱圖5中示出的不同組件。
在這些示例性實(shí)施例中示出的編程體系結(jié)構(gòu)和模型允許使用客戶端上的瀏覽器對(duì)維基內(nèi)容進(jìn)行可視匯編??蛻舳怂?qǐng)求的任何內(nèi)容在概念上都是頁(yè)面。例如,使用諸如頁(yè)面和變量名稱之類的統(tǒng)一資源標(biāo)識(shí)符模型來(lái)引用變量。進(jìn)而,在這些實(shí)例中頁(yè)面被用作數(shù)據(jù)結(jié)構(gòu)。將存儲(chǔ)變量以供以后使用。這些變量包括會(huì)話變量、請(qǐng)求變量以及永久性變量。
在所述示例性實(shí)例中,用戶通過(guò)列表創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)??梢圆樵?、搜索和/或組合這些列表。在操縱列表時(shí),用戶采用創(chuàng)建、檢索、更新和刪除(CRUD)過(guò)程。
維基控制器500接收來(lái)自用戶的統(tǒng)一資源標(biāo)識(shí)符506。維基控制器500包含路由器502和對(duì)象變量504。路由器502將請(qǐng)求處理委派給相應(yīng)的請(qǐng)求處理機(jī)。對(duì)象變量504提供處理組件之間的互連。例如,維基控制器500具有對(duì)象變量504“Wiki”,它是指向維基對(duì)象508的指針。圖5中的每個(gè)對(duì)象都具有作為到對(duì)象交互所需的其他資源的引用的對(duì)象變量。由諸如圖4中的請(qǐng)求處理機(jī)404之類的請(qǐng)求處理機(jī)來(lái)處理維基控制器50。
響應(yīng)于接收到統(tǒng)一資源標(biāo)識(shí)符506,維基控制器500實(shí)例化維基對(duì)象508的實(shí)例。如圖所示,維基對(duì)象508包含對(duì)象變量510、變量512、PHP安全514、電子郵件檢查516、用戶518以及頁(yè)面520。維基對(duì)象508是每次接收到請(qǐng)求時(shí)實(shí)例化的實(shí)例,它充當(dāng)生成頁(yè)面520的內(nèi)容時(shí)使用的所有對(duì)象的儲(chǔ)存庫(kù)。
在這些實(shí)例中,對(duì)象變量510包含處理頁(yè)面520所需的信息。變量512包含存儲(chǔ)在會(huì)話522中的會(huì)話信息。在這些實(shí)例中,該會(huì)話信息是用戶與頁(yè)面交互時(shí)或生成頁(yè)面時(shí)使用的信息。對(duì)象變量510中的更多永久性數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)524中。在所示實(shí)例中,數(shù)據(jù)庫(kù)524存儲(chǔ)任何生成頁(yè)面或存儲(chǔ)用戶所做的更改時(shí)使用的信息。
PHP安全514是用于判定客戶端所標(biāo)識(shí)的代碼是否可以運(yùn)行以及用于啟動(dòng)代碼執(zhí)行的功能。PHP是一種主要在服務(wù)器側(cè)應(yīng)用上采用的開(kāi)源編程語(yǔ)言。在這些示例性實(shí)例中,PHP代碼可以在維基環(huán)境內(nèi)由不同的對(duì)象執(zhí)行。在這些實(shí)例中,用戶可以從客戶端側(cè)以及服務(wù)器側(cè)運(yùn)行PHP代碼。在維基對(duì)象508中提供電子郵件檢查516來(lái)檢查當(dāng)頁(yè)面520被呈現(xiàn)和發(fā)送給用戶時(shí)可以在頁(yè)面520上顯示的電子郵件消息。用戶518包含有關(guān)用戶的信息,例如用戶權(quán)限級(jí)別、標(biāo)識(shí)符以及會(huì)話日志。
頁(yè)面526是維基對(duì)象508中包含的頁(yè)面520的更具體的實(shí)例。在該實(shí)例中,頁(yè)面526包含對(duì)象變量528、附件530、過(guò)程532、訪問(wèn)534、布局536、腳本538以及內(nèi)容540。
在這些實(shí)例中,對(duì)象變量528包含頁(yè)面數(shù)據(jù)結(jié)構(gòu)的變量實(shí)例。例如,可以存在提供布局信息的分段數(shù)組。上下文指針可以引用根維基命令。對(duì)象變量528中可以存在實(shí)例ID來(lái)引用內(nèi)部頁(yè)面ID。這些不同的變量包含呈現(xiàn)諸如頁(yè)面526之類的要發(fā)送給用戶的頁(yè)面時(shí)所需的信息。
附件530是可在頁(yè)面上提供的附件的標(biāo)識(shí)。如果用戶選擇附件,則可以在此時(shí)將該附件下載到用戶。過(guò)程532包含生成要發(fā)送給用戶的頁(yè)面時(shí)所用的代碼。在這些示例性實(shí)例中,過(guò)程是一種例如標(biāo)識(shí)頁(yè)面內(nèi)容、標(biāo)識(shí)所有附件以及標(biāo)識(shí)可以包括在要發(fā)送給用戶的頁(yè)面中的任何腳本的方法。
訪問(wèn)534用于確定用戶針對(duì)將要布置在頁(yè)面上的內(nèi)容具有何種訪問(wèn)權(quán)限。在一個(gè)實(shí)施例中,使用訪問(wèn)控制列表(ACL)542確定此類訪問(wèn)權(quán)限。根據(jù)請(qǐng)求頁(yè)面的特定用戶所擁有的訪問(wèn)的不同,針對(duì)頁(yè)面526要包括的內(nèi)容也有所不同。該用戶是請(qǐng)求頁(yè)面526的用戶。在生成頁(yè)面526的內(nèi)容時(shí),對(duì)象變量528引用維基命令上下文544。該命令上下文包含對(duì)象變量546和內(nèi)容548。對(duì)象變量546表示存儲(chǔ)器中的頁(yè)面內(nèi)容版本。這些變量包括命令列表和包含當(dāng)前頁(yè)面的文本段列表。內(nèi)容548表示用于操縱頁(yè)面內(nèi)容的對(duì)象方法。
在頁(yè)面526中執(zhí)行過(guò)程532時(shí),將通過(guò)維基命令上下文544標(biāo)識(shí)來(lái)自命令550的一組命令。維基命令上下文544通過(guò)命令550生成一組命令實(shí)例。維基命令上下文544分析內(nèi)容540并加載命令以創(chuàng)建諸如片段552之類的片段樹(shù)結(jié)構(gòu)。片段552還包含對(duì)象變量554和內(nèi)容556。片段522是頁(yè)面526中的未呈現(xiàn)形式的部分。在該實(shí)例中,維基命令上下文544包含表示要包括在頁(yè)面中的命令的結(jié)構(gòu)的片段。這些命令是可以由用戶來(lái)操縱的命令。當(dāng)過(guò)程532完成時(shí),將頁(yè)面526向下發(fā)送給發(fā)出請(qǐng)求的用戶。將保存數(shù)據(jù)中心558以用于以后的交互。同樣,在該實(shí)例中,當(dāng)用戶與頁(yè)面526中的組件交互時(shí),數(shù)據(jù)中心558將被恢復(fù)并包含過(guò)程和數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)中心558內(nèi)的過(guò)程用于標(biāo)識(shí)片段552中的何種頁(yè)面命令使用數(shù)據(jù),或者標(biāo)識(shí)可由數(shù)據(jù)中心558接收的命令。此外,數(shù)據(jù)中心558將結(jié)果返回給客戶端。這些結(jié)果被發(fā)送到客戶端上的數(shù)據(jù)中心。
現(xiàn)在參考圖6,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的維基應(yīng)用的客戶端和服務(wù)器上的組件的圖。在該實(shí)例中,客戶端環(huán)境600是圖3中的客戶端環(huán)境300的更詳細(xì)的圖示。在這些示例性實(shí)施例中,客戶端環(huán)境600可以采取客戶端Web瀏覽器或某些其他與網(wǎng)絡(luò)(如因特網(wǎng))具有連接性的應(yīng)用的形式。維基環(huán)境601在諸如圖1中的服務(wù)器104之類的數(shù)據(jù)處理系統(tǒng)上執(zhí)行。
在該實(shí)例中,客戶端環(huán)境600接收頁(yè)面602。頁(yè)面602包括多個(gè)組件,例如頁(yè)首604、頁(yè)腳606、左邊距608、右邊距610、菜單612以及正文614。頁(yè)首604、頁(yè)腳606、左邊距608、右邊距610是用于頁(yè)面布局的頁(yè)面組件。這些組件包括各種內(nèi)容,例如超文本標(biāo)記語(yǔ)言(HTML)內(nèi)容。
菜單612提供對(duì)用戶可以在頁(yè)面602上執(zhí)行或者結(jié)合頁(yè)面602執(zhí)行的操作或功能的訪問(wèn)。例如,菜單612可以包括將請(qǐng)求發(fā)送到服務(wù)器的菜單項(xiàng),在請(qǐng)求被許可時(shí),所述服務(wù)器允許用戶在WYSIWYG編輯器中編輯頁(yè)面內(nèi)容。
在該實(shí)例中,可以在正文614中找到不同類型的內(nèi)容。在該實(shí)例中,正文614包含HTML內(nèi)容616、數(shù)據(jù)信息618以及變量620。正文614還包含命令622、624、626、628、630和632。命令622、624、626、628、630和632是維基命令,例如圖4中的維基命令420。這些命令是通過(guò)頁(yè)面602提供的維基應(yīng)用的命令。命令622、624、626、628、630和632與數(shù)據(jù)中心634一起提供了頁(yè)面602內(nèi)的動(dòng)態(tài)內(nèi)容。
數(shù)據(jù)中心634是維基環(huán)境中的數(shù)據(jù)中心對(duì)象,與圖5中的數(shù)據(jù)中心558類似。但是,數(shù)據(jù)中心634是客戶端側(cè)數(shù)據(jù)中心。數(shù)據(jù)中心634包括用于在頁(yè)面602中的命令與維基環(huán)境601中的命令之間發(fā)送和接收事件對(duì)象的屬性和一組方法。數(shù)據(jù)中心634包括用于在頁(yè)面602中的命令與維基環(huán)境601中的命令之間發(fā)送和接收事件和/或數(shù)據(jù)的屬性和一組方法。
事件對(duì)象是定義在與諸如頁(yè)面602之類的維基頁(yè)面關(guān)聯(lián)的命令之間傳輸?shù)氖录臄?shù)據(jù)對(duì)象。事件對(duì)象可以包括,但并不一定包括事件數(shù)據(jù)。在這些實(shí)例中,事件是指示已發(fā)生某些事務(wù)的消息,例如出現(xiàn)或發(fā)生任務(wù)、程序或命令的意義。例如,事件可以包括接收用戶輸入、收集一組最低程度上需要的變?cè)⑼瓿擅畈僮?、給定時(shí)間發(fā)生或任何其他活動(dòng)、接收輸入或數(shù)據(jù)、出現(xiàn)、發(fā)生或活動(dòng)。
示出頁(yè)面602中的不同類型內(nèi)容是為了描述向用戶呈現(xiàn)維基應(yīng)用的方式。但是,該圖示并非旨在暗示對(duì)維基應(yīng)用中可以使用的內(nèi)容的類型和范圍的限制。例如,在不偏離本發(fā)明的示例性實(shí)施例的范圍的情況下,頁(yè)面602可以包括圖6中未示出的其他附加的內(nèi)容、命令和/或組件。
用戶可以操縱頁(yè)面602中的內(nèi)容以使用維基應(yīng)用和/或更改維基應(yīng)用執(zhí)行的方式。換言之,用戶可以向頁(yè)面602添加諸如命令之類的內(nèi)容或從中刪除該內(nèi)容(通過(guò)操縱這些命令的圖形表示),以生成或修改頁(yè)面602的內(nèi)容和/或功能。
在該實(shí)例中,維基環(huán)境601為諸如圖3中的維基環(huán)境302和圖4中的維基環(huán)境400之類的維基環(huán)境。維基環(huán)境601包括采取命令樹(shù)或抽象語(yǔ)法樹(shù)形式的命令640-650。命令640-650在維基環(huán)境中更新。命令640-650和命令624-632在實(shí)施方式上有所不同,但是它們指類似的命令。例如,命令632與客戶端環(huán)境關(guān)聯(lián)并且由用戶在客戶端環(huán)境600中更新。在網(wǎng)絡(luò)連接上使用AJAX 636并借助異步JavaScript和可擴(kuò)展標(biāo)記語(yǔ)言在維基環(huán)境601中更新相應(yīng)的命令650。
AJAX 636是一種Web開(kāi)發(fā)技術(shù),用于創(chuàng)建諸如維基頁(yè)面之類的交互Web應(yīng)用。AJAX 636與位于后臺(tái)的關(guān)聯(lián)主機(jī)服務(wù)器交換少量的數(shù)據(jù),以便不會(huì)在用戶每次更改所請(qǐng)求的頁(yè)面時(shí)重新加載整個(gè)頁(yè)面。AJAX 636旨在提高諸如頁(yè)面602之類的頁(yè)面的交互性、速度、響應(yīng)性及可用性。盡管示例性實(shí)施例描述了通過(guò)AJAX或JSON交換數(shù)據(jù),但是可以使用在一組給定組件之間達(dá)成一致的任何通信協(xié)議來(lái)根據(jù)本發(fā)明的示例性實(shí)施例交換數(shù)據(jù)。
維基環(huán)境601中的命令640、642、644、646、648和650與數(shù)據(jù)中心638交互。數(shù)據(jù)中心638是諸如圖5中的數(shù)據(jù)中心558之類的服務(wù)器側(cè)數(shù)據(jù)中心。在該示例性實(shí)例中,客戶端環(huán)境600的數(shù)據(jù)中心634和數(shù)據(jù)中心638通過(guò)AJAX 640交換事件和/或數(shù)據(jù)。AJAX 636和AJAX 640可以使用可擴(kuò)展標(biāo)記語(yǔ)言(XML)作為在客戶端環(huán)境600與維基環(huán)境601之間傳輸數(shù)據(jù)的格式來(lái)進(jìn)行通信,盡管可以使用任何格式,其中包括預(yù)格式化的超文本標(biāo)記語(yǔ)言(HTML)、純文本以及JavaScript對(duì)象符號(hào)(JSON)。JavaScript對(duì)象符號(hào)是一種輕量計(jì)算機(jī)數(shù)據(jù)交換格式。JSON是JavaScript對(duì)象描述符號(hào)的子集,但是其使用時(shí)不需要JavaScript。
示例性實(shí)施例提供了一種用于應(yīng)用維基的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。維基應(yīng)用是一種協(xié)作的Web環(huán)境,它允許單個(gè)或多個(gè)用戶有效地集成靜態(tài)內(nèi)容和交互內(nèi)容。維基頁(yè)面是維基應(yīng)用中的頁(yè)面。本發(fā)明的示例性實(shí)施例允許用戶輕松地創(chuàng)建和管理維基頁(yè)面。用戶可以通過(guò)拖放活動(dòng)內(nèi)容來(lái)編輯維基頁(yè)面?;顒?dòng)內(nèi)容是根據(jù)不斷變化的信息更新的動(dòng)態(tài)內(nèi)容。例如,活動(dòng)內(nèi)容包括可由與氣象預(yù)報(bào)站鏈接的服務(wù)器更新的特定地理位置的天氣圖。
維基頁(yè)面保存在頁(yè)面樹(shù)視圖中。頁(yè)面樹(shù)視圖是包括頁(yè)面和子頁(yè)面的內(nèi)容層次結(jié)構(gòu)。頁(yè)面樹(shù)視圖可以稱為維基空間、頁(yè)面空間、樹(shù)或其他內(nèi)容層次結(jié)構(gòu)。本說(shuō)明中的每個(gè)頁(yè)面都可以根據(jù)需要同時(shí)作為內(nèi)容提供者以及其他子頁(yè)面的容器。頁(yè)面樹(shù)視圖與其他文件結(jié)構(gòu)不同,因?yàn)樗许?yè)面都可以包括內(nèi)容并且同時(shí)被視為容器。頁(yè)面樹(shù)視圖中的頁(yè)面通過(guò)為每個(gè)頁(yè)面指定的名稱來(lái)區(qū)分。頁(yè)面包括節(jié)點(diǎn)和葉節(jié)點(diǎn)。節(jié)點(diǎn)可以顯示內(nèi)容并用作其他維基頁(yè)面的文件夾或容器。葉節(jié)點(diǎn)只提供內(nèi)容。
現(xiàn)在參考圖7,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的用于拖動(dòng)活動(dòng)內(nèi)容的示例性顯示屏幕。維基頁(yè)面700是諸如圖6中的頁(yè)面602的頁(yè)面。維基頁(yè)面700可以在設(shè)計(jì)模式下專門(mén)進(jìn)行編輯。例如,用戶可以勾選非常易于完成(QED)復(fù)選框,指示該維基頁(yè)面正在被編輯。在設(shè)計(jì)模式下,維基頁(yè)面700可以顯示選項(xiàng)板702。選項(xiàng)板702是用于協(xié)作地操縱網(wǎng)頁(yè)的工具欄或工具集。例如,用戶可以使用選項(xiàng)板702選擇活動(dòng)內(nèi)容以便在維基頁(yè)面700的正文704中顯示。正文704是維基頁(yè)面700中可以被定制和編輯以顯示用戶指定內(nèi)容的部分。
選項(xiàng)板702可以包括任何數(shù)量的圖標(biāo)706、708和710。每個(gè)圖標(biāo)都是可用命令的圖形表示。選項(xiàng)板702可用于顯示內(nèi)容,所述內(nèi)容包括命令、數(shù)據(jù)、頁(yè)面內(nèi)容、維基實(shí)用工具、數(shù)據(jù)服務(wù)、定制列表以及任意數(shù)量的其他功能。
圖標(biāo)706可以例如是到采用圖標(biāo)形式的GoogleTM Search工具的活動(dòng)鏈接。圖標(biāo)708可以是到GoogleTM Maps的活動(dòng)鏈接(Google、GoogleSearch和Google Maps是Google Corporation在美國(guó)和/或其他國(guó)家/地區(qū)的商標(biāo))。圖標(biāo)710可以是富集站點(diǎn)概要或真正簡(jiǎn)單整合(RSS)種子。富集站點(diǎn)概要是提供整合和聚合Web內(nèi)容的開(kāi)放方法的可擴(kuò)展標(biāo)記語(yǔ)言(XML)的協(xié)議和應(yīng)用。使用富集站點(diǎn)概要,用戶可以創(chuàng)建提供來(lái)自網(wǎng)站的標(biāo)題、鏈接以及文章概要的數(shù)據(jù)種子。用戶可以通過(guò)正文704中的新聞聚合器使不斷更新的內(nèi)容從網(wǎng)站傳送到維基頁(yè)面700。新聞聚合器是一款專門(mén)用于接收這些類型的種子的軟件。
在一個(gè)實(shí)例中,用戶可以通過(guò)將圖標(biāo)708從選項(xiàng)板702拖到正文704上來(lái)在正文704中顯示Google
map。用戶可以使用將在圖8中描述的屬性編輯器進(jìn)一步定制通過(guò)維基命令顯示的內(nèi)容。頁(yè)面內(nèi)容中的現(xiàn)有維基命令顯示諸如醒目圖示(eye-catcher)712之類的醒目圖示來(lái)指示可以編輯現(xiàn)有維基命令的屬性。
現(xiàn)在參考圖8,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的用于編輯命令屬性的顯示屏幕?,F(xiàn)代應(yīng)用維基需要編輯維基“markdown”命令屬性的可視方法,此方法不需要用戶編輯頁(yè)面,從而允許用戶在沒(méi)有不協(xié)調(diào)的頁(yè)面刷新和概念性上下文切換的情況下修改命令設(shè)置。
應(yīng)用維基減小了用戶必須了解或?qū)W習(xí)超文本標(biāo)記語(yǔ)言標(biāo)記的負(fù)擔(dān)。在這些實(shí)例中,應(yīng)用維基引入了用于創(chuàng)建列表和表格的簡(jiǎn)寫(xiě)語(yǔ)法以及使用簡(jiǎn)短字符序列、行位置以及空格的組合的其他超文本標(biāo)記語(yǔ)言結(jié)構(gòu)。例如,與超文本標(biāo)記語(yǔ)言中必需的<OL><LI></LI></OL>標(biāo)記相對(duì),在行的第一列中由后跟一個(gè)空格的單個(gè)星號(hào)(*)來(lái)定義列表項(xiàng)。由應(yīng)用維基引入的簡(jiǎn)寫(xiě)語(yǔ)法被稱為“簡(jiǎn)化(markdown)”來(lái)強(qiáng)調(diào)使用超文本標(biāo)記語(yǔ)言創(chuàng)建內(nèi)容與在維基環(huán)境中創(chuàng)建內(nèi)容之間的差異。維基命令類支持生成用于編輯“簡(jiǎn)化”命令的可視屬性編輯器。
維基頁(yè)面800是諸如圖7中的維基頁(yè)面700之類的維基頁(yè)面的局部視圖。選項(xiàng)板802類似于圖7中的選項(xiàng)板702。維基頁(yè)面800包含顯示名為庫(kù)和列表的醒目圖示804和806的維基命令。
可以使用屬性編輯器808來(lái)編輯顯示醒目圖示804和806的維基命令的屬性。屬性是由所述醒目圖示表示的命令在圖7中的維基頁(yè)面700上顯示內(nèi)容時(shí)使用的特性、數(shù)據(jù)、字段和其他信息。屬性編輯器808允許用戶定制由活動(dòng)內(nèi)容顯示的信息。屬性編輯器808包括超文本標(biāo)記語(yǔ)言和與維基頁(yè)面內(nèi)容一起下載到瀏覽器客戶端的JavaScript。例如,用戶可以指定用于顯示Google
map的具體地址。同樣地,用戶可以進(jìn)行查詢并限制在維基頁(yè)面800中顯示的信息。
用戶可以使用屬性編輯器808輸入允許調(diào)整其可視表示大小的維基命令的寬度和高度值。此外,屬性編輯器808可用于輸入縮放系數(shù)、數(shù)據(jù)源名稱,并且最大值和最小值是一些其他實(shí)例。屬性編輯器808用于為用戶呈現(xiàn)維基命令的可變點(diǎn)。
例如,圖5中的過(guò)程532可以根據(jù)需要針對(duì)每個(gè)命令生成默認(rèn)的屬性編輯器。每個(gè)維基命令都可以提供定制的屬性編輯器來(lái)呈現(xiàn)該維基命令的特有可變點(diǎn)。選擇命令的醒目圖示804或806將導(dǎo)致顯示關(guān)聯(lián)命令的屬性編輯器。
現(xiàn)在參考圖9,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的頁(yè)面樹(shù)視圖。頁(yè)面樹(shù)視圖900是可視的存儲(chǔ)結(jié)構(gòu),用于直觀地向用戶顯示維基頁(yè)面的組織。頁(yè)面樹(shù)視圖900示出了維基應(yīng)用內(nèi)的維基頁(yè)面的名稱或標(biāo)記。標(biāo)記是用戶指定的用于對(duì)維基內(nèi)容進(jìn)行分類的標(biāo)簽。這些實(shí)例中的每個(gè)頁(yè)面都是節(jié)點(diǎn)或葉節(jié)點(diǎn)。
WikiSpace 902是頁(yè)面樹(shù)視圖900的基頁(yè)面并且還可以用于引用頁(yè)面樹(shù)視圖900的內(nèi)容。頁(yè)面樹(shù)視圖900與其他文件系統(tǒng)以及數(shù)據(jù)結(jié)構(gòu)不同,因?yàn)閃ikiSpace 902以及其他包括Test 904、Testing 906、Toplevel 908以及Wiki 910的基頁(yè)面或基節(jié)點(diǎn)可以同時(shí)將內(nèi)容和功能顯示為其他維基頁(yè)面的文件夾或容器。諸如“+”號(hào)之類的圖形指示器可以指示維基頁(yè)面是一個(gè)節(jié)點(diǎn)。WikiSpace 902使用平面層次結(jié)構(gòu),其中由節(jié)點(diǎn)表示的每個(gè)頁(yè)面都可以是容器和內(nèi)容提供者。例如,WikiSpace902包括內(nèi)容,但是還可用于鏈接到包括HelloWorld 912、Homepage 914和MenuTest 916的維基子頁(yè)面或葉節(jié)點(diǎn)。在這些實(shí)例中,頁(yè)面樹(shù)視圖900中的基頁(yè)面可以同時(shí)顯示為內(nèi)容提供者和頁(yè)面容器。
用戶可以使用頁(yè)面樹(shù)視圖900瀏覽維基頁(yè)面。例如,通過(guò)單擊維基頁(yè)面,將顯示維基頁(yè)面的內(nèi)容和/或其子頁(yè)面。因此,用戶可以通過(guò)選擇頁(yè)面名稱輕松地瀏覽維基。
現(xiàn)在參考圖10,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的維基頁(yè)面的顯示屏幕。維基頁(yè)面1000是諸如圖6中的維基頁(yè)面602之類的頁(yè)面。用戶可能已使用選項(xiàng)板中的醒目圖示(例如圖7中的醒目圖示708和選項(xiàng)板702)以將活動(dòng)內(nèi)容拖到維基頁(yè)面1000中。
例如,商務(wù)旅行者可能已先前修改維基頁(yè)面1000以針對(duì)將要進(jìn)行的商務(wù)旅程顯示目的地1002的列表。通過(guò)單擊目的地1002列表中的每個(gè)位置,維基頁(yè)面將顯示全國(guó)地圖1004來(lái)提供地址、天氣預(yù)報(bào)1006以及當(dāng)?shù)鼐?008。定制的信息允許用戶針對(duì)商務(wù)旅行中的天氣和其他情況做出計(jì)劃并且直觀地繪出每次會(huì)議的地點(diǎn)。當(dāng)?shù)鼐?008可以包括到指定地理位置的正在發(fā)生的事件以及新商店的鏈接,告知用戶可能與商務(wù)會(huì)議有關(guān)的當(dāng)?shù)厥录?br>
示例性實(shí)施例還提供了一種用于處理網(wǎng)頁(yè)以在維基環(huán)境中顯示的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。在呈現(xiàn)最終的視圖之前,添加的組件能夠與其他組件進(jìn)行交互。將啟用組件以從頁(yè)面提供上下文中發(fā)現(xiàn)新的屬性和參數(shù)設(shè)置。在呈現(xiàn)最終視圖之前,將使用驗(yàn)證機(jī)制以便組件驗(yàn)證輸入并報(bào)告錯(cuò)誤。在頁(yè)面提供序列的生命周期內(nèi)處理目標(biāo)事件。在單個(gè)服務(wù)器上管理同一組件的多個(gè)版本。
現(xiàn)在參考圖11,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的抽象語(yǔ)法樹(shù)的方塊圖。抽象語(yǔ)法樹(shù)環(huán)境1100包括形成和處理抽象語(yǔ)法樹(shù)1102時(shí)所用的各種組件。
維基命令上下文(WCC)1104是從諸如圖6中的頁(yè)面602之類的維基頁(yè)面的標(biāo)記語(yǔ)言來(lái)創(chuàng)建抽象語(yǔ)法樹(shù)1102的對(duì)象。維基命令上下文1104是命令的抽象語(yǔ)法樹(shù)的父輩。維基命令上下文1104負(fù)責(zé)加載頁(yè)面命令或源片段。抽象語(yǔ)法樹(shù)1102包括維基源的命令(如圖6中的命令640、642、644、646、648、650)。樹(shù)是包括源節(jié)點(diǎn)或基節(jié)點(diǎn)(其分支為包括葉節(jié)點(diǎn)或節(jié)點(diǎn))的數(shù)據(jù)結(jié)構(gòu)。樹(shù)中相互連接的節(jié)點(diǎn)表示依賴于其他互連節(jié)點(diǎn)的命令。諸如節(jié)點(diǎn)1106-1110之類的節(jié)點(diǎn)表示抽象語(yǔ)法樹(shù)1102中的不同命令。
例如,節(jié)點(diǎn)1106名為Accordion并執(zhí)行使用戶指定給Accordion的屬性和變量?jī)?nèi)部化以及將客戶端瀏覽器環(huán)境作為目標(biāo)發(fā)出Accordion的超文本標(biāo)記語(yǔ)言片段所需的步驟。節(jié)點(diǎn)1108名為模板并且是名為Accordion的節(jié)點(diǎn)1106的子節(jié)點(diǎn)。節(jié)點(diǎn)1106提供要在客戶端瀏覽器環(huán)境中顯示的Accordion內(nèi)的標(biāo)簽的名稱。節(jié)點(diǎn)1110名為預(yù)報(bào)并且是一個(gè)用于將天氣預(yù)報(bào)插入維基頁(yè)面的命令。
數(shù)據(jù)中心1112是諸如圖6中的數(shù)據(jù)中心638之類的數(shù)據(jù)中心。數(shù)據(jù)中心1112通過(guò)使用預(yù)排序遍歷來(lái)遍歷抽象語(yǔ)法樹(shù)1102并調(diào)用每個(gè)節(jié)點(diǎn)處的特定功能來(lái)處理抽象語(yǔ)法樹(shù)1102。例如,節(jié)點(diǎn)1114具有提供緯度和經(jīng)度的功能。節(jié)點(diǎn)1114可以是提供指定地址的緯度和經(jīng)度的Google
map命令。
根據(jù)頁(yè)面的復(fù)雜性,維基命令上下文(WCC)1104表示的抽象語(yǔ)法樹(shù)1102可以包含兩類子節(jié)點(diǎn)第一類是那些先前描述的節(jié)點(diǎn),第二類是其根為另一維基命令上下文的其他抽象語(yǔ)法樹(shù)。在處理生成其他維基源片段(其也需被處理)的統(tǒng)一資源指示器請(qǐng)求時(shí)使用另一維基命令上下文。
本發(fā)明的示例性實(shí)施例還提供了一種用于擴(kuò)展維基環(huán)境的能力的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。維基是允許單個(gè)或多個(gè)用戶有效地集成靜態(tài)內(nèi)容和交互內(nèi)容的協(xié)作網(wǎng)頁(yè)。使用面向?qū)ο蟮目蚣軄?lái)定義如何擴(kuò)展對(duì)象以便輕松地創(chuàng)建協(xié)作環(huán)境。維基環(huán)境需要支持一種基礎(chǔ)機(jī)制以在無(wú)需更改核心運(yùn)行時(shí)組件的情況下擴(kuò)展核心環(huán)境。
所述示例性實(shí)施例包括處理維基命令以管理包括任意數(shù)量的維基命令的部署環(huán)境的客戶端和服務(wù)器側(cè)元件。如進(jìn)一步描述的,將使用維基環(huán)境內(nèi)的一組抽象基類和核心處理引擎來(lái)處理維基命令類的具體實(shí)現(xiàn)。核心處理引擎支持核心運(yùn)行時(shí)組件的處理和生命周期管理,以擴(kuò)展維基環(huán)境的能力。所述核心處理引擎是諸如圖4中的維基引擎402之類的引擎。
現(xiàn)在參考圖12,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的命令的方塊圖。維基命令是用于實(shí)現(xiàn)諸如圖3中的維基環(huán)境302之類的維基的功能和過(guò)程的命令。圖12描述了維基命令元數(shù)據(jù)接口和關(guān)聯(lián)的命令1200。命令1200是諸如圖5中的命令550之類的命令。
命令1200包括各種命令種類,其中可以包括種類1202、生命周期1204、屬性編輯1206以及頁(yè)面處理1208。命令1200中僅示出了一些實(shí)例。例如,命令包括Get/setCategory 1210、getName 1212和getDescription 1214。Get/setCategory 1210描述了維基命令所屬的種類。getName 1212是簡(jiǎn)化的組件名稱。getDescription 1214是旨在幫助用戶理解命令的維基命令的文本描述。
種類1202還可以包括其他命令,例如 getHelp是當(dāng)用戶將鼠標(biāo)放在頁(yè)面或選項(xiàng)板中的命令之上時(shí)出現(xiàn)的幫助文本, getSample返回用于插入命令的樣例維基命令源, getIcon返回要針對(duì)維基命令在選項(xiàng)板中顯示的圖標(biāo), getDragContent返回在最初將維基命令拖離選項(xiàng)板期間使用的維基源片段,以及 getDropContent返回將維基命令放置在初始位置時(shí)插入的維基源片段。
生命周期1204可以包括諸如wasSaved 1216、wasDeleted 1218以及wasCopied 1220之類的命令。在服務(wù)器環(huán)境中保存命令之后調(diào)用wasSaved1216。在這些實(shí)例中,在從服務(wù)器頁(yè)面環(huán)境中刪除命令時(shí)調(diào)用wasDeleted1218。wasDeleted 1218提供了一種使維基命令清除與給定頁(yè)面上的維基命令關(guān)聯(lián)的永久性資源的方法。在將包含給定維基命令的頁(yè)面復(fù)制為其他名稱時(shí)調(diào)用wasCopied 1220。wasCopied 1220提供了一種使維基命令對(duì)新復(fù)制的頁(yè)面應(yīng)用任何所需的永久性更改的方法。
生命周期1204還包括其他命令,例如 getVersion返回維基命令的版本, getParameters返回與維基命令關(guān)聯(lián)的參數(shù)的列表, aboutToSave在要將命令保存到服務(wù)器環(huán)境時(shí)被調(diào)用,使得命令有機(jī)會(huì)執(zhí)行使命令持續(xù)所需的任何活動(dòng), configure在需要配置命令時(shí)被調(diào)用, get/setPluginData在配置命令期間保存/獲取與維基命令關(guān)聯(lián)的數(shù)據(jù), wasUndelete在將先前從給定頁(yè)面刪除的命令放置回所述頁(yè)面時(shí)被調(diào)用, wasRenamed在包含維基命令的頁(yè)面已重命名時(shí)被調(diào)用, aboutToExport恰好在將維基命令導(dǎo)出為已保存的維基格式之前被調(diào)用,以及 wasImported恰好在從維基保存格式導(dǎo)入維基命令之后被調(diào)用。
屬性編輯1206可以包括諸如generatePropertyEditor 1222和allowEditor 1224之類的命令。在所述示例性實(shí)施例中,generatePropertyEditor 1222由核心引擎調(diào)用以允許命令生成客戶端側(cè)編輯視圖。如果未實(shí)現(xiàn)generatePropertyEditor 1222,將生成默認(rèn)的屬性編輯器來(lái)編輯維基命令的參數(shù)。屬性編輯器是允許用戶輸入?yún)?shù)、值、文本、變量和維基命令的其他數(shù)據(jù)的界面。allowEdit 1224判定是否允許編輯維基命令。
頁(yè)面處理1208可以包括諸如render 1226、drawEyeCatcher 1228、refreshOnUpdate 1230以及getTargetDIV 1232之類的命令。當(dāng)維基命令需要在超文本標(biāo)記語(yǔ)言的輸出流中顯示自身時(shí)調(diào)用render 1226。在頁(yè)面上提取命令以提供可通過(guò)單擊操縱客戶端上的維基命令的內(nèi)容(通常調(diào)用選定命令的屬性編輯器)時(shí)調(diào)用drawEyeCatcher 1228。所述醒目圖示用于跟蹤單個(gè)編輯功能。在判定當(dāng)使用屬性編輯器更新命令變?cè)笫欠駪?yīng)刷新整個(gè)頁(yè)面時(shí)調(diào)用refreshOnUpdate 1230。getTargetDIV 1232返回要更新的超文本標(biāo)記語(yǔ)言DIV的名稱。DIV表示超文本標(biāo)記語(yǔ)言文件中的一個(gè)分部/部分。在客戶端瀏覽器上的DIV內(nèi)顯示每個(gè)命令。DIV具有關(guān)聯(lián)的標(biāo)識(shí),維基引擎將自動(dòng)生成所述標(biāo)識(shí)或由命令通過(guò)實(shí)現(xiàn)getTargeDIV協(xié)議來(lái)提供所述標(biāo)識(shí)。
頁(yè)面處理1208還包括其他命令,例如 getDestinationDiv返回當(dāng)在頁(yè)面上重新呈現(xiàn)命令時(shí)要更新的超文本標(biāo)記語(yǔ)言/DIV的名稱標(biāo)識(shí)。呈現(xiàn)命令是以指定的方式重新產(chǎn)生或顯示編碼數(shù)據(jù)。例如,通過(guò)生成在維基頁(yè)面中呈現(xiàn)的超文本標(biāo)記語(yǔ)言以便顯示所述醒目圖示來(lái)呈現(xiàn)所述醒目圖示。
getArguments返回傳遞給命令以進(jìn)行處理的實(shí)際變?cè)牧斜怼W冊(cè)琯etParameters調(diào)用所返回的參數(shù)的“實(shí)際”值,該調(diào)用將返回命令的正式變?cè)斜怼?br>
refreshOnInsert在判定將命令置于維基頁(yè)面上之后是否應(yīng)刷新整個(gè)頁(yè)面時(shí)被調(diào)用。
areArgumentSet返回一個(gè)值,該值指定是否已滿足維基命令的所有輸入變?cè)员阍撁羁梢浴|發(fā)’其調(diào)用方法來(lái)執(zhí)行模型操作。
Init被調(diào)用以初始化內(nèi)部維基命令。
上述方法和命令用于提供圖31-43中的過(guò)程。
現(xiàn)在參考圖13,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的屬性編輯組件的圖。屬性編輯系統(tǒng)1300包括醒目圖示1302、屬性編輯器1304以及選擇器編輯器1306。
醒目圖示1302是選定命令的圖形表示。例如,醒目圖示1302可以表示用于顯示指定地址的地圖的GoogleTM Map。醒目圖示1302可以采用圖標(biāo)的形式進(jìn)行單擊以調(diào)用屬性編輯器1304,從而允許用戶編輯選定的命令。
屬性編輯器1304用于建立命令的特性。例如,所述特性可以指定信息類型、屬性、參數(shù)、特性的綁定信息以及默認(rèn)值和允許值。例如,屬性編輯器1304可以允許用戶指定GoogleTM Map的地址來(lái)生成所請(qǐng)求的地圖。選擇器編輯器1306是允許用戶建立特定特性元數(shù)據(jù)的專用屬性編輯器。例如,用戶能夠使用選擇器編輯器1306指定編輯地址。在屬性編輯器1304中建立特性時(shí),特定的特性可以自動(dòng)打開(kāi)選擇器編輯器1306以在屬性編輯器1304中輸入更詳細(xì)的特性或字段信息。
本發(fā)明的示例性實(shí)施例還提供了一種用于在服務(wù)器側(cè)數(shù)據(jù)中心處處理從遠(yuǎn)程數(shù)據(jù)處理系統(tǒng)上的客戶端側(cè)數(shù)據(jù)中心接收的維基頁(yè)面請(qǐng)求的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。服務(wù)器側(cè)數(shù)據(jù)中心是服務(wù)器上的在服務(wù)器接收到頁(yè)面請(qǐng)求時(shí)被實(shí)例化的數(shù)據(jù)中心對(duì)象實(shí)例。服務(wù)器側(cè)數(shù)據(jù)中心與特定頁(yè)面實(shí)例關(guān)聯(lián)。因此,每當(dāng)服務(wù)器從與頁(yè)面關(guān)聯(lián)的客戶端接收諸如修改或更新頁(yè)面之類的請(qǐng)求時(shí),將檢索和加載與特定頁(yè)面關(guān)聯(lián)的服務(wù)器側(cè)數(shù)據(jù)中心實(shí)例來(lái)處理所述請(qǐng)求。
服務(wù)器側(cè)數(shù)據(jù)中心包括屬性和一組方法。該組方法是數(shù)據(jù)中心上的一種或多種方法,用于將事件從服務(wù)器上的生成者命令發(fā)送給與協(xié)作應(yīng)用實(shí)例關(guān)聯(lián)的一組使用者命令。在這些實(shí)例中,所述一組使用者命令可以位于服務(wù)器側(cè)、客戶端側(cè),或者同時(shí)位于服務(wù)器側(cè)和客戶端側(cè)。
使用者命令是需要接收或希望接收事件和/或數(shù)據(jù)以便處理和/或執(zhí)行命令功能的命令。使用者命令向數(shù)據(jù)中心進(jìn)行注冊(cè)來(lái)接收與給定主題關(guān)聯(lián)的事件對(duì)象。
例如,搜索組件需要或希望接收搜索輸入條件以執(zhí)行搜索組件的搜索功能。因此,搜索組件是搜索輸入條件的使用者。因此,搜索命令是與搜索條件和可用主題相關(guān)的事件的使用者。
使用者命令還可以稱為偵聽(tīng)者命令,因?yàn)槭褂谜呙顐陕?tīng)或等待與一個(gè)或多個(gè)特定主題相關(guān)的事件。在上面的實(shí)例中,搜索組件偵聽(tīng)與可用搜索條件相關(guān)的主題。
在這些實(shí)例中,一組使用者包括單個(gè)使用者以及兩個(gè)或更多個(gè)使用者。
當(dāng)在客戶端處接收到請(qǐng)求的頁(yè)面時(shí),將在客戶端處創(chuàng)建客戶端側(cè)數(shù)據(jù)中心。該客戶端側(cè)數(shù)據(jù)中心與諸如維基應(yīng)用之類的協(xié)作應(yīng)用的實(shí)例關(guān)聯(lián)。
服務(wù)器側(cè)數(shù)據(jù)中心和相應(yīng)的客戶端側(cè)數(shù)據(jù)中心的使用使得與所請(qǐng)求的頁(yè)面關(guān)聯(lián)的維基命令能夠通過(guò)服務(wù)器側(cè)數(shù)據(jù)中心和/或客戶端側(cè)數(shù)據(jù)中心路由在命令間傳輸?shù)氖录谔幚眄?yè)面請(qǐng)求期間更容易地交互。
根據(jù)本發(fā)明的示例性實(shí)施例,可以利用服務(wù)器側(cè)數(shù)據(jù)中心和/或客戶端側(cè)數(shù)據(jù)中心在使用事件處理機(jī)制的任何應(yīng)用中的命令之間路由事件。事件處理機(jī)制是一種允許諸如維基命令之類的應(yīng)用中的模塊與應(yīng)用中的其他模塊通信的機(jī)制。例如,Web瀏覽器使用事件處理機(jī)制。此外,諸如電子郵件組件和新聞閱讀器之類的Web應(yīng)用也使用事件處理機(jī)制。
現(xiàn)在參考圖14,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的在維基應(yīng)用的客戶端和服務(wù)器上的命令之間的數(shù)據(jù)流的圖。服務(wù)器1400是諸如圖1中的服務(wù)器104和106之類的服務(wù)器。服務(wù)器1400是諸如圖3中的維基環(huán)境302、圖4中的維基環(huán)境400以及圖6中的維基環(huán)境601之類的維基環(huán)境的一部分。
數(shù)據(jù)中心1402是諸如圖5中的數(shù)據(jù)中心558和圖6中的數(shù)據(jù)中心638之類的服務(wù)器側(cè)數(shù)據(jù)中心。當(dāng)接收到來(lái)自客戶端1408的頁(yè)面請(qǐng)求時(shí),將在服務(wù)器1400上創(chuàng)建數(shù)據(jù)中心1402。因此,在接收到來(lái)自客戶端側(cè)數(shù)據(jù)中心的請(qǐng)求時(shí),將實(shí)例化服務(wù)器側(cè)數(shù)據(jù)中心1402。服務(wù)器側(cè)數(shù)據(jù)中心1402是在維基環(huán)境中的命令之間傳播或路由事件的具有特性和方法的數(shù)據(jù)中心對(duì)象的實(shí)例。服務(wù)器側(cè)數(shù)據(jù)中心1402上的一組方法用于處理與從客戶端1408上的用戶接收的頁(yè)面請(qǐng)求關(guān)聯(lián)的事件和命令。
維基命令1404是諸如圖4中的命令422、圖5中的命令550以及圖6中的命令640-650之類的維基系統(tǒng)中存在的維基命令對(duì)象。維基命令1404允許用戶將數(shù)據(jù)包括在頁(yè)面中和/或處理頁(yè)面數(shù)據(jù),或執(zhí)行與所請(qǐng)求的維基頁(yè)面關(guān)聯(lián)的任何其他功能。在該實(shí)例中,維基命令1404通過(guò)諸如圖5中的維基頁(yè)面對(duì)象526之類的維基頁(yè)面對(duì)象的頁(yè)面處理循環(huán)來(lái)處理。
數(shù)據(jù)中心1402判定維基命令1404的變?cè)?參數(shù)所需的所有必要數(shù)據(jù)和/或輸入值是否存在。如果所有必要數(shù)據(jù)和/或輸入值存在,數(shù)據(jù)中心1402針對(duì)維基命令1404觸發(fā)調(diào)用方法。調(diào)用方法觸發(fā)維基命令1404,以向服務(wù)器側(cè)數(shù)據(jù)中心1402觸發(fā)事件1406。事件1406是定義事件的事件對(duì)象。
在該示例性實(shí)例中,由服務(wù)器1400上的維基命令1404觸發(fā)事件1406。但是,根據(jù)本發(fā)明的示例性實(shí)施例,事件1406還可以包括由服務(wù)器側(cè)數(shù)據(jù)中心1402從客戶端側(cè)數(shù)據(jù)中心1410接收的事件。在此類情況下,事件1406將是諸如事件1407之類的由客戶端上的命令觸發(fā)的事件,其是由客戶端側(cè)維基命令1412觸發(fā)的事件對(duì)象。根據(jù)另一示例性實(shí)例,事件1407可以包括由客戶端側(cè)維基命令1412生成并被發(fā)送到客戶端側(cè)數(shù)據(jù)中心1410以便在客戶端上處理或路由到服務(wù)器側(cè)數(shù)據(jù)中心以便在服務(wù)器1400上處理的事件。
從維基命令1404接收到事件1406時(shí),數(shù)據(jù)中心1402立即將事件1406發(fā)送到事件隊(duì)列進(jìn)行處理。事件隊(duì)列是用于存儲(chǔ)事件對(duì)象,直到事件對(duì)象被處理的緩沖區(qū)或數(shù)據(jù)結(jié)構(gòu)。
在處理事件階段,服務(wù)器側(cè)數(shù)據(jù)中心1402處理事件1406。在處理事件1406期間,服務(wù)器側(cè)數(shù)據(jù)中心1402判定諸如維基命令1404之類的任何命令是否注冊(cè)為事件1406的使用者命令。使用者命令是需要與給定事件主題關(guān)聯(lián)的事件的命令。事件主題是與事件對(duì)象關(guān)聯(lián)的主題或題材。例如,用戶輸入搜索條件之后觸發(fā)的事件對(duì)象的事件主題為“search”或“searchavailable”。
使用者命令向數(shù)據(jù)中心注冊(cè)為給定主題的使用者命令。因此,當(dāng)數(shù)據(jù)中心接收到給定主題的事件對(duì)象時(shí),數(shù)據(jù)中心能夠?qū)⑹录l(fā)送到給定事件主題的一組已注冊(cè)的使用者命令。
已注冊(cè)的使用者命令是注冊(cè)為給定主題的事件的使用者的命令。例如,顯示命令針對(duì)諸如accident之類的主題聚合數(shù)據(jù)集。此報(bào)告要在地圖顯示上顯示的命令將向數(shù)據(jù)中心注冊(cè)為主題“accidents”的使用者命令。當(dāng)數(shù)據(jù)中心接收到針對(duì)accidents的事件時(shí),會(huì)將accidents事件對(duì)象發(fā)送給所有針對(duì)主題“accidents”注冊(cè)的使用者命令,其中包括顯示命令。一旦顯示命令接收到“accidents”主題事件,顯示命令將利用或使用所述數(shù)據(jù)來(lái)生成示出accidents數(shù)據(jù)的地圖顯示或?qū)⑾惹帮@示的地圖更新為示出新的accidents數(shù)據(jù)。
數(shù)據(jù)中心1410將事件1406發(fā)送給維基命令1412進(jìn)行處理。數(shù)據(jù)中心1410判定維基命令1412中是否存在維基命令1412需要觸發(fā)的給定變?cè)?參數(shù)的所有必要數(shù)據(jù)和/或輸入值。如果所有必要數(shù)據(jù)和/或輸入值存在,數(shù)據(jù)中心1410針對(duì)維基命令1412觸發(fā)invoke方法。響應(yīng)于數(shù)據(jù)中心1410針對(duì)維基命令1412調(diào)用invoke方法,維基命令1412將事件1407發(fā)送或觸發(fā)到數(shù)據(jù)中心1410進(jìn)行處理。當(dāng)事件1407完全被處理之后,數(shù)據(jù)中心1410將事件1406發(fā)送到瀏覽器或客戶端進(jìn)行顯示。當(dāng)事件為正確的格式(如超文本標(biāo)記語(yǔ)言代碼)以便在瀏覽器處顯示時(shí),則該事件被完全處理。
因此,示例性實(shí)施例提供了一種用于處理頁(yè)面請(qǐng)求的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。服務(wù)器側(cè)數(shù)據(jù)中心從遠(yuǎn)程數(shù)據(jù)處理系統(tǒng)上的客戶端側(cè)數(shù)據(jù)中心接收頁(yè)面請(qǐng)求??蛻舳藗?cè)數(shù)據(jù)中心與協(xié)作應(yīng)用的實(shí)例關(guān)聯(lián)。服務(wù)器側(cè)數(shù)據(jù)中心在初始頁(yè)面呈現(xiàn)的過(guò)程中使用一組方法處理該請(qǐng)求。所述一組方法用于將事件從服務(wù)器上的生成者命令發(fā)送給與協(xié)作應(yīng)用關(guān)聯(lián)的一組使用者命令。
現(xiàn)在參考圖15,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的在初始頁(yè)面呈現(xiàn)過(guò)程中服務(wù)器上的命令之間的數(shù)據(jù)流的圖。數(shù)據(jù)中心1500是諸如圖5中的數(shù)據(jù)中心558和圖6中的數(shù)據(jù)中心638之類的服務(wù)器側(cè)數(shù)據(jù)中心。在該示例性實(shí)例中,數(shù)據(jù)中心1500以PHP超文本預(yù)處理器(PHP)實(shí)現(xiàn)。維基命令生成者1502是與服務(wù)器關(guān)聯(lián)的命令。生成者是提供可被另一維基組件使用或利用的數(shù)據(jù)的維基命令組件。在該示例性實(shí)例中,維基命令生成者1502注冊(cè)為主題“cars”的事件的生成者。為了將維基命令生成者1502注冊(cè)為主題“cars”的生成者,數(shù)據(jù)中心1500將維基命令生成者1502的標(biāo)識(shí)符添加到對(duì)象變量以使生成者標(biāo)識(shí)符與主題“cars”關(guān)聯(lián)。
維基命令使用者1506是與服務(wù)器關(guān)聯(lián)的命令。維基命令使用者1506向數(shù)據(jù)中心1500注冊(cè)為主題“cars”1508的使用者。為了將維基命令使用者1506注冊(cè)為主題“cars”的使用者,數(shù)據(jù)中心1500將維基命令使用者1506的標(biāo)識(shí)符添加到數(shù)據(jù)中心1500上的使用者對(duì)象變量?jī)?nèi)的使用者命令標(biāo)識(shí)符的數(shù)組中。
維基頁(yè)面1510是具有與正在被加載到維基環(huán)境內(nèi)的給定請(qǐng)求頁(yè)面關(guān)聯(lián)的處理循環(huán)的對(duì)象。在初始化階段,服務(wù)器調(diào)用ini方法來(lái)初始化與給定請(qǐng)求頁(yè)面關(guān)聯(lián)的所有命令,例如維基命令生成者1502。一旦初始化,命令就向數(shù)據(jù)中心注冊(cè)為諸如維基生成者1502之類的生成者命令或諸如維基使用者1506之類的使用者命令。
當(dāng)維基命令生成者1502具有準(zhǔn)備好觸發(fā)的數(shù)據(jù)和/或事件時(shí),維基命令生成者1502將檢索數(shù)據(jù)并觸發(fā)主題為“car/available”的事件。當(dāng)維基命令生成者1502觸發(fā)事件主題“car/available”事件1512時(shí),事件被發(fā)送到數(shù)據(jù)中心1500。數(shù)據(jù)中心1500將主題car/available”事件添加到數(shù)據(jù)中心1500內(nèi)的事件隊(duì)列1514中。在處理來(lái)自事件隊(duì)列的主題“car/available”事件之后,主題“car/available”事件被發(fā)送給所有針對(duì)事件主題“cars”注冊(cè)的使用者。
維基頁(yè)面對(duì)象的維基頁(yè)面處理循環(huán)調(diào)用第一processEvents方法。在該處理事件階段,數(shù)據(jù)中心處理服務(wù)器側(cè)數(shù)據(jù)中心上的事件隊(duì)列中的事件,其中包括由維基命令生成者1502觸發(fā)的“car/available”事件對(duì)象。數(shù)據(jù)中心1500從事件隊(duì)列檢索事件“car/available”。數(shù)據(jù)中心1500針對(duì)注冊(cè)為事件主題“cars”1508的使用者(包括維基命令使用者1506)的每個(gè)命令調(diào)用callback方法。將所述事件作為callback方法的變?cè)?參數(shù)傳遞給維基命令使用者1506。使用者callback方法通過(guò)在callback方法內(nèi)部執(zhí)行代碼來(lái)處理所述事件對(duì)象。
如果在初始化所有組件之后,但在呈現(xiàn)請(qǐng)求頁(yè)面之前,還存在要執(zhí)行的其他處理,則每個(gè)命令有機(jī)會(huì)通過(guò)調(diào)用discover方法來(lái)執(zhí)行代碼。將調(diào)用第二processEvents階段1520來(lái)處理在discover階段觸發(fā)的任何事件。
最后,維基頁(yè)面對(duì)象1510針對(duì)所有命令調(diào)用render階段。在render階段,所有命令都應(yīng)使其全部數(shù)據(jù)可用,以便能夠生成超文本標(biāo)記語(yǔ)言代碼并將所述超文本標(biāo)記語(yǔ)言代碼發(fā)送到客戶端,以便在客戶端瀏覽器處呈現(xiàn)為所請(qǐng)求的頁(yè)面。如果維基使用者1506是由生成者生成的“cars”數(shù)據(jù)的表格顯示,則所述render階段將生成cars的表格,如圖16所示。
現(xiàn)在參考圖16,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的響應(yīng)于用戶的頁(yè)面請(qǐng)求而生成的維基頁(yè)面1600的圖。如上所述,所有與頁(yè)面關(guān)聯(lián)的命令都可以向數(shù)據(jù)中心注冊(cè)為生成者或使用者。當(dāng)生成者生成事件時(shí),使用者將使用所述事件呈現(xiàn)超文本標(biāo)記語(yǔ)言或JavaScript來(lái)呈現(xiàn)整個(gè)頁(yè)面或頁(yè)面片段。超文本標(biāo)記語(yǔ)言或JavaScript被發(fā)送到客戶端瀏覽器進(jìn)行顯示。
因此,所有交互都在維基頁(yè)面處理循環(huán)期間經(jīng)過(guò)數(shù)據(jù)中心。這些交互的結(jié)果是,所有事件都在呈現(xiàn)時(shí)被處理。因此,諸如頁(yè)面1600之類的初始呈現(xiàn)的頁(yè)面完全示出了維基頁(yè)面的正確視圖。換言之,客戶端不必觸發(fā)事件來(lái)修改初始呈現(xiàn)的頁(yè)面以糾正頁(yè)面視圖,因?yàn)榕c從服務(wù)器加載新頁(yè)面關(guān)聯(lián)的所有事件都通過(guò)服務(wù)器側(cè)數(shù)據(jù)中心進(jìn)行了處理。
在服務(wù)器上處理完初始頁(yè)面請(qǐng)求之后,服務(wù)器將生成所請(qǐng)求頁(yè)面的超文本標(biāo)記語(yǔ)言代碼和/或JavaScript。當(dāng)客戶端接收到超文本標(biāo)記語(yǔ)言代碼和/或JavaScript時(shí),將新頁(yè)面加載到客戶端處以便在客戶端瀏覽器中顯示。
在頁(yè)面加載過(guò)程中,頁(yè)面的超文本標(biāo)記語(yǔ)言代碼和/或JavaScript代碼將創(chuàng)建客戶端側(cè)數(shù)據(jù)中心對(duì)象??蛻舳藗?cè)數(shù)據(jù)中心對(duì)象將客戶端上的所有命令向客戶端側(cè)數(shù)據(jù)中心注冊(cè)為生成者命令和使用者命令,就像在服務(wù)器處的初始頁(yè)面處理循環(huán)期間,將服務(wù)器上的命令向服務(wù)器側(cè)數(shù)據(jù)中心進(jìn)行注冊(cè)那樣。
在這些實(shí)例中,如果可以在客戶端上完全包含和處理在加載初始頁(yè)面之后在客戶端處發(fā)生的命令交互,則不會(huì)將命令交互發(fā)送到服務(wù)器。換言之,維基命令在客戶端上進(jìn)行交互以修改所顯示的頁(yè)面,從而反映通過(guò)用戶操作或客戶端上的其他事件觸發(fā)的其他輸入或事件。如果可以在客戶端上完全處理組件交互,則不會(huì)將客戶端生成的事件發(fā)送到服務(wù)器。該事件可能能夠在客戶端處被完全處理。如果是此情況,則服務(wù)器不必以任何方式參與事件的處理。在所示實(shí)施例中,術(shù)語(yǔ)“修改”包括更新頁(yè)面或以其他方式更改頁(yè)面以反映新的數(shù)據(jù)和/或新的頁(yè)面內(nèi)容。
因此,本發(fā)明的示例性實(shí)施例提供了一種用于客戶端側(cè)數(shù)據(jù)中心處理事件的計(jì)算機(jī)實(shí)現(xiàn)的方法,裝置和計(jì)算機(jī)可用程序代碼??蛻舳藗?cè)數(shù)據(jù)中心接收給定主題的事件。由與客戶端關(guān)聯(lián)的生成者命令生成所述事件??蛻舳藗?cè)數(shù)據(jù)中心處理所述事件來(lái)標(biāo)識(shí)給定主題的一組使用者命令??蛻舳藗?cè)數(shù)據(jù)中心將所述事件發(fā)送給給定主題的一組使用者??蛻舳藗?cè)數(shù)據(jù)中心從所述一組使用者中的一個(gè)或多個(gè)使用者接收新的頁(yè)面內(nèi)容,其中使用所述新的頁(yè)面內(nèi)容更新所顯示的頁(yè)面以形成更新后的頁(yè)面。
現(xiàn)在參考圖17,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的在客戶端瀏覽器處顯示的所呈現(xiàn)頁(yè)面的圖。在呈現(xiàn)的頁(yè)面1700上,來(lái)自組件1702的搜索輸入向客戶端側(cè)數(shù)據(jù)中心注冊(cè)為事件主題“search/available”的生成者?;厮褪褂谜呓M件1704向客戶端側(cè)數(shù)據(jù)中心注冊(cè)為主題事件“search/available”的使用者。使用者組件1704用于在搜索組件1702觸發(fā)“search/available”事件時(shí)回送用戶鍵入搜索組件中的內(nèi)容。
圖18是示出根據(jù)本發(fā)明的示例性實(shí)施例的在客戶端瀏覽器處加載并顯示新頁(yè)面后在客戶端側(cè)數(shù)據(jù)中心上的組件間的數(shù)據(jù)流的圖。數(shù)據(jù)中心1800是諸如圖6中的數(shù)據(jù)中心634和圖14中的數(shù)據(jù)中心1410之類的客戶端側(cè)數(shù)據(jù)中心。在加載頁(yè)面期間在客戶端上創(chuàng)建數(shù)據(jù)中心1800。在該示例性實(shí)例中,客戶端側(cè)數(shù)據(jù)中心1800以JavaScript和超文本標(biāo)記語(yǔ)言實(shí)現(xiàn)。
維基命令生成者1802是客戶端上提供可以由另一維基命令使用的數(shù)據(jù)或希望通知另一組件特定事件已發(fā)生的命令。維基命令生成者1802向數(shù)據(jù)中心1800注冊(cè)1804為主題“search/available”的生成者。在該實(shí)例中,維基命令生成者1802是圖17中的搜索組件1702。
維基命令使用者1806是客戶端上使用事件對(duì)象、使用數(shù)據(jù)或希望獲得事件通知的命令。維基命令使用者1806向客戶端側(cè)數(shù)據(jù)中心1800注冊(cè)為事件主題“search/available”1808的使用者。在該實(shí)例中,維基命令使用者1806是圖17中的回送使用者組件1704。維基命令使用者1806是服務(wù)器上相應(yīng)的維基命令對(duì)象的客戶端版本??蛻舳松系木S基命令使用者1806包括服務(wù)器上的維基命令對(duì)象的所有數(shù)據(jù),但是它不包含在服務(wù)器上相應(yīng)的維基命令中找到的所有方法。
當(dāng)用戶在輸入搜索條件(如圖17中示出的“Wiki”搜索條件)之后按下“go”按鈕時(shí),維基命令生成者1802將觸發(fā)“search/available”事件。維基命令生成者1802創(chuàng)建事件對(duì)象,將數(shù)據(jù)附加到事件對(duì)象,然后通過(guò)調(diào)用數(shù)據(jù)中心1800上的fireEvent方法1810來(lái)觸發(fā)事件對(duì)象,以便將所述事件發(fā)送到數(shù)據(jù)中心1800。不同于在數(shù)據(jù)中心進(jìn)行事件排隊(duì)以及在processEvents階段處理事件的服務(wù)器側(cè)數(shù)據(jù)中心,客戶端側(cè)數(shù)據(jù)中心1800不會(huì)將事件發(fā)送到事件隊(duì)列。相反,客戶端側(cè)數(shù)據(jù)中心1800立即處理事件并將所述事件發(fā)送給針對(duì)所述事件注冊(cè)的一組使用者。
在該示例性實(shí)例中,數(shù)據(jù)中心1800調(diào)用回送組件回調(diào)1812。維基命令使用者1806通過(guò)使用JavaScript將文本“Search termWiki”插入所顯示的頁(yè)面來(lái)修改諸如圖17中的頁(yè)面1700之類的所呈現(xiàn)的頁(yè)面。維基命令使用者1806用于動(dòng)態(tài)更新所呈現(xiàn)頁(yè)面的內(nèi)容的示例性JavaScript圖示包括如下項(xiàng) var divld=document_getElementByld(′echoDivld′); divld.innerHTML="Search term; "+event.getValuc(); 但是,根據(jù)本發(fā)明的示例性實(shí)施例,可以由維基命令使用者1806使用任何用于修改頁(yè)面的已知或可用的方法(包括但不限于文檔對(duì)象模型(DOM)操縱)來(lái)修改所呈現(xiàn)的頁(yè)面。
但是,如果交互需要服務(wù)器參與事件的處理,則將事件發(fā)送到服務(wù)器。在客戶端上觸發(fā)的事件可能需要該事件被發(fā)送到服務(wù)器側(cè)數(shù)據(jù)中心,因?yàn)閿?shù)據(jù)可能位于服務(wù)器上,也可能由服務(wù)器檢索所述數(shù)據(jù)。
換言之,在客戶端處顯示頁(yè)面之后,將從用戶接收新的事件或新的數(shù)據(jù)。該事件可能需要在服務(wù)器處進(jìn)行整體處理或部分處理。如果是此情況,則客戶端將在更新所顯示的頁(yè)面之前將該事件發(fā)送到服務(wù)器。
客戶端和服務(wù)器上的數(shù)據(jù)中心使得維基組件和命令能夠在客戶端上交互,在服務(wù)器上交互,以及使用基于主題的事件處理機(jī)制有效地連接各組件。當(dāng)用戶交互的結(jié)果需要訪問(wèn)服務(wù)器來(lái)執(zhí)行某些不可能在客戶端上執(zhí)行的操作或處理時(shí),客戶端側(cè)數(shù)據(jù)中心將事件發(fā)送到服務(wù)器側(cè)數(shù)據(jù)中心。
例如,如果服務(wù)器擁有或可以訪問(wèn)諸如數(shù)據(jù)庫(kù)表之類的給定用戶交互所需的數(shù)據(jù)(客戶端不擁有或不能訪問(wèn)該數(shù)據(jù)),則將事件發(fā)送到服務(wù)器。此外,如果需要服務(wù)器來(lái)檢索諸如數(shù)據(jù)種子(data feed)之類的用戶交互所需的數(shù)據(jù),則將事件發(fā)送到服務(wù)器。在這些情況下,事件被發(fā)送到服務(wù)器進(jìn)行處理/處置。服務(wù)器上的事件處理/處置完成之后,服務(wù)器立即將更新后的頁(yè)面內(nèi)容發(fā)送到客戶端以便在客戶端處修改顯示的頁(yè)面。
例如,搜索組件是接受用戶輸入的組件。根據(jù)用戶輸入的文本,將搜索文本發(fā)送到服務(wù)器。服務(wù)器將執(zhí)行搜索。服務(wù)器使用表格組件呈現(xiàn)搜索結(jié)果。將由服務(wù)器上的表格組件生成的呈現(xiàn)表格返回客戶端進(jìn)行顯示。
本發(fā)明的示例性實(shí)施例還提供了一種用于事件的數(shù)據(jù)中心處理的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼??蛻舳藗?cè)數(shù)據(jù)中心接收與當(dāng)前顯示的頁(yè)面關(guān)聯(lián)的給定主題的事件。客戶端側(cè)數(shù)據(jù)中心將事件數(shù)據(jù)發(fā)送到服務(wù)器側(cè)數(shù)據(jù)中心以便在服務(wù)器上進(jìn)行事件處理。
服務(wù)器側(cè)數(shù)據(jù)中心將給定主題的事件添加到服務(wù)器側(cè)數(shù)據(jù)中心上的事件隊(duì)列以響應(yīng)接收到與頁(yè)面關(guān)聯(lián)的事件。服務(wù)器側(cè)數(shù)據(jù)中心處理事件隊(duì)列中的事件。然后標(biāo)識(shí)與所述事件關(guān)聯(lián)的給定主題的一組使用者命令。使用者命令是接收給定主題事件的命令。服務(wù)器側(cè)數(shù)據(jù)中心將所述事件發(fā)送給給定主題的一組使用者命令。所述一組使用者命令中的一個(gè)或多個(gè)使用者處理所述事件以為頁(yè)面呈現(xiàn)頁(yè)面內(nèi)容。服務(wù)器側(cè)數(shù)據(jù)中心然后將事件處理的結(jié)果發(fā)送回客戶端側(cè)數(shù)據(jù)中心。
客戶端側(cè)數(shù)據(jù)中心從服務(wù)器側(cè)數(shù)據(jù)中心接收事件處理結(jié)果。事件處理結(jié)果包括新的頁(yè)面內(nèi)容。然后在客戶端瀏覽器處使用新的頁(yè)面內(nèi)容更新當(dāng)前顯示的頁(yè)面以形成更新后的頁(yè)面。
現(xiàn)在參考圖19A和圖19B,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的在頁(yè)面更新期間在客戶端側(cè)數(shù)據(jù)中心和服務(wù)器側(cè)數(shù)據(jù)中心之間的數(shù)據(jù)流的圖。當(dāng)初次加載維基頁(yè)面時(shí),將處理服務(wù)器側(cè)命令以生成發(fā)送到客戶端以便向用戶顯示的初始頁(yè)面呈現(xiàn),如圖8-9所示。在該示例性實(shí)例中,當(dāng)初次加載頁(yè)面時(shí)將創(chuàng)建服務(wù)器側(cè)數(shù)據(jù)中心1900。維基命令生成者1902是搜索組件。
在初始化階段,維基命令生成者1902初始化并向數(shù)據(jù)中心1900注冊(cè)1904為事件主題“search/available”和“search/clicked”的生成者。維基命令生成者1902搜索組件還注冊(cè)為由客戶端生成的“search/clicked”事件主題的使用者。以這種方式,維基組件的客戶端表示可以與服務(wù)器側(cè)組件通信或調(diào)用服務(wù)器側(cè)組件上的方法。
維基命令使用者1906是列表組件。維基命令使用者1906初始化并向數(shù)據(jù)中心1900注冊(cè)為“search/available”事件主題的使用者。在第一processEvents階段,將調(diào)用服務(wù)器側(cè)數(shù)據(jù)中心上的processEvents方法。數(shù)據(jù)中心1900調(diào)用維基命令生成者1902上的invoke方法。作為響應(yīng),維基命令生成者1902執(zhí)行搜索并生成將包括在“search/available”事件對(duì)象內(nèi)的數(shù)據(jù)。維基命令生成者1902觸發(fā)事件對(duì)象“search/available”來(lái)指示搜索數(shù)據(jù)已準(zhǔn)備就緒。
數(shù)據(jù)中心1900調(diào)用維基命令使用者1906列表組件上的callback方法,以便將“search/available”事件對(duì)象發(fā)送給維基命令使用者1906。然后執(zhí)行發(fā)現(xiàn)操作和第二processEvents階段。最后,在呈現(xiàn)階段,數(shù)據(jù)中心1900針對(duì)與所請(qǐng)求的頁(yè)面關(guān)聯(lián)的所有命令調(diào)用render。維基命令生成者1902呈現(xiàn)超文本標(biāo)記語(yǔ)言和JavaScript以顯示搜索表單。現(xiàn)在是生成者組件的維基命令使用者1906列表組件呈現(xiàn)超文本標(biāo)記語(yǔ)言和JavaScript以顯示表格。將所呈現(xiàn)組件的結(jié)果與其余的超文本標(biāo)記語(yǔ)言頁(yè)面相組合并將其發(fā)送到客戶端進(jìn)行顯示。在瀏覽器加載頁(yè)面時(shí),JavaScript代碼創(chuàng)建客戶端側(cè)數(shù)據(jù)中心1910并向客戶端側(cè)數(shù)據(jù)中心1910注冊(cè)所有生成者1912和所有使用者1914。這是初始的頁(yè)面呈現(xiàn)。
一旦初始顯示了頁(yè)面,用戶交互就會(huì)導(dǎo)致更改一個(gè)或多個(gè)組件的呈現(xiàn)。例如,當(dāng)用戶輸入搜索條件并按下“go”時(shí),將出現(xiàn)更改數(shù)據(jù)的用戶交互??蛻舳藗?cè)搜索組件維基命令生成者1916觸發(fā)主題為“search/clicked”1918的事件。將搜索短語(yǔ)作為數(shù)據(jù)附加到事件對(duì)象??蛻舳藗?cè)數(shù)據(jù)中心1910接收事件對(duì)象并將其發(fā)送給客戶端上注冊(cè)為事件主題“search”的使用者的任何偵聽(tīng)者。與在服務(wù)器側(cè)數(shù)據(jù)中心內(nèi)不同,客戶端側(cè)數(shù)據(jù)中心不會(huì)將事件排隊(duì)到事件隊(duì)列。
客戶端側(cè)數(shù)據(jù)中心1910判定是否應(yīng)將事件發(fā)送給服務(wù)器上與服務(wù)器側(cè)數(shù)據(jù)中心關(guān)聯(lián)的使用者命令。如果應(yīng)將事件發(fā)送給服務(wù)器上的使用者命令,客戶端側(cè)數(shù)據(jù)中心通過(guò)AJAX、JSON或任何其他已知的或可用的遠(yuǎn)程方法調(diào)用法來(lái)調(diào)用processClientEvent方法1920,從而將事件發(fā)送到服務(wù)器。
服務(wù)器側(cè)數(shù)據(jù)中心1900將接收的事件添加到事件隊(duì)列1922。服務(wù)器側(cè)數(shù)據(jù)中心1900處理事件隊(duì)列中的事件,其中一個(gè)事件是從客戶端接收的“search/clicked”事件。服務(wù)器側(cè)數(shù)據(jù)中心1900將“search/clicked”事件發(fā)送給注冊(cè)為事件主題“search/clicked”1924的使用者的維基命令生成者1902搜索組件。維基命令生成者1902搜索組件執(zhí)行搜索并產(chǎn)生/生成搜索數(shù)據(jù)。維基命令生成者1902創(chuàng)建主題為“search/available”的事件對(duì)象并將所生成的搜索數(shù)據(jù)附加到事件對(duì)象。
服務(wù)器側(cè)數(shù)據(jù)中心1900將“search/available”事件對(duì)象添加到事件隊(duì)列中。由于服務(wù)器側(cè)數(shù)據(jù)中心1900仍然在processEvents階段處理事件,因此“search/available”事件對(duì)象被立即從事件隊(duì)列移除并由服務(wù)器側(cè)數(shù)據(jù)中心1900處理。服務(wù)器側(cè)數(shù)據(jù)中心1900然后將“search/available”事件對(duì)象發(fā)送給維基命令使用者1906,因?yàn)榫S基命令使用者1906注冊(cè)為“search/available”主題1926的使用者。
維基命令使用者1906將新數(shù)據(jù)保存在“search/available”事件對(duì)象之外。服務(wù)器側(cè)數(shù)據(jù)中心1900針對(duì)參與處理從客戶端側(cè)數(shù)據(jù)中心1910接收的原始事件“search/clicked”的所有組件調(diào)用render方法1928。維基命令使用者1906列表組件呈現(xiàn)方法使用超文本標(biāo)記語(yǔ)言和JavaScript構(gòu)建新的列表。維基命令使用者1906將新的列表內(nèi)容返回到服務(wù)器側(cè)數(shù)據(jù)中心1900。服務(wù)器側(cè)數(shù)據(jù)中心1900從涉及的所有組件/命令(包括維基命令使用者1906)收集新的呈現(xiàn),并捆綁新的呈現(xiàn)以返回到客戶端側(cè)數(shù)據(jù)中心1910。客戶端側(cè)數(shù)據(jù)中心接收processClientEvent方法1930的結(jié)果并使用新的頁(yè)面內(nèi)容1932更新在客戶端上呈現(xiàn)的命令。
接下來(lái),圖20是示出根據(jù)本發(fā)明的示例性實(shí)施例的在頁(yè)面更新期間在服務(wù)器側(cè)數(shù)據(jù)中心與客戶端側(cè)數(shù)據(jù)中心之間的消息流的圖。在消息1,當(dāng)客戶端側(cè)生成者組件觸發(fā)具有與事件名稱鏈接的主題“clicked”的事件時(shí)所述消息流開(kāi)始。在消息2.1,客戶端側(cè)數(shù)據(jù)中心接收事件并將其發(fā)送給客戶端上的任何偵聽(tīng)者。
客戶端側(cè)數(shù)據(jù)中心判定是否應(yīng)將事件發(fā)送給服務(wù)器上的偵聽(tīng)者(消息2.2)。在這些示例性實(shí)例中,偵聽(tīng)者是注冊(cè)為給定事件主題的使用者的命令或組件。如果應(yīng)將事件發(fā)送給服務(wù)器上的偵聽(tīng)者,則客戶端側(cè)數(shù)據(jù)中心通過(guò)調(diào)用processClientEvent或另一遠(yuǎn)程方法調(diào)用法將所述事件發(fā)送到服務(wù)器(消息2.3)。服務(wù)器側(cè)數(shù)據(jù)中心將接收的事件添加到事件隊(duì)列(消息3)。
在消息4.1,服務(wù)器側(cè)數(shù)據(jù)中心處理隊(duì)列中的事件,其中一個(gè)事件是來(lái)自客戶端的事件。服務(wù)器側(cè)數(shù)據(jù)中心將“clicked”事件發(fā)送給相應(yīng)的注冊(cè)為偵聽(tīng)者的使用者(消息4.2)。
所述組件執(zhí)行事件所需的操作(消息5.1)。服務(wù)器側(cè)數(shù)據(jù)中心對(duì)待所有事件的方式都相同,與是從客戶端接收還是從服務(wù)器接收事件無(wú)關(guān)。所述組件創(chuàng)建指示其結(jié)果可用的新“available”事件(消息5.2)。服務(wù)器側(cè)數(shù)據(jù)中心將“available”事件添加到隊(duì)列(消息6)。
服務(wù)器側(cè)數(shù)據(jù)中心處理“available”事件并將所述事件發(fā)送給服務(wù)器上的一組使用者(消息7)。使用者組件使用來(lái)自“available”事件對(duì)象的數(shù)據(jù)。服務(wù)器側(cè)數(shù)據(jù)中心針對(duì)所有組件調(diào)用render方法(消息8.1)。所有組件都以超文本標(biāo)記語(yǔ)言和JavaScript將新呈現(xiàn)返回到服務(wù)器側(cè)數(shù)據(jù)中心(消息8.2)。服務(wù)器側(cè)數(shù)據(jù)中心將收集的呈現(xiàn)從所有參與組件返回到客戶端側(cè)數(shù)據(jù)中心(消息9)??蛻舳藗?cè)數(shù)據(jù)中心接收服務(wù)器處理事件的結(jié)果??蛻舳藢⑺鼋Y(jié)果發(fā)送給客戶端上的偵聽(tīng)者(消息10),以便在客戶端瀏覽器上呈現(xiàn)頁(yè)面更新。
在備選實(shí)施例中,還可以在其中服務(wù)器側(cè)數(shù)據(jù)中心在未從客戶端側(cè)數(shù)據(jù)中心接收事件的情況下根據(jù)本發(fā)明的示例性實(shí)施例執(zhí)行操作的系統(tǒng)中實(shí)現(xiàn)頁(yè)面請(qǐng)求處理并使能命令間的交互。在其他實(shí)例中,可以在其中客戶端為PDA、蜂窩電話、GPS導(dǎo)航器或任何其他不支持JavaScript的客戶端設(shè)備的系統(tǒng)中實(shí)現(xiàn)頁(yè)面請(qǐng)求處理。
圖21是示出根據(jù)本發(fā)明的示例性實(shí)施例的服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象的圖。在所示實(shí)例中,數(shù)據(jù)中心2100是諸如圖5中的數(shù)據(jù)中心558、圖6中的數(shù)據(jù)中心638以及圖7中的數(shù)據(jù)中心702之類的數(shù)據(jù)中心對(duì)象。在該示例性實(shí)例中,數(shù)據(jù)中心2100是以PHP實(shí)現(xiàn)的數(shù)據(jù)中心對(duì)象。
為用戶所請(qǐng)求的維基頁(yè)面的每個(gè)實(shí)例創(chuàng)建諸如數(shù)據(jù)中心2100之類的數(shù)據(jù)中心。頁(yè)面實(shí)例用于引用特定頁(yè)面視圖以及該頁(yè)面的關(guān)聯(lián)數(shù)據(jù)中心實(shí)例。在將客戶端上與給定頁(yè)面關(guān)聯(lián)的請(qǐng)求或事件發(fā)送到服務(wù)器時(shí),服務(wù)器將加載與給定頁(yè)面關(guān)聯(lián)的指定數(shù)據(jù)中心實(shí)例。
換言之,將為客戶端所請(qǐng)求的每個(gè)維基頁(yè)面實(shí)例在服務(wù)器上創(chuàng)建數(shù)據(jù)中心的實(shí)例。在客戶端上加載并顯示頁(yè)面實(shí)例之后,將不再需要在客戶端上的該頁(yè)面的數(shù)據(jù)中心實(shí)例。所述數(shù)據(jù)中心實(shí)例被保存在諸如圖1中的存儲(chǔ)單元108之類的存儲(chǔ)設(shè)備中。當(dāng)用戶輸入新的輸入或請(qǐng)求與該頁(yè)面相關(guān)的操作時(shí),將通過(guò)重新加載與特定頁(yè)面視圖關(guān)聯(lián)的數(shù)據(jù)中心的先前串行化的實(shí)例,來(lái)在服務(wù)器上重新創(chuàng)建該特定頁(yè)面視圖的維基環(huán)境。已保存和重新加載的數(shù)據(jù)中心實(shí)例反映了該特定頁(yè)面在客戶端瀏覽器上的當(dāng)前狀態(tài)。數(shù)據(jù)中心2100包括特性/對(duì)象變量和一組方法。
所述一組方法包括五個(gè)方法種類或分類。所述方法種類如下數(shù)據(jù)中心管理2102、生成者和使用者2104、主題2106、事件處理2108和命令管理2110。在這些示例性實(shí)例中,方法是一種用于執(zhí)行與諸如數(shù)據(jù)中心2100之類的一個(gè)或多個(gè)對(duì)象關(guān)聯(lián)的操作或過(guò)程的程序、函數(shù)或例程。
數(shù)據(jù)中心2100的一組方法包括用于使方法執(zhí)行各種功能(如保存數(shù)據(jù)中心實(shí)例、檢索/重新加載數(shù)據(jù)中心實(shí)例、添加命令、添加生成者、刪除生成者等)的方法接口。例如,數(shù)據(jù)中心管理2102的一組方法接口包括用于使方法從諸如圖1中的存儲(chǔ)單元108之類的數(shù)據(jù)存儲(chǔ)中檢索已存儲(chǔ)的數(shù)據(jù)中心實(shí)例的方法接口“public static function init(頁(yè)面實(shí)例)”。
數(shù)據(jù)中心2100還針對(duì)數(shù)據(jù)中心主題對(duì)象2112和數(shù)據(jù)中心事件對(duì)象2114調(diào)用方法,以實(shí)現(xiàn)維基環(huán)境和客戶端環(huán)境中的命令之間的事件傳輸。數(shù)據(jù)中心主題對(duì)象2112主要是一個(gè)定義使用者命令可以訂閱的主題的數(shù)據(jù)對(duì)象。在這些示例性實(shí)例中,使用者是需要和/或請(qǐng)求來(lái)自用戶、另一命令、另一組件和/或另一對(duì)象的數(shù)據(jù)、事件或輸入以執(zhí)行所述命令/組件的特定功能的命令、組件或?qū)ο?。在這些示例性實(shí)例中,生成者是提供來(lái)自用戶、另一命令、另一組件和/或另一對(duì)象的數(shù)據(jù)、事件或輸出的命令、組件或?qū)ο蟆?br>
數(shù)據(jù)中心事件對(duì)象2114是定義由生成者創(chuàng)建并被發(fā)送給與所述事件對(duì)象關(guān)聯(lián)的給定事件主題的使用者的數(shù)據(jù)中心事件的數(shù)據(jù)對(duì)象。
圖22是示出根據(jù)本發(fā)明的示例性實(shí)施例的客戶端側(cè)數(shù)據(jù)中心對(duì)象的圖。數(shù)據(jù)中心2200是諸如圖6中的數(shù)據(jù)中心634和圖14中的數(shù)據(jù)中心1410之類的數(shù)據(jù)中心對(duì)象。在該示例性實(shí)例中,數(shù)據(jù)中心2200是以JavaScript實(shí)現(xiàn)的客戶端側(cè)數(shù)據(jù)中心對(duì)象。
數(shù)據(jù)中心2200是使得維基組件能夠與服務(wù)器上的其他維基組件和客戶端上的其他維基組件交互的客戶端數(shù)據(jù)中心。數(shù)據(jù)中心2200還使得維基組件能夠?qū)⒃诳蛻舳松仙傻氖录l(fā)送到服務(wù)器以便處理。
數(shù)據(jù)中心2200包括屬性和一組方法。在該示例性實(shí)例中,所述一組方法包括四個(gè)方法種類。所述方法種類如下生成者和使用者2202、主題2204、事件處理2206和命令管理2208。
客戶端側(cè)數(shù)據(jù)中心2200還針對(duì)客戶端側(cè)數(shù)據(jù)中心主題對(duì)象2210和客戶端側(cè)數(shù)據(jù)中心事件對(duì)象2212調(diào)用方法,以實(shí)現(xiàn)維基環(huán)境和客戶端環(huán)境中的命令之間的事件傳輸。數(shù)據(jù)中心主題對(duì)象2210是諸如圖21中的數(shù)據(jù)中心主題對(duì)象2112之類的數(shù)據(jù)中心主題對(duì)象。數(shù)據(jù)中心事件對(duì)象2212是諸如圖21中的數(shù)據(jù)中心事件對(duì)象2114之類的數(shù)據(jù)中心事件對(duì)象。
在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,維基頁(yè)面布局通常是靜態(tài)的。而且,維基頁(yè)面布局的靜態(tài)特性以及必須單獨(dú)修改一組頁(yè)面中的每個(gè)頁(yè)面布局的要求使得編輯一個(gè)維基頁(yè)面或一組維基子頁(yè)面來(lái)使其全部共享相同的特定布局變得非常耗時(shí)。維基頁(yè)面布局是示出用于構(gòu)成所有組件都放置到位的完整維基頁(yè)面的多個(gè)頁(yè)面組件組合的頁(yè)面。返回參考圖6,頁(yè)面600示出了諸如頁(yè)首604、頁(yè)腳606、左邊距608、右邊距610、菜單612以及正文614之類的頁(yè)面組件的實(shí)例。維基頁(yè)面是位于維基應(yīng)用內(nèi)的頁(yè)面。因此,希望可以在維基頁(yè)面中動(dòng)態(tài)地配置和定義維基頁(yè)面布局,以便用戶能夠像創(chuàng)建新的維基頁(yè)面那樣簡(jiǎn)單地創(chuàng)建新的維基頁(yè)面布局。還希望使相關(guān)的維基頁(yè)面集合共享相同的維基布局頁(yè)面。
本發(fā)明的示例性實(shí)施例提供了將維基頁(yè)面內(nèi)容嵌入維基布局頁(yè)面的正文。維基布局頁(yè)面是定義維基頁(yè)面的頁(yè)面布局的維基頁(yè)面。此外,可以將特定布局與維基頁(yè)面關(guān)聯(lián)。用戶可以通過(guò)簡(jiǎn)單地新建維基頁(yè)面并編輯新建維基頁(yè)面的內(nèi)容來(lái)創(chuàng)建新的維基布局頁(yè)面。由維基命令(在該命令為之提供內(nèi)容的頁(yè)面組件之后命名)提供新建維基頁(yè)面的每個(gè)頁(yè)面組件的默認(rèn)內(nèi)容。維基命令是用于實(shí)現(xiàn)維基應(yīng)用的功能和/或過(guò)程的命令。例如,在本發(fā)明的示例性實(shí)施例中,維基命令是命名的頁(yè)首、頁(yè)腳、菜單、左邊距和右邊距。
用戶可以通過(guò)使用HTML頁(yè)面流將來(lái)自這些維基命令的內(nèi)容包括在維基頁(yè)面上用戶所需的任意位置。HTML頁(yè)面流是瀏覽器如何根據(jù)包括頁(yè)面源的HTML標(biāo)記來(lái)放置網(wǎng)頁(yè)的內(nèi)容。例如,網(wǎng)頁(yè)源中的HTML<TABLE>標(biāo)記能夠使瀏覽器呈現(xiàn)分為由上至下垂直布置的行和列的表格顯示。因此,用戶可以采用與編輯任何其他維基頁(yè)面相同的方式來(lái)編輯維基布局頁(yè)面。用戶可以按照用戶的瀏覽需要將其他靜態(tài)HTML內(nèi)容和其他動(dòng)態(tài)維基命令包括在新建的維基頁(yè)面中。因此,本發(fā)明的示例性實(shí)施例允許用戶創(chuàng)建共享通用外觀和布局(如在頁(yè)首顯示的內(nèi)容(例如公司徽標(biāo)或圖像)以及顯示菜單的位置)的頁(yè)面。此外,本發(fā)明的示例性實(shí)施例允許用戶按照與用戶熟悉的操作(即,創(chuàng)建和編輯維基頁(yè)面)一致的簡(jiǎn)單方式創(chuàng)建此通用外觀。
每當(dāng)用戶通過(guò)鍵入統(tǒng)一資源定位器來(lái)請(qǐng)求維基頁(yè)面時(shí),都會(huì)檢查維基頁(yè)表來(lái)判定是否存在與所述頁(yè)面或一組子頁(yè)面關(guān)聯(lián)的布局頁(yè)面名稱。如果布局頁(yè)面與所請(qǐng)求的維基頁(yè)面關(guān)聯(lián),則呈現(xiàn)所述維基頁(yè)面,且添加布局信息并使其圍繞所請(qǐng)求的維基頁(yè)面以形成組合頁(yè)面。
在本發(fā)明的示例性實(shí)施例中,維基布局頁(yè)面中包括一個(gè)特殊的模板變量。在使用新的維基布局頁(yè)面時(shí),由目標(biāo)維基頁(yè)面的內(nèi)容替換該特殊模板變量。在這些實(shí)例中,所述模板變量是一個(gè)字符串變量。當(dāng)命名該特殊模板變量時(shí),用戶希望盡可能避免與新請(qǐng)求的頁(yè)面上的其他文本的沖突。因此,該特殊模板變量的名稱通常為不太可能自然出現(xiàn)的模式。在本發(fā)明的示例性實(shí)施例中,該特殊模板變量名為%_BODY_%。該特殊模板變量位于維基布局頁(yè)面的正文字段內(nèi)。正文字段是諸如圖5中的對(duì)象變量528之類的維基布局頁(yè)面對(duì)象的對(duì)象變量。正文字段包含原始的未呈現(xiàn)的維基頁(yè)面內(nèi)容。
本發(fā)明的示例性實(shí)施例提供了維基頁(yè)面繼承來(lái)自父輩維基頁(yè)面的維基頁(yè)面布局。每個(gè)維基頁(yè)面都具有與該維基頁(yè)面關(guān)聯(lián)并且是該維基頁(yè)面的父輩維基頁(yè)面的維基頁(yè)面列表。父輩維基頁(yè)面是那些在頁(yè)面命名層次結(jié)構(gòu)內(nèi)的較高級(jí)別出現(xiàn)的維基頁(yè)面。例如,如果維基頁(yè)面名為“LevelOne/LevelTwo”并且存在名為“LevelOne”的維基頁(yè)面,則名為“LevelOne”的維基頁(yè)面被認(rèn)為是維基頁(yè)面“LevelOne/LevelTwo”的父輩。一組父輩維基頁(yè)面的列表存儲(chǔ)在維基頁(yè)面對(duì)象中的字段內(nèi)。一組父輩維基頁(yè)面可以包括一個(gè)或多個(gè)父輩維基頁(yè)面。在本發(fā)明的示例性實(shí)施例中,字段稱為路徑字段。將使用按照反向?qū)哟谓Y(jié)構(gòu)順序查找父輩維基頁(yè)面列表中包含維基頁(yè)面布局指定符的第一維基頁(yè)面的查詢。在本發(fā)明的示例性實(shí)施例中,將根據(jù)諸如圖5中的數(shù)據(jù)庫(kù)524之類的數(shù)據(jù)庫(kù)中的Wiki_pages表格檢查父輩頁(yè)面列表。Wiki_pages表格包括一系列表項(xiàng)。每個(gè)表項(xiàng)都包括一個(gè)維基頁(yè)面和任何與該特定維基頁(yè)面關(guān)聯(lián)的維基布局頁(yè)面。將父輩維基頁(yè)面列表中的每個(gè)維基頁(yè)面與Wiki_pages表格中的表項(xiàng)相比較。一旦發(fā)現(xiàn)與父輩維基頁(yè)面列表中的維基頁(yè)面匹配且具有關(guān)聯(lián)維基布局頁(yè)面的表項(xiàng),則選擇指定的布局頁(yè)面以供目標(biāo)維基頁(yè)面繼承。
接下來(lái),圖23是示出根據(jù)本發(fā)明的示例性實(shí)施例的將維基頁(yè)面內(nèi)容嵌入維基布局頁(yè)面正文的過(guò)程的方塊圖。圖23中的該過(guò)程可以由諸如圖4中的維基引擎402之類的維基引擎實(shí)現(xiàn)。當(dāng)前頁(yè)面對(duì)象2302是諸如圖5中的維基頁(yè)面526之類的維基頁(yè)面對(duì)象。正文2310是維基頁(yè)面的正文字段,其是諸如圖5中的對(duì)象變量528之類的維基頁(yè)面對(duì)象的對(duì)象變量。布局頁(yè)面對(duì)象2304包括頁(yè)面組件頁(yè)首2322、菜單2324、右邊距2326、左邊距2328、頁(yè)腳2330以及正文2320。布局頁(yè)面對(duì)象2304中的頁(yè)面組件包含在布局頁(yè)面對(duì)象2304的正文字段內(nèi),其是諸如圖5中的對(duì)象變量528之類的布局頁(yè)面對(duì)象的對(duì)象變量。當(dāng)前頁(yè)面對(duì)象2302的正文字段的內(nèi)容(即,正文2310)置于布局頁(yè)面對(duì)象2304的正文組件(即,正文2320中)。然后,布局頁(yè)面對(duì)象2304的正文字段的內(nèi)容(其包括頁(yè)面組件頁(yè)首2322、菜單2324、右邊距2326、左邊距2328、頁(yè)腳2330以及正文2320)被置于當(dāng)前頁(yè)面對(duì)象2302的正文字段(即,正文2310)中。
然后將當(dāng)前頁(yè)面對(duì)象2302重新呈現(xiàn)為組合后的頁(yè)面2306。組合后的頁(yè)面2306是將當(dāng)前頁(yè)面對(duì)象2302與布局頁(yè)面對(duì)象2304進(jìn)行組合的結(jié)果。組合后的頁(yè)面2306包括來(lái)自布局頁(yè)面對(duì)象2304的布局頁(yè)面組件頁(yè)首2322、菜單2324、右邊距2326、左邊距2328和頁(yè)腳2330以及由正文2310表示的當(dāng)前頁(yè)面對(duì)象2302的正文字段的內(nèi)容。
在傳統(tǒng)維基應(yīng)用中,當(dāng)前沒(méi)有任何方法可以以有條件地顯示或隱藏維基頁(yè)面布局的特定頁(yè)面組件的方式動(dòng)態(tài)地配置維基布局頁(yè)面。維基頁(yè)面布局是示出用于構(gòu)成所有組件都放置到位的完整維基頁(yè)面的頁(yè)面組件組合的頁(yè)面。維基頁(yè)面是維基應(yīng)用內(nèi)的頁(yè)面。
本發(fā)明的示例性實(shí)施例提供了以編程的方式隱藏和顯示維基頁(yè)面布局組件。維基布局頁(yè)面被分為一組頁(yè)面組件。頁(yè)面組件稱為頁(yè)首、菜單、左邊距、右邊距、正文以及頁(yè)腳組件。圖6示出了諸如頁(yè)首604、頁(yè)腳606、左邊距608、右邊距610、菜單612以及正文614之類的頁(yè)面布局組件的實(shí)例。由維基命令生成每個(gè)組件的內(nèi)容。維基命令是用于實(shí)現(xiàn)維基應(yīng)用的功能和/或過(guò)程的命令。在本發(fā)明的示例性實(shí)施例中,維基命令具有與它們?yōu)槠渖蓛?nèi)容的頁(yè)面組件相同的名稱。維基頁(yè)面布局包含簡(jiǎn)單的內(nèi)嵌維基命令標(biāo)記的HTML標(biāo)記。當(dāng)呈現(xiàn)頁(yè)面時(shí),維基命令將查詢控制頁(yè)面組件是否應(yīng)顯示維基命令生成的內(nèi)容的維基頁(yè)面設(shè)置。
在本發(fā)明的示例性實(shí)施例中,維基頁(yè)面設(shè)置實(shí)現(xiàn)為當(dāng)用戶編輯維基頁(yè)面時(shí)可由用戶編輯的復(fù)選框。通過(guò)勾選和取消勾選復(fù)選框,用戶控制各種頁(yè)面組件以及頁(yè)面注釋、附件和電子郵件的可視性。所述設(shè)置保存在Wiki_pages表格(其是諸如圖5中的數(shù)據(jù)庫(kù)524之類的數(shù)據(jù)庫(kù)的一部分)中的“component”列,作為根據(jù)其檢查顯示邏輯的位掩碼。頁(yè)表中的表項(xiàng)包括identity(ID)、account、tag、time、body、owner identity(ownerID)、modified-by、isLatest、layout、isLayout、isEditing、commentOn、sections、path、attributes(attrib)和errors等字段。位掩碼是一個(gè)二進(jìn)制數(shù),其中每個(gè)位表示不同變量的肯定值或否定值(1或0)。通過(guò)使用快速逐位運(yùn)算,可以確定或更改特定變量的值。因此,位掩碼是一種簡(jiǎn)潔有效的存儲(chǔ)此類變量的方法。
現(xiàn)在參考圖24,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的確定頁(yè)面組件內(nèi)容的可視性的復(fù)選框的方塊圖??梢曅栽O(shè)置2402是用戶可以通過(guò)其控制各種頁(yè)面布局組件的可視性的顯示區(qū)域。可以作為維基頁(yè)面內(nèi)容的一部分實(shí)現(xiàn)可視性設(shè)置2402。在本發(fā)明的備選示例性實(shí)施例中,可視性設(shè)置2402實(shí)現(xiàn)為客戶端瀏覽器上的菜單選項(xiàng)。正文2406包括復(fù)選框2408。復(fù)選框2408包括用于頁(yè)首、菜單、左邊距、右邊距以及頁(yè)腳布局頁(yè)面組件的復(fù)選框以及用于注釋、附件和電子郵件的復(fù)選框。通過(guò)勾選或取消勾選復(fù)選框2408,用戶可以控制命名的布局頁(yè)面組件以及頁(yè)面注釋、附件和電子郵件的內(nèi)容的可視性。在本發(fā)明的示例性實(shí)施例中,勾選復(fù)選框可以使命名的布局頁(yè)面組件以及頁(yè)面注釋、附件和電子郵件的內(nèi)容顯示在客戶端瀏覽器中。在此類實(shí)施方式中,可視性設(shè)置2402的頂部將包括文字顯示或可視,或某些其他等價(jià)含義的詞匯。在圖24中,頂部2404包括文字顯示,指示勾選復(fù)選框?qū)?dǎo)致屬于布局頁(yè)面部分的內(nèi)容顯示在客戶端瀏覽器中。
在本發(fā)明的備選示例性實(shí)施例中,勾選可視性設(shè)置2402中的復(fù)選框可導(dǎo)致相應(yīng)布局頁(yè)面組件的內(nèi)容在客戶端瀏覽器中隱藏。在此類實(shí)施方式中,頂部2404將包含指示該實(shí)施方式的詞匯(例如,隱藏)。
在本發(fā)明的示例性實(shí)施例中,勾選和取消勾選復(fù)選框2408的結(jié)果將作為位掩碼存儲(chǔ)在數(shù)據(jù)庫(kù)中。在呈現(xiàn)要顯示的頁(yè)面的過(guò)程中,顯示邏輯將檢查所述位掩碼來(lái)確定哪些內(nèi)容要顯示在客戶端瀏覽器中。
現(xiàn)在參考圖25,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的創(chuàng)建維基頁(yè)面的過(guò)程的流程圖。圖25中的過(guò)程用于創(chuàng)建諸如圖6中的維基頁(yè)面602之類的維基頁(yè)面。圖25中的過(guò)程始于接收用戶輸入以創(chuàng)建新的維基頁(yè)面(過(guò)程方塊2502)。在過(guò)程方塊2502,用戶可以使用客戶端瀏覽器從菜單選擇新的頁(yè)面命令來(lái)提供用戶輸入。
接下來(lái),所述過(guò)程提示用戶輸入新的維基頁(yè)面的名稱(過(guò)程方塊2504)。在一個(gè)實(shí)例中,頁(yè)面名稱可以包含遵循CamelCase規(guī)則的字母和數(shù)字字符。維基頁(yè)面名稱還可以包含指示層次結(jié)構(gòu)中分區(qū)和級(jí)別的“/”字符。例如,新的維基頁(yè)面可以是圖9中的test904。
接下來(lái),所述過(guò)程構(gòu)建和編輯請(qǐng)求統(tǒng)一資源定位器(URL)并將相應(yīng)的超文本傳輸協(xié)議(HTTP)請(qǐng)求發(fā)送到服務(wù)器(過(guò)程方塊2506)。所述編輯請(qǐng)求可以在客戶端瀏覽器上由JavaScript功能構(gòu)建,并且可以指定新的頁(yè)面操作和新的頁(yè)面名稱。
接下來(lái),所述過(guò)程加載適當(dāng)?shù)木庉嬈鞑⑹褂贸谋緜鬏攨f(xié)議響應(yīng)將頁(yè)面提供給客戶端瀏覽器(過(guò)程方塊2508)。過(guò)程方塊2508可以由圖5中的維基控制器500實(shí)現(xiàn)。
接下來(lái),所述過(guò)程接收用戶更改并向服務(wù)器提交超文本傳輸協(xié)議表單提交(過(guò)程方塊2510)。過(guò)程方塊2510可以發(fā)生以響應(yīng)用戶在客戶端瀏覽器中編輯維基頁(yè)面和提交要保存的內(nèi)容。
接下來(lái),所述過(guò)程使用提交的內(nèi)容創(chuàng)建和保存維基頁(yè)面(過(guò)程方塊2512),此后所述過(guò)程結(jié)束。在過(guò)程方塊2512,維基控制器處理頁(yè)面超文本傳輸協(xié)議請(qǐng)求,并且可以使用createPage和save方法來(lái)實(shí)例化維基頁(yè)面對(duì)象,然后保存維基頁(yè)面對(duì)象。諸如圖5中的維基對(duì)象508之類的維基頁(yè)面對(duì)象在諸如圖5中的數(shù)據(jù)庫(kù)524之類的維基頁(yè)面數(shù)據(jù)庫(kù)表格中創(chuàng)建一個(gè)行來(lái)表示新的維基頁(yè)面。
現(xiàn)在參考圖26,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的顯示頁(yè)面的過(guò)程的流程圖。所述過(guò)程始于接收維基頁(yè)面的用戶指定統(tǒng)一資源定位器(URL)并將超文本傳輸協(xié)議請(qǐng)求發(fā)送到服務(wù)器(過(guò)程方塊2602)??梢杂蓤D3中的客戶端環(huán)境300內(nèi)的客戶端瀏覽器接收過(guò)程方塊2602。
接下來(lái),過(guò)程處理所述請(qǐng)求、實(shí)例化維基頁(yè)面上的對(duì)象、處理維基頁(yè)面,并作為超文本傳輸協(xié)議響應(yīng)將維基頁(yè)面的內(nèi)容呈現(xiàn)到客戶端瀏覽器(過(guò)程方塊2604),此后所述過(guò)程結(jié)束。過(guò)程方塊2604可以由圖5中的維基控制器500實(shí)現(xiàn)。維基控制器可以針對(duì)維基對(duì)象調(diào)用showPage方法。showPage方法實(shí)例化維護(hù)維基頁(yè)面數(shù)據(jù)庫(kù)表中特定行的維基頁(yè)面內(nèi)容的維基頁(yè)面對(duì)象。維基控制器然后針對(duì)維基頁(yè)面對(duì)象調(diào)用處理維基頁(yè)面并將頁(yè)面內(nèi)容呈現(xiàn)到客戶端瀏覽器的process方法。
現(xiàn)在參考圖27,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的生成頁(yè)面樹(shù)視圖的過(guò)程的流程圖。圖27中的過(guò)程可用于創(chuàng)建圖9中的頁(yè)面樹(shù)視圖900。圖27中的過(guò)程可以由圖5中的命令550內(nèi)的PageTreeCommand實(shí)現(xiàn)。
所述過(guò)程始于PageTreeCommand讀取維基頁(yè)面數(shù)據(jù)庫(kù)表格中的所有行并提取頁(yè)面名稱列值(過(guò)程方塊2702)。頁(yè)面名稱也可以是標(biāo)記。標(biāo)記是用于對(duì)維基頁(yè)面內(nèi)容進(jìn)行分類的頁(yè)面名稱或標(biāo)簽。所述數(shù)據(jù)庫(kù)可以是諸如圖5中的數(shù)據(jù)庫(kù)524之類的數(shù)據(jù)庫(kù)。
接下來(lái),PageTreeCommand遍歷頁(yè)面名稱值來(lái)構(gòu)建頁(yè)面樹(shù)視圖(過(guò)程方塊2704)。在過(guò)程方塊2704期間,將頁(yè)面的層次結(jié)構(gòu)分組成多個(gè)節(jié)點(diǎn)和葉節(jié)點(diǎn)以形成可視樹(shù)結(jié)構(gòu)。節(jié)點(diǎn)同時(shí)作為容器和內(nèi)容提供者,而葉節(jié)點(diǎn)只是內(nèi)容提供者。例如,如果頁(yè)面名稱以“/”字符結(jié)尾,則頁(yè)面被視為容器和內(nèi)容提供者,并由諸如圖9中的test904之類的表示容器的適當(dāng)圖標(biāo)表示。所有以包括“/”的名稱開(kāi)始的維基頁(yè)面名稱都被視為該頁(yè)面的后代。如果維基頁(yè)面名稱的其余部分包含“/”,則也將該維基頁(yè)面視為容器和內(nèi)容提供者。如果維基頁(yè)面名稱的其余部分不包含“/”,則將該維基頁(yè)面視為葉節(jié)點(diǎn)并使用諸如圖9中的helloworld 912之類的適當(dāng)圖標(biāo)表示該頁(yè)面。可以使用任意數(shù)量的諸如“/”之類的不同頁(yè)面指示符來(lái)指定頁(yè)面是節(jié)點(diǎn)還是葉節(jié)點(diǎn)。
接下來(lái),PageTreeCommand返回頁(yè)面樹(shù)視圖的超文本標(biāo)記語(yǔ)言表示(過(guò)程方塊2706),此后所述過(guò)程結(jié)束。頁(yè)面樹(shù)視圖的超文本標(biāo)記語(yǔ)言表示顯示在客戶端瀏覽器上以便用戶在瀏覽維基頁(yè)面中使用。
現(xiàn)在參考圖28,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的拖動(dòng)活動(dòng)內(nèi)容的過(guò)程的流程圖。本發(fā)明的示例性實(shí)施例允許將動(dòng)態(tài)內(nèi)容拖到維基頁(yè)面上并在將動(dòng)態(tài)內(nèi)容拖到頁(yè)面上時(shí)提供內(nèi)容樣例。使用XMLHttpRequest,可以遠(yuǎn)程地調(diào)用維基組件并在拖動(dòng)視圖中使用XMLHttpResponse返回內(nèi)容。請(qǐng)求是從瀏覽器客戶端發(fā)送到Web服務(wù)器的數(shù)據(jù)。響應(yīng)是作為對(duì)所接收的請(qǐng)求數(shù)據(jù)的反應(yīng)(響應(yīng))而從Web服務(wù)器發(fā)送到瀏覽器客戶端的數(shù)據(jù)。超文本傳輸協(xié)議是一種定義發(fā)送到Web服務(wù)器的請(qǐng)求以及來(lái)自Web服務(wù)器的響應(yīng)的特定格式和內(nèi)容的國(guó)際標(biāo)準(zhǔn)。XMLHttpRequest/Response是支持可擴(kuò)展標(biāo)記語(yǔ)言數(shù)據(jù)內(nèi)容和特定響應(yīng)格式的進(jìn)一步專門(mén)化的超文本傳輸協(xié)議請(qǐng)求/響應(yīng)??梢允褂脠D7中的維基頁(yè)面700實(shí)現(xiàn)圖28中的過(guò)程。
所述過(guò)程始于接收?qǐng)?zhí)行拖放操作的用戶輸入和調(diào)用JavaScript功能,該功能將XMLHttpResponse發(fā)送到服務(wù)器來(lái)請(qǐng)求選定維基組件的樣例輸出(過(guò)程方塊2802)??梢酝ㄟ^(guò)用戶拖動(dòng)圖標(biāo)(例如將醒目圖示708從選項(xiàng)板702拖動(dòng)到維基頁(yè)面700的正文704上(均在圖7中))來(lái)生成過(guò)程方塊2802的用戶輸入。可以由圖3中的客戶端環(huán)境300內(nèi)的客戶端瀏覽器接收過(guò)程方塊2802的過(guò)程。
接下來(lái),所述過(guò)程處理XMLHttpRequest,為選定維基組件創(chuàng)建維基命令子類的實(shí)例,并且調(diào)用檢索拖動(dòng)的內(nèi)容的方法(過(guò)程方塊2804)。在過(guò)程方塊2804期間,圖5中的維基控制器500可以處理XMLHttpRequest并將請(qǐng)求路由到AJAX格式器,所述AJAX格式器在針對(duì)維基命令對(duì)象實(shí)例調(diào)用諸如getDrageContent之類的方法之前創(chuàng)建維基命令子類的實(shí)例。AJAX格式器是諸如圖4中的請(qǐng)求處理機(jī)404的請(qǐng)求處理機(jī)的一部分并且被認(rèn)為是圖5中的維基控制器500的擴(kuò)展。如上所述,圖5中的路由器502解碼入站請(qǐng)求并將請(qǐng)求路由到正確的請(qǐng)求處理機(jī)。所述AJAX格式器是所述請(qǐng)求處理機(jī)之一。
接下來(lái),所述過(guò)程從維基對(duì)象檢索當(dāng)前維基頁(yè)面實(shí)例并在使用XMLHttpResponse將所呈現(xiàn)的輸出返回到客戶端瀏覽器之前調(diào)用render方法(過(guò)程方塊2806)。過(guò)程方塊2806的過(guò)程可以由所述AJAX格式器執(zhí)行并且可以將getDragContent調(diào)用的結(jié)果傳遞給諸如renderFragment之類的方法。
接下來(lái),所述過(guò)程處理XMLHttpResponse并提取和顯示超文本標(biāo)記語(yǔ)言拖動(dòng)內(nèi)容(方塊2808),此后所述過(guò)程結(jié)束。過(guò)程方塊2808的過(guò)程由客戶端瀏覽器上的異步JavaScript代碼執(zhí)行。所述JavaScript代碼可以使用使拖動(dòng)內(nèi)容呈半透明的層疊樣式表(CSS)樣式。一旦已處理、提取和顯示所述響應(yīng),就可以將所述過(guò)程的控制傳遞給拖動(dòng)支持。
所述拖動(dòng)支持包括響應(yīng)于鼠標(biāo)移動(dòng)事件的事件驅(qū)動(dòng)JavaScript代碼。當(dāng)用戶按下鼠標(biāo)按鈕并移動(dòng)鼠標(biāo)時(shí),瀏覽器JavaScript運(yùn)行時(shí)將觸發(fā)鼠標(biāo)移動(dòng)事件。所述拖動(dòng)支持實(shí)現(xiàn)鼠標(biāo)移動(dòng)事件處理機(jī)JavaScript函數(shù),該函數(shù)被調(diào)用以處理鼠標(biāo)移動(dòng)事件。所述拖動(dòng)支持使用瀏覽器的JavaScript文檔對(duì)象模型(DOM)應(yīng)用編程接口(API)函數(shù)來(lái)確定鼠標(biāo)指針的當(dāng)前位置。所述拖動(dòng)支持然后使用文檔對(duì)象模型應(yīng)用編程接口函數(shù)來(lái)設(shè)置拖動(dòng)內(nèi)容(如從AJAX請(qǐng)求返回到getDragContent的半透明可視內(nèi)容)的位置。然后,只要用戶一直按下鼠標(biāo)按鈕并繼續(xù)移動(dòng)鼠標(biāo),便會(huì)重復(fù)所述過(guò)程。當(dāng)用戶釋放鼠標(biāo)按鈕時(shí),瀏覽器的JavaScript運(yùn)行時(shí)將觸發(fā)鼠標(biāo)彈起事件。所述拖動(dòng)支持實(shí)現(xiàn)鼠標(biāo)彈起事件處理機(jī)JavaScript函數(shù),該函數(shù)被調(diào)用以處理鼠標(biāo)彈起事件。所述拖動(dòng)支持使用瀏覽器的JavaScript文檔對(duì)象模型應(yīng)用編程接口函數(shù)來(lái)確定鼠標(biāo)指針的當(dāng)前位置。所述拖動(dòng)支持然后將XMLHttpRequest發(fā)送到服務(wù)器以將內(nèi)容插入維基頁(yè)面。
現(xiàn)在參考圖29,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的組合維基頁(yè)面內(nèi)容的過(guò)程的流程圖。本發(fā)明的示例性實(shí)施例的應(yīng)用維基需要一種強(qiáng)大而一致的方法來(lái)合成在各種頁(yè)面上創(chuàng)建的內(nèi)容。維基組件通過(guò)“簡(jiǎn)化(markdown)”語(yǔ)法包括在維基頁(yè)面源中,所述“簡(jiǎn)化”語(yǔ)法包括兩個(gè)“{”字符,后跟維基組件名稱,后跟空格,后跟以“名稱="值"”語(yǔ)法表示的可選空格分隔的變?cè)?。例如,{{ImportPage page=″Homepage″/}},其中“ImportPage”是維基組件的名稱。可以使用與維基組件相同的維基“簡(jiǎn)化”語(yǔ)法將任意維基頁(yè)面的內(nèi)容包括在另一頁(yè)面中。要將名為“Homepage”的維基頁(yè)面包括在當(dāng)前頁(yè)面中,維基用戶僅需鍵入{{Homepage/}}并且Homepage內(nèi)容將被直接擴(kuò)展。
圖29中的過(guò)程可以在諸如圖10中的維基頁(yè)面1000之類的復(fù)合內(nèi)容上實(shí)現(xiàn)。所述過(guò)程始于將維基頁(yè)面源解析為表示靜態(tài)文本內(nèi)容和維基組件的解析片段對(duì)象(過(guò)程方塊2902)。過(guò)程方塊2902的過(guò)程由諸如圖5中的維基命令上下文544之類的維基命令上下文對(duì)象實(shí)現(xiàn)。在過(guò)程方塊2902期間,頁(yè)面被解析為以名為抽象語(yǔ)法樹(shù)(AST)的樹(shù)結(jié)構(gòu)組織的解析片段,所述抽象語(yǔ)法樹(shù)是維基頁(yè)面內(nèi)容的存儲(chǔ)器中的內(nèi)部表示。后面步驟中的操作現(xiàn)在可以通過(guò)遍歷所述樹(shù)并針對(duì)樹(shù)節(jié)點(diǎn)執(zhí)行操作來(lái)操縱頁(yè)面內(nèi)容。
接下來(lái),所述過(guò)程調(diào)用遍歷維基頁(yè)面上的一系列維基組件的加載插件方法(過(guò)程方塊2904)。將針對(duì)每個(gè)維基組件調(diào)用諸如LoadPlugins之類的方法來(lái)實(shí)例化實(shí)現(xiàn)每個(gè)維基組件的功能的適當(dāng)維基命令子類。過(guò)程方塊2904是創(chuàng)建頁(yè)面內(nèi)容的存儲(chǔ)器內(nèi)表示的進(jìn)一步細(xì)化并且是一個(gè)過(guò)渡過(guò)程。
接下來(lái),所述過(guò)程調(diào)用維基對(duì)象的加載命令方法來(lái)執(zhí)行維基命令類加載。如果加載命令方法無(wú)法找到適當(dāng)?shù)木S基命令類,則所述方法發(fā)出異常(過(guò)程方塊2906)。過(guò)程方塊2906的加載插件方法可以是loadPlugin。過(guò)程方塊2906通過(guò)將支持的命令對(duì)象與維基組件解析片段進(jìn)行關(guān)聯(lián)來(lái)完成維基頁(yè)面的存儲(chǔ)器內(nèi)表示的創(chuàng)建。
接下來(lái),所述過(guò)程捕獲異常并調(diào)用維基對(duì)象的頁(yè)面存在方法來(lái)判定命名的維基頁(yè)面是否真正為維基頁(yè)面。將有效的頁(yè)面名稱加載到導(dǎo)入頁(yè)面組件內(nèi)(過(guò)程方塊2908)。在過(guò)程方塊2908中,如果諸如pageExists之類的方法返回有效頁(yè)面,則維基命令上下文調(diào)用loadPlugin方法來(lái)加載在維基頁(yè)面名稱中傳遞的導(dǎo)入頁(yè)面組件。所述導(dǎo)入頁(yè)面組件用于嵌入命名頁(yè)面的內(nèi)容。
接下來(lái),所述過(guò)程將導(dǎo)入頁(yè)面組件添加到維基命令上下文組件的列表(過(guò)程方塊2910)。接下來(lái),所述過(guò)程在呈現(xiàn)過(guò)程中將導(dǎo)入頁(yè)面組件擴(kuò)展為命名維基頁(yè)面的內(nèi)容(過(guò)程方塊2912),此后所述過(guò)程結(jié)束。在過(guò)程方塊2912中,所述過(guò)程將importPage命令實(shí)例添加到所述組件列表。
現(xiàn)在參考圖30,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的編輯命令的過(guò)程的流程圖。圖30中的過(guò)程可以在諸如圖8中的維基頁(yè)面800之類的頁(yè)面上實(shí)現(xiàn)。所述過(guò)程始于響應(yīng)于編輯維基頁(yè)面的用戶輸入而顯示維基組件的選項(xiàng)板(過(guò)程方塊3002)。在過(guò)程方塊3002中,用戶可通過(guò)選擇非常易于完成的復(fù)選框來(lái)提供用戶輸入。所述選項(xiàng)板是諸如圖8中的選項(xiàng)板802之類的選項(xiàng)板。諸如維基頁(yè)面800之類的頁(yè)面可以包括任意數(shù)量的為用戶提供是否可以選擇和編輯組件的可視提示的醒目圖示??梢杂蓤D3中的客戶端環(huán)境300內(nèi)的客戶端瀏覽器來(lái)接收過(guò)程方塊3002。
接下來(lái),響應(yīng)于用戶選擇醒目圖示,所述過(guò)程調(diào)用將XMLHttpRequest發(fā)送到服務(wù)器來(lái)檢索選定維基組件的屬性編輯器的JavaScript功能(過(guò)程方塊3004)。所述醒目圖示可以是諸如圖7中的醒目圖示708之類的
map圖標(biāo)。
接下來(lái),所述過(guò)程處理該請(qǐng)求并將處理委派給AJAX格式器。所述AJAX格式器創(chuàng)建維基命令上下文對(duì)象并調(diào)用關(guān)聯(lián)的請(qǐng)求加載屬性編輯器維基組件的加載插件方法(過(guò)程方塊3006)。由圖5中的維基控制器500執(zhí)行過(guò)程方塊3006。
接下來(lái),所述過(guò)程調(diào)用在選定維基組件名稱中傳遞的屬性編輯器組件的draw方法。使用XMLHttpResponse將draw方法的結(jié)果返回到客戶端(過(guò)程方塊3008)。
接下來(lái),所述過(guò)程處理包含選定組件的屬性編輯器的超文本標(biāo)記語(yǔ)言和JavaScript的XMLHttpResponse并使屬性編輯器可見(jiàn)(過(guò)程方塊3010)。所述處理以異步的方式完成并且可以使用層疊樣式表(CSS)使屬性編輯器可見(jiàn)??梢杂蓤D5中的維基控制器內(nèi)的AJAX格式器實(shí)現(xiàn)過(guò)程方塊3010的過(guò)程。
接下來(lái),所述過(guò)程接收用戶在屬性編輯器中的輸入并將XMLHttpRequest發(fā)送到服務(wù)器以更新選定維基組件的屬性(過(guò)程方塊3012)。由所述屬性編輯器和相應(yīng)的客戶端瀏覽器來(lái)執(zhí)行過(guò)程方塊3012。
接下來(lái),所述過(guò)程處理該請(qǐng)求并將處理委派給AJAX格式器。AJAX格式器創(chuàng)建維基命令上下文對(duì)象并調(diào)用關(guān)聯(lián)的請(qǐng)求加載更新命令維基組件的加載插件方法(過(guò)程方塊3014)。接下來(lái),所述過(guò)程調(diào)用在選定維基組件名稱中傳遞的更新命令組件的draw方法。所述更新命令組件更新在服務(wù)器上“簡(jiǎn)化”的維基組件源并返回指示成功或失敗的XMLHttpResponse(過(guò)程方塊3016),此后所述過(guò)程結(jié)束??梢杂蓤D5中的維基控制器500內(nèi)的AJAX格式器實(shí)現(xiàn)過(guò)程方塊3016的過(guò)程。
因此,本發(fā)明的示例性實(shí)施例提供了一種用于應(yīng)用維基的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。本發(fā)明的示例性實(shí)施例允許用戶輕松地創(chuàng)建和管理維基頁(yè)面。用戶可以通過(guò)拖放活動(dòng)內(nèi)容來(lái)編輯維基頁(yè)面??梢愿鶕?jù)用戶的請(qǐng)求組合維基頁(yè)面并且可以使用屬性編輯器編輯維基頁(yè)面。維基頁(yè)面保存在用于瀏覽維基的包括節(jié)點(diǎn)和葉節(jié)點(diǎn)的頁(yè)面樹(shù)視圖中。
現(xiàn)在參考圖31,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的呈現(xiàn)維基命令的過(guò)程的流程圖。圖31中的過(guò)程可以在圖4中的維基引擎404內(nèi)實(shí)現(xiàn)。所述維基頁(yè)面可以包括若干維基命令。每個(gè)維基命令同樣可以包含其他維基命令。圖31中的過(guò)程從維基引擎針對(duì)維基命令調(diào)用render方法開(kāi)始(過(guò)程方塊3102)。維基引擎可以是諸如圖4中的維基引擎402之類的引擎。所述render方法可以是諸如圖12中的render 1226之類的頁(yè)面處理方法。
接下來(lái),所述過(guò)程調(diào)用open方法(過(guò)程方塊3104)。過(guò)程方塊3104的open方法為維基命令提供了開(kāi)始顯示所呈現(xiàn)內(nèi)容的機(jī)制。例如,命令可以生成超文本標(biāo)記語(yǔ)言的“開(kāi)始”片段,例如“<SPAN>”Forecast命令。將使用close方法生成所述SPAN的結(jié)尾片段。接下來(lái),所述過(guò)程判定所述維基命令是否允許編輯(過(guò)程方塊3106)。維基命令將忽略allowEdit的設(shè)置來(lái)判定所述命令是否允許編輯命令內(nèi)容。true值表示可以編輯命令。如果維基命令允許編輯,則所述過(guò)程將生成一個(gè)醒目圖示(過(guò)程方塊3108)。
如果所述維基命令不允許編輯,所述過(guò)程將調(diào)用renderBody(過(guò)程方塊3110)。renderBody為命令提供了呈現(xiàn)或發(fā)出相應(yīng)的超文本標(biāo)記語(yǔ)言內(nèi)容的機(jī)會(huì)。接下來(lái),renderBody顯示醒目圖示,然后針對(duì)所有現(xiàn)有子節(jié)點(diǎn)中的每個(gè)子節(jié)點(diǎn)調(diào)用render(過(guò)程方塊3112)。例如,在過(guò)程方塊3112中,可以使用draw方法顯示所述醒目圖示。所述維基命令可以形成層次結(jié)構(gòu),也就是說(shuō),維基命令可以包含其他維基命令。因此,所述維基命令形成命令樹(shù)。子節(jié)點(diǎn)是被包含或嵌入的第一代維基命令。接下來(lái),所述過(guò)程調(diào)用close方法(過(guò)程方塊3114),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖32,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的屬性編輯的預(yù)備過(guò)程的流程圖。圖32中的過(guò)程用于編輯維基命令的屬性。所述過(guò)程從呈現(xiàn)命令開(kāi)始(過(guò)程方塊3202)。所述命令在諸如圖31中的過(guò)程之類的呈現(xiàn)過(guò)程中呈現(xiàn)。接下來(lái),所述過(guò)程生成默認(rèn)的屬性編輯器并在所生成的頁(yè)面上隱藏屬性編輯器(過(guò)程方塊3204),此后所述過(guò)程結(jié)束。多數(shù)情況下,用戶不與屬性編輯器進(jìn)行交互,因此屬性編輯器的默認(rèn)狀態(tài)為“隱藏”,直到用戶需要時(shí)才顯示。如果命令選擇不實(shí)現(xiàn)自身,則在過(guò)程方塊3204中生成默認(rèn)的屬性編輯器。命令可以通過(guò)忽略generatePropertyEditor協(xié)議來(lái)實(shí)現(xiàn)屬性編輯器。
現(xiàn)在參考圖33,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的屬性編輯過(guò)程的流程圖。圖33中的過(guò)程可以在圖32中的過(guò)程之后發(fā)生。首先,所述過(guò)程接收來(lái)自用戶的觸發(fā)要針對(duì)選定命令調(diào)用的屬性編輯器的信號(hào)(過(guò)程方塊3302)。例如,在過(guò)程方塊3302中,用戶可以單擊觸發(fā)屬性編輯器的維基命令的醒目圖示。
接下來(lái),所述過(guò)程標(biāo)識(shí)客戶端側(cè)屬性編輯器子系統(tǒng)的選定命令(過(guò)程方塊3304)。維基環(huán)境包括通過(guò)跟蹤在所生成的醒目圖示上的鼠標(biāo)單擊來(lái)跟蹤選定組件的JavaScript基本子系統(tǒng)。在醒目圖示上的單擊操作將標(biāo)識(shí)選定命令??梢杂芍T如圖13中的醒目圖示1302之類的醒目圖示來(lái)執(zhí)行過(guò)程方塊3304。
接下來(lái),所述過(guò)程生成AJAX調(diào)用來(lái)請(qǐng)求服務(wù)器側(cè)命令代表呈現(xiàn)客戶端側(cè)屬性編輯器(過(guò)程方塊3306)??梢杂芍T如圖13中的屬性編輯器1304之類的屬性編輯器來(lái)執(zhí)行過(guò)程方塊3306。在過(guò)程方塊3306的執(zhí)行期間,所述AJAX調(diào)用將調(diào)用維基命令處理器的服務(wù)器統(tǒng)一資源指示器,后者將頁(yè)面加載到在請(qǐng)求的對(duì)象變量中標(biāo)識(shí)的服務(wù)器內(nèi)。統(tǒng)一資源指示器還包含表示維基命令輸入值的新值的一組新的對(duì)象變量。所述引擎然后更新維基命令的輸入值并請(qǐng)求維基命令根據(jù)所述新值更新相應(yīng)的可視表示??梢杂芍T如圖12中的generatePropertyEditor 1222之類的命令啟動(dòng)過(guò)程方塊3306。
接下來(lái),所述過(guò)程選擇屬性編輯器(過(guò)程方塊3308)。在過(guò)程方塊3308中,選定的維基命令可以選擇通過(guò)忽略generatePropertyEditor方法提供專用屬性編輯器,也可以繼承默認(rèn)的實(shí)施方式。備選地,維基命令可以提供其自己的屬性編輯器,該屬性編輯器包括編輯維基命令的參數(shù)、屬性和特性所需的超文本標(biāo)記語(yǔ)言??梢愿鶕?jù)選定命令的特性在過(guò)程方塊3308中選擇屬性編輯器。
所述屬性編輯器然后接收用戶交互并提交對(duì)維基命令參數(shù)的更新(過(guò)程方塊3310)。接下來(lái),所述屬性編輯器生成基于AJAX的請(qǐng)求,所述請(qǐng)求指示服務(wù)器頁(yè)面處理器更新給定頁(yè)面上的選定維基命令的參數(shù)列表(過(guò)程方塊3312)。接下來(lái),命令處理器查找命令、實(shí)例化命令,以及將命令的值設(shè)為從客戶端傳遞的新值(過(guò)程方塊3314)。接下來(lái),命令處理器將詢問(wèn)命令是否應(yīng)通過(guò)調(diào)用refreshOnUpdate方法來(lái)更新整個(gè)頁(yè)面(過(guò)程方塊3316)。過(guò)程方塊3316由圖4中的命令處理器406實(shí)現(xiàn)。如果命令指示應(yīng)更新整個(gè)頁(yè)面,則在客戶端上重新顯示整個(gè)頁(yè)面(過(guò)程方塊3318),此后所述過(guò)程結(jié)束。如果命令指示無(wú)需更新整個(gè)頁(yè)面,則命令呈現(xiàn)自身,且在客戶端超文本標(biāo)記語(yǔ)言文檔上的getTargetDIV區(qū)域中顯示新的內(nèi)容(過(guò)程方塊3320),此后所述過(guò)程結(jié)束。
作為過(guò)程方塊3320的一個(gè)實(shí)例,用戶可以使用屬性編輯器更新實(shí)現(xiàn)過(guò)程的Forecast維基命令的屬性值,如下面的實(shí)例所述。用戶使用屬性編輯器更新郵政編碼屬性。屬性編輯器生成更新命令請(qǐng)求并將所述命令發(fā)送到服務(wù)器。服務(wù)器接收該請(qǐng)求、加載包含F(xiàn)orecast命令的頁(yè)面、將新的郵政編碼置于頁(yè)面中、保存更新后的頁(yè)面,并且詢問(wèn)Forecast命令該命令是否需要刷新頁(yè)面。Forecast命令回答“否”,因此服務(wù)器要求Forecast命令使用從屬性編輯器發(fā)送的輸入值的新值來(lái)呈現(xiàn)自身。將生成的超文本標(biāo)記語(yǔ)言片段發(fā)送回客戶端并將其置于由getTargetDIV協(xié)議標(biāo)識(shí)的超文本標(biāo)記語(yǔ)言元素中。所述命令可以在諸如圖31中的過(guò)程之類的過(guò)程中呈現(xiàn)自身。
現(xiàn)在參考圖34,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的選擇屬性編輯器的過(guò)程的流程圖。圖34中的過(guò)程是圖33中的過(guò)程方塊3308的更具體的描述。所述過(guò)程始于默認(rèn)的屬性編輯器調(diào)用getParameters來(lái)確定與選定命令關(guān)聯(lián)的參數(shù)的列表和類型(過(guò)程方塊3402)。接下來(lái),所述過(guò)程針對(duì)每個(gè)返回的參數(shù)生成客戶端側(cè)編輯器(過(guò)程方塊3404)。所述參數(shù)列表提供了所返回參數(shù)的名稱、幫助字符串以及可能的值。
接下來(lái),所述過(guò)程將聚合的內(nèi)容傳送到客戶端,以便在客戶端屬性編輯器中呈現(xiàn)(過(guò)程方塊3406),此后所述過(guò)程結(jié)束。聚合內(nèi)容是從特定命令的屬性編輯器接收的信息。例如,所述聚合內(nèi)容包括針對(duì)顯示的命令在過(guò)程方塊3402和3404中獲取的每個(gè)元數(shù)據(jù)和參數(shù)以便示出屬性編輯器??梢栽谌鐖D33中的過(guò)程方塊3306之類的步驟期間定義的客戶端屬性編輯器中呈現(xiàn)所述聚合內(nèi)容。
圖35-36是在維基頁(yè)面的生命周期內(nèi)使用的頁(yè)面生命周期過(guò)程。現(xiàn)在參考圖35,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的刪除頁(yè)面的過(guò)程的流程圖。所述過(guò)程從將頁(yè)面標(biāo)記為刪除開(kāi)始(過(guò)程方塊3502)。用戶可以基于內(nèi)容陳舊、內(nèi)容失去相關(guān)性或任何其他原因?qū)?yè)面進(jìn)行標(biāo)記。在過(guò)程方塊3502中,將頁(yè)面標(biāo)記為刪除。所述頁(yè)面并未真正從數(shù)據(jù)庫(kù)中刪除。接下來(lái),通知所述頁(yè)面上的每個(gè)命令其所屬頁(yè)面已被刪除(過(guò)程方塊3504),此后所述過(guò)程結(jié)束??梢允褂弥T如圖12中的wasDeleted 1218之類的方法通知每個(gè)命令。過(guò)程方塊3504用于清除與給定頁(yè)面上的維基命令關(guān)聯(lián)的永久性資源。
現(xiàn)在參考圖36,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的修訂頁(yè)面的過(guò)程的流程圖。所述過(guò)程從新建空頁(yè)面開(kāi)始(過(guò)程方塊3602)。接下來(lái),所述過(guò)程將現(xiàn)有頁(yè)面克隆到新頁(yè)面中(過(guò)程方塊3604)。接下來(lái),所述過(guò)程通知頁(yè)面上的每個(gè)命令aboutToSave(將被保存)(過(guò)程方塊3606)。aboutToSave可以是諸如圖12中的生命周期1204之類的生命周期命令。
接下來(lái),將所述頁(yè)面保存到數(shù)據(jù)庫(kù)(過(guò)程方塊3608)。然后,所述過(guò)程調(diào)用wasDeleted方法以通知該頁(yè)面其已被從頁(yè)面刪除(通過(guò)不再作為頁(yè)面的一部分)(過(guò)程方塊3610)。針對(duì)每個(gè)不再作為頁(yè)面一部分的命令執(zhí)行過(guò)程方塊3610。接下來(lái),所述過(guò)程通知頁(yè)面上的每個(gè)命令該頁(yè)面wasSaved(已保存)(過(guò)程方塊3612),此后所述過(guò)程結(jié)束。過(guò)程方塊3612可以使用諸如圖12中的wasSaved 1216之類的方法。
現(xiàn)在參考圖37,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的復(fù)制頁(yè)面的過(guò)程的流程圖。所述過(guò)程從新建空頁(yè)面開(kāi)始(過(guò)程方塊3702)。接下來(lái),所述過(guò)程將現(xiàn)有頁(yè)面克隆到新頁(yè)面中(過(guò)程方塊3704)。接下來(lái),所述過(guò)程針對(duì)頁(yè)面上的每個(gè)命令調(diào)用wasCopied方法(過(guò)程方塊3706)。過(guò)程方塊3706可以使用諸如圖12中的wasCopied 1220之類的方法。
接下來(lái),所述過(guò)程保存已克隆的頁(yè)面,針對(duì)頁(yè)面上的每個(gè)命令調(diào)用wasSaved(過(guò)程方塊3708),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖38,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的重命名頁(yè)面的過(guò)程的流程圖。圖38中的過(guò)程從加載原始頁(yè)面開(kāi)始(過(guò)程方塊3802)。接下來(lái),所述過(guò)程更新頁(yè)面的標(biāo)記名稱來(lái)針對(duì)頁(yè)面所包含的所有子頁(yè)面反映頁(yè)面的新名稱(過(guò)程方塊3804)。接下來(lái),所述過(guò)程調(diào)用wasRenamed來(lái)通知維基命令已針對(duì)該頁(yè)面上的每個(gè)維基命令重命名了頁(yè)面(過(guò)程方塊3806),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖39,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的取消刪除頁(yè)面的過(guò)程的流程圖。圖39中的過(guò)程始于通過(guò)將isLatest標(biāo)志設(shè)為true而將頁(yè)面從陳舊狀態(tài)轉(zhuǎn)為活動(dòng)狀態(tài)(過(guò)程方塊3902)。接下來(lái),所述過(guò)程通知頁(yè)面上的每個(gè)命令頁(yè)面wasUndeleted(已取消刪除)(過(guò)程方塊3904),此后所述過(guò)程結(jié)束。在先前從給定頁(yè)面刪除命令之后將命令重新放回所述給定頁(yè)面時(shí)調(diào)用waswasUndeleted。
現(xiàn)在參考圖40,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的構(gòu)建選項(xiàng)板的過(guò)程的流程圖。維基環(huán)境提供了安裝在維基中的可用命令的選項(xiàng)板。所述選項(xiàng)板提供了一種顯示維基環(huán)境中的可用維基命令的可視機(jī)制。所述選項(xiàng)板被定義為由getCategory協(xié)議定義的多個(gè)種類。使用圖40中的過(guò)程針對(duì)維基中的每個(gè)命令生成所述選項(xiàng)板。
首先,所述過(guò)程判定命令是否支持編輯(過(guò)程方塊4002)。如果維基支持編輯,所述過(guò)程將調(diào)用getDropContent,后者返回要插入與給定維基命令關(guān)聯(lián)的頁(yè)面中的默認(rèn)維基標(biāo)記(過(guò)程方塊4004),此后所述過(guò)程結(jié)束。可以響應(yīng)于將維基命令拖離所述選項(xiàng)板并將其放置在頁(yè)面上而執(zhí)行過(guò)程方塊4004。
如果所述過(guò)程在過(guò)程方塊4002中判定命令不支持編輯,則所述過(guò)程檢索所述命令的種類(過(guò)程方塊4006)。由維基環(huán)境中的命令來(lái)定義種類。某些示例性種類包括“Data Services”和“Page Content”。同一種類中的每個(gè)命令都在選項(xiàng)板視圖上的同一標(biāo)簽中顯示。接下來(lái),所述過(guò)程檢索名稱(過(guò)程方塊4008)。可以使用諸如圖12中的getName 1212之類的方法檢索名稱。接下來(lái),所述過(guò)程檢索描述(過(guò)程方塊4010)。可以使用諸如圖12中的getDescription 1214之類的方法檢索描述。接下來(lái),所述過(guò)程檢索圖標(biāo)(過(guò)程方塊4012)。可以使用諸如getIcon之類的方法檢索圖標(biāo)。接下來(lái),所述過(guò)程檢索拖動(dòng)內(nèi)容并將每個(gè)命令的元素置于選項(xiàng)板上(過(guò)程方塊4014)??梢允褂弥T如getDragContent之類的方法檢索拖動(dòng)內(nèi)容。
命令可以顯示唯一的表達(dá)命令用法的圖標(biāo)或醒目圖示。所述getIcon協(xié)議用于檢索在呈現(xiàn)時(shí)顯示命令圖標(biāo)的超文本標(biāo)記語(yǔ)言片段。很多時(shí)候,當(dāng)組件首次被放到頁(yè)面上以將新命令插入所述頁(yè)面時(shí),命令希望為用戶提供不同的超文本標(biāo)記語(yǔ)言內(nèi)容以拖離已放置在頁(yè)面上的選項(xiàng)板??梢酝ㄟ^(guò)忽略getDragContent方法來(lái)指定實(shí)際從選項(xiàng)板拖動(dòng)的內(nèi)容。
接下來(lái),所述過(guò)程返回過(guò)程方塊4004并調(diào)用getDropContent,后者返回要插入與給定維基命令關(guān)聯(lián)的頁(yè)面中的默認(rèn)維基標(biāo)記,此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖41,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的配置過(guò)程的流程圖。有時(shí)需要配置駐留在維基環(huán)境中的維基命令。例如,GoogleMap命令需要與應(yīng)用程序接口一起使用的密鑰。
圖41中的過(guò)程用于使命令能夠配置自身并維護(hù)與特定維基命令關(guān)聯(lián)的配置數(shù)據(jù)集。圖41中的過(guò)程從顯示總體分類信息開(kāi)始(過(guò)程方塊4102)。接下來(lái),所述過(guò)程調(diào)用configure方法(過(guò)程方塊4104)。configure方法允許命令生成用于編輯與維基中的維基命令關(guān)聯(lián)的數(shù)據(jù)的超文本標(biāo)記語(yǔ)言視圖。接下來(lái),所述過(guò)程調(diào)用get/setPluginData方法(過(guò)程方塊4106),此后所述過(guò)程結(jié)束。get/setPluginData方法用于檢索和存儲(chǔ)影響維基站點(diǎn)的維基命令數(shù)據(jù)。例如,命令數(shù)據(jù)包括調(diào)用命令所需的初始化數(shù)據(jù),例如注冊(cè)碼。
現(xiàn)在參考圖42,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的導(dǎo)出過(guò)程的流程圖。維基支持導(dǎo)入和導(dǎo)出完整的維基或維基的子集。導(dǎo)出格式包含導(dǎo)出的頁(yè)面的列表以及頁(yè)面內(nèi)容(包括命令和附件)。維基引擎調(diào)用圖42中的過(guò)程來(lái)幫助導(dǎo)出頁(yè)面集合。所述頁(yè)面集合是一個(gè)或多個(gè)頁(yè)面。
圖42中的過(guò)程從導(dǎo)出包括頁(yè)面名稱的總體頁(yè)面信息開(kāi)始(過(guò)程方塊4202)。接下來(lái),所述過(guò)程針對(duì)頁(yè)面上的每個(gè)維基命令調(diào)用abountToExport(過(guò)程方塊4204)。接下來(lái),所述過(guò)程調(diào)用getVersion方法并將其存儲(chǔ)為輸出的一部分(過(guò)程方塊4206)。如果在過(guò)程方塊4204中調(diào)用的abountToExport返回?cái)?shù)據(jù),則在過(guò)程方塊4206中將所述數(shù)據(jù)保存為輸出流中的串行化PHP對(duì)象。
接下來(lái),所述過(guò)程導(dǎo)出與頁(yè)面關(guān)聯(lián)的命令(過(guò)程方塊4208),此后所述過(guò)程結(jié)束??梢詫⒆⑨尭郊拥矫總€(gè)維基頁(yè)面,所述注釋代表用戶對(duì)各個(gè)頁(yè)面的評(píng)論。所述注釋用作在維基中進(jìn)行協(xié)作的機(jī)制。例如,專利代理人可以詢問(wèn)發(fā)明人如何在維基頁(yè)面上使用注釋。
現(xiàn)在參考圖43,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的導(dǎo)入過(guò)程的流程圖。維基引擎調(diào)用圖43中的過(guò)程以導(dǎo)入頁(yè)面上的每個(gè)維基命令。
圖43中的過(guò)程從導(dǎo)入包括頁(yè)面名稱的常規(guī)頁(yè)面信息開(kāi)始(過(guò)程方塊4302)。接下來(lái),所述過(guò)程判定命令是否保存了數(shù)據(jù)(過(guò)程方塊4304)。例如,所述過(guò)程判定命令是否在諸如圖42中的過(guò)程方塊4206之類的步驟中保存了數(shù)據(jù)。如果命令保存了數(shù)據(jù),所述過(guò)程取消串行化數(shù)據(jù)(過(guò)程方塊4306)。默認(rèn)實(shí)施方式確保已保存的版本名稱與當(dāng)前安裝的維基命令版本的名稱匹配。接下來(lái),所述過(guò)程使用取消串行化的數(shù)據(jù)調(diào)用wasImported(過(guò)程方塊4308),此后所述過(guò)程結(jié)束。如果在過(guò)程方塊4304中保存了數(shù)據(jù),所述過(guò)程將返回新的頁(yè)面(過(guò)程方塊4310),此后所述過(guò)程結(jié)束。
因此,本發(fā)明的示例性實(shí)施例還提供了一種用于擴(kuò)展維基環(huán)境的能力的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。面向?qū)ο蟮目蚣苡糜诙x如何擴(kuò)展對(duì)象以便輕松地創(chuàng)建協(xié)作環(huán)境。將處理維基命令類,以便有效地管理所部署的環(huán)境,從而促進(jìn)重用性、適應(yīng)性以及易用性。
現(xiàn)在參考圖44,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的檢索和解析樹(shù)的過(guò)程的流程圖。所述樹(shù)是由示例性實(shí)施例使用的核心處理數(shù)據(jù)結(jié)構(gòu)。所述樹(shù)可以是諸如圖11中的抽象語(yǔ)法樹(shù)1102之類的抽象語(yǔ)法樹(shù)。圖44中的過(guò)程由諸如圖11中的維基命令上下文1104之類的維基命令上下文實(shí)現(xiàn)。所述維基命令上下文檢索頁(yè)面并將其解析為抽象語(yǔ)法樹(shù)(過(guò)程方塊4402),此后所述過(guò)程結(jié)束。由維基加載維基頁(yè)面。所述維基頁(yè)面實(shí)例化創(chuàng)建所述樹(shù)的維基命令上下文。
現(xiàn)在參考圖45,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的處理網(wǎng)頁(yè)以便在維基中顯示的過(guò)程。圖45中的過(guò)程可以由維基引擎實(shí)現(xiàn),具體地說(shuō),由命令處理器實(shí)現(xiàn),例如圖4中的維基引擎402和命令處理器406。圖45中的過(guò)程始于處理引擎訪問(wèn)抽象語(yǔ)法樹(shù)中的每個(gè)節(jié)點(diǎn)來(lái)針對(duì)抽象語(yǔ)法樹(shù)中存在的命令調(diào)用initiation方法(過(guò)程方塊4502)。initiation方法可以是命名的init方法。所述init方法查找抽象語(yǔ)法樹(shù)的每個(gè)節(jié)點(diǎn)內(nèi)的命令并使所述命令可用于其他命令。因此,所述命令可以與另外的包括其他相同命令的命令進(jìn)行通信。在過(guò)程方塊4502期間,命令負(fù)責(zé)初始化命令的內(nèi)部數(shù)據(jù)結(jié)構(gòu)、發(fā)布所提供的主題,以及訂閱數(shù)據(jù)中心內(nèi)感興趣的主題。主題代表發(fā)布者和訂閱者之間的興趣領(lǐng)域。例如,發(fā)布者/訂閱者環(huán)境中的一個(gè)重要主題是“data/available”。其他主題實(shí)例包括“address”和“l(fā)atlong”。在過(guò)程方塊4502期間,命令可以將需要在使用initi方法調(diào)用所有命令之后處理的事件放置在隊(duì)列中。事件將狀態(tài)更改從一種狀態(tài)傳遞到另一狀態(tài)。所述事件激勵(lì)所述傳遞來(lái)實(shí)現(xiàn)狀態(tài)更改。
將對(duì)事件進(jìn)行排隊(duì),以便可以有序地串行處理事件并且不會(huì)在諸如Javascript客戶端之類的單線程執(zhí)行環(huán)境中丟失事件。事件排隊(duì)使得核心執(zhí)行環(huán)境能夠確保所有組件都被正確地初始化并準(zhǔn)備好在分配事件之前處理事件??梢栽诒景l(fā)明的示例性實(shí)施例的每個(gè)階段執(zhí)行所述命令并且所述命令可以忽略默認(rèn)的實(shí)施方式。
接下來(lái),所述命令處理器針對(duì)數(shù)據(jù)中心調(diào)用processEvents來(lái)傳送所有已排隊(duì)的事件(過(guò)程方塊4504)。發(fā)布和訂閱模型規(guī)定訂閱者向數(shù)據(jù)中心注冊(cè)感興趣的事件,以便能夠從數(shù)據(jù)中心接收事件。發(fā)布者觸發(fā)在數(shù)據(jù)中心上排隊(duì)的事件。在processEvents階段,數(shù)據(jù)中心處理每個(gè)排隊(duì)的事件并確定感興趣的訂閱者,接著調(diào)用訂閱者以便傳送事件。所述排隊(duì)的事件是在過(guò)程方塊4502中放入隊(duì)列的事件。接下來(lái),命令處理器訪問(wèn)抽象語(yǔ)法樹(shù)中的每個(gè)節(jié)點(diǎn)來(lái)針對(duì)抽象語(yǔ)法樹(shù)中存在的命令調(diào)用discover方法(過(guò)程方塊4506)。
所述discover方法定位與命令相關(guān)的信息源以獲取命令之間更詳細(xì)的交互。在過(guò)程方塊4506期間,生成者、使用者或控制器命令可以使用數(shù)據(jù)中心相互進(jìn)行定位并建立彼此(而不是數(shù)據(jù)中心)之間的直接事件連接。命令可以選擇像上面所述的那樣通過(guò)數(shù)據(jù)中心間接地交互,或在discover階段定位其他命令。在處理的discover階段,命令可以就發(fā)布者、訂閱者和主題等詢問(wèn)數(shù)據(jù)中心。如果需要,命令也可以直接通信,繞過(guò)上面建立的間接通信方法。此能力允許更有效地處理事件并無(wú)需將數(shù)據(jù)中心作為通信接口。此外,命令可以將自身從數(shù)據(jù)中心刪除。在使用initiation方法調(diào)用所有命令之后,命令可以將需要處理的事件排入隊(duì)列或放入隊(duì)列。
接下來(lái),所述命令處理器針對(duì)數(shù)據(jù)中心調(diào)用processEvents來(lái)傳送所有排隊(duì)的事件(過(guò)程方塊4508)。所述排隊(duì)的事件是在過(guò)程方塊4506中排入隊(duì)列的事件。接下來(lái),所述命令處理器訪問(wèn)抽象語(yǔ)法樹(shù)中的每個(gè)節(jié)點(diǎn)來(lái)針對(duì)抽象語(yǔ)法樹(shù)中存在的命令調(diào)用render方法(過(guò)程方塊4510),此后所述過(guò)程結(jié)束。在過(guò)程方塊4510中,命令同時(shí)呈現(xiàn)頁(yè)面的可視內(nèi)容和不可視內(nèi)容。例如,可視內(nèi)容可以包括列表數(shù)據(jù)的表格顯示。不可視內(nèi)容可以包括搜索數(shù)據(jù)列表并且沒(méi)有可視內(nèi)容的SearchList命令。還在過(guò)程方塊4510期間呈現(xiàn)諸如頁(yè)面的文本片段之類的非命令節(jié)點(diǎn)。在圖45中的任何步驟期間,命令都可以通過(guò)針對(duì)頁(yè)面源片段遞歸地調(diào)用圖45中的過(guò)程來(lái)額外地處理其他頁(yè)面源片段。頁(yè)面源片段都是非命令內(nèi)容。頁(yè)面源片段捕獲頁(yè)面上的命令間的所有非命令內(nèi)容。
現(xiàn)在參考圖46,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的處理事件的流程圖。由諸如圖11中的數(shù)據(jù)中心1112之類的數(shù)據(jù)中心執(zhí)行圖46中的處理步驟。圖46是圖45中的過(guò)程方塊4504的更詳細(xì)的解釋。
所述過(guò)程始于數(shù)據(jù)中心將事件移出隊(duì)列(過(guò)程方塊4602)。接下來(lái),所述數(shù)據(jù)中心將事件傳送給已注冊(cè)的訂閱者(過(guò)程方塊4604)。已注冊(cè)的訂閱者通常為命令,但是備選地可以為獨(dú)立的功能單元。已注冊(cè)的訂閱者在啟動(dòng)期間進(jìn)行注冊(cè),在所述啟動(dòng)期間,命令向所有其他命令發(fā)布、訂閱或注冊(cè)感興趣的內(nèi)容。接下來(lái),所述數(shù)據(jù)中心將所有傳送給已注冊(cè)的訂閱者的結(jié)果事件放入隊(duì)列(過(guò)程方塊4606)。過(guò)程方塊4606的事件是那些在過(guò)程方塊4604中傳送給已注冊(cè)的訂閱者的事件。
接下來(lái),所述數(shù)據(jù)中心針對(duì)已由數(shù)據(jù)中心的數(shù)據(jù)傳送機(jī)制提供其輸入值的命令觸發(fā)invoke方法(過(guò)程方塊4608),此后所述過(guò)程結(jié)束。命令提供一組輸入值以執(zhí)行其功能。輸入值可以是靜態(tài)的,也可以是動(dòng)態(tài)的。當(dāng)輸入值是動(dòng)態(tài)的時(shí),維基引擎將跟蹤數(shù)據(jù)何時(shí)變得可用作命令的輸入。當(dāng)輸入變得可用時(shí),其被提供給命令并因此變?yōu)椤氨粓?zhí)行”。
因此,本發(fā)明的示例性實(shí)施例還提供了一種用于處理網(wǎng)頁(yè)以便在維基環(huán)境中顯示的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。在呈現(xiàn)最終視圖之前,新添加的組件能夠與采用抽象語(yǔ)法樹(shù)形式的其他組件進(jìn)行交互。將啟用組件以便從采用抽象語(yǔ)法樹(shù)節(jié)點(diǎn)的形式的頁(yè)面提供上下文發(fā)現(xiàn)新的特性和參數(shù)設(shè)置。在呈現(xiàn)最終視圖之前,組件使用處理和驗(yàn)證機(jī)制驗(yàn)證輸入并報(bào)告錯(cuò)誤。在頁(yè)面提供序列的生命周期內(nèi)處理目標(biāo)事件。在單個(gè)服務(wù)器上管理同一組件的多個(gè)版本。
現(xiàn)在參考圖47,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的實(shí)例化服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象時(shí)發(fā)生的操作的流程圖。所述過(guò)程由圖4中的維基引擎402實(shí)現(xiàn)。
所述過(guò)程始于接收從客戶端加載新頁(yè)面的請(qǐng)求(過(guò)程方塊4702)。當(dāng)服務(wù)器接收到加載新頁(yè)面的請(qǐng)求時(shí),所述過(guò)程將根據(jù)服務(wù)器側(cè)維基數(shù)據(jù)中心類變量和方法所指定的特性和方法,創(chuàng)建與所請(qǐng)求的新頁(yè)面關(guān)聯(lián)的客戶端側(cè)數(shù)據(jù)中心對(duì)象的實(shí)例(過(guò)程方塊4704)。所述過(guò)程向服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象注冊(cè)服務(wù)器上的所有組件(過(guò)程方塊4706),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖48,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的實(shí)例化客戶端側(cè)數(shù)據(jù)中心對(duì)象時(shí)發(fā)生的操作的流程圖。由客戶端上的處理單元(如圖2中的客戶端200內(nèi)的處理單元206)實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程始于加載從服務(wù)器接收的新頁(yè)面(過(guò)程方塊4802)。當(dāng)客戶端上的處理單元加載頁(yè)面的超文本標(biāo)記語(yǔ)言或JavaScript時(shí),所述過(guò)程將根據(jù)客戶端側(cè)維基數(shù)據(jù)中心類變量和方法所指定的特性和方法,創(chuàng)建與所請(qǐng)求的新頁(yè)面關(guān)聯(lián)的客戶端側(cè)數(shù)據(jù)中心對(duì)象的實(shí)例(過(guò)程方塊4804)。所述過(guò)程向客戶端側(cè)數(shù)據(jù)中心對(duì)象注冊(cè)客戶端上的所有組件(過(guò)程方塊4806),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖49,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的服務(wù)器側(cè)數(shù)據(jù)中心接收到來(lái)自客戶端側(cè)數(shù)據(jù)中心的處理事件的請(qǐng)求時(shí)發(fā)生的操作的流程圖。由服務(wù)器上的數(shù)據(jù)中心(如圖5中的數(shù)據(jù)中心558和圖6中的數(shù)據(jù)中心638)實(shí)現(xiàn)所述數(shù)據(jù)中心。
所述數(shù)據(jù)中心對(duì)象始于從客戶端側(cè)數(shù)據(jù)中心接收頁(yè)面請(qǐng)求和/或事件(過(guò)程方塊4902)。所述數(shù)據(jù)中心對(duì)象使用一組方法處理所述請(qǐng)求/事件(過(guò)程方塊4904)。由與客戶端關(guān)聯(lián)的生成者命令來(lái)生成所述請(qǐng)求/事件。所述一組方法可以是數(shù)據(jù)中心對(duì)象的一組方法,數(shù)據(jù)中心主題對(duì)象、數(shù)據(jù)中心事件對(duì)象的一組方法或與數(shù)據(jù)中心對(duì)象、數(shù)據(jù)中心主題對(duì)象和/或數(shù)據(jù)中心事件對(duì)象關(guān)聯(lián)的方法的任意組合。所述數(shù)據(jù)中心對(duì)象將處理后的事件發(fā)送給一組使用者命令(過(guò)程方塊4906),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖50,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)生成者命令處理事件時(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,所述過(guò)程由諸如圖14中的維基命令對(duì)象1404和1412之類的命令對(duì)象實(shí)現(xiàn)。
所述過(guò)程從針對(duì)命令調(diào)用init方法之后初始化命令時(shí)開(kāi)始(過(guò)程方塊5002)。由數(shù)據(jù)中心調(diào)用初始化所述命令的init方法。所述命令向數(shù)據(jù)中心注冊(cè)為諸如主題A之類的給定事件主題的生成者(過(guò)程方塊5004)。所述命令檢索數(shù)據(jù)(過(guò)程方塊5006)。在該示例性實(shí)例中,檢索數(shù)據(jù)可以包括接收用戶輸入,以及檢索數(shù)據(jù)庫(kù)或其他數(shù)據(jù)存儲(chǔ)設(shè)備中的數(shù)據(jù)。所述命令將主題A的事件對(duì)象觸發(fā)到數(shù)據(jù)中心(過(guò)程方塊5008),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖51,其是示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)使用者命令處理事件時(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,由諸如圖14中的維基命令對(duì)象1404和1412之類的命令對(duì)象實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程從使用者命令進(jìn)行初始化以響應(yīng)數(shù)據(jù)中心針對(duì)所有命令調(diào)用init方法開(kāi)始(過(guò)程方塊5102)。所述命令向數(shù)據(jù)中心注冊(cè)為諸如主題A之類的給定事件主題的使用者命令(過(guò)程方塊5104)。當(dāng)數(shù)據(jù)中心針對(duì)使用者命令調(diào)用callback方法時(shí),所述命令從數(shù)據(jù)中心接收主題A的事件(過(guò)程方塊5106)。所述命令處理事件(過(guò)程方塊5108),所述命令將處理結(jié)果呈現(xiàn)為超文本標(biāo)記語(yǔ)言或JavaScript以響應(yīng)數(shù)據(jù)中心針對(duì)所述命令調(diào)用render方法(過(guò)程方塊5110)。最后,所述命令將呈現(xiàn)結(jié)果發(fā)送到數(shù)據(jù)中心(過(guò)程方塊5112),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖52,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)客戶端側(cè)數(shù)據(jù)中心接收事件時(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,由諸如圖6中的數(shù)據(jù)中心634、圖14中的數(shù)據(jù)中心1412和圖19A中的數(shù)據(jù)中心1910之類的客戶端側(cè)數(shù)據(jù)中心實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程始于客戶端側(cè)數(shù)據(jù)中心從用戶和/或組件(如生成者組件)接收事件(過(guò)程方塊5202)。所述客戶端側(cè)數(shù)據(jù)中心立即處理事件(過(guò)程方塊5204)。在該步驟中,所述客戶端側(cè)數(shù)據(jù)中心判定一個(gè)或多個(gè)命令是否已注冊(cè)為與事件對(duì)象關(guān)聯(lián)的給定主題的使用者。如果一個(gè)或多個(gè)命令已注冊(cè)為給定主題的使用者,則所述客戶端側(cè)數(shù)據(jù)中心針對(duì)所述一組已注冊(cè)的使用者調(diào)用callback方法,以便將事件發(fā)送給已注冊(cè)的使用者(過(guò)程方塊5210),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖53,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)服務(wù)器側(cè)數(shù)據(jù)中心處理事件時(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,由諸如圖6中的數(shù)據(jù)中心638、圖14中的數(shù)據(jù)中心1402和圖15中的數(shù)據(jù)中心1500之類的服務(wù)器側(cè)數(shù)據(jù)中心實(shí)現(xiàn)所述過(guò)程。所述過(guò)程在服務(wù)器側(cè)數(shù)據(jù)中心針對(duì)與服務(wù)器關(guān)聯(lián)的所有命令調(diào)用初始化“init()”方法時(shí)開(kāi)始(過(guò)程方塊5302)。
所述服務(wù)器側(cè)數(shù)據(jù)中心接收作為給定主題事件的使用者的命令的注冊(cè)(過(guò)程方塊5304)。所述服務(wù)器側(cè)數(shù)據(jù)中心接收給定事件主題的事件(過(guò)程方塊5306)。所述事件可以包括數(shù)據(jù)??梢詮挠脩糨斎牖驈牧硪幻罱邮账鍪录?過(guò)程方塊5308)。所述服務(wù)器側(cè)數(shù)據(jù)中心將所述事件添加到事件隊(duì)列(過(guò)程方塊5310)。
所述服務(wù)器側(cè)數(shù)據(jù)中心在processEvents方法階段處理事件隊(duì)列中的事件。所述服務(wù)器側(cè)數(shù)據(jù)中心針對(duì)為給定主題注冊(cè)的所有使用者命令調(diào)用callback方法。所述服務(wù)器側(cè)數(shù)據(jù)中心調(diào)用callback方法以將事件發(fā)送給與該事件關(guān)聯(lián)的事件主題的注冊(cè)使用者(過(guò)程方塊5316)。
所述服務(wù)器側(cè)數(shù)據(jù)中心判定是否接收到具有正在被處理的給定事件主題的新事件(過(guò)程方塊5318)。如果接收到新事件,則所述服務(wù)器側(cè)數(shù)據(jù)中心將該事件添加到事件隊(duì)列(過(guò)程方塊5310)以便在下一processEvent階段進(jìn)行處理。現(xiàn)在返回過(guò)程方塊5318,如果未接收到任何新事件數(shù)據(jù),則所述服務(wù)器側(cè)數(shù)據(jù)中心將針對(duì)參與事件處理的所有命令調(diào)用render方法(過(guò)程方塊5320)。所述服務(wù)器側(cè)數(shù)據(jù)中心收集從參與事件處理的所有命令接收的呈現(xiàn)結(jié)果并將內(nèi)容發(fā)送到客戶端進(jìn)行顯示(過(guò)程方塊5322),此后所述過(guò)程結(jié)束。返回到客戶端的內(nèi)容以超文本標(biāo)記語(yǔ)言或Javascript的形式返回,以便在客戶端瀏覽器中顯示。
現(xiàn)在參考圖54,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)客戶端側(cè)數(shù)據(jù)中心判定是否將事件發(fā)送到服務(wù)器進(jìn)行處理時(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,由諸如圖6中的數(shù)據(jù)中心634、圖14中的數(shù)據(jù)中心1410和圖19A中的數(shù)據(jù)中心1910之類的客戶端側(cè)數(shù)據(jù)中心實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程從客戶端側(cè)數(shù)據(jù)中心接收由生成者命令觸發(fā)的事件開(kāi)始(過(guò)程方塊5402)。所述客戶端側(cè)數(shù)據(jù)中心將事件發(fā)送給客戶端上向數(shù)據(jù)中心注冊(cè)為與該事件關(guān)聯(lián)的事件主題的使用者的任何命令(過(guò)程方塊5404)。所述客戶端側(cè)數(shù)據(jù)中心判定是否應(yīng)將所述事件發(fā)送到服務(wù)器側(cè)數(shù)據(jù)中心(過(guò)程方塊5406)。如果所述客戶端側(cè)數(shù)據(jù)中心判定不應(yīng)將所述事件發(fā)送到服務(wù)器側(cè)數(shù)據(jù)中心,則所述客戶端側(cè)數(shù)據(jù)中心在客戶端上處理事件(過(guò)程方塊5408)。如果所述客戶端側(cè)數(shù)據(jù)中心判定應(yīng)將所述事件發(fā)送到服務(wù)器,則所述客戶端側(cè)數(shù)據(jù)中心調(diào)用processClientEvent方法以將所述事件發(fā)送到服務(wù)器側(cè)數(shù)據(jù)中心進(jìn)行處理(過(guò)程方塊5410)。所述客戶端側(cè)數(shù)據(jù)中心從服務(wù)器側(cè)數(shù)據(jù)中心接收processClientEvent的結(jié)果(過(guò)程方塊5412)。所述客戶端側(cè)數(shù)據(jù)中心使用從服務(wù)器的processClientEvent的結(jié)果中接收的新維基頁(yè)面內(nèi)容來(lái)更新客戶端上所顯示的維基頁(yè)面(過(guò)程方塊5414),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖55,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的在服務(wù)器側(cè)數(shù)據(jù)中心作為processClientEvent方法調(diào)用的結(jié)果接收來(lái)自客戶端側(cè)數(shù)據(jù)中心的事件時(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,由諸如圖6中的數(shù)據(jù)中心638、圖14中的數(shù)據(jù)中心1402和圖15中的數(shù)據(jù)中心1500之類的服務(wù)器側(cè)數(shù)據(jù)中心實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程始于所述服務(wù)器側(cè)數(shù)據(jù)中心從客戶端側(cè)數(shù)據(jù)中心接收具有給定事件主題(如主題B)的事件(過(guò)程方塊5502)。所述服務(wù)器側(cè)數(shù)據(jù)中心將主題B的事件發(fā)送到事件隊(duì)列(過(guò)程方塊5504)。所述服務(wù)器側(cè)數(shù)據(jù)中心在下一processEvent階段處理事件隊(duì)列中主題B的事件(過(guò)程方塊5506)。所述服務(wù)器側(cè)數(shù)據(jù)中心將主題B的事件發(fā)送到服務(wù)器上注冊(cè)為主題B的偵聽(tīng)者/使用者的一組使用者(過(guò)程方塊5508)。所述服務(wù)器側(cè)數(shù)據(jù)中心從服務(wù)器上的生成者接收主題B的新的事件數(shù)據(jù)(過(guò)程方塊5510)。觸發(fā)所述新事件的生成者是在過(guò)程方塊5508中接收事件數(shù)據(jù)的一個(gè)或多個(gè)使用者。所述服務(wù)器側(cè)數(shù)據(jù)中心將所述新事件添加到事件隊(duì)列(過(guò)程方塊5512)。
所述服務(wù)器側(cè)數(shù)據(jù)中心在下一processEvent階段處理主題B的新事件(過(guò)程方塊5514)。所述服務(wù)器側(cè)數(shù)據(jù)中心將所述新事件發(fā)送到服務(wù)器上注冊(cè)為主題B的偵聽(tīng)者/使用者的使用者(過(guò)程方塊5516)。所述服務(wù)器側(cè)數(shù)據(jù)中心針對(duì)參與主題B的事件處理的所有命令調(diào)用render方法(過(guò)程方塊5518)。所述服務(wù)器側(cè)數(shù)據(jù)中心接收以超文本標(biāo)記語(yǔ)言或JavaScript形式呈現(xiàn)的命令處理事件的結(jié)果(過(guò)程方塊5520)。所述服務(wù)器側(cè)數(shù)據(jù)中心綁定來(lái)自有所命令的呈現(xiàn)并將所述呈現(xiàn)發(fā)送到客戶端側(cè)數(shù)據(jù)中心(過(guò)程方塊5522),此后所述過(guò)程結(jié)束。
本發(fā)明的示例性實(shí)施例還提供了一種用于事件觸發(fā)的變?cè)獧z測(cè)的計(jì)算機(jī)實(shí)現(xiàn)的方法、裝置和計(jì)算機(jī)可用程序代碼。事件觸發(fā)指將事件發(fā)送到數(shù)據(jù)中心進(jìn)行處理的過(guò)程。
所述過(guò)程聚合來(lái)自一組源的變?cè)獢?shù)據(jù)以形成聚合數(shù)據(jù)集。所述過(guò)程生成一系列用于觸發(fā)事件的最小充分變?cè)孕纬勺钚∽冊(cè)?。所述過(guò)程將所述聚合數(shù)據(jù)集與所述最小變?cè)M(jìn)行比較以判定所述最小變?cè)欠窨捎?。所述過(guò)程觸發(fā)命令以便觸發(fā)事件,以響應(yīng)判定所述最小變?cè)捎谩?br>
現(xiàn)在參考圖56,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)維基變?cè)獙?duì)象執(zhí)行最小充分變?cè)幚頃r(shí)發(fā)生的操作的流程圖。在該示例性實(shí)例中,由諸如圖14中的維基命令1404或維基命令1412之類的維基命令對(duì)象實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程在維基變?cè)獙?duì)象聚合來(lái)自一組源的變?cè)獢?shù)據(jù)時(shí)開(kāi)始(過(guò)程方塊5602)。所述維基變?cè)獙?duì)象根據(jù)聲明的參數(shù)準(zhǔn)則生成最小充分變?cè)孕纬勺冊(cè)?過(guò)程方塊5604)。所述維基變?cè)獙?duì)象將聚合變?cè)獢?shù)據(jù)集與最小變?cè)M(jìn)行比較(過(guò)程方塊5606)。所述維基變?cè)獙?duì)象判定是否存在充分的變?cè)?過(guò)程方塊5608)。如果所述維基變?cè)獙?duì)象判定存在充分的變?cè)?,則所述維基變?cè)獙?duì)象觸發(fā)指示所需數(shù)據(jù)可用于觸發(fā)事件的dataAvailable事件(過(guò)程方塊5610),此后所述過(guò)程結(jié)束。
如果所述維基變?cè)獙?duì)象判定不存在充分的變?cè)?,則所述維基變?cè)獙?duì)象判定是否接收到新數(shù)據(jù)(過(guò)程方塊5612)。如果已接收到新數(shù)據(jù),則所述過(guò)程返回過(guò)程方塊5604,其中維基變?cè)尚碌木酆献冊(cè)獢?shù)據(jù)集以判定現(xiàn)在是否存在充分的變?cè)?。如果未接收到任何新?shù)據(jù),所述過(guò)程此后將結(jié)束。
現(xiàn)在參考圖57,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的當(dāng)維基變?cè)獙?duì)象判定是否設(shè)置了命令的最小必要變?cè)獣r(shí)發(fā)生的areArguments設(shè)置方法的過(guò)程的流程圖。在該示例性實(shí)例中,由諸如圖14中的維基命令1404或維基命令1412之類的維基命令對(duì)象實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程從接收來(lái)自對(duì)象的調(diào)用以觸發(fā)要求在觸發(fā)變?cè)按嬖谧钚〕浞肿冊(cè)导氖录_(kāi)始(過(guò)程方塊5702)。所述過(guò)程在變?cè)斜碇猩梢幌盗斜匾冊(cè)?過(guò)程方塊5704)。接下來(lái),所述過(guò)程判定所述變?cè)斜碇惺欠翊嬖诟嗌形幢粰z查的變?cè)?過(guò)程方塊5706)。換言之,所述過(guò)程通過(guò)判定所述變?cè)斜碇械哪膫€(gè)變?cè)撬隽斜碇邢乱灰粰z查的變?cè)獊?lái)標(biāo)識(shí)下一要被檢查或處理的變?cè)K鲞^(guò)程通過(guò)重復(fù)地判定變?cè)欠窨捎煤陀行?lái)檢查列表中的下一變?cè)?,直到已檢查所述列表中的所有變?cè)目捎眯院陀行浴H绻隽斜聿话魏纹渌刺幚砘蛭礄z查的變?cè)?,則所述過(guò)程將布爾值“true”返回到調(diào)用方對(duì)象(過(guò)程方塊5710),此后所述過(guò)程結(jié)束。
返回過(guò)程方塊5706,如果所述列表包含下一未處理或未檢查的變?cè)?,則所述過(guò)程判定是否設(shè)置了所述變?cè)斜碇械南乱蛔冊(cè)?過(guò)程方塊5708)。所述過(guò)程從未處理變?cè)斜碇袆h除下一變?cè)?過(guò)程方塊5706)。如果所述過(guò)程在過(guò)程方塊5708中判定已設(shè)置了變?cè)?,所述過(guò)程將返回過(guò)程方塊5706來(lái)繼續(xù)處理所述列表,直到已檢查所述變?cè)斜碇械乃凶冊(cè)?。如果所述過(guò)程判定未設(shè)置變?cè)瑒t所述方法將布爾值“false”返回到調(diào)用方(過(guò)程方塊5712),此后所述過(guò)程結(jié)束。
現(xiàn)在參考圖58,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的用于檢測(cè)是否應(yīng)觸發(fā)argument/available事件的setClientArgument方法的過(guò)程的流程圖。在該示例性實(shí)例中,由諸如圖14中的維基命令1404或維基命令1412之類的維基命令對(duì)象實(shí)現(xiàn)所述過(guò)程。
所述過(guò)程從判定是否設(shè)置了標(biāo)識(shí)符變?cè)_(kāi)始(過(guò)程方塊5802)。所述標(biāo)識(shí)符變?cè)菍儆跀?shù)據(jù)中心命令的默認(rèn)變?cè)?。所述?biāo)識(shí)符變?cè)糜谠谑录拇嬖谄陂g在數(shù)據(jù)中心內(nèi)唯一地標(biāo)識(shí)所述事件。如果所述過(guò)程判定未設(shè)置所述標(biāo)識(shí)符變?cè)鲞^(guò)程隨即結(jié)束。
返回過(guò)程方塊5802,如果設(shè)置了標(biāo)識(shí)符變?cè)?,則所述過(guò)程判定在觸發(fā)已標(biāo)識(shí)的事件之前需要存在的所有變?cè)欠穸伎捎?過(guò)程方塊5806)。所述過(guò)程通過(guò)檢查標(biāo)志(其判定先前定義的必要變?cè)械乃凶冊(cè)欠窨捎?來(lái)做出此判定。如果所述過(guò)程判定必要變?cè)邢惹岸x的變?cè)豢捎?,則所述過(guò)程調(diào)用areArgumentsSet方法(過(guò)程方塊5808)。如果所述過(guò)程從areArgumentsSet方法接收到返回值“false”,所述過(guò)程此后結(jié)束。
現(xiàn)在返回步驟5808,如果變?cè)O(shè)置過(guò)程返回“true”值,所述過(guò)程將創(chuàng)建數(shù)據(jù)可用事件對(duì)象(過(guò)程方塊5810)。所述數(shù)據(jù)可用事件對(duì)象指示在觸發(fā)已標(biāo)識(shí)的事件之前需要存在的所有變?cè)即嬖凇K鲞^(guò)程觸發(fā)數(shù)據(jù)可用事件對(duì)象以觸發(fā)與已標(biāo)識(shí)的事件關(guān)聯(lián)的命令,從而觸發(fā)所述已標(biāo)識(shí)的事件(過(guò)程方塊5812)。
返回過(guò)程方塊5806,如果所述過(guò)程判定areArgumentsSet方法像圖57中的過(guò)程方塊5708中所示的那樣返回“true”,所述過(guò)程將創(chuàng)建數(shù)據(jù)可用事件對(duì)象(過(guò)程方塊5810)。接下來(lái),所述過(guò)程針對(duì)數(shù)據(jù)中心對(duì)象調(diào)用fireEvent方法,且將所述數(shù)據(jù)可用事件作為所述方法的變?cè)獊?lái)觸發(fā)事件對(duì)象(過(guò)程方塊5812),所述fireEvent方法將事件傳遞到任何偵聽(tīng)過(guò)程。所述過(guò)程此后結(jié)束。
圖59是示出根據(jù)本發(fā)明的示例性實(shí)施例的使用維基頁(yè)面定義維基頁(yè)面布局的操作的流程圖。在過(guò)程方塊5912至5920中特別突出顯示了繼承維基頁(yè)面的維基頁(yè)面布局的操作。圖59中的操作由諸如圖4中的維基引擎402之類的維基引擎實(shí)現(xiàn),更具體地說(shuō),由諸如圖5中的維基控制器500之類的維基控制器實(shí)現(xiàn)。所述操作從維基引擎接收顯示頁(yè)面的請(qǐng)求開(kāi)始(過(guò)程方塊5902)。所述請(qǐng)求通常是由遠(yuǎn)程客戶端瀏覽器發(fā)出的HTTP請(qǐng)求。維基控制器對(duì)象處理所述請(qǐng)求。所述維基控制器對(duì)象開(kāi)始呈現(xiàn)與布局頁(yè)面組合的所請(qǐng)求頁(yè)面的過(guò)程(過(guò)程方塊5904)。
在本發(fā)明的示例性實(shí)施例中,通過(guò)調(diào)用諸如圖5中的維基對(duì)象508之類的維基對(duì)象的showPage方法來(lái)調(diào)用所述呈現(xiàn)所請(qǐng)求頁(yè)面的過(guò)程。所述showPage方法檢索所請(qǐng)求的維基頁(yè)面并呈現(xiàn)可以在客戶端瀏覽器中顯示的所請(qǐng)求維基頁(yè)面的HTML版本。所述維基對(duì)象用作生成最新被請(qǐng)求維基頁(yè)面的內(nèi)容所使用的所有對(duì)象和字段的儲(chǔ)存庫(kù)。作為頁(yè)面呈現(xiàn)過(guò)程的一部分,將調(diào)用第一子過(guò)程(過(guò)程方塊5906)。所述第一子過(guò)程執(zhí)行創(chuàng)建所請(qǐng)求頁(yè)面的數(shù)據(jù)模型所需的數(shù)據(jù)操縱。在本發(fā)明的示例性實(shí)施例中,所請(qǐng)求頁(yè)面的數(shù)據(jù)模型是諸如圖5中的維基頁(yè)面526之類的維基頁(yè)面對(duì)象。在本發(fā)明的示例性實(shí)施例中,所述第一子過(guò)程是由showPage方法調(diào)用的processPage方法。
所述第一子過(guò)程調(diào)用第二子過(guò)程(過(guò)程方塊5908)。所述第二子過(guò)程的用途是加載與作為當(dāng)前請(qǐng)求的主題的維基頁(yè)面關(guān)聯(lián)的維基布局頁(yè)面。在本發(fā)明的示例性實(shí)施例中,所述第二子過(guò)程是loadLayout方法。
所述第二子過(guò)程判定所請(qǐng)求維基頁(yè)面的數(shù)據(jù)模型的布局字段是否包含維基布局頁(yè)面名稱(過(guò)程方塊5910)。在本發(fā)明的示例性實(shí)施例中,所述布局字段是維基頁(yè)面對(duì)象的對(duì)象變量(如圖5中的頁(yè)面526的對(duì)象變量528)。如果所述第二子過(guò)程判定布局字段不包含當(dāng)前所請(qǐng)求維基頁(yè)面的維基布局頁(yè)面名稱(過(guò)程方塊5910的“否”輸出),則所述第二子過(guò)程判定當(dāng)前所請(qǐng)求維基頁(yè)面是否具有父輩維基頁(yè)面(過(guò)程方塊5912)。父輩維基頁(yè)面是那些在頁(yè)面命名層次結(jié)構(gòu)中的較高級(jí)別上出現(xiàn)的維基頁(yè)面。例如,如果某個(gè)維基頁(yè)面名為“LevelOne/LevelTwo”并且存在一個(gè)名為“LevelOne”的維基頁(yè)面,則名為“LevelOne”的維基頁(yè)面被認(rèn)為是維基頁(yè)面“LevelOne/LevelTwo”的父輩。在本發(fā)明的另一示例性實(shí)施例中,所述第二子過(guò)程通過(guò)檢查維基頁(yè)面對(duì)象的路徑字段來(lái)判定當(dāng)前所請(qǐng)求的維基頁(yè)面是否具有父輩維基頁(yè)面。如果所述路徑字段包含維基頁(yè)面的名稱,則當(dāng)前所請(qǐng)求的維基頁(yè)面被判定為具有父輩維基頁(yè)面。
如果所述第二子過(guò)程判定當(dāng)前所請(qǐng)求的維基頁(yè)面具有父輩維基頁(yè)面(過(guò)程方塊5912的“是”輸出),則所述第二子過(guò)程檢索路徑,將路徑加載到數(shù)組,并反轉(zhuǎn)數(shù)組順序以便首先顯示最近的父輩頁(yè)面(過(guò)程方塊5914)。在頁(yè)面名稱層次結(jié)構(gòu)中,最近的父輩頁(yè)面是在最后一個(gè)名稱段之前立即出現(xiàn)的名稱段。例如,如果某個(gè)頁(yè)面名為“LevelOne/LevelTwo/LevelThree”,則該頁(yè)面的最近的父輩頁(yè)面是名為“LevelTwo”的頁(yè)面。該頁(yè)面的最遠(yuǎn)的父輩頁(yè)面是名為“LevelOne”的頁(yè)面。接下來(lái),所述第二子過(guò)程判定Wiki_pages表中的行或表項(xiàng)是否與路徑數(shù)組中的頁(yè)面標(biāo)識(shí)之一匹配(過(guò)程方塊5916)。Wiki_pages表是數(shù)據(jù)庫(kù)中包括維基頁(yè)面對(duì)象的對(duì)象變量的表。在本發(fā)明的示例性實(shí)施例中,頁(yè)表中的表項(xiàng)或行包括以下字段identity(ID)、account、tag、time、body、owner identity(ownerID)、modified-by、isLatest、layout、isLayout、isEditing、commentOn、path、attribute(attrib)和errors。
如果第二子過(guò)程判定存在匹配(過(guò)程方塊5916的“是”輸出),所述第二子過(guò)程將加載作為匹配項(xiàng)返回的維基布局頁(yè)面(過(guò)程方塊5918)。被發(fā)現(xiàn)為在Wiki_pages表中具有匹配表項(xiàng)的父輩頁(yè)面稱為匹配的父輩頁(yè)面。在本發(fā)明的示例性實(shí)施例中,所述第二子過(guò)程通過(guò)調(diào)用加載作為匹配項(xiàng)從查詢返回的維基布局頁(yè)面的第三子過(guò)程,來(lái)加載作為匹配項(xiàng)從查詢返回的維基布局頁(yè)面。在本發(fā)明的另一示例性實(shí)施例中,所述第三子過(guò)程是維基對(duì)象的loadPage方法。然后所述操作轉(zhuǎn)到過(guò)程方塊5924。
如果所述第二子過(guò)程判定不存在匹配(過(guò)程方塊5916的“否”輸出),所述第二子過(guò)程將加載默認(rèn)的布局頁(yè)面(過(guò)程方塊5920)。在本發(fā)明的示例性實(shí)施例中,將調(diào)用所述維基對(duì)象的loadPage方法來(lái)加載默認(rèn)的布局頁(yè)面。然后所述操作轉(zhuǎn)到過(guò)程方塊5924。
如果所述第二子過(guò)程判定當(dāng)前所請(qǐng)求的維基頁(yè)面沒(méi)有父輩維基頁(yè)面(過(guò)程方塊5912的“否”輸出),所述第二子過(guò)程將加載默認(rèn)布局頁(yè)面(過(guò)程方塊5920)。在本發(fā)明的示例性實(shí)施例中,將調(diào)用所述維基對(duì)象的loadPage方法來(lái)加載默認(rèn)布局頁(yè)面。然后所述操作轉(zhuǎn)到過(guò)程方塊5924。
如果所述第二子過(guò)程判定為當(dāng)前所請(qǐng)求的維基頁(yè)面設(shè)置了布局字段(過(guò)程方塊5910的“是”輸出),則所述第二子過(guò)程將加載在所述布局字段中命名的布局頁(yè)面(過(guò)程方塊5922)。在本發(fā)明的示例性實(shí)施例中,將調(diào)用所述維基對(duì)象的loadPage方法來(lái)加載命名的布局頁(yè)面。
接下來(lái),所述第二子過(guò)程將布局維基頁(yè)面對(duì)象返回所述第一子過(guò)程(過(guò)程方塊5924)。在本發(fā)明的示例性實(shí)施例中,所述第二子過(guò)程通過(guò)所述第三子過(guò)程將布局維基頁(yè)面對(duì)象返回所述第一子過(guò)程。所述第一子過(guò)程將當(dāng)前所請(qǐng)求的維基頁(yè)面的維基頁(yè)面對(duì)象的正文字段內(nèi)容置于頁(yè)面組件“正文”內(nèi),所述頁(yè)面組件“正文”是維基布局頁(yè)面對(duì)象的正文字段的一部分(過(guò)程方塊5926)。所述正文字段是諸如圖5中的頁(yè)面526的對(duì)象變量528之類的維基頁(yè)面對(duì)象的對(duì)象變量。在本發(fā)明的示例性實(shí)施例中,所述第一子過(guò)程通過(guò)使用當(dāng)前所請(qǐng)求的維基頁(yè)面的維基頁(yè)面對(duì)象的正文字段替代維基布局頁(yè)面對(duì)象中的特殊模板變量,來(lái)將當(dāng)前所請(qǐng)求的維基頁(yè)面的維基頁(yè)面對(duì)象的正文字段內(nèi)容置于維基布局頁(yè)面對(duì)象的正文字段內(nèi)。在本發(fā)明的示例性實(shí)施例中,所述特殊模板變量是字符串變量。在本發(fā)明的另一示例性實(shí)施例中,所述第一子過(guò)程通過(guò)字符串替換,使用當(dāng)前所請(qǐng)求的維基頁(yè)面的正文替代所述特殊模板變量。
接下來(lái),使用維基布局頁(yè)面對(duì)象的正文字段替代當(dāng)前所請(qǐng)求的頁(yè)面的維基頁(yè)面對(duì)象的正文字段(過(guò)程方塊5928)。維基布局頁(yè)面對(duì)象的正文字段包括頁(yè)面組件頁(yè)首、菜單、右邊距、左邊距、頁(yè)腳和正文。在客戶端瀏覽器中呈現(xiàn)頁(yè)面的處理繼續(xù)照常進(jìn)行(過(guò)程方塊5930),隨后所述操作結(jié)束。因此,在客戶端瀏覽器中呈現(xiàn)時(shí),當(dāng)前所請(qǐng)求的維基頁(yè)面包括當(dāng)前所請(qǐng)求的維基頁(yè)面的原始內(nèi)容,所述原始內(nèi)容被包裝在關(guān)聯(lián)的維基布局頁(yè)面內(nèi)。
因此,本發(fā)明的示例性實(shí)施例提供了將維基頁(yè)面內(nèi)容嵌入布局頁(yè)面正文的過(guò)程。此外,可以將特定布局與維基頁(yè)面進(jìn)行關(guān)聯(lián)。用戶可以通過(guò)簡(jiǎn)單地新建維基頁(yè)面并編輯所述新建維基頁(yè)面的內(nèi)容來(lái)新建維基布局頁(yè)面。所述新建維基頁(yè)面的每個(gè)部分的默認(rèn)內(nèi)容由維基命令(在所述命令為之提供內(nèi)容的所述部分之后命名)來(lái)提供。用戶可以通過(guò)使用HTML頁(yè)面流將來(lái)自這些維基命令的內(nèi)容包括在用戶所需的任意頁(yè)面位置上。用戶可以根據(jù)需要將其他靜態(tài)HTML內(nèi)容和其他動(dòng)態(tài)維基命令包括在新建的維基頁(yè)面中。
此外,本發(fā)明的示例性實(shí)施例提供了使維基頁(yè)面從父輩頁(yè)面繼承維基頁(yè)面布局的過(guò)程。每個(gè)維基頁(yè)面都具有與作為該維基頁(yè)面的父輩頁(yè)面的維基頁(yè)面關(guān)聯(lián)的頁(yè)面列表。所述父輩頁(yè)面列表存儲(chǔ)在維基對(duì)象的字段中。在本發(fā)明的示例性實(shí)施例中,所述字段稱為路徑字段。將使用按照反層次結(jié)構(gòu)順序查找父輩維基頁(yè)面列表中包含維基頁(yè)面布局指定符的第一維基頁(yè)面的查詢。然后選擇所指定的布局頁(yè)面以供目標(biāo)頁(yè)面繼承。
圖60是根據(jù)本發(fā)明的示例性實(shí)施例的呈現(xiàn)維基頁(yè)面的操作的流程圖。圖60中的操作可以由諸如圖4中的維基引擎402之類的維基引擎實(shí)現(xiàn),更具體地說(shuō),由諸如圖5中的維基控制器500之類的維基控制器實(shí)現(xiàn)。所述操作從維基引擎接收顯示維基頁(yè)面的請(qǐng)求開(kāi)始(過(guò)程方塊6002)。所述請(qǐng)求通常是由遠(yuǎn)程客戶端瀏覽器發(fā)出的HTTP請(qǐng)求。維基控制器對(duì)象處理所述請(qǐng)求。所述維基控制器對(duì)象開(kāi)始呈現(xiàn)與維基布局頁(yè)面組合的所請(qǐng)求頁(yè)面的過(guò)程(過(guò)程方塊6004)。
在本發(fā)明的示例性實(shí)施例中,通過(guò)調(diào)用維基對(duì)象(如圖5中的維基對(duì)象508)的showPage方法來(lái)調(diào)用所述呈現(xiàn)所請(qǐng)求維基頁(yè)面的過(guò)程。showPage方法檢索所請(qǐng)求的維基頁(yè)面并呈現(xiàn)可以在客戶端瀏覽器中顯示的所請(qǐng)求維基頁(yè)面的HTML版本。所述維基對(duì)象用作生成最新請(qǐng)求的維基頁(yè)面的內(nèi)容所使用的所有對(duì)象和字段的儲(chǔ)存庫(kù)。接下來(lái),維基引擎測(cè)試諸如圖5中的維基頁(yè)面526之類的所請(qǐng)求維基頁(yè)面的稱為組件字段的字段中存儲(chǔ)的位掩碼的位掩碼設(shè)置(過(guò)程方塊6006)。組件字段位掩碼包括與諸如頁(yè)首、菜單、頁(yè)腳之類的維基頁(yè)面中的每個(gè)頁(yè)面組件對(duì)應(yīng)的位。如果給定頁(yè)面組件的位或設(shè)置的值為“1”,則允許布局頁(yè)面中相應(yīng)的頁(yè)面組件維基命令將維基命令所生成的內(nèi)容提供給維基頁(yè)面。如果給定頁(yè)面組件的位或設(shè)置的值為“0”,則不允許布局頁(yè)面中相應(yīng)的頁(yè)面組件維基命令將內(nèi)容提供給維基命令將生成的維基頁(yè)面。
接下來(lái),所述操作將所請(qǐng)求的維基頁(yè)面與關(guān)聯(lián)的維基布局頁(yè)面進(jìn)行組合(過(guò)程方塊6008),從而形成組合頁(yè)面。在本發(fā)明的示例性實(shí)施例中,為了確定與所請(qǐng)求的維基頁(yè)面關(guān)聯(lián)的維基布局頁(yè)面,將檢查頁(yè)表來(lái)確定與所請(qǐng)求的維基頁(yè)面關(guān)聯(lián)的特定維基布局頁(yè)面。在本發(fā)明的示例性實(shí)施例中,所述頁(yè)表稱為Wiki_page表。如果所請(qǐng)求的維基頁(yè)面沒(méi)有與所述頁(yè)表中的維基頁(yè)面關(guān)聯(lián)的特定維基布局頁(yè)面,則將默認(rèn)的維基布局頁(yè)面與所請(qǐng)求的維基頁(yè)面進(jìn)行關(guān)聯(lián)和組合。
因此,本發(fā)明的示例性實(shí)施例提供了以編程的方式隱藏和顯示維基頁(yè)面布局部分的過(guò)程。維基頁(yè)面設(shè)置實(shí)現(xiàn)為當(dāng)用戶編輯維基頁(yè)面時(shí),可由用戶編輯的復(fù)選框。通過(guò)勾選和取消勾選復(fù)選框,用戶控制各種頁(yè)面組件以及頁(yè)面注釋、附件和電子郵件的可見(jiàn)性。
現(xiàn)在參考圖61,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象類的類定義的圖示。諸如圖21中的服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象2100之類的服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象具有由維基數(shù)據(jù)中心類定義來(lái)定義的諸如代碼6102中的類變量之類的特性和對(duì)象變量。
該示例性維基數(shù)據(jù)中心類定義提供維基命令對(duì)象6104的數(shù)組、使用者標(biāo)識(shí)符6106的數(shù)組以及生成者標(biāo)識(shí)符6108的數(shù)組。因此,每當(dāng)針對(duì)給定頁(yè)面實(shí)例來(lái)實(shí)例化服務(wù)器側(cè)數(shù)據(jù)中心時(shí),將由諸如上面所示的維基數(shù)據(jù)中心類定義之類的維基數(shù)據(jù)中心類定義來(lái)定義服務(wù)器側(cè)數(shù)據(jù)中心實(shí)例的數(shù)據(jù)中心特性。
現(xiàn)在參考圖62,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心管理方法類的一組方法接口的圖示。一組數(shù)據(jù)中心管理方法6200是與諸如圖14中的數(shù)據(jù)中心管理1402之類的服務(wù)器側(cè)數(shù)據(jù)中心關(guān)聯(lián)的數(shù)據(jù)中心管理方法接口。代碼6202是恢復(fù)在文件系統(tǒng)或諸如圖1中的存儲(chǔ)單元108之類的其他數(shù)據(jù)存儲(chǔ)設(shè)備中保存的數(shù)據(jù)中心對(duì)象的方法的實(shí)例。代碼6204是將數(shù)據(jù)中心對(duì)象的實(shí)例保存或緩存到文件系統(tǒng)的方法的實(shí)例。
現(xiàn)在參考圖63A,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的生成者和使用者方法類的一組方法接口的圖示。一組生成者和使用者方法6300是與諸如圖21中的生成者和使用者2104之類的服務(wù)器數(shù)據(jù)中心關(guān)聯(lián)的數(shù)據(jù)中心方法接口。一組數(shù)據(jù)中心管理方法6200是諸如圖21中的生成者和使用者2104之類的數(shù)據(jù)中心管理方法接口。
代碼6302是將命令添加到數(shù)據(jù)中心的方法。代碼6304是獲取作為數(shù)據(jù)中心成員的命令的方法。代碼6306是獲取命令的方法。代碼6308是被調(diào)用以添加生成者命令的方法。代碼6310是添加可編輯的生成者命令的方法??删庉嫷纳烧呙钐峁┛杀痪庉嬕赃M(jìn)行創(chuàng)建、更新和刪除操作的數(shù)據(jù)。
代碼6312是刪除諸如常規(guī)生成者命令或可編輯生成者命令之類的生成者命令的方法。代碼6314是獲取所有生成者的列表的方法。代碼6316是將使用者命令添加為特定主題的偵聽(tīng)者的方法。代碼6318是刪除作為特定主題的偵聽(tīng)者的使用者命令的方法。代碼6320是獲取正在偵聽(tīng)特定主題的使用者命令的列表的方法。代碼6322是將客戶端使用者命令添加為特定命令的偵聽(tīng)者的方法。
代碼6324是添加客戶端JavaScript處理機(jī)的命令。代碼6326是刪除作為特定主題的偵聽(tīng)者的使用者命令的代碼。代碼6328是獲取正在偵聽(tīng)特定主題的使用者命令的列表的方法。代碼6330是將客戶端使用者添加為特定主題的偵聽(tīng)者的方法。代碼6332是針對(duì)屬于客戶端側(cè)數(shù)據(jù)中心的命令在客戶端上生成JavaScript代碼的方法。
現(xiàn)在參考圖63B,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的主題方法類的一組方法接口的圖示。一組主題方法6340是服務(wù)器側(cè)數(shù)據(jù)中心上諸如圖21中的主題2106之類的主題方法的方法接口。例如,代碼6342是添加事件主題的方法的實(shí)例。代碼6344是刪除事件主題的方法。
現(xiàn)在參考圖64,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的事件處理方法類的一組方法接口的圖示。一組事件處理方法6400是服務(wù)器側(cè)數(shù)據(jù)中心上諸如圖21中的事件處理2108之類的事件處理方法的方法接口。例如,代碼6402是觸發(fā)事件的方法。代碼6404是在服務(wù)器上處理事件的方法。代碼6406是處理將發(fā)送到服務(wù)器的客戶端事件的方法??梢詫⒍鄠€(gè)事件成批發(fā)送到服務(wù)器。
現(xiàn)在參考圖65,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的命令管理方法類的一組方法接口的圖示。一組命令管理方法6500是服務(wù)器側(cè)數(shù)據(jù)中心上諸如圖21中的命令管理2100之類的命令管理方法的方法接口。例如,代碼6502是設(shè)置命令的變?cè)姆椒?。這將更改源中的變?cè)?。代碼6504是從頁(yè)面源中刪除命令的方法。
現(xiàn)在參考圖66,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的客戶端側(cè)數(shù)據(jù)中心對(duì)象類的類定義的圖示。由客戶端側(cè)數(shù)據(jù)中心的維基數(shù)據(jù)中心類定義來(lái)定義數(shù)據(jù)中心特性和對(duì)象變量,如代碼6600所示。代碼6602是使用者標(biāo)識(shí)符的對(duì)象變量。代碼6604是主題的對(duì)象變量。代碼6606是事件的對(duì)象變量。
現(xiàn)在參考圖67,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的生成者和使用者方法類的一組方法接口的圖示。一組生成者和使用者方法6700是客戶端側(cè)數(shù)據(jù)中心上的諸如圖22中的生成者和使用者2202之類的生成者和使用者方法接口。例如,代碼6702是添加使用者命令的方法。代碼6704是刪除使用者命令的方法。
現(xiàn)在參考圖68,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的主題方法類的一組方法接口的圖示。一組主題方法6800是客戶端側(cè)數(shù)據(jù)中心上的諸如圖22中的主題2204之類的主題方法的方法接口。例如,代碼6802是添加可用于其他使用者命令的主題的方法。代碼6804是獲取可用主題的列表的方法。
現(xiàn)在參考圖69,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的事件處理方法類的一組方法接口的圖示。一組事件處理方法6900是客戶端側(cè)數(shù)據(jù)中心上的諸如圖22中的事件處理2206之類的事件處理方法的方法接口。例如,代碼6902是觸發(fā)所有排隊(duì)事件的方法。代碼6904是觸發(fā)事件的方法。代碼6906是將事件發(fā)送到服務(wù)器以便執(zhí)行的方法。
現(xiàn)在參考圖70,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的命令管理方法類的一組方法接口的圖示。一組命令管理方法7000是客戶端側(cè)數(shù)據(jù)中心上的諸如圖22中的命令管理2208之類的命令管理方法的方法接口。例如,代碼7002是添加維基命令的方法。代碼7004是刪除命令的方法。
數(shù)據(jù)中心主題對(duì)象定義使用者可以訂閱的主題以及生成者命令可以發(fā)布或觸發(fā)的主題。例如,搜索組件是訂閱搜索主題的使用者。當(dāng)用戶接口接收到來(lái)自用戶的搜索條件時(shí),所述用戶接口將針對(duì)該搜索主題觸發(fā)事件。換言之,所述用戶接口是發(fā)布使用者搜索組件所訂閱的主題的生成者。
現(xiàn)在參考圖71,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心主題對(duì)象類的一組對(duì)象變量和方法接口的圖示。對(duì)象變量700定義主題對(duì)象的特性。一組方法是諸如圖21中的數(shù)據(jù)中心主題對(duì)象2112和圖22中的數(shù)據(jù)中心主題對(duì)象2210之類的客戶端側(cè)數(shù)據(jù)中心或服務(wù)器側(cè)數(shù)據(jù)中心上的數(shù)據(jù)中心主題對(duì)象的方法接口。在本發(fā)明的該示例性實(shí)施例中,與服務(wù)器關(guān)聯(lián)的數(shù)據(jù)中心主題對(duì)象和與客戶端關(guān)聯(lián)的數(shù)據(jù)中心主題對(duì)象具有相同的對(duì)象變量和方法。
現(xiàn)在參考圖72,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心事件對(duì)象類的類定義和方法接口的圖示。類定義7200定義事件對(duì)象的特性。例如,代碼7202定義主題的對(duì)象變量。所有事件對(duì)象都在主題對(duì)象變量中具有主題值。代碼7204定義值的對(duì)象變量。事件對(duì)象可以使數(shù)據(jù)存儲(chǔ)在對(duì)象變量值中。但是,不是所有事件對(duì)象都包括數(shù)據(jù)。
在本發(fā)明的該示例性實(shí)施例中,一組方法是諸如圖21中的數(shù)據(jù)中心事件對(duì)象2114和圖22中的數(shù)據(jù)中心事件對(duì)象2212之類的數(shù)據(jù)中心事件對(duì)象的方法接口。與服務(wù)器關(guān)聯(lián)的數(shù)據(jù)中心事件對(duì)象和與客戶端關(guān)聯(lián)的數(shù)據(jù)中心事件對(duì)象具有相同的對(duì)象變量和方法。
在不偏離本發(fā)明的示例性實(shí)施例的范圍的情況下,數(shù)據(jù)中心對(duì)象、數(shù)據(jù)中心主題對(duì)象和/或數(shù)據(jù)中心事件對(duì)象可以包括所述示例性實(shí)施例中未示出的其他方法。此外,與數(shù)據(jù)中心對(duì)象、數(shù)據(jù)中心主題對(duì)象和/或數(shù)據(jù)中心事件對(duì)象關(guān)聯(lián)的一種或多種方法可以不存在于根據(jù)本發(fā)明的示例性實(shí)施例的數(shù)據(jù)中心對(duì)象、數(shù)據(jù)中心主題對(duì)象和/或數(shù)據(jù)中心事件對(duì)象的一組方法中。
在基于事件的維基組件模型中,某些維基組件在該組件可以響應(yīng)或觸發(fā)事件對(duì)象之前,需要存在一組最小充分變?cè)?。這些最小充分變?cè)梢詠?lái)自多個(gè)分離的源。因此,本發(fā)明的示例性實(shí)施例的各方面提供了最小充分變?cè)獧z測(cè)機(jī)制,所述機(jī)制聚合來(lái)自潛在的多個(gè)源的變?cè)獢?shù)據(jù)并根據(jù)聲明的參數(shù)準(zhǔn)則匹配變?cè)?,以便只有?dāng)存在滿足所聲明/定義的參數(shù)準(zhǔn)則的最小充分變?cè)獣r(shí)才觸發(fā)“data available”事件。
維基變?cè)獙?duì)象是與諸如圖14中的維基命令1404和維基命令1412之類的維基命令關(guān)聯(lián)的對(duì)象。維基變?cè)獙?duì)象具有“avail”屬性,該屬性指示觸發(fā)命令所需的變?cè)欠褚驯辉O(shè)置和是否有效。
圖73是根據(jù)本發(fā)明的示例性實(shí)施例的維基變?cè)獙?duì)象的類定義的圖示。由諸如圖14中的維基命令對(duì)象1404和1402之類的命令對(duì)象上的維基變?cè)獙?duì)象來(lái)執(zhí)行檢測(cè)是否觸發(fā)argument/available事件的算法。代碼7302是指示變?cè)獙?duì)象是否有效的對(duì)象變量。代碼7304是指示變?cè)欠褚言O(shè)置和可用的變?cè)獙?duì)象。
現(xiàn)在參考圖74,其中示出了根據(jù)本發(fā)明的示例性實(shí)施例的檢測(cè)是否觸發(fā)argument/available事件的算法的偽代碼的圖示。
在該實(shí)例中,代碼7400是判定觸發(fā)數(shù)據(jù)中心事件對(duì)象的最小必要變?cè)械拿總€(gè)變?cè)欠窨捎玫乃惴?。在代碼7402中檢查每個(gè)變?cè)獊?lái)判定可用變量是否為null。如果所述算法指示集合中的每個(gè)變?cè)伎捎茫瑒t代碼7406判定變?cè)欠窨捎煤鸵驯辉O(shè)置。如果變?cè)捎貌⒁驯辉O(shè)置,則代碼7408觸發(fā)與變?cè)P(guān)聯(lián)的新的數(shù)據(jù)中心事件對(duì)象。
因此,示例性實(shí)施例的各方面提供了服務(wù)器側(cè)數(shù)據(jù)中心對(duì)象和相應(yīng)的客戶端側(cè)數(shù)據(jù)中心對(duì)象,以便在維基環(huán)境和客戶端環(huán)境中的命令之間傳送和路由事件對(duì)象。使用數(shù)據(jù)中心對(duì)象使得命令能夠在處理與給定維基頁(yè)面關(guān)聯(lián)的事件的過(guò)程中更輕松地進(jìn)行交互。
應(yīng)指出的是,盡管根據(jù)維基環(huán)境中的維基應(yīng)用描述了上面詳細(xì)說(shuō)明的本發(fā)明的示例性實(shí)施例,但是本發(fā)明的上述示例性實(shí)施例并不限于維基環(huán)境中的維基應(yīng)用。使用維基環(huán)境中的維基應(yīng)用作為上述說(shuō)明中的實(shí)例并非旨在以任何方式限制本發(fā)明的范圍。對(duì)本領(lǐng)域的技術(shù)人員將顯而易見(jiàn)的是,本發(fā)明的上述示例性實(shí)施例等同地應(yīng)用于一組用戶可通過(guò)接口訪問(wèn)的任何共享環(huán)境。此外,盡管以JavaSxript語(yǔ)言說(shuō)明了上述示例性實(shí)施例的某些方面,但是在上述說(shuō)明中使用JavaScript語(yǔ)言作為實(shí)例并非旨在以任何方式限制本發(fā)明的范圍。本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,上述示例性實(shí)施例可以使用任何面向?qū)ο蟮哪_本編寫(xiě)語(yǔ)言來(lái)實(shí)現(xiàn)。
附圖中的流程圖和方塊圖示出了根據(jù)本發(fā)明的各種實(shí)施例的方法、裝置和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)施方式的體系結(jié)構(gòu)、功能和操作。在此方面,流程圖或方塊圖中的每個(gè)方塊都可以代表代碼的模塊、段或部分,它們包括實(shí)現(xiàn)一個(gè)或多個(gè)指定邏輯功能的一個(gè)或多個(gè)可執(zhí)行指令。還應(yīng)指出的是,在某些備選實(shí)施方式中,方塊中示出的功能可以不按照?qǐng)D中示出的順序執(zhí)行。例如,連續(xù)示出的兩個(gè)方塊實(shí)際上可能基本上同時(shí)執(zhí)行,或者有時(shí)按照相反的順序執(zhí)行方塊,具體取決于所涉及的功能。
本發(fā)明可以采取完全硬件實(shí)施例、完全軟件實(shí)施例或包含硬件和軟件元素兩者的實(shí)施例的形式。在一個(gè)優(yōu)選實(shí)施例中,本發(fā)明以軟件實(shí)現(xiàn),所述軟件包括但不限于固件、駐留軟件、微代碼等。
此外,本發(fā)明可以采取可從計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)訪問(wèn)的計(jì)算機(jī)程序產(chǎn)品的形式,所述計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)提供了可以被計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)使用或與計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)結(jié)合的程序代碼。出于此描述的目的,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可以是任何能夠包含、存儲(chǔ)、傳送、傳播或傳輸由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合的程序的有形裝置。
所述介質(zhì)可以是電、磁、光、電磁、紅外線或半導(dǎo)體系統(tǒng)(或裝置或設(shè)備)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的實(shí)例包括半導(dǎo)體或固態(tài)存儲(chǔ)器、磁帶、可移動(dòng)計(jì)算機(jī)盤(pán)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、硬磁盤(pán)和光盤(pán)。光盤(pán)的當(dāng)前實(shí)例包括光盤(pán)-只讀存儲(chǔ)器(CD-ROM)、光盤(pán)-讀/寫(xiě)(CR-R/W)和DVD。
適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個(gè)通過(guò)系統(tǒng)總線直接或間接連接到存儲(chǔ)器元件的處理器。所述存儲(chǔ)器元件可以包括在程序代碼的實(shí)際執(zhí)行期間采用的本地存儲(chǔ)器、大容量存儲(chǔ)裝置以及提供至少某些程序代碼的臨時(shí)存儲(chǔ)以減少必須在執(zhí)行期間從大容量存儲(chǔ)裝置檢索代碼的次數(shù)的高速緩沖存儲(chǔ)器。
輸入/輸出或I/O設(shè)備(包括但不限于鍵盤(pán)、顯示器、指點(diǎn)設(shè)備等)可以直接或通過(guò)中間I/O控制器與系統(tǒng)相連。
網(wǎng)絡(luò)適配器也可以被連接到系統(tǒng)以使所述數(shù)據(jù)處理系統(tǒng)能夠通過(guò)中間專用或公共網(wǎng)絡(luò)變得與其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備相連。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡只是幾種當(dāng)前可用的網(wǎng)絡(luò)適配器類型。
出于示例和說(shuō)明目的給出了對(duì)本發(fā)明的描述,并且所述描述并非旨在是窮舉的或是將本發(fā)明限于所公開(kāi)的形式。對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),許多修改和變化都將是顯而易見(jiàn)的。實(shí)施例的選擇和描述是為了最佳地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并且當(dāng)適合于所構(gòu)想的特定使用時(shí),使得本領(lǐng)域的其他技術(shù)人員能夠理解本發(fā)明的具有各種修改的各種實(shí)施例。
權(quán)利要求
1.一種用于繼承頁(yè)面的頁(yè)面布局的計(jì)算機(jī)實(shí)現(xiàn)的方法,所述計(jì)算機(jī)實(shí)現(xiàn)的方法包括
響應(yīng)于接收到從客戶端瀏覽器顯示當(dāng)前頁(yè)面的請(qǐng)求,判定所述當(dāng)前頁(yè)面是否具有一組父輩頁(yè)面;
布置所述一組父輩頁(yè)面,以使所述一組父輩頁(yè)面中的最近父輩頁(yè)面首先出現(xiàn)在父輩頁(yè)面列表中;
標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面;
將所標(biāo)識(shí)的布局頁(yè)面與所述當(dāng)前頁(yè)面進(jìn)行組合以形成組合頁(yè)面;以及
將所述組合頁(yè)面發(fā)送到所述客戶端瀏覽器。
2.根據(jù)權(quán)利要求1的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述頁(yè)面是允許單個(gè)或多個(gè)用戶有效地集成靜態(tài)內(nèi)容和交互內(nèi)容的協(xié)作Web環(huán)境中的頁(yè)面。
3.根據(jù)權(quán)利要求1的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面的步驟進(jìn)一步包括
查詢數(shù)據(jù)庫(kù)以查找頁(yè)表中具有與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面匹配的表項(xiàng)的第一行以形成匹配的父輩頁(yè)面;以及
確定與所述匹配的父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面。
4.根據(jù)權(quán)利要求3的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述頁(yè)表中的表項(xiàng)包括頁(yè)面和與該頁(yè)面關(guān)聯(lián)的布局頁(yè)面。
5.根據(jù)權(quán)利要求3的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括
響應(yīng)于未找到頁(yè)表中具有與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面匹配的表項(xiàng)的第一行,將默認(rèn)布局頁(yè)面與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面相關(guān)聯(lián)。
6.根據(jù)權(quán)利要求1的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述當(dāng)前頁(yè)面包括所述一組父輩頁(yè)面的列表。
7.根據(jù)權(quán)利要求1的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述一組父輩頁(yè)面中的所述最近父輩頁(yè)面是與在最后一個(gè)名稱段之前立即出現(xiàn)的名稱段對(duì)應(yīng)的頁(yè)面,其中所述最后一個(gè)名稱段對(duì)應(yīng)于所述當(dāng)前頁(yè)面。
8.一種包括計(jì)算機(jī)可用介質(zhì)的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)可用介質(zhì)包含用于繼承頁(yè)面的頁(yè)面布局的計(jì)算機(jī)可用程序代碼,所述計(jì)算機(jī)程序產(chǎn)品包括
用于響應(yīng)于接收到從客戶端瀏覽器顯示當(dāng)前頁(yè)面的請(qǐng)求,判定所述當(dāng)前頁(yè)面是否具有一組父輩頁(yè)面的計(jì)算機(jī)可用程序代碼;
用于布置所述一組父輩頁(yè)面,以使所述一組父輩頁(yè)面中的最近父輩頁(yè)面首先出現(xiàn)在父輩頁(yè)面列表中的計(jì)算機(jī)可用程序代碼;
用于標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面的計(jì)算機(jī)可用程序代碼;
用于將所標(biāo)識(shí)的布局頁(yè)面與所述當(dāng)前頁(yè)面進(jìn)行組合以形成組合頁(yè)面的計(jì)算可用程序代碼;以及
用于將所述組合頁(yè)面發(fā)送到所述客戶端瀏覽器的計(jì)算機(jī)可用程序代碼。
9.根據(jù)權(quán)利要求8的計(jì)算機(jī)程序產(chǎn)品,其中所述頁(yè)面是允許單個(gè)或多個(gè)用戶有效地集成靜態(tài)內(nèi)容和交互內(nèi)容的協(xié)作Web環(huán)境中的頁(yè)面。
10.根據(jù)權(quán)利要求8的計(jì)算機(jī)程序代碼,其中用于標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面的計(jì)算機(jī)可用程序代碼進(jìn)一步包括
用于查詢數(shù)據(jù)庫(kù)以查找頁(yè)表中具有與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面匹配的表項(xiàng)的第一行以形成匹配的父輩頁(yè)面的計(jì)算機(jī)可用程序代碼;以及
用于確定與所述匹配的父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面的計(jì)算機(jī)可用程序代碼。
11.根據(jù)權(quán)利要求9的計(jì)算機(jī)程序產(chǎn)品,其中所述頁(yè)表中的表項(xiàng)包括頁(yè)面和與該頁(yè)面關(guān)聯(lián)的布局頁(yè)面。
12.根據(jù)權(quán)利要求9的計(jì)算機(jī)程序產(chǎn)品,還包括
用于響應(yīng)于未找到頁(yè)表中具有與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面匹配的表項(xiàng)的第一行,將默認(rèn)布局頁(yè)面與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面相關(guān)聯(lián)的計(jì)算機(jī)可用程序代碼。
13.根據(jù)權(quán)利要求8的計(jì)算機(jī)程序產(chǎn)品,其中所述當(dāng)前頁(yè)面包括所述一組父輩頁(yè)面的列表。
14.根據(jù)權(quán)利要求8的計(jì)算機(jī)程序產(chǎn)品,其中所述一組父輩頁(yè)面中的所述最近父輩頁(yè)面是與在最后一個(gè)名稱段之前立即出現(xiàn)的名稱段對(duì)應(yīng)的頁(yè)面,其中所述最后一個(gè)名稱段對(duì)應(yīng)于所述當(dāng)前頁(yè)面。
15.一種用于繼承頁(yè)面的頁(yè)面布局的數(shù)據(jù)處理系統(tǒng),所述數(shù)據(jù)處理系統(tǒng)包括
存儲(chǔ)設(shè)備,其中所述存儲(chǔ)設(shè)備存儲(chǔ)計(jì)算機(jī)可用程序代碼;以及
處理器,其中所述處理器執(zhí)行所述計(jì)算機(jī)可用程序代碼以執(zhí)行以下操作響應(yīng)于接收到從客戶端瀏覽器顯示當(dāng)前頁(yè)面的請(qǐng)求,判定所述當(dāng)前頁(yè)面是否具有一組父輩頁(yè)面;布置所述一組父輩頁(yè)面,以使所述一組父輩頁(yè)面中的最近父輩頁(yè)面首先出現(xiàn)在父輩頁(yè)面列表中;標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面;將所標(biāo)識(shí)的布局頁(yè)面與所述當(dāng)前頁(yè)面進(jìn)行組合以形成組合頁(yè)面;以及將所述組合頁(yè)面發(fā)送到所述客戶端瀏覽器。
16.根據(jù)權(quán)利要求15的數(shù)據(jù)處理系統(tǒng),其中所述頁(yè)面是允許單個(gè)或多個(gè)用戶有效地集成靜態(tài)內(nèi)容和交互內(nèi)容的協(xié)作Web環(huán)境中的頁(yè)面。
17.根據(jù)權(quán)利要求15的數(shù)據(jù)處理系統(tǒng),其中執(zhí)行計(jì)算機(jī)可用程序代碼以標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面進(jìn)一步包括
執(zhí)行計(jì)算機(jī)可用程序代碼來(lái)查詢數(shù)據(jù)庫(kù)以查找頁(yè)表中具有與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面匹配的表項(xiàng)的第一行以形成匹配的父輩頁(yè)面;以及確定與所述匹配的父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面。
18.根據(jù)權(quán)利要求17的數(shù)據(jù)處理系統(tǒng),其中所述頁(yè)表中的表項(xiàng)包括頁(yè)面和與該頁(yè)面關(guān)聯(lián)的布局頁(yè)面。
19.根據(jù)權(quán)利要求17的數(shù)據(jù)處理系統(tǒng),還包括
響應(yīng)于未找到頁(yè)表中具有與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面匹配的表項(xiàng)的第一行,執(zhí)行計(jì)算機(jī)可用程序代碼以將默認(rèn)布局頁(yè)面與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面相關(guān)聯(lián)。
20.根據(jù)權(quán)利要求15的數(shù)據(jù)處理系統(tǒng),其中所述當(dāng)前頁(yè)面包括所述一組父輩頁(yè)面的列表。
全文摘要
本發(fā)明提供了一種用于繼承頁(yè)面的頁(yè)面布局的方法。響應(yīng)于接收到從客戶端瀏覽器顯示當(dāng)前頁(yè)面的請(qǐng)求,判定所述當(dāng)前頁(yè)面是否具有一組父輩頁(yè)面。布置所述一組父輩頁(yè)面,以使所述一組父輩頁(yè)面中的最近父輩頁(yè)面首先出現(xiàn)在父輩頁(yè)面列表中。標(biāo)識(shí)與所述一組父輩頁(yè)面中的一個(gè)父輩頁(yè)面關(guān)聯(lián)的布局頁(yè)面。將所標(biāo)識(shí)的布局頁(yè)面與所述當(dāng)前頁(yè)面進(jìn)行組合以形成組合頁(yè)面。將所述組合頁(yè)面發(fā)送到所述客戶端瀏覽器。
文檔編號(hào)G06F17/30GK101484894SQ200780025246
公開(kāi)日2009年7月15日 申請(qǐng)日期2007年7月3日 優(yōu)先權(quán)日2006年7月7日
發(fā)明者B·A·柯蒂斯, S·尼古拉斯, W·E·維克奈爾 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司