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

用于使用維基網(wǎng)頁來定義維基網(wǎng)頁布置的方法

文檔序號:6455434閱讀:250來源:國知局

專利名稱::用于使用維基網(wǎng)頁來定義維基網(wǎng)頁布置的方法
技術(shù)領(lǐng)域
:總體上講,本發(fā)明涉及一種改進的數(shù)據(jù)處理系統(tǒng),且具體地講,本發(fā)明涉及一種編程模型(programmingmodel)的方法與裝置。更具體地講,本發(fā)明涉及一種使用瀏覽器來操縱內(nèi)容的計算機實現(xiàn)的方法、裝置以及計算^/L可用程序代碼。
背景技術(shù)
:因特網(wǎng)是通過網(wǎng)關(guān)連接在一起的計算機與網(wǎng)絡(luò)的全球網(wǎng)絡(luò),在從發(fā)送網(wǎng)絡(luò)的協(xié)議到接收網(wǎng)絡(luò)的協(xié)議的消息轉(zhuǎn)換過程中,網(wǎng)關(guān)處置翁:據(jù)的傳送。在因特網(wǎng)上,任何計算機均可以與任何其它計算機進行通信,其中,信息通過稱為協(xié)議的各種語言在因特網(wǎng)上傳播。因特網(wǎng)上最常使用的協(xié)議集合被稱為傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)。因特網(wǎng)實現(xiàn)了通信與商務(wù)活動的革命化,并且成為信息與娛樂的源泉。越來越頻繁使用的一種軟件是Wiki(維基)軟件。Wiki軟件是一種運行Wiki環(huán)境的合作軟件。在可以由一組用戶通過接口訪問的共享環(huán)境中提供了該軟件。Wiki應(yīng)用是一種允許用戶操縱內(nèi)容的Web站點。用戶可以非常快速且容易地添加、去除、或者編輯和改變內(nèi)容。通常,Wiki應(yīng)用通常用作合作寫作(collaborativewriting)的有效工具。Wiki應(yīng)用的當(dāng)前使用面向合作內(nèi)容創(chuàng)建,諸如在線百科全書或其它知識庫。用戶通常可以在共享環(huán)境中創(chuàng)建內(nèi)容。在這一環(huán)境中,保存對頁的修訂,以允許恢復(fù)先前的版本。另外,還為創(chuàng)建頁間鏈接提供了標(biāo)記快捷方式(mark-upshortcut)。而且,通常利用一種"所見即所得"(WYSIWYG)編輯模式/編輯器。
發(fā)明內(nèi)容示例的實施例描述了一種用于通過網(wǎng)頁來定義網(wǎng)頁布置(pagelayout)的計算機實現(xiàn)的方法、計算機程序產(chǎn)品和數(shù)據(jù)處理系統(tǒng)。響應(yīng)于從客戶^/L瀏覽器接收到顯示當(dāng)前頁的請求,進行創(chuàng)建當(dāng)前頁的數(shù)據(jù)模型所必需的數(shù)據(jù)操縱(manipulation)。而且,響應(yīng)于從客戶機瀏覽器接收顯示當(dāng)前頁的請求,選擇具體的布置頁來形成所選布置頁。所選布置頁與當(dāng)前頁組合以形成組合頁。組合頁被發(fā)送到客戶機瀏覽器。結(jié)合如下附圖,通過示例,將描述本發(fā)明的優(yōu)選實施例,其中圖1是其中可以實現(xiàn)本發(fā)明的說明性實施例的數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)的圖形表示;圖2是其中可以實現(xiàn)本發(fā)明的說明性實施例的數(shù)據(jù)處理系統(tǒng)的方框圖;圖3是說明了根據(jù)本發(fā)明的說明性實施例的用于生成和4吏用Wiki應(yīng)用的部件的圖4是說明了根據(jù)本發(fā)明的說明性實施例的Wiki體系結(jié)構(gòu)的圖5是說明了根據(jù)本發(fā)明的說明性實施例的呈遞(render)頁的數(shù)據(jù)流的圖6是說明了根據(jù)本發(fā)明的說明性實施例的針對Wiki應(yīng)用的客戶機與服務(wù)器上的部件的圖7是根據(jù)本發(fā)明的說明性實施例的用于拖拽(drag)實況內(nèi)容(livecontent)的顯示示范性屏幕;圖8是根據(jù)本發(fā)明的說明性實施例的用于對命令的屬性進行編輯的顯示屏幕;圖9是根據(jù)本發(fā)明的說明性實施例的頁樹視圖10是根據(jù)本發(fā)明的說明性實施例的針對Wiki頁的顯示屏幕;圖11是根據(jù)本發(fā)明的說明性實施例的抽象語法樹的方框圖12是根據(jù)本發(fā)明的說明性實施例的命令的方框圖13是描述根據(jù)本發(fā)明的說明性實施例的屬性編輯部件的圖14是說明根據(jù)本發(fā)明的說明性實施例的針對Wiki應(yīng)用的客戶機與服務(wù)器上的命令之間的數(shù)據(jù)流的圖15是說明根據(jù)本發(fā)明的說明性實施例的、在初始頁呈遞過程期間服務(wù)器上的命令之間的數(shù)據(jù)流的圖16是說明了根據(jù)本發(fā)明的說明性實施例的、響應(yīng)于來自用戶的頁請求所生成的Wiki頁的圖;圖17是說明了根據(jù)本發(fā)明的說明性實施例的、在客戶機瀏覽器上所顯示的所呈遞頁的圖18是說明了根據(jù)本發(fā)明的說明性實施例的、在客戶機瀏覽器上加載并且顯示新頁之后,在客戶機側(cè)數(shù)據(jù)中樞(hub)上的部件之間的數(shù)據(jù)流的圖19A和19B是說明了根據(jù)本發(fā)明的說明性實施例的、在頁更新期間客戶機側(cè)數(shù)據(jù)中樞和服務(wù)器側(cè)數(shù)據(jù)中樞之間的數(shù)據(jù)流的圖20是說明了根據(jù)本發(fā)明的說明性實施例的、在頁更新期間服務(wù)器側(cè)數(shù)據(jù)中樞和客戶機側(cè)數(shù)據(jù)中樞之間的消息流的圖21是說明了根據(jù)本發(fā)明的說明性實施例的服務(wù)器側(cè)數(shù)據(jù)中樞對象的圖;;、、々、、-、,"、圖23是說明了根據(jù)本發(fā)明的說明性實施例的、用于把Wiki頁內(nèi)容嵌入Wiki布置(layout)頁的主體中的過程的方框圖24是描述了根據(jù)本發(fā)明的說明性實施例的、用于確定頁部件的內(nèi)容可視性的復(fù)選框的方框圖25是根據(jù)本發(fā)明的說明性實施例的、用于創(chuàng)建Wiki頁的過程的流程圖26是#4居本發(fā)明的說明性實施例的、用于顯示頁的過程的流程圖;圖27是根據(jù)本發(fā)明的說明性實施例的、用于生成頁樹視圖的過程的流程圖28是根據(jù)本發(fā)明的說明性實施例的、用于拖拽實況內(nèi)容的過程的流程圖29是根據(jù)本發(fā)明的說明性實施例的、用于組合Wiki頁內(nèi)容的過程的流程圖30是根據(jù)本發(fā)明的說明性實施例的、用于編輯命令的過程的流程圖;圖31是根據(jù)本發(fā)明的說明性實施例的、用于呈遞Wiki命令的過程的流程圖32是根據(jù)本發(fā)明的說明性實施例的、用于屬性編輯的預(yù)備過程的流程圖33是根據(jù)本發(fā)明的說明性實施例的、用于屬性編輯的過程的流程圖;圖34是根據(jù)本發(fā)明的說明性實施例的、用于選擇屬性編輯器的過程的流程圖35是根據(jù)本發(fā)明的說明性實施例的、用于刪除頁的過程的流程圖;圖36是根據(jù)本發(fā)明的說明性實施例的、用于修訂頁的過程的流程圖;圖37是根據(jù)本發(fā)明的說明性實施例的、用于拷貝頁的過程的流程圖;圖38是根據(jù)本發(fā)明的說明性實施例的、用于重新命名頁的過程的流程圖39是根據(jù)本發(fā)明的說明性實施例的、用于解除對頁的刪除的過程的流程圖40是根據(jù)本發(fā)明的說明性實施例的、用于選用區(qū)構(gòu)造(paletteconstruction)的過禾呈的流程圖41是根據(jù)本發(fā)明的說明性實施例的、用于配置的過程的流程圖42是根據(jù)本發(fā)明的說明性實施例的、用于導(dǎo)出(export)的過程的流程圖43是根據(jù)本發(fā)明的說明性實施例的、用于導(dǎo)入(import)的過程的流程圖44是根據(jù)本發(fā)明的說明性實施例的、用于取得(retrieve)與解析樹的過程的流程圖45是根據(jù)本發(fā)明的說明性實施例的、用于處理供在Wiki中顯示的Web頁(網(wǎng)頁)的過程;圖46是根據(jù)本發(fā)明的說明性實施例的、用于處理事件的流程圖47是根據(jù)本發(fā)明的說明性實施例的、在實例化服務(wù)器側(cè)數(shù)據(jù)中樞對象時發(fā)生的操作的流程圖48是根據(jù)本發(fā)明的說明性實施例的、在實例化客戶機側(cè)數(shù)據(jù)中樞對象時發(fā)生的操作的流程圖49是根據(jù)本發(fā)明的說明性實施例的、在服務(wù)器側(cè)數(shù)據(jù)中樞從客戶機側(cè)數(shù)據(jù)中樞接收處理事件的請求時發(fā)生的操作的流程圖50是根據(jù)本發(fā)明的說明性實施例的、在生產(chǎn)者(producer)命令處理事件時發(fā)生的操作的流程圖51是根據(jù)本發(fā)明的說明性實施例的、在消費者命令處理事件時發(fā)生的操作的流程8圖52是根據(jù)本發(fā)明的說明性實施例的、在客戶機側(cè)數(shù)據(jù)中樞接收事件時發(fā)生的操作的流程圖53是根據(jù)本發(fā)明的說明性實施例的、在服務(wù)器側(cè)數(shù)據(jù)中樞處理事件時發(fā)生的操作的流程圖54是根據(jù)本發(fā)明的說明性實施例的、客戶機側(cè)數(shù)據(jù)中樞確定是否向服務(wù)器發(fā)送事件以供處理時發(fā)生的操作的流程圖55是根據(jù)本發(fā)明的說明性實施例的、當(dāng)作為processClientEvent方法調(diào)用的結(jié)果、服務(wù)器側(cè)數(shù)據(jù)中樞從客戶機側(cè)數(shù)據(jù)中樞接收事件時發(fā)生的操作的流程圖56是根據(jù)本發(fā)明的說明性實施例的、在Wiki變元(argument)對象執(zhí)行最小充分變元過程時發(fā)生的操作的流程圖57是根據(jù)本發(fā)明的說明性實施例的、在Wiki變元對象確定是否設(shè)置命令的最小所要求變元時發(fā)生的操作的流程圖58是根據(jù)本發(fā)明的說明性實施例的、用于檢測是否應(yīng)該激發(fā)(fire)變元/可用事件的setCheckArguments方法的流程圖59是根據(jù)本發(fā)明的說明性實施例的、以Wiki頁定義Wiki頁布置的才乘作的流程圖60是根據(jù)本發(fā)明的說明性實施例的、呈遞Wiki頁的4喿作的流程圖。圖61是根據(jù)本發(fā)明的說明性實施例的服務(wù)器側(cè)數(shù)據(jù)中樞類的類定義的說明;圖62是根據(jù)本發(fā)明的說明性實施例的數(shù)據(jù)中樞管理方法的類的方法接口的集合的說明;圖63A是根據(jù)本發(fā)明的說明性實施例的生產(chǎn)者與消費者方法的類的方法接口的集合的說明;圖63B是根據(jù)本發(fā)明的說明性實施例的主題(topic)方法的類的方法接口的集合的說明;圖64是根據(jù)本發(fā)明的說明性實施例的事件處理方法的類的方法接口的集合的說明;圖65是根據(jù)本發(fā)明的說明性實施例的命令管理方法的類的方法接口的集合的說明;圖66是根據(jù)本發(fā)明的說明性實施例的客戶機側(cè)數(shù)據(jù)中樞對象類的類定義的說明;圖67是根據(jù)本發(fā)明的說明性實施例的生產(chǎn)者與消費者方法的類的方法接口的集合的說明;圖68是根據(jù)本發(fā)明的說明性實施例的主題方法的方法接口的集合的說明;圖69是根據(jù)本發(fā)明的說明性實施例的事件處理方法的方法接口的集合的說明;圖70是根據(jù)本發(fā)明的說訴性實施例的命令管理方法的方法接口的集合的說明;圖71是根據(jù)本發(fā)明的說明性實施例的數(shù)據(jù)中樞主題對象的類的類定義與方法4妾口的說明;圖72是根據(jù)本發(fā)明的說明性實施例的數(shù)據(jù)中樞事件對象的類的類定義與方法接口的說明;圖73是根據(jù)本發(fā)明的說明性實施例的Wiki變元對象類的類定義的說明;以及圖74是根據(jù)本發(fā)明的說明性實施例的、用于檢測是否應(yīng)該激發(fā)變元/可用事件的算法的偽代碼的說明。具體實施例方式現(xiàn)在參照各圖,特別是參照圖12,提供對其中可以實現(xiàn)本發(fā)明的說明性實施例的數(shù)據(jù)處理環(huán)境的相應(yīng)圖的描述。應(yīng)該意識到,圖1-2僅為示范性的,而且不旨在表明或意指對其中可以實現(xiàn)不同實施例的環(huán)境的任何限制??梢詫λ枋龅沫h(huán)境進行多方面的修改?,F(xiàn)在,參照各圖,圖1描述了其中可以實現(xiàn)本發(fā)明的說明性實施例的數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)的圖形表示。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100是其中可以實現(xiàn)實施例的計算機的網(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中連接在一起的各種設(shè)備與計算機之間提供通信鏈接的介質(zhì)。網(wǎng)絡(luò)102可以包括諸如有線、無線通信鏈接或光纖電纜的連接。在所描述的例子中,服務(wù)器104和服務(wù)器106隨存儲單元108—起連接于網(wǎng)絡(luò)102。另外,客戶機IIO、112以及114也連接于網(wǎng)絡(luò)102。這些客戶機IIO、112以及114可以為例如個人計算機或網(wǎng)絡(luò)計算機。在所描述的例子10中,服務(wù)器104向客戶機110、112以及114提供諸如引導(dǎo)文件、操作系統(tǒng)映像以及應(yīng)用的數(shù)據(jù)。在這一例子中,客戶機IIO、112以及114為相對于服務(wù)器104的客戶機。網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100可以包括未在圖中加以顯示的附加的服務(wù)器、客戶機以及其它設(shè)備。在所描述的例子中,網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100為因特網(wǎng),其中網(wǎng)絡(luò)102代表網(wǎng)絡(luò)和網(wǎng)關(guān)的世界范圍的集合,這些網(wǎng)絡(luò)和網(wǎng)關(guān)使用傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)協(xié)議集來互相通信。因特網(wǎng)的核心為主節(jié)點或宿主計算機之間的高速數(shù)據(jù)通信線路的主干(backbone),由成千上萬的商務(wù)、政府、教育以及路由數(shù)據(jù)與消息的其它計算機系統(tǒng)組成。當(dāng)然,也可以把網(wǎng)絡(luò)數(shù)據(jù)處理系統(tǒng)100實現(xiàn)為不同類型的網(wǎng)絡(luò),例如,內(nèi)聯(lián)網(wǎng)(intranet)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)。圖1僅旨在作為例子,而不旨在作為對不同實施例的體系結(jié)構(gòu)的限制?,F(xiàn)在,參照圖2,圖2描述了其中可以實現(xiàn)本發(fā)明的說明性實施例的數(shù)據(jù)處理系統(tǒng)的方框圖。數(shù)據(jù)處理系統(tǒng)200為諸如圖1中的服務(wù)器104或客戶機110的計算機的例子,其中,可能存在實現(xiàn)本發(fā)明的各說明性實施例的過程的計算機可用代碼或指令。在所描述的例子中,數(shù)據(jù)處理系統(tǒng)200使用了包括北橋與存儲器控制器中樞中樞(MCH)202和南橋與輸入/輸出(I/O)控制器中樞(ICH)204的中樞體系結(jié)構(gòu)。把處理器206、主存儲器208以及圖形處理器210耦合于北橋與存儲器控制器中樞202。例如,可以通過加速圖形端口(AGP)把圖形處理器210耦合于MCH。在所描述的例子中,把局域網(wǎng)(LAN)適配器212耦合于南橋與1/0控制器中樞204,通過總線238把音頻適配器216、鍵盤與鼠標(biāo)適配器220、調(diào)制解調(diào)器222、只讀存儲器(ROM)224、通用串行總線(UBS)端口以及其它通信端口232,并且PCl/PCIe設(shè)備234通過總線238耦合于南橋與I/O控制器中樞204,并且通過總線240把硬盤驅(qū)動器(HDD)226和CR-ROM驅(qū)動器230耦合于南橋與1/0控制器中樞204。PCl/PCIe設(shè)備可以包括例如Ethernet適配器、添加卡以及針對筆記本計算機的PC卡。ROM224可以為例如閃速二進制輸入/輸出系統(tǒng)(BIOS)。硬盤驅(qū)動器226和CR-ROM驅(qū)動器230可以使用例如集成驅(qū)動電子裝置(IDE)或串行先進技術(shù)附接(SATA)接口。如圖中所示,也可以通過總線238把超I/0(SIO)設(shè)備236耦合于ii南橋與1/0控制器中樞204。在圖2的說明性實施例中,操作系統(tǒng)運行在處理器206上,并且協(xié)調(diào)數(shù)據(jù)處理系統(tǒng)200中的各個部件,以及提供對它們的控制。所述操作系統(tǒng)可以為商業(yè)可用的操作系統(tǒng),例如MicrosoftWindowsXP(Microsoft和Windows為Microsoft公司在美國、在其它國家、或者在美國與其它國家中的注冊商標(biāo))。面向?qū)ο蟮某绦蛟O(shè)計系統(tǒng),例如JavaTM程序設(shè)計系統(tǒng),可以與操作系統(tǒng)一起運行,并且從在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的Java程序或應(yīng)用提供對操作系統(tǒng)的調(diào)用(Java和所有基于Java的注冊商標(biāo)為SunMicrosystems公司在美國、在其它國家、或者在美國與其它國家中的注冊商標(biāo))。把針對操作系統(tǒng)、面向?qū)ο蟮某绦蛟O(shè)計系統(tǒng)、以及應(yīng)用或程序的指令定位在諸如硬盤驅(qū)動器226的存儲設(shè)備中,并且可以將它們加載于主存儲器208中,以由處理器206執(zhí)行??梢杂商幚砥?06使用可以定位在存儲器或在一或多個外部設(shè)備中的計算機可執(zhí)行指令而執(zhí)行這些說明性實施例的過程,所述存儲器可以為例如主存儲器208、只讀存儲器224等。圖1~2中的硬件可以隨實現(xiàn)的不同而不同。除了圖12中所描述的硬件,或者取代圖12中所描述的硬件,也可以使用其它的內(nèi)部硬件或外圍設(shè)備,例如閃存、等效的非易失存儲器或者光盤驅(qū)動器等。另外,也可以把這些說明性實施例的過程用于多處理器數(shù)據(jù)處理系統(tǒng)。在某些說明性例子中,數(shù)據(jù)處理系統(tǒng)200可以為個人數(shù)字助手(PDA),其通常配置有閃存,以提供用于存儲操作系統(tǒng)文件和/或用戶生成的數(shù)據(jù)的非易失存儲器??偩€系統(tǒng),例如總線238和240,可以由諸如系統(tǒng)總線、1/O總線和PCI總線的一或多條總線構(gòu)成。當(dāng)然,也可以使用任何類型的、提供了附接于結(jié)構(gòu)或體系結(jié)構(gòu)的不同部件或設(shè)備之間的數(shù)據(jù)傳遞的通信結(jié)構(gòu)或體系結(jié)構(gòu),而實現(xiàn)總線系統(tǒng)。通信單元可以包括一或多個用于傳輸和接收數(shù)據(jù)的設(shè)備,例如,調(diào)制解調(diào)器或網(wǎng)絡(luò)適配器。存儲器可以為例如主存儲器208或諸如在北橋與存儲器控制器中樞202中發(fā)現(xiàn)的超高速緩沖存儲器。處理單元可以包括一或多個處理器或CPU。圖1~2中所描述的例子,以及以上所描述的例子,不意味著對體系結(jié)構(gòu)的限制。例如,除呈PDA形式外,^t據(jù)處理系統(tǒng)200也可以為輸入板式(tablet)計算機、膝上計算機或者電話設(shè)備。在這些說明性的例子中,服務(wù)器104可以部署(host)Wiki應(yīng)用。才艮據(jù)說明性實施例,服務(wù)器104處的環(huán)境,允許諸如客戶機110、112以及114的客戶12機合作與開發(fā)應(yīng)用。這些應(yīng)用可以包括例如與天氣相關(guān)的應(yīng)用、學(xué)校的注冊與名錄(roster)、電子郵件應(yīng)用、以及其它類型的面向商務(wù)的應(yīng)用。^L據(jù)說明性實施例,不同的實施例可以包括在提供開發(fā)Wiki應(yīng)用的合作環(huán)境的過程中的服務(wù)器側(cè)、客戶機側(cè)或者這兩側(cè)的處理。這些說明性實施例意識到,當(dāng)前的Wiki應(yīng)用不適合超出作為知識庫或文檔的文本與文件的合作之外的應(yīng)用的合作開發(fā)?,F(xiàn)在,轉(zhuǎn)向圖3,才艮據(jù)本發(fā)明的說明性實施例,描繪用于生成和^f吏用Wiki應(yīng)用的部件的圖。在這一例子中,用戶可以與客戶機環(huán)境300交互,以生成fflf7"涵,n,6fr士4iAAi^r氽6"in:pr堪,nrAt-r'i"1531rbAA氽£rT"l/,jvvjjv1〃i、<jujv厶〃|^>w'j,jhv/乂/ijo'|/""|、-^o_;v/V//v州UiJ丄-|"v^6j^乂機110的客戶機上執(zhí)行的軟件應(yīng)用或環(huán)境。Wiki環(huán)境302在諸如圖1中的服務(wù)器104的數(shù)據(jù)處理系統(tǒng)上運行。在這些例子中,客戶機環(huán)境300處的用戶可以向Wiki環(huán)境302發(fā)送對頁的請求。在這些例子中,用戶通過客戶機環(huán)境300中的瀏覽器進行該請求。Wiki環(huán)境302向用戶返回所述頁。在這些說明性例子中,所述頁包括使用戶能夠操縱與選擇待生成的頁的內(nèi)容的Java腳本語言(JavaScript)。在這些說明性的實施例中,這些頁是向用戶提供對應(yīng)用的訪問的合作Web頁。這些應(yīng)用是可以由在客戶機計算機處的用戶使用和修改的合作應(yīng)用。具體地,這些不同的說明性實施例提供了一種用于用戶生成具有除了合作寫作工具的功能之外的功能的應(yīng)用的方法與裝置。通過PHP:超文本預(yù)處理器(HypertextPreprocessor,PHP)提供這些例子的許多特征。PHP是一種用于創(chuàng)建在Wiki環(huán)境302上執(zhí)行的Web應(yīng)用的編程語言。PHP是開放源,被設(shè)計為用于生成動態(tài)Web內(nèi)容的高級工具的嵌入超文本才示"i己i吾言的扭P本i吾言(scriptinglanguage)。依據(jù)具體的實現(xiàn),可以通過對諸如Java虛擬機(JVM)的虛擬機的使用而促進這些說明性實施例中所提供的不同特征。另外,依據(jù)具體的實施例,也可以使用除JavaScript之外的其它腳本語言來實現(xiàn)這些過程?,F(xiàn)在,轉(zhuǎn)向圖4,根據(jù)本發(fā)明的說明性實施例,描繪說明Wiki體系結(jié)構(gòu)的圖。在這些具體的例子中,這一體系結(jié)構(gòu)是一種相當(dāng)容易實現(xiàn)的(quiteeasilydone,QED)Wiki體系結(jié)構(gòu)。如圖中所說明的,Wiki環(huán)境400包括Wiki引擎402。這一引擎包括請求處置器404、命令處理器406以及頁創(chuàng)作器(pagecomposer)408。請求處置器404接收來自客戶機的請求。13例如,用戶可以向Wiki環(huán)境400發(fā)送通用資源定位符(URL)的形式的通用資源標(biāo)識符(URI)。請求處置器404接收該請求,以進行處理。在這些例子中,針對請求處置器404所處置的每一個請求生成一個頁。請求處置器404還生成用于處置基于AJAX的交互的"頁片段(pagefragment)",頁片段為超文本標(biāo)記語言源片段,而非完整的超文本標(biāo)記頁。命令處理器406響應(yīng)于請求處置器404所接收的請求,處理不同的命令,以建造頁或頁片段。另外,當(dāng)完成了命令和文本片段的處理時,命令處理器406呈遞(render)頁。在生成用戶的頁請求的過程中,也涉及頁創(chuàng)作器408。在這些例子中,頁創(chuàng)作器408用于頁的布置(layout)、頁主體(pagebody)內(nèi)容以及頁的腳本收集。Wiki環(huán)境400還包括輔助功能410。在這一例子中,輔助功能410包括列表412、評論(comment)414、電子郵件416及附件418。通過列表412,用戶可以生成供其他用戶看到的列表。另外,使用評論414,用戶可以把評論或其它文本添加到不同的頁。附件418允許用戶把文件附接于具體的頁。電子郵件416允許當(dāng)更新或修改了頁時通知用戶,或允許用戶向頁發(fā)送電子郵件作為附件。電子郵件416還允許一或多個用戶接收關(guān)于對指定頁的改變的消息。用戶可以訂購Wiki的豐富網(wǎng)點總結(jié)(richsitesummary,RSS)饋送,以確定Wiki頁何時改變。另外,Wiki環(huán)境400還包括Wiki命令420。在所說明的這一實施例中的Wiki命令420包含兩種類型的命令內(nèi)置的(built-in)命令422和定制的(custom)命令424。內(nèi)置的命令422為在Wiki環(huán)境400內(nèi)存在的命令或月良務(wù)。定制的命令424涉及通過外部源提供的命令?;旧?,這些命令允許用戶放入(include)和處理針對頁的數(shù)據(jù)。在一或多個實施例中,Wiki命令420涉及對面向服務(wù)的體系結(jié)構(gòu)(S6rvicsorientedarchitecture,SOA)的使用。這樣的SOA命令允許用戶把服務(wù)包括在頁中。在這些例子中,命令可以通過獨立于應(yīng)用和它們所運行的平臺的、定義得很好的(well-defme)接口,來參考(reference)服務(wù)。在所描述的例子中,服務(wù)為軟件模塊。這些類型的服務(wù)通?;诜蠘?biāo)準(zhǔn)、例如Web服務(wù)描述語言(WSDL)的接口。當(dāng)然,Wiki命令420所參考的服務(wù)可能涉及任何類型的接口。這些命令可以呈不同的形式。例如,這些命令可針對金融、天氣、地圖映像(mapping)、新聞與事件、搜索、政府、或國際信息。數(shù)據(jù)庫426包含諸如用戶所請求和所創(chuàng)建的頁的信息。另外,還把頁、附件、評論以及其它信息的修訂存儲在數(shù)據(jù)庫426中。在說明性的實施例中,通常以表428的形式把信息存儲在數(shù)據(jù)庫426中?,F(xiàn)在,轉(zhuǎn)向圖5,根據(jù)本發(fā)明的說明性實施例,描繪說明在呈遞頁的過程中的數(shù)據(jù)流。在這些例子中,當(dāng)完成了頁的處理,并且準(zhǔn)備好向客戶機傳輸該頁時,服務(wù)器上呈遞該頁。通過諸如圖4中的Wiki引擎402的Wiki引擎,操縱圖5中所說明的不同的部件。在這些說明性的例子中所說明的編程體系結(jié)構(gòu)與模型允許使用客戶機上的瀏覽器對Wiki內(nèi)容進行可視的匯編(assembly)??蛻魴C所請求的每一事物在概念上是頁。例如,使用諸如頁和變量名的通用資源標(biāo)識符模型來引用(reference)變量。另外,在這些例子中,還把頁用作數(shù)據(jù)結(jié)構(gòu)。存儲變量,以備后用。這些變量包括會話變量、請求變量以及持久變量。在這些說明性的例子中,用戶通過列表創(chuàng)建結(jié)構(gòu)化的數(shù)據(jù)??梢圆樵儭⑺阉骱?或組合這些列表。在操縱列表的過程中,用戶使用創(chuàng)建、取得、更新以及刪除(create,retrieve,update,anddelete,CRUD)過程。Wiki控制器500接收來自用戶的通用資源標(biāo)識符506。Wiki控制器500包含路由器502和對象變量504。路由器502把請求處理委托于相應(yīng)的請求處置器。對象變量504提供了處理部件之間的互相連接。例如,Wiki控制器500具有作為指向Wiki對象508的指針的對象變量504"Wiki"。圖5中的每一個對象具有對作為對對象交互所需的其它資源的引用的對象變量。由諸如圖4中的請求處置器404的請求處置器來處置Wiki控制器500。響應(yīng)于接收到通用資源標(biāo)識符506,Wiki控制器500實例化Wiki對象508的實例。如圖中所說明的,Wiki對象508包含對象變量510、變量512、PHP安全514、電子郵件檢查516、用戶518以及頁520。Wiki對象508為無論何時接收到請求都被實例化的實例,而且其用作用于生成頁520的內(nèi)容的所有對象的儲存庫。在這些例子中,對象變量510包含處理頁520所需的信息。變量512包含存儲在會話522中的會話信息。在這些例子中,該會話信息為在用戶與頁交互期間,或者在頁的生成期間所使用的信息。把對象變量510中更持久的數(shù)據(jù)存儲在數(shù)據(jù)庫524中。在所描述的這些例子中,數(shù)據(jù)庫524存儲任何可用于生成頁或用于存儲用戶所進行的改變的信息。PHP安全514是用于確定是否可以運行客戶機所標(biāo)識的代碼,以及是否可以啟動這一代碼的執(zhí)行。PHP為一種主要用于服務(wù)器側(cè)應(yīng)用的開放源編程語言。在這些說明性的例子中,可以由Wiki環(huán)境中的不同的對象執(zhí)行PHP代碼。在這些例子中,用戶既可以從客戶機側(cè),也可以從服務(wù)器側(cè)運行PHP代碼。在Wiki對象508中提供電子郵件4企查516,以當(dāng)把頁520呈遞和發(fā)送給用戶時檢查可以在頁520上顯示的電子郵件消息。用戶518包含關(guān)于用戶的信息,例如用戶特權(quán)級(privilegelevel)、標(biāo)識符以及會話日志。頁526為包含在Wiki對象508中的頁520的更詳細的例子。在這一例子中,頁526包含對象變量528、附件530、過程(process)532、訪問534、布置536、腳本538以及內(nèi)容540。在這些例子中,對象變量528包含針對頁lt據(jù)結(jié)構(gòu)的變量的實例。例如,可以存在區(qū)段陣列(sectionarray)以提供布置信息。語境(context)指針可以引用根Witi命令。實例ID可以存在于對象變量528中,以引用內(nèi)部頁ID。這些不同的變量包含呈遞待向用戶發(fā)送的、諸如頁526的頁所需的信息。附件530為可以在頁中呈現(xiàn)的附件的標(biāo)識。如果用戶選擇了附件,則可以在此刻把附件下載到用戶。過程532包括用于生成將傳遞于用戶的頁的代碼。在這些說明性的例子中,過程為例如用于標(biāo)識頁的內(nèi)容、標(biāo)識任何附件、以及標(biāo)識可以包括在將發(fā)送給用戶的頁中的任何腳本的方法。訪問534用于確定用戶對于要放置在頁上的內(nèi)容具有何種訪問特權(quán)。在一個實施例中,利用訪問控制列表(accesscontrollist,ACL)542標(biāo)識這樣的訪問特權(quán)。對于頁526而言,將包括的內(nèi)容依賴于請求頁的具體用戶所具有的訪問權(quán)而不同。這個用戶是請求頁526的用戶。在生成頁526的內(nèi)容的過程中,對象變量528引用Wiki命令語境544。該命令語境包含對象變量546和內(nèi)容548。對象變量546代表頁的內(nèi)容的存儲器內(nèi)(in-memory)版本。這些變量包括命令列表以及組成當(dāng)前頁的文本片段的列表。內(nèi)容548代表用于操縱頁內(nèi)容的對象方法。在頁526中的執(zhí)行過程532的過程中,通過Wiki命令語境544標(biāo)識來自命令550中的一組命令。Wiki命令語境544根據(jù)命令550來生成一組命令實例。Wiki命令語境544對內(nèi)容540進行解析,并且加載命令以創(chuàng)建諸如片段552的片段的樹結(jié)構(gòu)。片段552還包含對象變量554和內(nèi)容556。片段552為16非呈遞形式的頁526的一部分。在這一例子中,Wiki命令語境544包含代表將包括在頁中的命令的結(jié)構(gòu)的片段。這些命令是可以由用戶操縱的命令。當(dāng)完成過程532時,把頁526下發(fā)到發(fā)出請求的用戶。保存數(shù)據(jù)中樞558,以供以后在交互中使用。另外,在這一例子中,當(dāng)用戶與頁526中的部件進行交互時,數(shù)據(jù)中樞558被恢復(fù),而且還包含過程與數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)中樞558中的過程用于標(biāo)識段552中的頁的哪些命令是可以由數(shù)據(jù)中樞558接收的任何數(shù)據(jù)或命令的消費者。另外,數(shù)據(jù)中樞558還將把結(jié)果返回至客戶機。把這些結(jié)果發(fā)送至位于客戶機上的數(shù)據(jù)中樞?,F(xiàn)在,轉(zhuǎn)向圖6,根據(jù)本發(fā)明的說明性實施例,描述了針對Wiki應(yīng)用的客戶機與服務(wù)器上的部件。在這一例子中,客戶機環(huán)境600是圖3中的客戶機環(huán)境300的更詳細的說明。在這些說明性的實施例中的客戶機環(huán)境600可以采用客戶機Web瀏覽器或具有與諸如因特網(wǎng)的網(wǎng)絡(luò)的連接的某些其它應(yīng)用的形式。Wiki環(huán)境601運行在諸如圖1中的服務(wù)器104的數(shù)據(jù)處理系統(tǒng)上。在這一例子中,客戶機環(huán)境600接收頁602。頁602包括多個部件,例如頭標(biāo)604、腳標(biāo)606、左邊距(leftmargin)608、右邊距(rightmargin)610、菜單612以及主體614。頭標(biāo)604、腳標(biāo)606、左邊距608以及右邊距610為用于布置頁的頁部件。這些部件包括各種內(nèi)容,例如,超文本標(biāo)記語言(HTML)內(nèi)容。菜單612提供了用戶對可以在頁602上或者與頁602相結(jié)合加以執(zhí)行的動作或功能的訪問。例如,菜單612可以包括向服務(wù)器發(fā)送請求的菜單項,當(dāng)授權(quán)時,其將準(zhǔn)許用戶在WYSIWYG編輯器中編輯頁內(nèi)容。在這一例子中,在主體614中發(fā)現(xiàn)了不同類型的內(nèi)容。在這一例子中,主體614包含HTML內(nèi)容616、日期信息618以及變量620。主體614還包括命令622、624、626、628、630以及632。命令622、624、626、628、630以及632為Wiki命令,例如圖4中的Wiki命令420。這些命令是用于通過頁602所呈現(xiàn)的Wiki應(yīng)用的命令。命令622、624、626、628、630以及632隨數(shù)據(jù)中樞634—起提供用于頁602中的動態(tài)內(nèi)容。數(shù)據(jù)中樞634是Wiki環(huán)境中的數(shù)據(jù)中樞對象,類似于圖5中的數(shù)據(jù)中樞558。然而,數(shù)據(jù)中樞634是客戶機側(cè)數(shù)據(jù)中樞。數(shù)據(jù)中樞634包括用于在頁602中的命令和Wiki環(huán)境601中的命令之間發(fā)送和接收事件對象的屬性(attribute)和方法集合。數(shù)據(jù)中樞634包括用于在頁602中的命令和Wiki環(huán)境601中的命令之間發(fā)送和接收事件和/或數(shù)據(jù)的屬性和方法集合。事件對象為定義了在與諸如頁602的Wiki頁相關(guān)聯(lián)的命令之間傳輸?shù)氖录臄?shù)據(jù)對象。事件對象可以包括、但并不必需包括事件數(shù)據(jù)。在這些例子中,事件為指示發(fā)生了某件事情、例如任務(wù)、程序、或者命令的有意義的出現(xiàn)或者發(fā)生的消息。例如,事件可以包括接收用戶輸入、收集變元的最小所需集合、命令操作的完成、給定時間的出現(xiàn)、或者任何其它活動;輸入或數(shù)據(jù)的接收、出現(xiàn)、發(fā)生;或者活動。為了描述其中可以把Wiki應(yīng)用呈現(xiàn)于用戶的方式,給出了對頁602的不同類型的內(nèi)容的說明。然而,這一說明并不意味著對可用于Wiki應(yīng)用的內(nèi)容的類型與范圍的限制。例如,頁602可以包括圖6中未加說明的其它附加的內(nèi)容、命令和/或部件,而不背離本發(fā)明的說明性實施例的范圍。用戶可以:操縱頁602中的內(nèi)容,以-使用Wiki應(yīng)用和/或改變Wiki應(yīng)用執(zhí)行的方式。換句話說,用戶可以通過操縱這些命令的圖形表示,添加內(nèi)容或者從頁602去除內(nèi)容諸如命令,以生成或修改針對頁602的內(nèi)容和/或功沐H匕。在這一例子中,Wiki環(huán)境601為諸如圖3中的Wiki環(huán)境302和圖4中的Wiki環(huán)境400的Wiki環(huán)境。Wiki環(huán)境601包括呈命令樹或者抽象語法樹(abstractsyntaxtree)形式的命令640~"0。在Wiki環(huán)境中更新命令640~M0。命令640~650與命令634~632在實現(xiàn)上不同,但涉及類似的命令。例如,命令632與客戶機環(huán)境相關(guān)聯(lián),并且由用戶在客戶機環(huán)境600中對其進行更新。在網(wǎng)絡(luò)連接上使用AJAX636通過異步JavaScript和可擴展標(biāo)記語言在Wiki環(huán)境601中更新相應(yīng)的命令650。AJAX636為一種用于創(chuàng)建諸如Wiki頁的交互式Web應(yīng)用的Web開發(fā)技術(shù)。AJAX636與后臺的相關(guān)宿主服務(wù)器交換少量的數(shù)據(jù),以4更每次用戶對所請求頁進行改變時不重新加載整個頁。AJAX636旨在提高諸如頁602的頁的交互性、速度、響應(yīng)以及可用性。盡管這些說明性實施例描述了經(jīng)由AJAX或JSON來交換數(shù)據(jù),但是,根據(jù)本發(fā)明的這些性實施例,可以使用給定部件集合之間達成一致的任何通信協(xié)議來交換數(shù)據(jù)。Wiki環(huán)境601中的命令640、642、644、646、648以及650與數(shù)據(jù)中樞638進行交互。數(shù)據(jù)中樞638為服務(wù)器側(cè)數(shù)據(jù)中樞,例如圖5中的數(shù)據(jù)中樞558。在這一說明性的例子中,客戶機環(huán)境600的數(shù)據(jù)中樞634和數(shù)據(jù)中樞18638經(jīng)由AJAX640交換事件和/或數(shù)據(jù)。AJAX636和640可以使用可擴展標(biāo)記語言(XML)作為在客戶機環(huán)境600和Wiki環(huán)境601之間傳遞數(shù)據(jù)的格式,而進行通信,雖然任何格式將可行,包括預(yù)先格式化的超文本標(biāo)記語言(HTML)、普通文本以及JavaScript對象注釋(JavaScriptobjectnotation,JSON)。JavaScript對象注釋為一種輕便計算機數(shù)據(jù)交換格式。JSON為JavaScript的對象文字注釋的子集,但其使用不要求JavaScript.這些說明性實施例提供了一種針對應(yīng)用Wiki的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。Wiki應(yīng)用為允許單個或多個用戶有效地集成靜態(tài)與交互的內(nèi)容的一種合作Web環(huán)境。Wiki頁為Wiki應(yīng)用中的頁。本發(fā)明的說明性實施例允許用戶容易地創(chuàng)建和管理Wiki頁。用戶可以通過拖放實況(live)內(nèi)容,編輯Wiki頁。實況內(nèi)容為根據(jù)變化的信息更新的動態(tài)內(nèi)容。例如,實況內(nèi)容可以包括由鏈接于天氣雷達站的服務(wù)器更新的、針對具體地理地點的天氣圖。在頁樹視圖中保留Wiki頁。頁樹視圖為包括頁和子頁的內(nèi)容層次結(jié)構(gòu)(hierarchy)??梢园秧摌湟晥D稱為Wiki空間(Wikispace)、頁空間、樹、或者其它內(nèi)容層次結(jié)構(gòu)。視需要,本描述中的每一頁既可以為內(nèi)容提供者,也可為針對其它子頁的容器。頁樹視圖不同于其它文件結(jié)構(gòu),因為所有頁均可以包括內(nèi)容,并且同時被視為容器。由賦予于每一頁的名字來區(qū)分頁樹視圖中的頁。頁包括節(jié)點和葉子節(jié)點。節(jié)點可以顯示內(nèi)容和用作文件夾或針對其它Wiki頁的容器。葉子節(jié)點嚴(yán)格地提供內(nèi)容?,F(xiàn)在,轉(zhuǎn)向圖7,根據(jù)本發(fā)明的說明性實施例,描述了用于拖拽實況內(nèi)容的示范性的顯示屏幕。Wiki頁700為諸如圖6中的頁602的頁??梢园茨撤N設(shè)計模式來特別編輯Wiki頁700。例如,用戶可以;險查指示正在被編輯Wiki頁的相當(dāng)容易實現(xiàn)(QED)的復(fù)選框。Wiki頁700可以按設(shè)計模式顯示選用區(qū)(Palette)702。選用區(qū)702是用于合作地操縱Web頁的工具欄或者一組工具。例如,用戶可以使用選用區(qū)702選擇用于在Wiki頁700的主體704中顯示的實況內(nèi)容。主體704為可定制以及編輯以顯示用戶所指定內(nèi)容的Wiki頁700的一部分。選用區(qū)702可以包括任何數(shù)目的圖標(biāo)706、708以及710。每一個圖標(biāo)為可用命令的圖形表示。選用區(qū)702可用于顯示內(nèi)容,其可以包括命令、數(shù)據(jù)、頁內(nèi)容、Wiki用具、數(shù)據(jù)服務(wù)、定制化的列表以及任何數(shù)目的其它特征。圖標(biāo)706可以為例如圖標(biāo)形式的到GoogleTM搜尋工具的實況鏈接。圖標(biāo)708可以為到Google地圖(Google、Google搜尋、以及Google地圖為Google公司在美國、在其它國家、或者在美國與其它國家中的注冊商標(biāo))的實況鏈接。圖標(biāo)710可以為豐富網(wǎng)點總結(jié)或十分簡單聯(lián)合組織(syndication)(RSS)饋送。豐富網(wǎng)點總結(jié)為可擴展標(biāo)記語言(XML)的協(xié)議和應(yīng)用,其提供聯(lián)合組織和聚積Web內(nèi)容的開放方法。使用豐富網(wǎng)點總結(jié),用戶可以創(chuàng)建提供來自Web站點的標(biāo)題、鏈接以及文章概要的數(shù)據(jù)饋送。用戶可能不斷地經(jīng)由主體704中的新聞聚積器把來自Web站點的更新內(nèi)容傳遞給Wiki頁700。新聞聚積器為專門裁剪用于接收這些類型的饋送的一段軟件。在一個例子中,用戶可以通過^te圖標(biāo)708/人選用區(qū)702拖至主體704,來在主體704中顯示Google⑧地圖。用戶還可以^使用如將在圖8中描述的屬性編輯器,來定制通過Wiki命令所顯示的內(nèi)容??梢跃庉嬙谥甘粳F(xiàn)存Wiki命令的屬性的諸如醒目標(biāo)志(eyecatcher)712的頁內(nèi)容顯示醒目標(biāo)志中的現(xiàn)存Wiki命令?,F(xiàn)在,轉(zhuǎn)向圖8,根據(jù)本發(fā)明的說明性實施例,示出了用于對命令的屬性進行編輯的顯示屏幕。新式(modem)Wiki應(yīng)用需要一種對Wiki"削減(markdown)"命令屬性進行編輯的可視機制,其不要求用戶對頁加以編輯,而允許用戶在無需不和諧(jarring)的頁刷新和概念上的語境交換的情況下,修改命令設(shè)置。應(yīng)用Wiki減輕了用戶必須知道或者學(xué)習(xí)超文本標(biāo)記語言標(biāo)記的負(fù)擔(dān)。在這些例子中,應(yīng)用Wiki引入了用于創(chuàng)建列表、表格、以及那些使用短字符序列、行位置以及空白的組合的其它超文本標(biāo)記語言結(jié)構(gòu)的筒略語法(shorthandsyntax)。例如,在行的第一列中,與超文本標(biāo)記語言中所要求的<01><LI></Llx/OL〉標(biāo)簽相對,由單一的星號(*)后跟單個空格,定義列表項。把應(yīng)用Wiki所引入的簡略語法稱為"削減",以強調(diào)使用超文本標(biāo)記語言和在Wiki環(huán)境中創(chuàng)建內(nèi)容的差別。Wiki命令類支持用于編輯"削減"命令的可視屬性編輯器的生成。Wiki頁800為諸如圖7中的Wiki頁700的Wiki頁的部分^L圖。選用區(qū)802類似于圖7中的選用區(qū)702。Wiki頁800包含顯示命名為存儲器以及列表的醒目標(biāo)志804和806的Wiki命令??梢証使用屬性編輯器808,編輯顯示醒目標(biāo)志804和806的Wiki命令的屬性。所述屬性為醒目標(biāo)志所代表的命令所使用的屬性、數(shù)據(jù)、字段以及其它信息,以在圖7中的Wiki頁700上顯示內(nèi)容。屬性編輯器808允許用戶定制實況內(nèi)容所顯示的信息。屬性編輯器808由超文本標(biāo)記語言和隨Wiki頁內(nèi)容一起下載于瀏覽器客戶機的JavaScript構(gòu)成。例如,用戶可以指定用于顯示Google⑧地圖的具體的地址。類似地,用戶可以進行查詢,并且限制在Wiki頁800中所顯示的信息。用戶可以使用屬性編輯器808輸入針對Wiki命令的寬度與高度值,其允許確定Wiki命令的可視化表示的大小。另外,還可以使用屬性編輯器808輸入縮放(scaling)因子、數(shù)據(jù)源的名字、最大和最小值,這些是某些其它例子。屬性編輯器808用于向用戶表面化(surface)Wiki命令的可變點。例如,當(dāng)需要時,圖5中的過程532可以為每個命令生成默認(rèn)的屬性編輯器。每一Wiki命令可以貢獻(contribute)定制化的屬性編輯器,以表面化Wiki命令的獨特可變點。選擇針對命令地醒目標(biāo)志804或806,致使針對相關(guān)命令的屬性編輯器得以顯示?,F(xiàn)在,轉(zhuǎn)向圖9,根據(jù)本發(fā)明的說明性實施例,描述了頁樹視圖。頁樹視圖900是用于向用戶可視地顯示W(wǎng)iki頁的組織的可視存儲結(jié)構(gòu)。頁樹視圖卯0示出了Wiki應(yīng)用中的Wiki頁的名字或標(biāo)簽(tag)。標(biāo)簽為用戶指定的標(biāo)志,用于對Wiki的內(nèi)容歸類。這些例子中的每一個頁為節(jié)點或葉子節(jié)點。Wikispace902為頁樹視圖900的頁樹一見圖的基頁(basepage),并且還可用于引用頁樹視圖900的內(nèi)容。頁樹視圖900不同于其它文件系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),因為Wikispace902和包括測試904、測試906、頂層908以及Wiki910的其它基頁或節(jié)點既可以顯示內(nèi)容,也可以用作針對其它Wiki頁的文件夾或容器。圖形指示符,例如"+"號,可以指示W(wǎng)iki頁為節(jié)點。Wikispace902使用了平板(flat)的層次結(jié)構(gòu),其中,由節(jié)點所代表的每一個頁可以為容器和內(nèi)容提供者。例如,Wikispace902包括內(nèi)容,但也可用于與包括HelloWorld912、主頁914以及菜單測試916的Wiki子頁或葉子節(jié)點的鏈接。在這些例子中,可以顯示頁樹視圖900中的基頁,作為內(nèi)容提供者和頁容器。用戶可以使用頁樹視圖900導(dǎo)航(navigate)Wiki頁。例如,通過點擊Wiki頁,顯示該Wiki頁的內(nèi)容和/或子頁。因此,用戶能夠通過選擇頁名來容易地導(dǎo)航Wiki?,F(xiàn)在,轉(zhuǎn)向圖10,根據(jù)本發(fā)明的說明性實施例,示出針對Wiki頁的顯示屏幕。Wiki頁1000為諸如圖6中的頁602的頁。用戶可能已使用了諸如圖7中的醒目標(biāo)志708和選用區(qū)702的選用區(qū)中的醒目標(biāo)志,來把實況內(nèi)容拖入Wiki頁1000。例如,商務(wù)旅行者可能已先前針對即將來臨的商務(wù)旅行修改過Wiki頁1000,以顯示目的地列表1002。通過點擊目的地列表1002中的每一地點,Wiki頁顯示該地址的國家地圖1004、天氣預(yù)報1006以及當(dāng)?shù)刈⒁馐马?localalert)1008。定制化的信息允許用戶針對商務(wù)旅行的天氣以及其它情況做出計劃,并且可視地描繪每次會議的地點。當(dāng)?shù)刈⒁馐马?008可以包括到針對所指定地理地點的正在發(fā)生的事件和新商店鏈接,向用戶通知可能與商務(wù)會議相關(guān)的局部事件。這些說明性實施例還提供了一種用于處理Web頁以在Wiki環(huán)境中顯示的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。在呈遞最終視圖之前,所添加的部件能夠與其它部件交互。使部件能夠從頁服務(wù)語境中發(fā)現(xiàn)新的屬性與參數(shù)設(shè)置。把驗證(validation)機制用于部件,以在呈遞最終視圖之前驗證輸入與報告錯誤。在頁服務(wù)序列的生命周期內(nèi)處理目標(biāo)事件。在單一的服務(wù)器上管理同一部件的多個版本?,F(xiàn)在,轉(zhuǎn)向圖11,根據(jù)本發(fā)明的說明性實施例,示出了抽象語法樹的方框圖。抽象語法樹環(huán)境1100包括用于形成和處理抽象語法樹1102的各種部件。Wiki命令語境(WCC)1104是從諸如圖6中的頁602的Wiki頁的標(biāo)記語言創(chuàng)建抽象語法樹1102的對象。Wiki命令語境1104為命令的抽象語法樹的雙親。Wiki命令語境1104負(fù)責(zé)加載針對頁或源片段的命令。抽象語法樹1102由針對Wiki源的諸如圖6中的命令640、642、644、646、648以及650的命令構(gòu)成。樹為如下數(shù)據(jù)結(jié)構(gòu),它包括分支出去以包括葉子或節(jié)點的源或基。樹中的互連的節(jié)點代表依賴于其它被互連的節(jié)點的命令。節(jié)點、例如節(jié)點1106~1110,代表抽象語法樹1102中的不同的命令。例如,節(jié)點1106名為Accordion,并且執(zhí)行內(nèi)部化由用戶指定Accordion的屬性與變量以及發(fā)行(emit)針對目標(biāo)是客戶機瀏覽器環(huán)境的Accordion的超文本標(biāo)記語言片段所需的步驟。把節(jié)點1108命名為Template(模板),其是名為Accordion的節(jié)點1106的孩子。節(jié)點1106提供了用于在客戶機瀏覽器環(huán)境中顯示的在Accordion中標(biāo)牌(tab)的名字。把節(jié)點1110命名為Forecast!預(yù)報),22其為用于把天氣預(yù)報插入Wiki頁的命令。數(shù)據(jù)中樞1112為諸如圖6中的數(shù)據(jù)中樞638的數(shù)據(jù)中樞。數(shù)據(jù)中樞1112通過按預(yù)定的遍歷次序遍歷抽象語法樹1102并且援用(invoke)每節(jié)點處的具體的功能,來處理抽象語法樹1102。例如,節(jié)點1114具有用于提供綽度與經(jīng)度的功能。節(jié)點1114可以為提供指定地址的綿度與經(jīng)度的Google⑧地圖命令。取決于頁的復(fù)雜度,Wiki命令語境(WCC)1104所代表的抽象語法樹1102可以包括兩種類型的孩子節(jié)點第一類是先前所描述的那些孩子節(jié)點,第二類是那些其根為另一Wiki命令語境的其它抽象語法樹。當(dāng)處理那些生成也需要加以處理的其它Wiki源片段的統(tǒng)一資源標(biāo)識符請求時,使用另一Wiki命令語境。本發(fā)明的說明性實施例還提供了一種用于擴展Wiki環(huán)境能力的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。Wiki是允許單個或多個用戶有效地集成靜態(tài)的與交互的內(nèi)容的合作Web頁。面向?qū)ο蟮目蚣苡糜诙x如何擴展對象,以容易地創(chuàng)建合作環(huán)境。Wiki環(huán)境需要支持在無需對核心運行時間部件進行改變的情況下,擴展核心環(huán)境的基本機制。這些說明性實施例包括處理Wiki命令以管理所部署的、包括任何數(shù)目Wiki命令的環(huán)境的客戶機與服務(wù)器側(cè)元件。Wiki環(huán)境中的核心處理S1擎和基類的抽象集合用于處理Wiki命令類的具體實現(xiàn),如進一步加以描述的。核心處理引擎支持核心運行時間部件的處理與生命周期管理,以擴展Wiki環(huán)境的能力。所述核心處理引擎為諸如圖4中的Wiki引擎402的引擎?,F(xiàn)在,轉(zhuǎn)向閨12,根據(jù)本發(fā)明的說明性實施例,描述命令的方框圖。Wiki命令為用于實現(xiàn)諸如圖3中的Wiki環(huán)境302的Wiki的功能和過程的命令。圖12描述了Wiki命令元數(shù)據(jù)接口和相關(guān)的命令1200。命令1200為諸如圖5中的命令550的命令。命令1200包括各種命令種類,其可以包括目錄1202、生命周期1204、屬性編輯1206以及頁處理1208。命令1200中僅示出了幾個例子。例如,命令包4舌Get/setCategory1210、getName1212以及getDescription1214。Get/setCategory1210描述Wiki命令所屬的種類。getName1212為部件的簡化的名字。getDescription1214為Wiki命令的文本描述,旨在幫助用戶理解命令。目錄1202還可以包括其它的命令,例如23getHelp,是當(dāng)用戶盤旋于頁或選用區(qū)中的Wiki命令上時所呈現(xiàn)的幫助文本,getSample,返回用于插入命令的樣本W(wǎng)iki命令源,getlcon,返回針對選用區(qū)中的Wiki命令的要顯示的圖標(biāo),getDragContent,返回在初始拖離(dragoff)針對Wiki命令的選用區(qū)期間所使用的Wiki源片K以及getDropContent,返回當(dāng)在初始部4立(placement)上方文下(drop)Wiki命令時所插入的Wiki源片段。生命周期1204可以包括諸如wasSaved1216、wasDeleted1218以及wasCopied1220的命令。在把命令保存在服務(wù)器環(huán)境中之后調(diào)用wasSaved1216。在這些例子中,當(dāng)已經(jīng)從服務(wù)器頁環(huán)境中去除了命令時調(diào)用wasDeleted1218。wasDeleted1218向Wiki命令提供了清除與給定的頁上的Wiki命令相關(guān)的永久性資源的機制。當(dāng)已經(jīng)把包含給定Wiki命令的頁拷貝至另一名字時,調(diào)用wasCopied1220。wasCopied1220向Wiki命令提供了把任何必要的永久性改變施用于新拷貝的頁上的機制。生命周期1204還可以包括其它的命令,例如getVersion,返回Wiki命令的片反本,getParameters,返回與Wiki命令相關(guān)的參凄t的列表,aboutToSave,當(dāng)將要把命令保存在服務(wù)器環(huán)境中時,被調(diào)用,其向命令提供了執(zhí)行為保持命令所需的任何活動的機會。configure,當(dāng)需要配置命令時,被調(diào)用e,get/setPluginData,在配置命令期間,保存/獲取與Wiki命令相關(guān)的數(shù)據(jù),wasUndelete,當(dāng)在先前把命令從某一給定頁刪除之后已經(jīng)把命令放回該頁中時,被調(diào)用,wasRenamed,當(dāng)包含Wiki命令的頁已經(jīng)被重新命名時,被調(diào)用,aboutToExport,緊接著在把Wiki命令導(dǎo)出至Wiki的所保存的格式之前,被調(diào)用,以及waslmported,緊接著在把Wiki命令從Wiki保存格式導(dǎo)入之后,被調(diào)用。屬性編輯1206可以包括諸如generatePropertyEditor1222和allowEdit1224的命令。在這些說明性的實施例中,核心引擎調(diào)用generatePropertyEditor1222,以準(zhǔn)許命令生成客戶機側(cè)編輯視件(visual)。如果未實現(xiàn)generatePropertyEditor1222,則為編輯Wiki命令的參數(shù),生成默認(rèn)的屬性編輯器。屬性編輯器是接口,其允許用戶輸入針對Wiki命令的參數(shù)、值、文本、變量以及其它數(shù)據(jù)。allowEdit1224確定是否準(zhǔn)許對Wiki命令進行編輯。頁處理1208可以包括諸如render1226、drawEyeCatcher1228、refreshOnUpdate1230以及getTargetDIV1232的命令。當(dāng)Wiki命令需要將其本身顯示在針對超文本標(biāo)記語言的輸出流中時,調(diào)用render1226。當(dāng)在頁上描繪命令,以提供可以在客戶機上點擊來操縱Wiki命令的內(nèi)容時,調(diào)用drawEyeCatcher1228,這通常要援用關(guān)于所選擇命令的屬性編輯器。醒目標(biāo)志用于追蹤單(singleton)編輯能力。調(diào)用refreshOnUpdate1230,以確定在已經(jīng)使用屬性編輯器更新了命令的變元之后是否應(yīng)該刷新整個頁。getTargetDIV1232返回要更新的超文本標(biāo)記語言DIV的名字。DIV代表超文本標(biāo)記語言文件中的劃分(division)/區(qū)段(section)。在客戶機瀏覽器上的DIV中顯示每一個命令。DIV具有相關(guān)的標(biāo)識,Wiki引擎將自動生成這一標(biāo)識,或者命令可以通過實現(xiàn)getTargetDIV協(xié)議提供這一標(biāo)識。頁處理1208還可以包括其它命令,例如getDestinationDiv,當(dāng)在頁上重新呈遞命令時,返回要更新的超文本標(biāo)記語言/DIV的名字標(biāo)識。呈遞命令是按指定的方式再現(xiàn)或顯示所編碼的數(shù)據(jù)。例如,通過生成用于顯示醒目標(biāo)志的呈遞在Wiki頁中的超文本標(biāo)記語言,呈遞醒目一示志。getArguments,返回傳遞于命令供處理的實際變元的列表。變元包含getParameters調(diào)用所返回的參凄t的'實際,值,getParameters調(diào)用返回命令的形式變元列表。refreshOnlnsert,被調(diào)用來確定在已經(jīng)在Wiki頁上放置了命令之后是否應(yīng)該刷新整個頁。areArgmentsSet,返回值,該值指定是否已滿足針對Wiki命令的所有輸入變元以致命令可以'激發(fā)(fire),其執(zhí)行模型動作的援用方法。init,被調(diào)用來初始化內(nèi)部Wiki命令。以上所描述的方法與命令,用于提供圖31~43中的過程?,F(xiàn)在,轉(zhuǎn)向圖13,根據(jù)本發(fā)明的說明性實施例,描述示出屬性編輯部件的圖。屬性編輯系統(tǒng)1300包括醒目標(biāo)志1302、屬性編輯器1304以及選擇器編輯器1306。醒目標(biāo)志(Eye-catcher)1302是所選擇命令的圖形表示。例如,醒目標(biāo)志1302可以代表用于顯示所指定地址的地圖的GoogleTM地圖。可以點擊圖標(biāo)形式的醒目標(biāo)志1302,以援用允許用戶編輯所選擇命令的屬性編輯器1304。屬性編輯器1304用于建立命令的屬性。例如,屬性可以指出信息的類型、屬性、參數(shù)、針對屬性的捆綁信息、以及默認(rèn)和可允許的值。例如,屬性編輯器1304可允許用戶指定地址以便Google地圖生成所請求的地圖。選擇器編輯器1306是專門化的屬性編輯器,其允許用戶建立具體的屬性元數(shù)據(jù)。例如,用戶可能能夠使用選擇器編輯器1306指定編輯地址。當(dāng)在屬性編輯器1304中建立屬性時,特定屬性可以自動地打開選擇器編輯器1306,用于針對屬性編輯器1304中的屬性或字段輸入更特定的信息。本發(fā)明的說明性實施例還提供了一種計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼,用于在服務(wù)器側(cè)數(shù)據(jù)中樞處處理從遠程數(shù)據(jù)處理系統(tǒng)上的客戶機側(cè)數(shù)據(jù)中樞接收的Wiki頁的請求。服務(wù)器側(cè)數(shù)據(jù)中樞為當(dāng)服務(wù)器接收到頁請求時實例化的、服務(wù)器上的數(shù)據(jù)中樞對象實例。服務(wù)器側(cè)數(shù)據(jù)中樞與具體的頁實例相關(guān)聯(lián)。于是,每次服務(wù)器從與所述頁相關(guān)的客戶機接收請求例如,修改或更新頁時,可以取得和加載與具體的頁相關(guān)的服務(wù)器側(cè)數(shù)據(jù)中樞的實例,以處理該請求。服務(wù)器側(cè)數(shù)據(jù)中樞包括屬性和方法集合。這一方法集合為數(shù)據(jù)中樞上的一或多個方法,它們用于從服務(wù)器上的生產(chǎn)者命令,把事件發(fā)送給與合作應(yīng)用的實例相關(guān)的一組消費者命令。在這一例子中,這組消費者命令可以位于服務(wù)器側(cè)上、客戶機側(cè)上、或者這兩側(cè)上。消費者命令為如下命令,其需要接收或希望接收事件和/或數(shù)據(jù),用于處理和/或執(zhí)行該命令的功能。消費者命令向數(shù)據(jù)中樞登記以接收與給定主題相關(guān)的事件對象。例如,搜尋部件需要或希望接收搜尋輸入項目,以執(zhí)行搜尋部件的搜尋功能。因此,搜尋部件為搜尋輸入項目的消費者。從而,搜尋命令為與搜尋項目和可用主題相關(guān)的事件的消費者。也可以把消費者命令稱為監(jiān)聽者命令,因為消費者命令正在監(jiān)聽或等待與一或多個具體主題相關(guān)的事件。在以上的例子中,搜尋部件正在監(jiān)聽與可用搜尋項目相關(guān)的主題。在這些例子中,消費者集合包括單個消費者的以及兩或兩個以上的消費者。當(dāng)在客戶機處接收到所請求的頁時,在客戶機處創(chuàng)建客戶機側(cè)數(shù)據(jù)中樞。把此客戶機側(cè)數(shù)據(jù)中樞與諸如Wiki應(yīng)用的合作應(yīng)用的實例相關(guān)聯(lián)。通過路由在經(jīng)由服務(wù)器側(cè)數(shù)據(jù)中樞和/或客戶機側(cè)數(shù)據(jù)中樞的命令之間所傳輸?shù)氖录?,在頁請求的處理期間,對服務(wù)器側(cè)數(shù)據(jù)中樞和相應(yīng)的客戶機側(cè)數(shù)據(jù)中樞的利用,使得與所請求的頁相關(guān)的Wiki命令能夠更容易地進行交互。根據(jù)本發(fā)明的這些說明性實施例,可以利用服務(wù)器側(cè)數(shù)據(jù)中樞和/或客戶機側(cè)數(shù)據(jù)中樞,在任何使用事件處理機制的應(yīng)用中的命令之間路由事件。事件處理機制為準(zhǔn)許諸如Wiki命令的應(yīng)用中的模塊與應(yīng)用中的其它模塊進行通信的機制。例如,Web瀏覽器使用事件處理機制。另外,諸如電子郵件部件和新聞閱讀器的Web應(yīng)用也利用事件處理機制。現(xiàn)在,轉(zhuǎn)向圖14,根據(jù)本發(fā)明的說明性實施例,描述了針對Wiki應(yīng)用的客戶機和服務(wù)器上的命令之間的數(shù)據(jù)流。服務(wù)器1400為諸如圖1中的服務(wù)器104和106的服務(wù)器。服務(wù)器1400為諸如圖3中的Wiki環(huán)境302、圖4中的Wiki環(huán)境400以及圖6中的Wiki環(huán)境601的Wiki環(huán)境的一部分。數(shù)據(jù)中樞1402為諸如圖5中的數(shù)據(jù)中樞558和圖6中的數(shù)據(jù)中樞638的服務(wù)器側(cè)數(shù)據(jù)中樞。當(dāng)從客戶機1408接收到對頁的請求時,在服務(wù)器1400上創(chuàng)建數(shù)據(jù)中樞1402。這樣,當(dāng)從客戶機側(cè)數(shù)據(jù)中樞接收到請求時,實例化數(shù)據(jù)中樞1402。服務(wù)器側(cè)數(shù)據(jù)中樞1402為具有屬性和用于廣播或路由Wiki環(huán)境中命令之間的事件的方法的數(shù)據(jù)中樞對象的實例。服務(wù)器側(cè)數(shù)據(jù)中樞1402上的方法集合用于處理與從客戶機1408上的用戶接收的頁請求相關(guān)聯(lián)的事件與命令。Wiki命令1404為存在于Wiki系統(tǒng)中的Wiki命令對象,諸如圖4中的命令422、圖5中的命令550以及圖6中的命令640~650。Wiki命令1404允許用戶把數(shù)據(jù)包括在頁中和/或處理針對頁的數(shù)據(jù),或者與所請求的Wiki頁相關(guān)的任何其它功能。在這一例子中,Wiki命令1404由Wiki頁對象諸如圖5中的Wiki頁對象526的頁處理回路處理。數(shù)據(jù)中樞1402確定是否存在Wiki命令1404的變元參數(shù)所要求的所有所要求的數(shù)據(jù)和/或輸入值。如果存在所有所要求的數(shù)據(jù)和/或輸入值,則數(shù)據(jù)中樞1402觸發(fā)Wiki命令1404上的invoke(^爰用)方法。該invoke方法觸發(fā)Wiki命令1404,以把事件1406激發(fā)至數(shù)據(jù)中樞1402。事件1406為定義事件的事件對象。在這一說明性的例子中,事件1406由服務(wù)器1400上的Wiki命令1404激發(fā)。然而,根據(jù)本發(fā)明的這些說明性實施例,事件1406也可以包括服務(wù)器側(cè)數(shù)據(jù)中樞1402從客戶機側(cè)數(shù)據(jù)中樞1410接收的事件。在這樣的情況下,事件1406將為由客戶機上的命令所激發(fā)的事件,諸如事件1407,事件1407為客戶機側(cè)Wiki命令1412所激發(fā)的事件對象。根據(jù)本發(fā)明的另一說明性實施例,事件1407可以包括下述事件,該事件由客戶機側(cè)Wiki命令1412生成,并且被發(fā)送至客戶機側(cè)數(shù)據(jù)中樞1410以在客戶機上進行處理,或者路由至服務(wù)器側(cè)數(shù)據(jù)中樞以在服務(wù)器1400上進行處理。當(dāng)從Wiki命令1404接收到事件1406時,數(shù)據(jù)中樞1402把事件1406發(fā)送給事件隊列,以進行處理。事件隊列為緩沖器或者數(shù)據(jù)結(jié)構(gòu),用于在對事件對象進行處理之前存儲事件對象。在處理事件階段期間,服務(wù)器側(cè)數(shù)據(jù)中樞1402處理事件1406。在事件1406的處理期間,服務(wù)器側(cè)數(shù)據(jù)中樞1402確定是否諸如Wiki命令1404的任何命令被登記為為事件1406的消費者命令。消費者命令為請求與給定事件主題相關(guān)的事件的命令。事件主題為與事件對象相關(guān)聯(lián)的主題或論題。例如,作為用戶輸入搜索項目的結(jié)果而激發(fā)的事件對象將具有"搜索"或者"搜索可用"事件主題。消費者命令向數(shù)據(jù)中樞登記為針對給定主題的消費者命令。于是,當(dāng)數(shù)據(jù)中樞接收到針對該給定主題的事件對象時,數(shù)據(jù)中樞能夠把該事件發(fā)送至針對該給定事件主題的登記的消費者命令集合。所登記的消費者命令為已登記為給定主題的事件的消費者的命令。例如,顯示命令聚積針對諸如事故的主題的數(shù)據(jù)的集合。用于在映射顯示上顯示的該命令報告將向數(shù)據(jù)中樞登記為針對主題"事故"的消費者命令。當(dāng)數(shù)據(jù)中樞接收到針對事故的事件時,將把該事故事件對象發(fā)送至針對主題"事故,,登記的所有消費者命令,包括該顯示命令。一旦該顯示命令接收到事故主題事件,則該顯示命令將消費或使用該數(shù)據(jù)生成示出該事故數(shù)據(jù)的映像顯示,28或者更新先前所顯示的映像,以顯示新的事故數(shù)據(jù)。數(shù)據(jù)中樞1410把事件1406發(fā)送給Wiki命令1412,以進行處理。數(shù)據(jù)中樞1410確定Wiki命令1412中是否存在激發(fā)Wiki命令1412所要求的給定變元/參數(shù)的所有所請求的數(shù)據(jù)和/或輸入值。如果存在所有所要求的數(shù)據(jù)和/或輸入值,則數(shù)據(jù)中樞1410觸發(fā)Wiki命令1412中的invoke方法。響應(yīng)于數(shù)據(jù)中樞1410調(diào)用Wiki命令1412上的invoke方法,Wiki命令1412向數(shù)據(jù)中樞1410發(fā)送或激發(fā)事件1407,以進行處理。當(dāng)完成地處理了事件1407時,數(shù)據(jù)中樞1410將把事件1406發(fā)送給瀏覽器或客戶機,以供顯示。當(dāng)事件處于用于在瀏覽器上顯示的適當(dāng)格式諸如超文本標(biāo)記語言代碼時,完成地處理了該事件。這樣,這些說明性實施例提供了用于處理對頁的請求的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。服務(wù)器側(cè)數(shù)據(jù)中樞從遠程數(shù)據(jù)處理系統(tǒng)上的客戶機側(cè)數(shù)據(jù)中樞接收對頁的請求。把客戶機側(cè)數(shù)據(jù)中樞與合作應(yīng)用的實例相關(guān)聯(lián)。服務(wù)器側(cè)數(shù)據(jù)中樞在初始頁呈遞過程期間使用方法集合處理請求。該方法集合用于把事件從服務(wù)器上的生產(chǎn)者命令發(fā)送給與合作應(yīng)用相關(guān)的一組消費者命令?,F(xiàn)在,轉(zhuǎn)向圖15,根據(jù)本發(fā)明的說明性實施例,描述了說明初始頁呈遞過程期間服務(wù)器上的命令之間的數(shù)據(jù)流的圖。數(shù)據(jù)中樞1500為服務(wù)器側(cè)數(shù)據(jù)中樞,諸如圖5中的數(shù)據(jù)中樞558和圖6中的數(shù)據(jù)中樞638。在這一說明性例子中,以PHP:超文本預(yù)處理器(PHP),實現(xiàn)數(shù)據(jù)中樞1500。Wiki命令生產(chǎn)者1502為與服務(wù)器相關(guān)的命令。生產(chǎn)者為Wiki命令部件,其提供可以由另一Wiki部件使用或消費的數(shù)據(jù)。在這一說明性例子中,Wiki命令生產(chǎn)者1502登記為針對主題"汽車"的事件的生產(chǎn)者。為了把Wiki命令生產(chǎn)者1502登記為主題"汽車"的生產(chǎn)者,數(shù)據(jù)中樞1500把針對Wiki命令生產(chǎn)者1502的標(biāo)識符添加到針對與主題"汽車"相關(guān)聯(lián)的生產(chǎn)者標(biāo)識符的對象變量。Wiki命令消費者1506為與服務(wù)器相關(guān)聯(lián)的命令。Wiki命令消費者1506向數(shù)據(jù)中樞1500登記為針對主題"汽車"1058的消費者。為了把Wiki命令消費者1506登記為主題"汽車"的消費者,數(shù)據(jù)中樞1500把針對Wiki命令消費者1506的標(biāo)識符添加到數(shù)據(jù)中樞1500上的消費者對象變量中的消費者命令標(biāo)識符的陣列。Wiki頁1510為對象,其具有與加載于Wiki環(huán)境中的給定所請求頁相關(guān)聯(lián)的處理回路。在初始化階段期間,服務(wù)器調(diào)用ink方法,以初始化與給定的所請求頁相關(guān)聯(lián)的所有命令,諸如Wiki命令生產(chǎn)者1502。當(dāng)初始化時,命令向數(shù)據(jù)中樞登記為生產(chǎn)者命令諸如Wiki命令生產(chǎn)者1504,或者消費者命令諸如Wiki命令消費者1506。當(dāng)Wiki命令生產(chǎn)者1502具有準(zhǔn)備好激發(fā)的數(shù)據(jù)和/或事件時,WikiWiki命令生產(chǎn)者1502取得數(shù)據(jù)和激發(fā)具有主題"汽車/可用"的事件。當(dāng)Wiki命令生產(chǎn)者1502激發(fā)事件主題"汽車/可用"事件1512時,把該事件發(fā)送給數(shù)據(jù)中樞1500。數(shù)據(jù)中樞1500把主題"汽車/可用,,事件1512添加到數(shù)據(jù)中樞1500中的事件隊列1514。在處理了事件隊列中的主題"汽車/可用"事件之后,把"汽車/可用"事件發(fā)送給針對事件主題"汽車"而登記的所有消費者。Wiki頁對象的Wiki頁處理回路調(diào)用第一processEvents方法。在這一處理事件階段期間,數(shù)據(jù)中樞處理服務(wù)器側(cè)數(shù)據(jù)中樞上的事件隊列中的事件,包括由Wiki命令生產(chǎn)者1502激發(fā)的"汽車/可用"事件對象。數(shù)據(jù)中樞1500從事件隊列中取得事件"汽車/可用"。數(shù)據(jù)中樞1500關(guān)于登記為針對事件主題"汽車,,的消費者的每一個命令調(diào)用callback(回調(diào))方法,其中所述的消費者包括Wiki命令消費者1506。把事件作為callback方法的變元/參數(shù),傳遞于Wiki命令消費者1506。消費者callback方法通過執(zhí)行callback方法內(nèi)部的代碼,處理事件對象。如果在初始化所有部件之后,zf旦在呈遞所請求的頁之前,存在將加以執(zhí)行的附加處理,則每一命令具有通過調(diào)用discover(發(fā)現(xiàn))方法執(zhí)行代碼的機會。調(diào)用第二processEvents階段1520,以處理在discover階段期間可能激發(fā)的任何事件。最后,Wiki頁對象1510關(guān)于所有命令調(diào)用呈遞階段。在呈遞階段期間,所有命令應(yīng)該具有它們所有可用的數(shù)據(jù),以便可以生成超文本標(biāo)記語言代碼,并且將其發(fā)送至客戶機,以在客戶機瀏覽器處呈遞作為所請求的頁。如果Wiki消費者1506為生產(chǎn)者所生成的"汽車"數(shù)據(jù)的表顯示,則呈遞階段可以生成如圖16中所示的汽車表?,F(xiàn)在,參照圖16,根據(jù)本發(fā)明的說明性實施例,示出了圖示響應(yīng)于來自用戶的頁請求所生成的Wiki頁1600的圖。如以上所討-淪的,與頁相關(guān)聯(lián)的所有命令可以向數(shù)據(jù)中樞登記為生產(chǎn)者和消費者。當(dāng)由生產(chǎn)者生產(chǎn)事件時,該事件由消費者使用來呈遞超文本標(biāo)記語言或者JavaScript,以呈遞完整頁或頁片段。把超文本標(biāo)記語言或者JavaScript發(fā)送至客戶機瀏覽器,以加以顯示。于是,在Wiki頁處理回路期間,所有的交互流過(ripplethrough)數(shù)據(jù)中樞。由于這些交互,在呈遞時,處置了所有的事件。因此,初始呈遞的頁諸如頁1600充分描述了Wiki頁的正確視圖。換句話說,客戶機不必激發(fā)事件以修改初始呈遞的頁來使頁視圖正確,因為通過服務(wù)器側(cè)數(shù)據(jù)中樞處理了與從服務(wù)器加載新頁相關(guān)聯(lián)的所有事件。當(dāng)在服務(wù)器處處理針對頁的初始請求時,服務(wù)器生成針對所請求頁的超文本標(biāo)記語言代碼和/或JavaScript。當(dāng)在客戶機處接收到超文本標(biāo)記語言代碼和/或JavaScript時,在客戶機處加載新頁以在客戶機瀏覽器中加以顯示。在頁加載過程期間,針對頁的超文本標(biāo)記語言代碼和/或JavaScript代碼創(chuàng)建客戶機側(cè)數(shù)據(jù)中樞對象。正如在服務(wù)器處在初始頁處理回路期間用服務(wù)器側(cè)數(shù)據(jù)中樞登記的服務(wù)器上的命令一樣,客戶機側(cè)數(shù)據(jù)中樞對象用客戶機側(cè)數(shù)據(jù)中樞把客戶機上的所有命令登記為生產(chǎn)者命令和消費者命令。在這些例子中,如果在加載初始頁之后在客戶機處出現(xiàn)的命令交互可以被完全包含在客戶機上并且在客戶機上處理,則不把該命令交互發(fā)送給服務(wù)器。換句話說,Wiki命令在客戶機上進行交互以修改所顯示的頁,以便反映客戶機處用戶動作或其它事物所觸發(fā)的附加的輸入或事件。如果可以完全在客戶機上處理部件交互,則不把客戶機生成的事件發(fā)送至服務(wù)器。這一事件能夠完全在客戶機處加以處理。如果情況如此,則服務(wù)器不必涉及任何方式的事件的處理。在所描述的實施例中,術(shù)語"修改"包括更新頁或者變更頁,以反映新的數(shù)據(jù)和/或新的頁內(nèi)容。這樣,本發(fā)明的說明性實施例提供了一種用于計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼,用于客戶機側(cè)數(shù)據(jù)中樞處理事件。客戶機側(cè)數(shù)據(jù)中樞接收針對給定主題的事件。由與客戶機相關(guān)的生產(chǎn)者命令生成事件??蛻魴C側(cè)數(shù)據(jù)中樞處理事件,以標(biāo)識一組針對給定主題的消費者命令。客戶機側(cè)數(shù)據(jù)中樞把事件發(fā)送至針對給定主題的一組消費者。客戶機側(cè)數(shù)據(jù)中樞從該組消費者中的一或多個消費者接收新的頁內(nèi)容,其中,使用新的頁內(nèi)容更新所顯示的頁,以形成更新的頁?,F(xiàn)在,轉(zhuǎn)向圖17,根據(jù)本發(fā)明的說明性實施例,描述了圖示在客戶機瀏覽器處所顯示的所呈遞的頁。在所呈遞的頁1700上,來自部件1702的搜尋輸入已向客戶機側(cè)數(shù)據(jù)中樞登記為事件主題"搜尋/可用"的生產(chǎn)者?;貞?yīng)(echo)消費者部件1704已向客戶機側(cè)數(shù)據(jù)中樞登記為主題事件"搜尋/可用"的消費者。當(dāng)搜尋部件激發(fā)"搜尋/可用,,事件時,消費者部件1704作用來回應(yīng)用戶所4泉入搜尋部件1702的內(nèi)容。圖18是說明了根據(jù)本發(fā)明的說明性實施例的、在客戶機瀏覽器處加載了和顯示了新頁之后客戶機側(cè)數(shù)據(jù)中樞上各部件之間的數(shù)據(jù)流的圖。數(shù)據(jù)中樞1800為客戶機側(cè)數(shù)據(jù)中樞,諸如圖6中的數(shù)據(jù)中樞634和圖14中的數(shù)據(jù)中樞1410。在頁加載期間,在客戶機上創(chuàng)建數(shù)據(jù)中樞1800。在這一說明性例子中,以JavaScript和超文本標(biāo)記語言實現(xiàn)客戶機側(cè)數(shù)據(jù)中樞1800。Wiki命令生產(chǎn)者1802為客戶機上的命令,其提供可以由另一個Wiki命令消費的數(shù)據(jù)或者希望通知另一個部件已發(fā)生了特定的事件。Wiki命令生產(chǎn)者1802用數(shù)據(jù)中樞1800登記1804為針對主題"搜尋/可用"的生產(chǎn)者。在這一例子中,Wiki命令生產(chǎn)者1802為圖17中的搜尋部件1702。Wiki命令消費者1806為客戶機上的命令,其消費事件對象、消費數(shù)據(jù)、或者希望被通知事件。Wiki命令消費者1806向客戶機側(cè)數(shù)據(jù)中樞1800登記為針對事件主題"搜尋/可用"1808的消費者。在這一例子中,Wiki命令消費者1806為圖17中的回應(yīng)消費者部件1704。Wiki命令消費者1806為服務(wù)器上的相應(yīng)Wiki命令對象的客戶機版本。客戶機上的Wiki命令消費者1806包括服務(wù)器上的Wiki命令對象的所有數(shù)據(jù),但其不包含服務(wù)器上的相應(yīng)Wiki命令中所發(fā)現(xiàn)的所有方法。當(dāng)在輸入了搜尋項目諸如圖17中所示的"Wiki"搜尋項目之后用戶按下"go"按鈕時,Wiki命令生產(chǎn)者1802激發(fā)"搜尋/可用"事件。Wiki命令生產(chǎn)者1802創(chuàng)建事件對象,把數(shù)據(jù)附接于該事件對象,然后通過調(diào)用數(shù)據(jù)中樞1800上的fireEvent方法,激發(fā)該事件對象1810,以把事件發(fā)送給數(shù)據(jù)中樞1800。與在processEvents階段期間把事件在數(shù)據(jù)中樞上排隊并且處理事件的服務(wù)器側(cè)數(shù)據(jù)中樞不同,客戶機側(cè)數(shù)據(jù)中樞1800不把事件發(fā)送給事件隊列。取而代之,客戶機側(cè)數(shù)據(jù)中樞1800立即處理事件,并且把事件發(fā)送給針對該事件登記的消費者集合。在這一說明性例子中,由數(shù)據(jù)中樞1800調(diào)用回應(yīng)部件callback1812。Wiki命令消費者1806使用JavaScript修改所呈遞的頁諸如圖17中的頁1700,以把文本"搜尋項目Wiki"插入所顯示的頁中。用于由Wiki命令消費者180632動態(tài)更新所呈遞的頁的內(nèi)容的JavaScript的示范性的說明包括如下內(nèi)容;VardivId=document.GetElementByld('echoDivId');divId.innerHTML="搜尋項目"+event.getValue();然而,根據(jù)本發(fā)明的說明性實施例,Wiki命令消費者1806可以使用任何已知的或可用的修改頁的方法,包括,但不局限于文檔對象模型(DOM)操縱,來修改所呈遞的頁。但是,如果交互要求服務(wù)器被涉及到事件的處理中,則把事件發(fā)送至服務(wù)器。很可能客戶機上所激發(fā)的事件將要求把該事件發(fā)送至服務(wù)器側(cè)數(shù)據(jù)中樞,因為數(shù)據(jù)或者生存在服務(wù)器上,或者由服務(wù)器取得。換句話說,在于客戶機處顯示了頁之后,從用戶接收新的事件或者新的數(shù)據(jù)。該事件可能要求全部或部分地在服務(wù)器處進行處理。如果情況如此,則客戶機在更新所顯示的頁之前,把事件發(fā)送至服務(wù)器??蛻魴C和服務(wù)器上的數(shù)據(jù)中樞對象可使Wiki部件與命令能夠在客戶機上交互、在服務(wù)器上交互、以及使用基于主題的事件機制有效地連線/連接部件。當(dāng)用戶交互的結(jié)果要求服務(wù)器被訪問以執(zhí)行某些在客戶機上不可能的操作或處理時,客戶機側(cè)數(shù)據(jù)中樞把事件發(fā)送至服務(wù)器側(cè)數(shù)據(jù)中樞。例如,如果服務(wù)器擁有或可以訪問給定用戶交互所需的數(shù)據(jù)諸如數(shù)據(jù)庫表,而客戶機對其不擁有或不可訪問,則把事件發(fā)送服務(wù)器。另外,如果需要服務(wù)器取得用戶交互所需的數(shù)據(jù),例如數(shù)據(jù)反饋,則把事件發(fā)送至服務(wù)器。在這些情況下,把事件發(fā)送至服務(wù)器,以進行處置/處理。一旦完成了服務(wù)器上的事件的處置/處理,則服務(wù)器把所更新的頁內(nèi)容發(fā)送至客戶機,以修改在客戶機處所顯示的頁。例如,搜尋部件為接受來自用戶的輸入的部件。根據(jù)用戶所輸入的文本,把搜尋文本發(fā)送至服務(wù)器。服務(wù)器進行搜尋。服務(wù)器使用表部件呈遞搜尋的結(jié)果。把服務(wù)器上的表部件所生成的所呈遞的表返回于客戶機,以加以顯示。本發(fā)明的說明性實施例還提供了一種用于事件的數(shù)據(jù)中樞處理的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼??蛻魴C側(cè)數(shù)據(jù)中樞接收與當(dāng)前所顯示的頁相關(guān)聯(lián)的給定主題的事件??蛻魴C側(cè)數(shù)據(jù)中樞把事件數(shù)據(jù)發(fā)送至服務(wù)器側(cè)數(shù)據(jù)中樞,以在服務(wù)器上處理事件。響應(yīng)于接收與頁相關(guān)聯(lián)的事件,服務(wù)器側(cè)數(shù)據(jù)中樞把針對給定主題的事件添加到服務(wù)器側(cè)數(shù)據(jù)中樞上的事件隊列。服務(wù)器側(cè)數(shù)據(jù)中樞處理事件隊列33中的事件。標(biāo)識與該事件相關(guān)的給定主題的消費者命令集合。消費者命令為接收針對給定主題的事件的命令。服務(wù)器側(cè)數(shù)據(jù)中樞把事件發(fā)送至針對給定主題的消費者命令集合。消費者命令集合中的一或多個消費者處理事件,以呈遞針對該頁的頁內(nèi)容。然后,服務(wù)器側(cè)數(shù)據(jù)中樞把處理事件的結(jié)果發(fā)送回客戶機側(cè)數(shù)據(jù)中樞。客戶機側(cè)數(shù)據(jù)中樞從服務(wù)器側(cè)數(shù)據(jù)中樞接收事件處理的結(jié)果。處理事件的結(jié)果包括新的頁內(nèi)容。在客戶機瀏覽器處使用新的頁內(nèi)容更新當(dāng)前所顯示的頁,以形成更新的頁。接下來,參照圖19A和19B,根據(jù)本發(fā)明的說明性實施例,示出說明在頁更新期間在客戶機側(cè)數(shù)據(jù)中樞和服務(wù)器側(cè)數(shù)據(jù)中樞之間的數(shù)據(jù)流。當(dāng)?shù)谝淮渭虞dWiki頁時,處理服務(wù)器側(cè)命令,以生成發(fā)送給客戶機以向用戶顯示的初始頁呈遞,如圖8-9中所示。在這一說明性例子中,當(dāng)?shù)谝淮渭虞d頁時,創(chuàng)建服務(wù)器側(cè)數(shù)據(jù)中樞1900。Wiki命令生產(chǎn)者1902為搜尋部件。在初始化階段期間,Wiki命令生產(chǎn)者1902向數(shù)據(jù)中樞l(wèi)卯O初始化和登記1904為事件主題"搜尋/可用"和"搜尋/被點擊的"的生產(chǎn)者。Wiki命令生產(chǎn)者1902搜尋部件還登記為針對由客戶機生成的"搜尋/被點擊的"事件主題的消費者。在這一方式下,Wiki部件的客戶機表示可以與服務(wù)器側(cè)部件進行通信,或者調(diào)用服務(wù)器側(cè)部件上的方法。Wiki命令消費者1906為列表部件。Wiki命令消費者1906向數(shù)據(jù)中樞1900初始化和登記1908為"搜尋/可用,,事件主題的消費者。在第一processEvents階段期間,在服務(wù)器側(cè)數(shù)據(jù)中樞上調(diào)用'processEvents方法。數(shù)據(jù)中樞1900調(diào)用Wiki命令生產(chǎn)者1902上的invoke方法。作為響應(yīng),Wiki命令生產(chǎn)者1902執(zhí)行搜尋,并且生成包括在"搜尋/可用"事件對象中的數(shù)據(jù)。Wiki命令生產(chǎn)者l卯2激發(fā)事件對象"搜尋/可用",以指示搜尋數(shù)據(jù)準(zhǔn)備好。數(shù)據(jù)中樞1900調(diào)用Wiki命令消費者l卯6列表部件上的callback方法,以把"搜尋/可用"事件對象發(fā)送至Wiki命令消費者1906。然后,執(zhí)行discover和第二processEvents階段。最后,在呈遞階段期間,服務(wù)器側(cè)數(shù)據(jù)中樞l(wèi)卯0在與所請求的頁相關(guān)的所有命令上調(diào)用render。Wiki命令生產(chǎn)者1902呈遞超文本標(biāo)記語言和JavaScript,以顯示搜尋表格。Wiki命令消費者l卯6列表部件——目前作為生產(chǎn)者部件——呈遞超文本標(biāo)記語言和JavaScript,以顯示所34述表。把所呈遞的部件的結(jié)果與其余的超文本標(biāo)記語言頁相組合,并且將它們發(fā)送至客戶機,以加以顯示。在瀏覽器加載頁的同時,JavaScript代碼創(chuàng)建客戶機側(cè)數(shù)據(jù)中樞1910,并且向客戶機側(cè)數(shù)據(jù)中樞1910登記所有生產(chǎn)者1912和消費者1914。這為初始頁呈遞。一旦已經(jīng)初始顯示了頁,則用戶交互可以導(dǎo)致對一或多個部件的呈遞的改變。例如,當(dāng)用戶輸入搜尋項目,并且按下"go"時,改變數(shù)據(jù)的用戶交互出現(xiàn)??蛻魴C側(cè)搜尋部件Wiki命令生產(chǎn)者1916以主題"搜尋/被點擊的"激發(fā)事件1918。把搜索短語作為數(shù)據(jù)附接于事件對象??蛻魴C側(cè)數(shù)據(jù)中樞1910接收事件對象,并且將其發(fā)送至登記為針對事件主題"搜尋"的消費者的客戶機上的任何監(jiān)聽者。與在服務(wù)器側(cè)數(shù)據(jù)中樞中不同,客戶機側(cè)數(shù)據(jù)中樞不令事件在事件隊列中排隊。客戶機側(cè)數(shù)據(jù)中樞1910確定是否應(yīng)該把事件發(fā)送至與服務(wù)器側(cè)數(shù)據(jù)中樞相關(guān)的服務(wù)器上的消費者命令。如果應(yīng)該把事件發(fā)送至該服務(wù)器上的消費者命令,則客戶機側(cè)數(shù)據(jù)中樞通過經(jīng)由AJAX、JSON或任何其它已知的或可用的遠程方法援用手段,調(diào)用processClientEvent方法1920,把事件發(fā)送至所述服務(wù)器。服務(wù)器側(cè)數(shù)據(jù)中樞1900把所接收的事件添加到事件隊列1922。服務(wù)器側(cè)數(shù)據(jù)中樞1900處理事件隊列中的事件,其中之一為從客戶機所接收的"搜尋/被點擊的"事件。服務(wù)器側(cè)數(shù)據(jù)中樞1卯0把"搜尋/被點擊的"事件發(fā)送至Wiki命令生產(chǎn)者1902搜尋部件,其被登記為針對事件主題"搜尋/被點擊的,,的消費者1924。Wiki命令生產(chǎn)者1902搜尋部件進行搜尋,并且生成/產(chǎn)生搜尋數(shù)據(jù)。Wiki命令生產(chǎn)者1902創(chuàng)建具有主題"搜尋/可用"的事件對象,并且把所生成的搜尋數(shù)據(jù)附接于事件對象。服務(wù)器側(cè)數(shù)據(jù)中樞1卯0把"搜尋/可用,,事件對象添加到事件隊列。由于服務(wù)器側(cè)數(shù)據(jù)中樞1900在processEvents階段中依然正在處理事件,所以服務(wù)器側(cè)數(shù)據(jù)中樞1900立即把"搜尋/可用,,事件對象從事件隊列中去除,并且進行處理。然后,服務(wù)器側(cè)數(shù)據(jù)中樞1900把"搜尋/可用"事件對象發(fā)送給Wiki命令消費者1906,因為Wiki命令消費者1906被登記為針對"搜尋/可用"主題的消費者1926。Wiki命令消費者1906保存來自"搜尋/可用"事件對象的新的數(shù)據(jù)。服務(wù)器側(cè)數(shù)據(jù)中樞1900調(diào)用在從客戶機側(cè)數(shù)據(jù)中樞1910所接收的原始事件"搜尋/纟皮點擊的"的處理的過程中所涉及的所有部件上的render方法1928。Wiki命令消費者1906列表部件render(呈遞)方法使用超文本標(biāo)記語言和JavaScript建造新的列表。Wiki命令消費者1906把新列表內(nèi)容返回至服務(wù)器側(cè)數(shù)據(jù)中樞1900。服務(wù)器側(cè)數(shù)據(jù)中樞1900從所涉及的所有部件/命令,包括Wiki命令消費者1906,收集新的呈遞,并且捆綁這些新的呈遞物,以返回至客戶機側(cè)數(shù)據(jù)中樞1910。客戶機側(cè)數(shù)據(jù)中樞接收processClientEvent方法的結(jié)果1930,并且使用新頁內(nèi)容更新呈遞在客戶機上的命令1932。接下來,圖20是說明根據(jù)本發(fā)明的說明性實施例的、在頁更新期間在服務(wù)器側(cè)數(shù)據(jù)中樞和客戶機側(cè)數(shù)據(jù)中樞之間的消息流的圖。當(dāng)客戶機側(cè)生產(chǎn)者部件激發(fā)具有與在(消息1)處的事件的名字相連結(jié)的主題"被點擊的"的事件時,所述消息流開始。在消息2.1處,客戶機側(cè)數(shù)據(jù)中樞接收事件,并且將其發(fā)送至客戶機上的任何監(jiān)聽者客戶機側(cè)數(shù)據(jù)中樞確定是否應(yīng)該把事件發(fā)送至服務(wù)器上的監(jiān)聽者(消息2.2)。在這些說明性的例子中,監(jiān)聽者為登記為針對給定事件主題的消費者的命令或部件。如果應(yīng)該把事件發(fā)送至服務(wù)器上的監(jiān)聽者,則客戶機側(cè)數(shù)據(jù)中樞通過調(diào)用processClientEvent或者通過另一種遠程方法援用手段把事件發(fā)送至服務(wù)器(消息2.3)。服務(wù)器側(cè)數(shù)據(jù)中樞把所接收的事件添加到事件隊列(消息3)。在消息4.1處,服務(wù)器側(cè)數(shù)據(jù)中樞處理隊列中的事件,其中之一為來自客戶機的事件。服務(wù)器側(cè)數(shù)據(jù)中樞把"被點擊的,,事件發(fā)送至登記為監(jiān)聽者的相應(yīng)消費者(消息4.2)。部件執(zhí)行事件所希望的動作(消息5.1)。服務(wù)器側(cè)數(shù)據(jù)中樞按相同的方式對待所有事件,而不管該事件是從客戶機還是從服務(wù)器接收的。部件創(chuàng)建指示其結(jié)果可用的新的"可用的"事件(消息5.2)。服務(wù)器側(cè)數(shù)據(jù)中樞把"可用的,,事件添加到隊列(消息6)。服務(wù)器側(cè)數(shù)據(jù)中樞處理"可用的,,事件,并且把該事件發(fā)送至服務(wù)器上的一組消費者(消息7)。消費者部件使用來自"可用的"事件對象的數(shù)據(jù)。服務(wù)器側(cè)數(shù)據(jù)中樞調(diào)用所有部件上的render方法(消息8.1)。所有部件都以超文本標(biāo)記語言和JavaScript把新的呈遞物返回至服務(wù)器側(cè)數(shù)據(jù)中樞(消息8.2)。服務(wù)器側(cè)數(shù)據(jù)中樞把從所有所涉及的部件所收集的呈遞返回至客戶機側(cè)數(shù)據(jù)中樞(消息9)??蛻魴C側(cè)數(shù)據(jù)中樞接收服務(wù)器對事件的處理結(jié)果???6戶機把這一結(jié)果發(fā)送至客戶機上的監(jiān)聽者(消息10),以把頁更新呈遞在客戶機瀏覽器上。在可選的實施例中,也可以在其中服務(wù)器側(cè)數(shù)據(jù)中樞根據(jù)本發(fā)明的說明性實施例進行操作、而不從客戶機側(cè)數(shù)據(jù)中樞接收事件的系統(tǒng)中使能處理頁請求和實現(xiàn)命令之間的交互。在其它例子中,可以在其中客戶機為PAD、蜂窩電話、GPS導(dǎo)航儀,或者任何不支持JavaScript的其它客戶機設(shè)備的系統(tǒng)中實現(xiàn)處理頁請求。圖21說明了根據(jù)本發(fā)明的說明性實施例的服務(wù)器側(cè)數(shù)據(jù)中樞對象。在所描述的例子中,數(shù)據(jù)中樞2100為數(shù)據(jù)中樞對象,諸如圖5中的數(shù)據(jù)中樞558、圖6中的數(shù)據(jù)中樞638以及圖7中的數(shù)據(jù)中樞702。在這一說明性的例子中,數(shù)據(jù)中樞2100為以PHP實現(xiàn)的數(shù)據(jù)中樞對象。針對用戶所請求的Wiki頁的每一個實例,創(chuàng)建數(shù)據(jù)中樞諸如數(shù)據(jù)中樞2100。頁實例用于引用具體的頁視圖以及頁的相關(guān)的數(shù)據(jù)中樞實例。當(dāng)把與給定頁相關(guān)的客戶機上的請求或事件發(fā)送至服務(wù)器時,服務(wù)器加載所指定的與給定頁相關(guān)的數(shù)據(jù)中樞實例。換句話說,針對客戶機所請求的Wiki頁的每一實例,在服務(wù)器上創(chuàng)建數(shù)據(jù)中樞的實例。在把頁實例加載和顯示在客戶機上之后,不再需要客戶機上針對該頁的數(shù)據(jù)中樞實例。把數(shù)據(jù)中樞實例保存在存儲器存儲設(shè)備諸如圖1中的存儲器108中。當(dāng)用戶輸入關(guān)于該頁的新輸入或者請求動作時,通過重新加載與具體頁視圖相關(guān)的數(shù)據(jù)中樞的先前順序化(serialize)的實例,在服務(wù)器上重新創(chuàng)建針對該具體頁視圖的Wiki環(huán)境。所保存和所重新加載的數(shù)據(jù)中樞實例,反映了客戶機瀏覽器上的具體頁的當(dāng)前狀態(tài)。數(shù)據(jù)中樞2100包括屬性/對象變量以及方法集合。所述方法集合包括5個種類或類別的方法。方法的種類如下數(shù)據(jù)中樞管理2102、生產(chǎn)者與消費者2104、主題2106、事件處理2108、以及命令管理2110。在這些說明性的例子中,方法為用于執(zhí)行與諸如數(shù)據(jù)中樞2100的一或多個對象相關(guān)的動作或過程的規(guī)程、函數(shù)、或者例程。數(shù)據(jù)中樞2100的方法集合包括如下方法接口,用于方法執(zhí)行各種功能,例如,保存數(shù)據(jù)中樞實例、取得/重新加載數(shù)據(jù)中樞實例、添加命令、添加生產(chǎn)者、去除生產(chǎn)者等。例如,方法接口的數(shù)據(jù)中樞管理2102集合包括方法接口"公共靜態(tài)函數(shù)init(頁實例),,,用于方法從諸如圖1中的存儲器108的數(shù)據(jù)存儲器中取得所存儲的實例。為了能夠在Wiki環(huán)境和客戶機環(huán)境中的命令之間傳送事件,數(shù)據(jù)中樞2100還調(diào)用數(shù)據(jù)中樞主題對象2112和數(shù)據(jù)中樞事件對象2114上的方法。數(shù)據(jù)中樞主題對象2112主要為下述數(shù)據(jù)對象,該數(shù)據(jù)對象定義消費者命令可以訂購的主題。在這些說明性的例子中,消費者為命令、部件或者對象,其要求和/或請求來自用戶、另一命令、另一部件和/或另一對象的數(shù)據(jù)、事件或者輸入,以執(zhí)行該命令/部件的具體功能。在這些說明性的例子中,生產(chǎn)者為提供來自用戶、另一命令、另一部件和/或另一對象的數(shù)據(jù)、事件或者輸出的命令、部件或者對象。數(shù)據(jù)中樞事件對象2114為定義下述數(shù)據(jù)中樞事件的數(shù)據(jù)對象,所述數(shù)據(jù)中樞事件由生產(chǎn)者加以創(chuàng)建,并且被發(fā)送給針對與事件對象相關(guān)的給定事件主題的消費者。圖22為說明了根據(jù)本發(fā)明的說明性實施例而描述的客戶機側(cè)數(shù)據(jù)中樞對象的圖。數(shù)據(jù)中樞2200為數(shù)據(jù)中樞對象,諸如圖6中的數(shù)據(jù)中樞634和圖14中的數(shù)據(jù)中樞1410,例如,在這一說明性例子中,數(shù)據(jù)中樞2200為以JavaScript實現(xiàn)的客戶機側(cè)數(shù)據(jù)中樞對象。數(shù)據(jù)中樞2200為能夠使Wiki部件與服務(wù)器上的其它Wiki部件以及客戶機上的其它Wiki部件交互的客戶機數(shù)據(jù)中樞。數(shù)據(jù)中樞2200還使得Wiki部件能夠把客戶機上所生成的事件發(fā)送至服務(wù)器,以進行處理。數(shù)據(jù)中樞2200包括屬性和方法集合。在這一說明性例子中,所述方法集合包括4個種類的方法。所述方法種類如下生產(chǎn)者與消費者2202、主題2204、事件處理2206以及命令管理2208??蛻魴C側(cè)數(shù)據(jù)中樞2200還調(diào)用客戶機側(cè)數(shù)據(jù)中樞主題對象2210和客戶機側(cè)數(shù)據(jù)中樞事件對象2212上的方法,以便實現(xiàn)Wiki環(huán)境和客戶機環(huán)境中的命令之間的事件的傳送。數(shù)據(jù)中樞主題對象2210為諸如圖21中的數(shù)據(jù)中樞主題對象2112的數(shù)據(jù)中樞主題對象。客戶機側(cè)數(shù)據(jù)中樞事件對象2212為諸如圖21中的數(shù)據(jù)中樞事件對象2114的數(shù)據(jù)中樞事件對象。在本發(fā)明的一或多個實施例中,Wiki頁的布置通常為靜態(tài)的。而且,Wiki頁布置的靜態(tài)特性,以及以后必須單獨改變頁集合中的每一個頁的布置的要求,使得編輯Wiki頁或者Wiki子頁集合的布置以便它們?nèi)寄芄蚕硗痪唧w的布置十分耗費時間。Wiki頁布置是頁,其示出用于通過所有部件全部就38位創(chuàng)作完整的Wiki頁的頁部件之匯集?;剡^頭來參照圖6,頁600描述了頁部件的例子,例如頭標(biāo)604、腳標(biāo)606、左邊距608、右邊距610、菜單612以及主體614。Wiki頁為Wiki應(yīng)用中的頁。因此,將令人期望的是使得Wiki頁布置是動態(tài)地可配置的,并且在Wiki頁中定義,以致用戶可以像創(chuàng)建新的Wiki頁那樣簡單地創(chuàng)建新的Wiki頁布置。還將令人期望的是使得相關(guān)的Wiki頁的集合共享相同的Wiki布置頁。本發(fā)明的說明性實施例提供用于把Wiki頁內(nèi)容嵌入Wiki布置頁的主體中。Wiki布置頁為定義針對Wiki頁的頁布置的Wiki頁。另外,還可以^fc特定布置與Wiki頁相關(guān)聯(lián)。用戶可以通過簡單地創(chuàng)建新的Wiki頁,并且對新創(chuàng)建的Wiki頁的內(nèi)容進行編輯,而創(chuàng)建新的Wiki布置頁。新創(chuàng)建的Wiki頁提供。Wiki命令為用于實現(xiàn)Wiki應(yīng)用的功能和/或過程的命令。例如,在本發(fā)明的說明性實施例中,Wiki命令被命名為頭標(biāo)、腳標(biāo)、菜單、左邊距以及右邊距。用戶可以通過使用HTML頁流,把來自這些Wiki命令的內(nèi)容包括在用戶所希望的Wiki頁上的任何位置中。HTML頁流為瀏覽器在對包含頁源的HTML標(biāo)簽作出反應(yīng)的過程中如何對Wiki頁的內(nèi)容進行定位。例如,Web頁的源中的HTMIXTABLE〉標(biāo)簽致使瀏覽器呈遞表格顯示,該表格顯示被劃分成縱向自頂向下流動的行與列。于是,用戶可以采用與用于任何其它Wiki頁的方案相同的方案,來編輯Wiki布置頁。用戶可以把其它靜態(tài)HTML內(nèi)容和其它動態(tài)Wiki命令包括新創(chuàng)建的Wiki頁中,如用戶認(rèn)為適當(dāng)?shù)哪菢印_@樣,本發(fā)明的說明性實施例允許用戶創(chuàng)建共享公共外觀與布置的頁,所述公共外觀與布置例如為那些出現(xiàn)在頭標(biāo)中的內(nèi)容,例如公司的標(biāo)志(logo)或圖像、以及菜單所出現(xiàn)的地方。另外,本發(fā)明的說明性實施例還允許用戶按與用戶操作即創(chuàng)建與編輯Wiki頁所熟悉的方式一致的簡單的方式,創(chuàng)建gai公共外觀。無論何時用戶通過鍵入通用資源定位符請求Wiki頁時,都檢查Wiki頁表,以確定是否存在與該頁或者子頁的集合相關(guān)的布置頁名。如果布置頁與所請求的Wiki頁相關(guān)聯(lián),則呈遞Wiki頁,其中把布置信息添加以及包裹在所請求的Wiki頁周圍,從而形成組合的頁。在本發(fā)明的說明性實施例中,把特殊的才莫板變量包括在Wiki布置頁中。39當(dāng)使用新的Wiki布置頁時,由目標(biāo)Wiki頁的內(nèi)容取代該特殊的模板變量。在這些例子中,模板變量為串(string)變量。當(dāng)命名該特殊的模板變量時,用戶希望盡量避免與新請求的頁上的其它文本沖突。因此,該特殊模板變量的名字通常為一種不可能自然出現(xiàn)的模式。在本發(fā)明的說明性實施例中,把該特殊的模板變量稱為%—BODY—%。該特殊的模板變量位于Wiki布置頁的主體字段中。主體字段為Wiki布置頁對象的對象變量,例如圖5中的對象變量528。主體字段包括Wiki頁的原始的、未呈遞的內(nèi)容。本發(fā)明的說明性實施例提供用于Wiki頁從祖先Wiki頁那里繼承Wiki頁的布置。每一個Wiki頁具有作為該Wiki頁的祖先的與該Wiki頁相關(guān)聯(lián)的Wiki頁的列表。祖先Wiki頁為那些出現(xiàn)在頁命名層次結(jié)構(gòu)中較高層上的Wiki頁。例如,如果頁命名為"LevelOne/levelTwo"以及存在命名為"LevelOne,,的Wiki頁,則把命名為"LevelOne"的Wiki頁視為Wiki頁"LevelOne/levelTwo"的祖先。把祖先Wiki頁集合的列表存儲在Wiki頁對象中的字段中。祖先Wiki頁集合可以包含一或多個祖先Wiki頁。在本發(fā)明的說明性實施例中,把該字段稱為路徑字段。使用如下查詢,其以按相反的層次結(jié)構(gòu)次序發(fā)現(xiàn)包含Wiki頁布置指定符的祖先Wiki頁的列表中的第一Wiki頁。在本發(fā)明的說明性實施例中,針對諸如圖5中的數(shù)據(jù)庫524的數(shù)據(jù)庫中的Wiki_pages表,檢查祖先頁的列表。WikijDages表包括表項的列表。每一個表項包含Wiki頁和與該具體wiki頁相關(guān)的任何Wiki布置頁把祖先Wiki頁的列表中的每一個Wiki頁與Wiki_pages表中的表項進行比較。一旦發(fā)現(xiàn)與祖先Wiki頁的列表中的Wiki頁匹配的、具有相關(guān)的Wiki布置頁的表項,則把該具體的布置頁選擇用作將繼承的目標(biāo)Wiki頁。接下來,圖23為說明了根據(jù)本發(fā)明的說明性實施例把Wiki頁內(nèi)容嵌入Wiki布置頁的主體中的過程的方框圖。可以由Wiki引擎諸如圖4中的Wiki引擎402,實現(xiàn)圖23中的該過程。當(dāng)前頁對象2302為諸如圖5中的Wiki頁526的Wiki頁對象。主體2310為該Wiki頁的主體字段,其為Wiki頁對象的對象變量諸如圖5中的對象變量528。布置頁對象2304包括頁部件頭標(biāo)2322、菜單2324、右邊距2326、左邊距2328、腳標(biāo)2330、以及主體2320。把布置頁對象2304中的頁部件包含在作為布置頁對象的對象變量諸如圖5中的對象變量528的、布置頁對象2304的主體字段中。把當(dāng)前頁對象2302的主體字段的內(nèi)容、即主體2310放入布置頁對象2304的主體部件、即主體2320中。然后,把包括頁部件頭標(biāo)2322、菜單2324、右邊距2326、左邊距2328、腳標(biāo)2330、以及主體2320的布置頁對象2304的主體字段的內(nèi)容放入當(dāng)前頁對象2302的主體字段、即主體2310中。然后,4巴當(dāng)前頁對象2302作為組合的頁2306加以呈遞。組合的頁2306為將當(dāng)前頁對象2302和布置頁對象2304組合的結(jié)果。組合的頁2306包括來自布置頁對象2304的布置頁部件頭標(biāo)2322、菜單2324、右邊距2326、左邊距2328以及腳標(biāo)2330,以及主體2310所代表的當(dāng)前頁對象2302的主體字段的內(nèi)容。在傳統(tǒng)的Wiki應(yīng)用中,當(dāng)前尚不存在使得Wiki布置頁以下述方式動態(tài)地可配置的方法可以有條件地顯示或隱藏Wiki頁布置的具體頁部件。Wiki頁布置是這樣的頁示出了用于通過所有部件全部就位創(chuàng)作完整的Wiki頁的頁部件之匯集。Wiki頁為Wiki應(yīng)用中的頁。本發(fā)明的說明性實施例提供用于可編程地隱藏與顯示W(wǎng)iki頁布置部件。把Wiki布置頁劃分成一組頁部件。這些頁部件稱為頭標(biāo)、菜單、左、右、主體以及腳標(biāo)部件。圖6描述了頁布置部件、例如頭標(biāo)604、腳標(biāo)606、左邊距608、右邊距610、菜單612以及主體614的例子。由Wiki命令生成每一部件的內(nèi)容。Wiki命令為用于實現(xiàn)Wiki應(yīng)用的功能和/或過程的命令。在本發(fā)明的說明性實施例中,Wiki命令具有與那些它們針對其生成內(nèi)容的頁部件相同的名字。Wiki頁包含具有所嵌入的Wiki命令標(biāo)記的筒單的HTML標(biāo)記。當(dāng)呈遞頁時,Wiki命令訊問Wiki頁設(shè)置,其控制頁部件是否將顯示W(wǎng)iki命令所生成的內(nèi)容。在本發(fā)明的說明性實施例中,Wiki頁設(shè)置被實現(xiàn)為當(dāng)用戶編輯Wiki頁時可由用戶編輯的復(fù)選框。通過選中(check)和不選中(un-check)復(fù)選框,用戶控制各個頁部件、以及頁評論、附件與電子郵件的可視性。這些設(shè)置被保存在作為顯示邏輯可以針對其而^r查的位掩碼的"部件"列中的Wiki_pages表中,Wiki_pages表為諸如圖5中的數(shù)據(jù)庫524的數(shù)據(jù)庫的一部分。頁表中的表項包括ID(標(biāo)識)、account(賬戶)、tag(標(biāo)簽)、time(時間)、body(主體)、ownerID(擁有者標(biāo)識)、modified—by(由...修改)、isLatest(是最近的)、layout(布置)、islayout(是布置)、isEditing(是正在編輯)、commentOn(注釋)、section(區(qū)段)、path(路徑)、attributes(屬性)(attrib)以及errors(錯誤)的字段。位掩碼為二進制數(shù),其中,每一位代表針對不同變量的"是"或"否"值(1或0)。通過使用快速逐位操作,可以確定或者改變具體變量的值。因此,位掩碼為存儲這樣的變量的緊致與有效的機制?,F(xiàn)在,轉(zhuǎn)向圖24,圖24為根據(jù)本發(fā)明的說明性實施例、描述了用于確定頁部件內(nèi)容可視性的復(fù)選框的方框圖??梢曅栽O(shè)置2402為顯示區(qū),用戶可以通過其控制各個頁布置部件的可視性??梢曅栽O(shè)置2402可以被實現(xiàn)為Wiki頁的一部分內(nèi)容。在本發(fā)明的替代性說明實施例中,把可視性設(shè)置2402作為客戶機瀏覽器上的菜單選項加以實現(xiàn)。主體2406包括復(fù)選框2408。復(fù)選框2408包括頭標(biāo)、菜單、左、右、主體和腳標(biāo)布置頁部件,以及針對評論、附件與電子郵件的復(fù)選框。通過選中或未選中復(fù)選框2048,用戶可以控制所命名的布置頁部件的內(nèi)容以及頁評論、附件與電子郵件應(yīng)用的可視性。在本發(fā)明的說明性實施例中,選中這些框,致使所命名的布置頁部件的內(nèi)容以及頁評論、附件與電子郵件顯示在客戶機瀏覽器中。在這樣的實現(xiàn)中,可視性設(shè)置2402的頂部將包括單詞顯示(show)或可視(visible),或者具有等效含義的某些其它項目。在圖24中,頂部2404包括單詞顯示(show),指示選中復(fù)選框?qū)⒅率箤儆诓贾庙搮^(qū)段的內(nèi)容顯示在客戶機瀏覽器中。在本發(fā)明的替代性說明性實施例中,選中可視性設(shè)置2402中的復(fù)選框使得相應(yīng)的布置頁部件的內(nèi)容在客戶機瀏覽器隱藏中。在這樣的實現(xiàn)中,頂部區(qū)域,頂部2404,將包含指示該實現(xiàn)的術(shù)語,例如隱藏等。在本發(fā)明的說明性實施例中,把復(fù)選框2408的選中和未選中的結(jié)果作為位掩碼(bitmask)存儲在數(shù)據(jù)庫中。在呈遞頁以顯示的過程期間,顯示邏輯枱r查該位掩碼,以確定將把哪些內(nèi)容顯示在客戶機瀏覽器中?,F(xiàn)在,轉(zhuǎn)向圖25,根據(jù)本發(fā)明的說明性實施例、描述了用于創(chuàng)建Wiki頁的過程的流程圖。圖25中的過程用于創(chuàng)建Wiki頁諸如圖6中的Wiki頁602。圖25中的過程開始于接收用于創(chuàng)建新的Wiki頁的用戶輸入(過程塊2502)。在過程塊2502中,用戶可以使用客戶機瀏覽器,從菜單中選擇新的頁命令,以提供用戶輸入。接下來,所述過程提示用戶輸入針對新的Wiki頁的名字(過程塊2504)。在一個例子中,頁名可以包括遵循CamelCase規(guī)則的字母與數(shù)字字符。Wiki的頁名還可以包括'/,字符,指示層次結(jié)構(gòu)中的劃分或?qū)蛹?。例如,新的Wiki頁可以為圖9中的測試904。然后,所述過程建立編輯請求統(tǒng)一資源定位符(URL),并且向服務(wù)器發(fā)42送相應(yīng)的超文本傳送協(xié)議(HTTP)請求(過程塊2506)。編輯請求可以由客戶機瀏覽器上的JavaScript函數(shù)建立,并且可以指定新的頁動作和新的頁名。接下來,所述過程加載適當(dāng)?shù)木庉嬈鞑⑶乙猿谋緜魉蛥f(xié)議答復(fù)把把頁服務(wù)供應(yīng)(serve)給客戶機瀏覽器(過程塊2508)??梢杂蓤D5中的Wiki控制器500實現(xiàn)過程塊2508。然后,所述過程接收用戶的改變,并且向服務(wù)器提交超文本傳送協(xié)議艱式提交(過程塊2510)。過程塊2510可以響應(yīng)于用戶在客戶機瀏覽器中編輯Wiki頁并且提交要保存的內(nèi)容而出現(xiàn)。接下來,所述過程利用所提交的內(nèi)容創(chuàng)建和保存Wiki頁(過程塊2512),此后,該過程終止。在過程塊2512中,Wiki控制器處置頁超文本傳送協(xié)議請求,并且可以使用createPage和save方法,以實例化Wiki頁對象,并且然后保存Wiki頁對象。Wiki頁對象、諸如圖5中的Wiki對象508在諸如圖5中的數(shù)據(jù)庫524的Wiki頁數(shù)據(jù)庫表中創(chuàng)建行,以表示新的Wiki頁。現(xiàn)在,轉(zhuǎn)向圖26,根據(jù)本發(fā)明的說明性實施例、描述了用于顯示頁的過程的流程圖。所述過程開始于接收用戶指定的Wiki頁的統(tǒng)一資源定位符(URL),并且向服務(wù)器發(fā)送超文本傳送協(xié)議請求(過程塊2602)。過程塊2602可以由圖3中的客戶機環(huán)境300中的客戶機瀏覽器接收。然后,所述過程處置請求、實例化關(guān)于Wiki頁的對象、處理Wiki頁、以及作為超文本傳送協(xié)議答復(fù)把Wiki頁的內(nèi)容呈遞于客戶機瀏覽器(過程塊2604),此后,所述過程終止??梢酝ㄟ^圖5中的Wiki控制器500實現(xiàn)過程塊2604。Wiki控制器可以調(diào)用Wiki對象上的showPage方法。showPage方法對維持Wiki頁數(shù)據(jù)庫表中具體行的Wiki頁內(nèi)容的Wiki頁對象實例化。然后,Wiki控制器調(diào)用Wiki頁對象上的處理方法,其處理Wiki頁,并且把頁的內(nèi)容呈遞于客戶機瀏覽器。現(xiàn)在,轉(zhuǎn)向圖27,根據(jù)本發(fā)明的說明性實施例,描述了用于生成頁樹視圖的過程的流程圖??梢允褂脠D27中的過程創(chuàng)建圖9中的頁樹視圖900??梢酝ㄟ^圖5中的命令550中的PageTreeCommand實現(xiàn)圖27中的過程。所述過程開始于PageTreeCommand讀取Wiki頁數(shù)據(jù)庫表中的所有的行,并且抽取頁名列值(過程塊2702)。頁名也可以為標(biāo)簽。標(biāo)簽為用于對Wiki頁的內(nèi)容歸類的頁名或標(biāo)號。數(shù)據(jù)庫可以為諸如圖5中的數(shù)據(jù)庫524的數(shù)據(jù)庫。接下來,PageTreeCommand關(guān)于頁名值進行迭代,以建立頁樹視圖(過程塊2704)。在過程塊2704期間,把頁的層次結(jié)構(gòu)分組為節(jié)點和葉子節(jié)點,以形成可視樹結(jié)構(gòu)。節(jié)點既為容器,也為內(nèi)容提供者,而葉子節(jié)點僅為內(nèi)容提供者。例如,如果頁名以'/,字符結(jié)束,則把該頁作為容器和內(nèi)容提供者加以對待,并且使用諸如圖9中的測試904的表示容納裝置的適當(dāng)?shù)膱D標(biāo)加以表示。開始于包括'/,的該名字的所有的Wiki頁名視為該頁的子孫。如果Wiki頁名的其余部分包含'/',則也把該Wiki頁視為容器或內(nèi)容提供者。如果Wiki頁名的其余部分不包含'/,,則把該Wiki頁視為葉子節(jié)點,并且使用諸如圖9中的helloworld912的適當(dāng)?shù)膱D標(biāo)加以表示。任何數(shù)目的不同的指示符,例如'/,,可用于指定頁為節(jié)點或者葉子節(jié)點。然后,PageTreeCommand返回頁樹視圖的超文本標(biāo)記語言表示(過程塊2706),此后,所述過程終止。把頁樹視圖的超文本標(biāo)記語言表示顯示在客戶機瀏覽器上,供用戶在導(dǎo)航Wiki頁的過程中使用?,F(xiàn)在,轉(zhuǎn)向圖28,根據(jù)本發(fā)明的說明性實施例、描述了用于拖拽實況內(nèi)容的過程的流程圖。本發(fā)明的說明性實施例允許把動態(tài)內(nèi)容拖拽至Wiki頁,并且當(dāng)把動態(tài)內(nèi)容拖拽于所述頁時,還提供了內(nèi)容的樣本。使用XMLHttpRequest,遠程地參考Wiki部件,并且在XMLHttpResponse中返回內(nèi)容作為拖拽視件。請求為從瀏覽器客戶機發(fā)送至Web服務(wù)器的數(shù)據(jù)。答復(fù)為作為對(響應(yīng))所接收的請求數(shù)據(jù)的反應(yīng),從Web服務(wù)器發(fā)送至瀏覽器客戶機所發(fā)送的數(shù)據(jù)。超文本傳送協(xié)議為一種定義發(fā)送至Web服務(wù)器與從該Web服務(wù)器所發(fā)送的請求和答復(fù)的內(nèi)容和特定格式的國際標(biāo)準(zhǔn)。XMLHttpRequest/Response為支持可擴展標(biāo)記語言數(shù)據(jù)內(nèi)容和具體答復(fù)4各式的超文本傳送協(xié)議請求/答復(fù)的進一步的規(guī)范。可以使用圖7中的Wiki頁700實現(xiàn)圖28中的過程。所述過程開始于接收用于執(zhí)行拖放操作的用戶輸入,以及援用JavaScript函數(shù),該JavaScript函數(shù)把XMLHttpRequest發(fā)送至服務(wù)器而請求所選擇Wiki部件的樣本輸出(過程塊2802)。通過用戶把諸如醒目標(biāo)志708的圖標(biāo)從Wiki頁700的選用區(qū)702拖拽至主體704,可以生成2802的用戶輸入,Wiki頁700的選用區(qū)702、主體704、以及醒目標(biāo)志708均在圖7中。可以由圖3中的客戶機環(huán)境300中的客戶機瀏覽器接收過程塊2802的過程。然后,所述過程處置XMLHttpRequest、創(chuàng)建針對所選Wiki部件的Wiki44命令子類的實例、并且調(diào)用用于取得所拖拽內(nèi)容的方法(過程塊2804)。在過程塊2804期間,圖5中的Wiki控制器500可以處置XMLHttpR叫uest,并且把該請求路由至AJAX格式化器,該AJAX格式化器在調(diào)用Wiki命令對象實例上的諸如getDragContent的方法之前,創(chuàng)建Wiki命令子類的實例。AJAX格式化器為諸如圖4中的請求處置器404的請求處置器的一部分,并且將其視為圖5中的Wiki控制器500的擴展。如先前所描述的。圖5中的路由器502對進來的請求進行譯碼,然后把該請求路由至正確的請求處置器。AJAX格式化器為請求處置器之一。接下來,所述過程在把XMLHttpResponse中的所呈遞的輸出返回至客戶機瀏覽器之前,從Wiki對象取得當(dāng)前Wik頁實例,并且調(diào)用render方法(過程塊2806)。過程塊2806的過程可以由AJAX格式化器實現(xiàn),并且可以訪巴getDragContent的調(diào)用的結(jié)果傳遞于i者如renderFragment的方法。接下來,所述過程處理XMLHttpResponse,并且抽取和顯示超文本標(biāo)記語言拖拽內(nèi)容(過程塊2808),此后,所述過程終止。通過客戶機瀏覽器上的異步JavaScript代碼執(zhí)行過程塊2808的過程。JavaScript代碼可以使用使拖拽內(nèi)容看來半透明的層疊式樣式表(CSS)類型。一旦處理、抽取以及顯示了答復(fù),可以把所述過程的控制遞交于拖拽支持。拖拽支持由對鼠標(biāo)器移動事件答復(fù)的事件驅(qū)動的JavaScript代碼組成。在用戶壓下鼠標(biāo)器按鈕,并且移動鼠標(biāo)器時,瀏覽器JavaScript運行時間激發(fā)鼠標(biāo)器移動事件。拖拽支持實現(xiàn)了鼠標(biāo)器移動事件處置器(handler)JavaScript函數(shù),其被援用來處置鼠標(biāo)器移動事件。拖拽支持使用瀏覽器的JavaScript文檔對象模型(documentobjectmodel,DOM)應(yīng)用編程接口(API)功能,以確定鼠標(biāo)器光標(biāo)的當(dāng)前位置。然后,拖拽支持使用文檔對象模型應(yīng)用編程接口功能設(shè)置所拖拽內(nèi)容的位置,例如,從AJAX請求返回至getDragContent的半透明的視件。接下來,重復(fù)所述過程,只要用戶保持鼠標(biāo)器按鈕的壓下狀態(tài),以及繼續(xù)移動鼠標(biāo)器。當(dāng)用戶釋放鼠標(biāo)器按鈕時,瀏覽器的JavaScript運行時間激發(fā)鼠標(biāo)器抬起事件。放(drop)支持實現(xiàn)了鼠標(biāo)器抬起事件處置器JavaScript函數(shù),其被援用來處置鼠標(biāo)器抬起事件。放支持使用瀏覽器的JavaScript文檔對象模型應(yīng)用編程接口功能,以確定鼠標(biāo)器光標(biāo)的當(dāng)前位置。然后,放支持把XMLHttpRequest發(fā)送至服務(wù)器,以使內(nèi)容插入Wiki頁?,F(xiàn)在,轉(zhuǎn)向圖29,根據(jù)本發(fā)明的說明性實施例、描述了用于組合Wiki頁的內(nèi)容的過程的流程圖。本發(fā)明的這些說明性實施例的應(yīng)用Wiki需要一種對各種頁上所創(chuàng)建的內(nèi)容進行合成的功能強大的、一致的方法。經(jīng)由一種"削減"語法,把Wiki部件包括在Wiki頁源中,"削減"語法由下列內(nèi)容組成兩個'{,字符,后面緊跟Wiki部件名,再跟空白、再跟'nane="value"'語法中由可選空才各分隔的變元。例如/YimjwW戶age尸age二"7/ome尸age"/7乂其中,'ImportPage,為Wiki部件的名字??梢允褂门cWiki部件相同的Wiki"削減"語法,把任何Wiki頁的內(nèi)容包括在另一個頁中。為了把名為"HomePage"的Wiki頁的內(nèi)容包括在當(dāng)前頁中,Wiki用戶需要僅4建入f/并且HomePage內(nèi)容被內(nèi)嵌擴展??梢詫χT如圖10中的Wiki頁1000的合成內(nèi)容實現(xiàn)圖29中的過程。所述過程開始于將Wiki頁源解析為代表靜態(tài)文本內(nèi)容和Wiki部件的解析片段對象(過程塊2902)。由Wiki命令語境對象諸如圖5中的Wiki命令語境544實現(xiàn)過程塊2902的過程。在過程塊2902期間,把頁解析成以稱為抽象語法樹(AST)的樹結(jié)構(gòu)組織的解析片段,其為Wiki頁內(nèi)容的存儲器中的內(nèi)部表示。此時,接下來的步驟中的操作可以通過遍歷所述樹并且對樹節(jié)點執(zhí)行操作,而操縱頁內(nèi)容。然后,所述過程調(diào)用loadplugin(力口載插件)方法,該loadplugin方法對Wiki頁上的Wiki部件的列表進行迭代(過程塊2904)。針對每一Wiki部件,調(diào)用諸如loadplugins的方法,以對實現(xiàn)每一Wiki部件的功能的適當(dāng)?shù)腤iki命令子類實例化。過程塊2904為頁內(nèi)容的存儲器內(nèi)的表示的創(chuàng)建的進一步的細化,并且為過渡的過程。接下來,所述過程調(diào)用Wiki對象的loadcommand(加載命令)方法,以執(zhí)行Wiki命令類加載。如果所述loadcommand方法不能夠發(fā)現(xiàn)適當(dāng)?shù)腤iki命令類,則該方法拋出異常(過程塊2906)。過程塊2卯6的loadplugin方法可以為loadplugin。過程塊2906通過把支持命令對象與Wiki部件解析片段相關(guān)聯(lián),完成Wiki頁的存儲器內(nèi)表示的創(chuàng)建。然后,所述過程捕捉異常,并且調(diào)用Wiki對象的pageexists(頁存在)方法,以確定所命名的Wiki部件是否實際為Wiki頁。把有效頁名加載到導(dǎo)入頁部件中(過程塊2908)。在過程塊2908中,如果諸如PageExists的方法返回有效頁,則Wiki命令語境調(diào)用loadPlugin方法,以加載在Wiki頁名中傳遞的導(dǎo)入頁部件。導(dǎo)入頁部件用于嵌入所命名的頁的內(nèi)容。46接下來,所述過程把導(dǎo)入頁部件添加到Wiki命令語境部件列表(過程塊2910)。然后,在呈遞期間,所述過程把導(dǎo)入頁部件擴展至所命名的Wiki頁的內(nèi)容(過程塊2912),隨后過程終止。在過程塊2912中,所述過程把importPage命令實例添加到部件的列表?,F(xiàn)在,轉(zhuǎn)向圖30,根據(jù)本發(fā)明的說明性實施例,示出用于編輯命令的過程的流程圖。可以在諸如圖8中的Wiki頁800的頁上實現(xiàn)圖30中的過程。所述過程開始于響應(yīng)對旨在編輯Wiki頁的用戶輸入的接收,顯示W(wǎng)iki部件的選用區(qū)(過程塊3002)。在過程塊3002中,用戶可以通過選4奪相當(dāng)容易實現(xiàn)的復(fù)選框提供用戶輸入。所述選用區(qū)為諸如圖8中的選用區(qū)802的選用區(qū)。諸如Wiki頁800的頁可以包括任何數(shù)目的醒目標(biāo)志,這些醒目標(biāo)志向用戶提供了可以對部件進行選擇和編輯的可視暗示。過程塊3002可以由圖3中的客戶機環(huán)境300中的客戶機瀏覽器接收。然后,所述過程援用JavaScript函數(shù),其把XMLHttpRequest發(fā)送至服務(wù)器,以響應(yīng)用戶對醒目標(biāo)志的選擇,取得針對所選Wiki部件的屬性編輯器(過程塊3004)。所述醒目標(biāo)志可以為諸如圖7中的醒目標(biāo)志708的Google⑧地圖圖標(biāo)。接下來,所述過程處置請求,并且把處理過程委托于AJAX格式化器。AJAX格式化器創(chuàng)建Wiki命令語境對象,并且調(diào)用相關(guān)的loadplugin方法,而請求加載屬性編輯器Wiki部件(過程塊3006)。由圖5中的Wiki控制器500執(zhí)行過程塊3006。然后,所述過程調(diào)用在所選擇Wiki部件名字中傳遞的屬性編輯器部件的draw(繪制)方法。在XMLHttpResponse中,把draw方法的結(jié)果返回至客戶機(過程塊3008)。接下來,所述過程處理XMLHttpResponse,其包括針對所選部件的屬性編輯器的超文本標(biāo)記語言和JavaScript,并且使屬性編輯器可見(過程塊3010)。異步實現(xiàn)所述處理,并且可以使用層疊式樣式表(CSS)使屬性編輯器可見。過程塊3010的過程可由圖5中的Wiki控制器500中的AJAX格式化器加以實現(xiàn)。然后,所述過程接收屬性編輯器中的用戶輸入,并且向服務(wù)器發(fā)布XMLHttpRequest,以更新所選擇Wiki部件的特性(過程塊3012)。由屬性編輯器和相應(yīng)的客戶機瀏覽器執(zhí)行過程塊3012。47接下來,所述過程處置請求,并且把處理過程委托于AJAX格式化器。AJAX格式化器創(chuàng)建Wiki命令語境對象,并且調(diào)用相關(guān)的loadplugin方法,而請求加載更新命令Wiki部件(過程塊3014),然后,所述過程調(diào)用在所選擇Wiki部件名字中傳遞的更新命令部件的draw方法。更新命令部件更新服務(wù)器上的Wiki部件源"削減",并且返回指示成功或失敗的XMLHttpResponse(過程塊3016),此后,所述過程終止。過程塊3016的過程可以由圖5中的Wiki控制器500中的AJAX格式化器實現(xiàn)。因此,本發(fā)明的說明性實施例提供了一種針對應(yīng)用Wiki的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。本發(fā)明的這些說明性實施例允許用戶容易地創(chuàng)建與管理Wiki頁。用戶可以通過拖放實況內(nèi)容而編輯Wiki頁。如用戶請求那樣,可以把Wiki頁組合,并且可以使用屬性編輯器對其進4亍編輯。把Wiki頁保存在包括節(jié)點和葉子節(jié)點的頁樹視圖中,以導(dǎo)航Wiki?,F(xiàn)在,轉(zhuǎn)向圖31,根據(jù)本發(fā)明的說明性實施例、描述了用于呈遞Wiki命令的過程的流程圖??梢杂蓤D4中的Wiki引擎404中實現(xiàn)圖31中的過程。Wiki頁可以包括若干Wiki命令。每一個Wiki命令也可以包括其它的Wiki命令。圖31中的過程開始于Wiki引擎關(guān)于Wiki命令援用render方法(過程塊3102)。Wiki引擎可以為諸如圖4中的Wiki引擎402的Wiki引擎。render方法可以為諸如圖12中的render1226的頁處理方法。接下來,所述過程調(diào)用open(打開)方法(過程塊3104)。過程塊3104的叩en方法向Wiki命令提供了開始顯示所呈遞的內(nèi)容的機制。例如,命令可以生成超文本標(biāo)記語言的'打開,片段,例如,'<SPAN>ForecastCommand'。將使用close(關(guān)閉)方法生成SPAN的關(guān)閉片段。然后,所述過程確定Wiki命令是否準(zhǔn)許編輯(過程塊3106)。Wiki命令覆蓋(override)allowEdit的設(shè)置'以確定命令是否準(zhǔn)許對命令的內(nèi)容進行編輯。"真"值表示可以對命令進行編輯。如果Wiki命令準(zhǔn)許進行編輯,則所述過程生成醒目標(biāo)志(過程塊3108)。如果Wiki命令不準(zhǔn)許編輯,則所述過程調(diào)用renderBody(過程塊3110)。renderBody向命令提供了呈遞或發(fā)行相應(yīng)超文本標(biāo)記語言內(nèi)容的機會。接下來,renderBody顯示醒目標(biāo)志,然后關(guān)于任何存在的孩子中的每個調(diào)用render(過程塊3U2)。例如,在過程塊3112中,可以使用draw方法顯示醒目標(biāo)志。Wiki命令可以形成層次結(jié)構(gòu),即Wiki命令可以包含其它Wiki命令。因此,Wiki命令形成了命令樹。孩子為所包含或所嵌入的Wiki命令的第一代。接下來,所述過程援用close方法(過程塊3114),此后,過程終止?,F(xiàn)在,轉(zhuǎn)向圖32,根據(jù)本發(fā)明的說明性實施例,描述了用于屬性編輯的預(yù)備過程的流程圖。圖32中的過程用于對Wiki命令的屬性進行編輯。所述過程開始于呈遞命令(過程塊3202)。在諸如圖31中的過程的呈遞過程中呈遞命令。然后,所述過程生成默認(rèn)的屬性編輯器,并且在所生成的頁上隱藏屬性編輯器(過程塊3204),此后,所述過程終止。在大多數(shù)時間,用戶將不與屬性編輯器進行交互,因此屬性編輯器的默認(rèn)狀態(tài)是隱藏,直至用戶需要時。如果命令選擇不實現(xiàn)其自身,則在過程塊3204中生成默認(rèn)的屬性編輯器。命令可以通過覆蓋generatePropertyEditor協(xié)議實現(xiàn)屬性編輯器?,F(xiàn)在,轉(zhuǎn)向圖33,根據(jù)本發(fā)明的說明性實施例,描述了用于屬性編輯的過程的流程圖。圖33中的過程可以出現(xiàn)在圖32的過程之后。首先,所述過程從用戶接收用于觸發(fā)屬性編輯器的信號,以關(guān)于所選命令援用屬性編輯器(過程塊3302)。例如,在過程塊3302中,用戶可以點擊觸發(fā)屬性編輯器的Wiki命令的醒目標(biāo)志。接下來,所述過程標(biāo)識針對客戶機側(cè)屬性編輯器子系統(tǒng)的所選命令(過程塊3304)。Wiki環(huán)境包括JavaScript基子系統(tǒng)(basesubsystem),該JavaScript基子系統(tǒng)通過追蹤在所生成的醒目標(biāo)志上的鼠標(biāo)器點擊,追蹤所選部件。醒目標(biāo)志上的點擊動作標(biāo)識了所選命令。可以由諸如圖13中的醒目標(biāo)志1302的醒目標(biāo)志完成過程塊3304。然后,所述過程生成AJAX援用,以要求服務(wù)器側(cè)命令代表呈遞客戶機側(cè)屬性編輯器(過程塊3306)??梢杂芍T如圖13中的屬性編輯器1304的屬性編輯器執(zhí)行過程塊3306。在過程塊3306的執(zhí)行期間,AJAX調(diào)用援用Wiki命令處理器的服務(wù)器統(tǒng)一資源標(biāo)識符,其把頁加載到請求的對象變量中所標(biāo)識的服務(wù)器中。統(tǒng)一資源標(biāo)識符還包括新對象變量的集合,這一新對象變量集合代表針對Wiki命令的輸入值的新值。然后,所述引擎更新Wiki命令的輸入值,并且要求Wiki命令根據(jù)新值更新相應(yīng)的可視表示。可由諸如圖12中的generatePropertyEditor(生成屬性編輯器)1222的命令啟動過程塊3306。接下來,所述過程選擇屬性編輯器(過程塊3308)。在過程塊3308中,所選Wiki命令可以通過覆蓋genemtePropertyEditor方法,選擇提供具體化的屬性編輯器,或者繼承默認(rèn)的實現(xiàn)。作為選擇,Wiki命令可以提供其自己的屬性編輯器,其自己的屬性編輯器由編輯Wiki命令的參數(shù)、屬性以及屬性所49需的超文本標(biāo)記語言組成。在過程塊3308中,可以根據(jù)所選命令的屬性選擇屬性編輯器。接下來,屬性編輯器接收用戶交互,然后提交對Wiki命令的參數(shù)的更新(過程塊3310)。接下來,屬性編輯器生成基于AJAX的請求,該請求指示服務(wù)器頁處理器更新給定的頁上所選擇Wiki命令的參數(shù)列表(過程塊3312)。然后,命令處理器定位命令、實例化命令、以及把命令的值設(shè)置為從客戶機所傳遞的新值(過程塊3314)。接下來,命令處理器詢問命令是否應(yīng)該通過援用refreshOnUpdate方法更新整個頁(過程塊3316)。由圖4中的命令處理器406實現(xiàn)過程塊3316。如果命令指示應(yīng)該更新整個頁,則把整個頁重新顯示在客戶機上(過程塊3318),此后,所述過程終止。如果命令指示不需要更新整個頁,則命令呈遞其自身,并且在客戶機超文本標(biāo)記語言文檔上的getTargetDIV區(qū)域中顯示新的內(nèi)容(過程塊3320),此后,所述過程終止。作為過程塊3320的例子,用戶可以使用屬性編輯器更新可以實現(xiàn)以下的例子中所描述的過程的ForcastWiki命令的屬性值。用戶使用屬性編輯器修改郵政區(qū)碼特性。屬性編輯器生成更新命令請求,并且把命令發(fā)送給服務(wù)器。服務(wù)器接收請求、加載包含F(xiàn)orcast命令的頁、把新的郵政區(qū)碼放入頁中、保存更新的頁、以及詢問Forcast命令該命令是否需要刷新頁。Forcast命令回答"否",因此服務(wù)器要求Forcast命令使用從屬性編輯器所發(fā)送的輸入值的新值呈遞其自身。把所生成的超文本標(biāo)記語言片段發(fā)送回客戶機,并且放入由getTargetDIV協(xié)議所標(biāo)識的超文本標(biāo)記語言元素中。在諸如圖31的過程的過程中,所述命令可以呈遞其自身?,F(xiàn)在,轉(zhuǎn)向圖34,根據(jù)本發(fā)明的說明性實施例、示出選擇屬性編輯器的過程的流程圖。圖34中的過程為圖33中的過程塊3308的更詳細的描述。所述過程開始于默認(rèn)的屬性編輯器調(diào)用getParameters(獲取參數(shù)),以確定與所選命令相關(guān)的參數(shù)的列表與類型(過程塊3402)。接下來,所述過程針對所返回的每一參數(shù)生成客戶機側(cè)編輯器(過程塊3404)。所述參數(shù)列表提供了所返回的參數(shù)的名字、幫助串以及可能值。然后,所述過程向客戶機傳遞聚積的內(nèi)容以在客戶機屬性編輯器中呈遞(過程塊3406),此后,所述過程終止。聚積的內(nèi)容為從針對具體命令的屬性編輯器所接收的信息。例如,聚積的內(nèi)容包括包含在過程塊3402和3404中的、針對被顯示來示出屬性編輯器的命令的每一段元數(shù)據(jù)與參數(shù)。在諸如50圖33中的過程塊3306的步驟期間,可以在客戶機屬性編輯器中呈遞聚積的內(nèi)容。圖35~36為Wiki頁的生命周期期間所使用的頁生命周期過程。現(xiàn)在,轉(zhuǎn)向圖35,根據(jù)本發(fā)明的說明性實施例,示出用于刪除頁的過程的流程圖。所述過程開始于頁被標(biāo)記刪除(過程塊3502)。出于舊的內(nèi)容、不相關(guān)性或者任何其它原因,用戶可以對頁進行標(biāo)記。在過程塊3502中,把頁標(biāo)記為"刪除的"。并不實際把頁從數(shù)據(jù)庫中去除。接下來,通知頁上的每一命令已去除了命令擁有頁(過程塊3504),此后,所述過程終止??梢允褂弥T如圖12中的wasDeleted1218的方法,通知每一命令。過程塊3504用于清除與給定頁上的Wiki命令相關(guān)的永久性資源?,F(xiàn)在,轉(zhuǎn)向圖36,根據(jù)本發(fā)明的說明性實施例、描述了用于修訂頁的過程的流程圖。所述過程開始于創(chuàng)建新的空頁(過程塊3602)。接下來,所述過程克隆(clone)現(xiàn)存頁到新頁(過程塊3604)。然后,所述過程通知頁上的每一命令aboutToSave(將要保存)(過程塊3606)。aboutToSave可以為諸如圖12中的生命周期1204的生命周期命令。然后,把頁保存在數(shù)據(jù)庫中(過程塊3608)。接下來,所述過程調(diào)用wasDeleted(被刪除了)方法,以通知頁已把其從頁中刪除,即通過不再為頁的一部分的方式從頁中刪除(過程塊3610)。針對每一不再為頁的一部分的命令,執(zhí)行過程塊3610。然后,所述過程通知頁上的每一命令頁wasSaved(被保存)(過程塊3612),此后,所述過程終止。過程塊3612可以使用諸如圖12中的wasSaved1216的方法?,F(xiàn)在,轉(zhuǎn)向圖37,根據(jù)本發(fā)明的說明性實施例、描述了用于拷貝頁的過程的流程圖。所述過程可以開始于創(chuàng)建新的空頁(過程塊3702)。接下來,所述過程克隆現(xiàn)存頁到新頁(過程塊3704)。然后,所述過程針對頁上的每一命令調(diào)用wasCopied(被拷貝)方法(過程塊"06)??梢允褂弥T如圖l2中的wasCopied1220的方法,實現(xiàn)過程塊3706。接下來,所述過程保存所克隆的頁、關(guān)于頁上的每一命令援用wasSaved(過程塊3708),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖38,根據(jù)本發(fā)明的說明性實施例,描述了對頁重新命名的過程的流程圖。圖38中的過程開始于加載原始頁(過程塊3802)。接下來,所述過程更新頁的標(biāo)簽名,以針對該頁所包含的所有孩子頁反映該頁的新名字(過程塊3804)。然后,所述過程調(diào)用wasRenamed(被重命名),以通知Wiki命令已針對頁上的每一Wiki命令對其重新命名(過程塊3806),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖39,根據(jù)本發(fā)明的說明性實施例,描述了取消對頁的刪除的過程的流程圖。圖39中的過程開始于通過把isLatest(是最近的)標(biāo)志設(shè)置為"真",而把頁從失活(stale)狀態(tài)移改(remove)為活躍狀態(tài)(過程塊3902)。接下來,所述過程通知頁上的每一命令該頁wasUndeleted(被取消刪除)(過程塊3904),此后,所述過程終止。當(dāng)在先前已從給定頁中刪除之后把命令放回該頁中時,調(diào)用wasUndeleted?,F(xiàn)在,轉(zhuǎn)向圖40,根據(jù)本發(fā)明的說明性實施例,示出了用于選用區(qū)建造的過程的流程圖。Wiki環(huán)境提供了安裝在Wiki中的可用命令的選用區(qū)。選用區(qū)提供了一種用于顯示W(wǎng)iki環(huán)境中可用Wiki命令的可視機制。把選用區(qū)定義到由getCategory(獲取種類)協(xié)議定義的種類。使用圖40中的過程,針對Wiki中的每一命令生成選用區(qū)。首先,所述過程確定命令是否支持編輯(過程塊4002)。如果Wiki支持編輯,則所述過程才爰用getDropContent(獲取方文內(nèi)容),getDropContent返回要插入于與給定Wiki命令相關(guān)的頁的默認(rèn)的Wiki標(biāo)記(過程塊4004),此后,所述過程終止。可以響應(yīng)于Wiki命令被拖出選用區(qū),并且放置在頁上,而執(zhí)行過程塊4004。如果在過程塊4002中所述過程確定命令不支持編輯,則所述過程取得(retrieve)命令的種類(過程塊4006)。由Wiki環(huán)境中的命令定義所述種類。示范性的種類包括'數(shù)據(jù)服務(wù),以及'頁內(nèi)容,。把同一種類中的每一命令顯示在選用區(qū)視圖上的同一標(biāo)簽(tab)中。接下來,所述過程取得名字(過程塊4008)??梢允褂弥T如圖12中的getName1212的方法取得名字。然后,所述過程取得描述(過程塊4010)??梢允褂弥T如圖12中所示的getDescription1214的方法取得描述。接下來,所述過程取得圖標(biāo)(過程塊4012)??梢允褂弥T如getlcon的方法取得圖標(biāo)。然后,所述過程取得拖拽內(nèi)容,并且針對每一命令把這些元素放置在選用區(qū)上(過程塊4014)。可以使用諸如getDragContent的方法取得拖拽內(nèi)容。命令可以顯示表達對命令的使用的唯一的圖標(biāo)或者醒目標(biāo)志。getlcon協(xié)議用于取得當(dāng)呈遞時顯示命令的圖標(biāo)的超文本標(biāo)記語言段。許多時候,命令52可能希望為用戶提供不同的超文本標(biāo)記語言段,拖出選用區(qū)的內(nèi)容,即那些在把部件首次^皮拖至頁中,以向頁插入新命令時放入頁中的內(nèi)容。可以通過覆蓋getDragContent方法,指定從選用區(qū)實際所拖的內(nèi)容。然后,所述過程返回到過程塊4004,并且援用getDropContent,getDropContent返回與給定Wiki命令相關(guān)的將插入頁的默認(rèn)的Wiki標(biāo)記,此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖41,根據(jù)本發(fā)明的說明性實施例,描述用于進行配置的過程的流程圖。駐留在Wiki環(huán)境中的Wiki命令有時要求進行配置。例如,GoogleMap命令要求與應(yīng)用編程接口一起使用的密鑰(key)。圖41中的過程用于使命令能夠?qū)ζ渥陨磉M行配置,并且維持與某一具體的Wiki命令相關(guān)的配置數(shù)據(jù)的集合。圖41中的過程開始于顯示總體目錄信息(過程塊4102)。接下來,所述過程援用configure(配置)方法(過程塊4104)。configure方法允許命令生成用于對與Wiki內(nèi)的Wiki命令相關(guān)的數(shù)據(jù)進行編輯的超文本標(biāo)記語言視圖。然后,所述過程援用get/setPluginData方法(過程塊4106),此后,所述過程終止。get/setPluginData方法用于取得和存儲那些影響Wiki網(wǎng)點的Wiki命令數(shù)據(jù)。例如,命令數(shù)據(jù)包括引用命令所需的初始化數(shù)據(jù),例如登記密鑰?,F(xiàn)在,轉(zhuǎn)向圖42,根據(jù)本發(fā)明的說明性實施例,描述了用于導(dǎo)出的過程的流程圖。Wiki支持完整的Wiki或者Wiki的子集的導(dǎo)入與導(dǎo)出。導(dǎo)出格式包括所導(dǎo)出的頁的列表和頁內(nèi)容,包括命令與附件。Wiki引擎援用圖42中的過程,以幫助頁集合的導(dǎo)出。頁集合為一或多個Wiki頁。圖42中的過程開始于導(dǎo)出包括頁名的總的頁信息(過程塊4202)。接下來,所述過程針對頁上的每一Wiki命令援用aboutToExport(將要導(dǎo)出)(過程塊4204)。然后,所述過程調(diào)用getVersion(獲取版本)方法,并且將其作為輸出的一部分加以存儲(過程塊4206),如果在過程塊4204中所調(diào)用的aboutToExport返回數(shù)據(jù),則將其作為順序化的PHP對象保存在過程塊4206中的輸出流中。接下來,所述過程導(dǎo)出與頁相關(guān)的命令(過程塊4208),此后,所述過程終止??梢园言u論附4妻于每一Wiki頁,其代表用戶對每一頁的評i侖。評論用作在Wiki中進行合作的機制。例如,專利代理人可以詢問發(fā)明者在Wiki頁中如何使用評論。53現(xiàn)在,轉(zhuǎn)向圖43,根據(jù)本發(fā)明的說明性實施例,描述了用于導(dǎo)入的過程的流程圖。Wiki引擎援用圖43中的過程,導(dǎo)入頁上的每一Wiki命令。圖43中的過程開始于導(dǎo)入包括頁名的總體頁信息(過程塊4302)。接下來,所述過程確定命令是否保存了數(shù)據(jù)(過程塊4304)。例如,所述過程確定命令是否在諸如圖42中的過程塊4206的步驟中保存了數(shù)據(jù)。如果命令保存了數(shù)據(jù),則所述過程將數(shù)據(jù)去串行化(unserialize)(過程塊4306)。默認(rèn)的實現(xiàn)確保所保存的版本名與所安裝的Wiki命令版本的名字相匹配。然后,所述過程使用去串行化的數(shù)據(jù)援用waslmported(被導(dǎo)入)(過程塊4308),此后,所述過程終止。如果在過程塊4304中未保存數(shù)據(jù),則所述過程返回新頁(過程塊4310),此后,所述過程終止。于是,本發(fā)明的說明性實施例還提供了用于擴展Wiki環(huán)境的能力的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。面向?qū)ο蟮目蚣苡糜诙x如何擴展對象,以容易地創(chuàng)建合作環(huán)境。對Wiki命令類進行處理,以有效地管理所部署的環(huán)境,從而有助于可重用性、適應(yīng)性以及易用性?,F(xiàn)在,轉(zhuǎn)向圖44,根據(jù)本發(fā)明的說明性實施例,描述了用于取得和解析樹的過程的流程圖。所述樹為由這些說明性實施例所使用的核心處理數(shù)據(jù)結(jié)構(gòu)。所述樹可以為諸如圖11中的抽象語法樹1102的抽象語法樹。由諸如圖11中的Wiki命令語境1104的Wiki命令語境實現(xiàn)圖44中的過程。Wiki命令語境取得頁,并且將其解析成抽象語法樹(過程塊4402),此后,所述過程終止。由Wiki加載Wiki頁。Wiki頁實例化創(chuàng)建所述初t的Wiki命令語境?,F(xiàn)在,轉(zhuǎn)向圖45,根據(jù)本發(fā)明的說明性實施例,描述了用于處理在Wiki中顯示的Web頁的過程??梢杂蒞iki引擎,或者更具體地講,由命令處理器,例如由圖4中的Wiki引擎402和命令處理器406,實現(xiàn)圖45中的過程。圖45中的過程開始于處理引擎訪問抽象語法樹中的每一節(jié)點,以關(guān)于抽象語法樹中所存在的命令援用初始化方法(過程塊4502)。可以把所述初始化方法命名為init。init發(fā)現(xiàn)抽象語法樹的每一節(jié)點中的命令,并且使這些命令可用于其它命令。從而,這些命令可與其它命令,包括其它等效的命令,進行通信。在過程塊4502期間,命令負(fù)責(zé)初始化命令的內(nèi)部數(shù)據(jù)結(jié)構(gòu)、發(fā)表所提供的主題、以及訂購數(shù)據(jù)中樞上所感興趣的主題。主題代表發(fā)表者和訂購者之間感興趣的領(lǐng)域。例如,發(fā)表者/訂購者環(huán)境中重要的主題為'數(shù)據(jù)/可用,。主題的其它例子包括'地址,和'latlong,。在過程塊4502期間,命令可以將下述事件放入隊列中,該事件需要在使用init方法援用了所有命令之后被處理。事件通信狀態(tài)從一個狀態(tài)變化到另一個狀態(tài)。事件刺激(stimulate)通信,以實現(xiàn)狀態(tài)變化。對事件進行排隊,以便可以按次序有順序地處理事件以及在單線程的執(zhí)行環(huán)境諸如JavaScript的客戶機中不丟失事件。對事件進行排隊使得核心執(zhí)行環(huán)境能夠確保在分遣事件之前所有部件被適當(dāng)?shù)爻跏蓟⑶覝?zhǔn)備好處理事件。命令可以執(zhí)行本發(fā)明的說明性實施例的每一階段,并且可以覆蓋默認(rèn)的實現(xiàn)。接下來,命令處理器關(guān)于數(shù)據(jù)中樞援用processEvents,以傳遞任何排隊的事件(過程塊4504)。發(fā)表和訂購模型規(guī)定訂購者向數(shù)據(jù)中樞登記所關(guān)注事件,以便從數(shù)據(jù)中樞接收這些事件。發(fā)表者觸發(fā)在數(shù)據(jù)中樞上排隊的事件。在processEvents階段期間,數(shù)據(jù)中樞處理每一排隊的事件,以及確定所關(guān)注的訂購者,并且援用訂購者,以便傳遞事件。排隊的事件為那些在過程塊4502中放置在隊列中的事件。然后,命令處理器訪問抽象語法樹中的每一節(jié)點,以關(guān)于存在于抽象語法樹中的命令援用discover(發(fā)現(xiàn))方法(過程塊4506)。discover方法定位與命令相關(guān)的信息源,以在命令之間進行更詳細的交互。在過程塊4506期間,生產(chǎn)者、消費者、或者控制器命令可以使用數(shù)據(jù)中樞定位彼此,并且可以取代數(shù)據(jù)中樞,建立相互間的直接事件連接。在discover階段期間,命令可以選擇如上述通過數(shù)據(jù)中樞間接地進行交互或者定位其它命令。在處理的發(fā)現(xiàn)階段期間,命令可以針對發(fā)表者、訂購者以及主題詢問(interrogate)數(shù)據(jù)中樞。如果需要的話,命令還可以繞開(bypass)以上所建立的間接通信方法,直接進行通信。這一能力可使事件更有效地得以處理,并且消除了對數(shù)據(jù)中樞作為通信接口的需求。此外,命令可以從數(shù)據(jù)中樞中去除自身。命令可以將下述事件加入隊列或放入隊列,該事件在使用初始化方法援用了所有命令之后需要被處理。接下來,命令處理器關(guān)于數(shù)據(jù)中樞援用processEvents,以傳遞任何排隊的事件(過程塊4508)。排隊的事件為那些在過程塊4506中進入隊列的事件。接下來,命令處理器訪問抽象語法樹中的每一節(jié)點,以關(guān)于存在于抽象語法樹中的命令援用render(呈遞)方法(過程塊4510),此后,所述過程終止。在過程塊4510期間,命令呈遞針對頁的可視與不可視的內(nèi)容。例如,可視內(nèi)容顯示。不可視內(nèi)容可以包括搜尋數(shù)據(jù)列表并且不具有可視內(nèi)容的SearchList(搜索列表)命令。在過程塊4510期間,也呈遞諸如頁的文本片段的非命令節(jié)點。在圖45中的步驟中的任何步驟期間,命令可以額外地處理其它段的頁源片斷,這是通過在頁源片段上遞歸地援用圖45中的過程實現(xiàn)的。頁源片段為所有非命令內(nèi)容。頁源片段捕獲頁上各命令之間的所有非命令內(nèi)容?,F(xiàn)在,轉(zhuǎn)向圖46,圖46根據(jù)本發(fā)明的說明性實施例,描述處理事件的流程圖。由諸如圖11中的數(shù)據(jù)中樞1112的數(shù)據(jù)中樞執(zhí)行圖46中的處理步驟。圖46為對圖45中的過程塊4504的更詳細的解釋。所述過程開始于數(shù)據(jù)中樞令事件出隊列(過程塊4602)。接下來,數(shù)據(jù)中樞把事件傳遞給所登記的訂購者(過程塊4604)。所登記的訂購者通常為命令,但作為選擇,也可以為獨立(stand-alone)的功能單元。在初始化期間,登記所登記的訂購者,在這一期間命令發(fā)表、訂購或者登記對所有其它命令的興趣。然后,數(shù)據(jù)中樞把傳遞于所登記的訂購者的任何作為結(jié)果得到的事件放入隊列中(過程塊4606)。過程塊4606的事件為那些在過程塊4604中傳遞于所登記的訂購者的事件。接下來,數(shù)據(jù)中樞關(guān)于其輸入值已由數(shù)據(jù)中樞的數(shù)據(jù)傳遞機制履行(fUlfil)的命令觸發(fā)invoke方法(過程塊4608),此后,所述過程終止。命令提供一組執(zhí)行它們的功能的輸入值。輸入值可以為靜態(tài)的或動態(tài)的。當(dāng)輸入值為動態(tài)的時,Wiki引擎追蹤何時數(shù)據(jù)變得可用,即用作向命令的輸入。當(dāng)輸入變得可用時,將其傳遞于命令,從而變?yōu)?已履行"。因此,本發(fā)明的說明性實施例還提供了用于處理Wiki環(huán)境中加以顯示的Web頁的計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。新添加的部件能夠在呈遞最終視圖之前,以抽象語法樹的形式與其它部件進行交互。使得部件能夠根據(jù)呈抽象語法樹的節(jié)點的形式的頁服務(wù)語境,發(fā)現(xiàn)新的屬性與參數(shù)設(shè)置。處理和驗證機制被用于部件在呈遞最終視圖之前驗證輸入和報告錯誤。在頁服務(wù)序列的生命周期內(nèi),處理作為目標(biāo)的事件。可以在單個服務(wù)器上管理同一部件的多個版本?,F(xiàn)在,轉(zhuǎn)向圖47,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)實例化服務(wù)器側(cè)數(shù)據(jù)中樞對象時的操作的流程圖。所述過程由圖4中的Wiki引擎402加以實現(xiàn)。所述過程開始于接收來自客戶機的加載新頁的請求(過程塊4702)。當(dāng)服務(wù)器接收到該加載新頁的請求時,所述過程根據(jù)由服務(wù)器側(cè)Wiki數(shù)據(jù)中樞類變量和方法指定的屬性與方法,創(chuàng)建與所請求的新頁相關(guān)聯(lián)的客戶機側(cè)數(shù)據(jù)中樞對象的實例(過程塊4704)。所述過程向服務(wù)器側(cè)數(shù)據(jù)中樞對象登記服務(wù)器上的所有部件(過程塊4706),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖48,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)實例化客戶機側(cè)數(shù)據(jù)中樞對象時出現(xiàn)的操作的流程圖。所述過程由諸如圖2中的客戶機200中的處理單元206的客戶機上的處理單元實現(xiàn)。所述過程開始于加載從服務(wù)器所接收的新頁(過程塊4802)。當(dāng)客戶機上的處理單元加載針對所述頁的超文本語言或者JavaScript時,所述過程根據(jù)由客戶機側(cè)Wiki數(shù)據(jù)中樞類變量和方法指定的屬性與方法,創(chuàng)建與所請求的新頁相關(guān)聯(lián)的客戶機側(cè)數(shù)據(jù)中樞對象的實例(過程塊4804)。所述過程向客戶機側(cè)數(shù)據(jù)中樞對象登記客戶機上的所有部件(過程塊4806),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖49,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)服務(wù)器側(cè)數(shù)據(jù)中樞從客戶機側(cè)數(shù)據(jù)中樞接收處理事件的請求時發(fā)生的操作的流程圖。由諸如圖5中的數(shù)據(jù)中樞558和圖6中的數(shù)據(jù)中樞638的服務(wù)器上的數(shù)據(jù)中樞實現(xiàn)所述數(shù)據(jù)中樞。所述數(shù)據(jù)中樞對象開始于從客戶機側(cè)數(shù)據(jù)中樞接收頁請求和/或事件(過程塊4902)。所述數(shù)據(jù)中樞對象使用方法集合處理請求/事件(過程塊4904)。由與客戶機相關(guān)的生產(chǎn)者命令生成請求/事件。所述方法集合可以為—組數(shù)據(jù)中樞對象的方法、一組數(shù)據(jù)中樞主題對象的方法、數(shù)據(jù)中樞事件對象;或者與數(shù)據(jù)中樞對象、數(shù)據(jù)中樞主題對象、和/或數(shù)據(jù)中樞事件對象相關(guān)的方法的任何組合。所述數(shù)據(jù)中樞對象把所處理的事件發(fā)送至一組消費者命令(過程塊4906),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖50,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)生產(chǎn)者命令處理事件時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由諸如圖14中的Wiki命令對象1404和1412的命令對象實現(xiàn)。所述過程開始于作為關(guān)于命令調(diào)用init方法的結(jié)果,命令初始化時(過程塊5002)。由數(shù)據(jù)中樞調(diào)用初始化命令的init方法。命令向數(shù)據(jù)中樞登記為針對給定事件主題例如主題A的生產(chǎn)者(過程塊5004)。命令取得數(shù)據(jù)(過程塊5006)。在這一說明性的例子中,取得數(shù)據(jù)可以包括從用戶那里接收輸入,以及從數(shù)據(jù)庫或其它數(shù)據(jù)存儲設(shè)備取得數(shù)據(jù)。命令向數(shù)據(jù)中樞激發(fā)針對主題A的事件(過程塊5008),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖51,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)消費者命令處理事件時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由諸如圖14中的Wiki命令對象1404和1412的命令對象實現(xiàn)。所述過程開始于消費者命令響應(yīng)于數(shù)據(jù)中樞關(guān)于所有命令調(diào)用初始化方法而初始化(過程塊5102)。所述命令向數(shù)據(jù)中樞登記為針對諸如主題A的給定事件主題的消費者命令(過程塊5104)。當(dāng)數(shù)據(jù)中樞關(guān)于消費者命令調(diào)用callback方法時,所述命令從數(shù)據(jù)中樞接收針對主題A的事件(過程塊5106)。所述命令處理事件(過程塊5108)。響應(yīng)于數(shù)據(jù)中樞關(guān)于所述命令調(diào)用render方法,所述命令呈遞成為超文本語言或JavaScript的處理結(jié)果(過程塊5110)。最后,所述命令把所呈遞的結(jié)果發(fā)送至數(shù)據(jù)中樞(過程塊5112),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖52,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)客戶機側(cè)數(shù)據(jù)中樞接收事件時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由客戶機側(cè)數(shù)據(jù)中樞諸如圖6中的數(shù)據(jù)中樞634、圖14中的數(shù)據(jù)中樞1412以及圖19A中的數(shù)據(jù)中樞1910實現(xiàn)。所述過程開始于客戶機側(cè)數(shù)據(jù)中樞從用戶和/或部件諸如生產(chǎn)者部件接收事件時(過程塊5202)。客戶機側(cè)數(shù)據(jù)中樞立即處理事件(過程塊5204)。在這一步驟中,客戶機側(cè)數(shù)據(jù)中樞確定一或多個命令是否已登記為針對與事件對象相關(guān)的給定主題的消費者。如果一或多個命令已登記為針對給定主題的消費者,則客戶機側(cè)數(shù)據(jù)中樞關(guān)于所登記的消費者集合中調(diào)用callback方法(過程塊5212),以把事件發(fā)送至所登記的消費者,此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖53,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)服務(wù)器側(cè)數(shù)據(jù)中樞處理事件時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由服務(wù)器側(cè)數(shù)據(jù)中樞諸如圖6中的數(shù)據(jù)中樞638、圖14中的數(shù)據(jù)中樞1404以及圖15中的數(shù)據(jù)中樞1500實現(xiàn)。所述過程開始于服務(wù)器側(cè)數(shù)據(jù)中樞關(guān)于與所述服務(wù)器相關(guān)的所有命令調(diào)用初始化"init()"方法時(過程塊5302)。服務(wù)器側(cè)數(shù)據(jù)中樞接收作為針對給定主題事件的消費者的命令的登記(過程塊5304)。服務(wù)器側(cè)數(shù)據(jù)中樞接收針對給定事件主題的事件(過程塊585306)。事件可以包括數(shù)據(jù)。可以從用戶輸入或者從另一個命令接收事件(過程塊5308)。服務(wù)器側(cè)數(shù)據(jù)中樞把事件添加到事件隊列(過程塊5310)。在processEvents方法階段期間,服務(wù)器側(cè)數(shù)據(jù)中樞處理事件隊列中的事件。服務(wù)器側(cè)數(shù)據(jù)中樞關(guān)于針對給定主題所登記的所有消費者命令調(diào)用callback方法。服務(wù)器側(cè)數(shù)據(jù)中樞調(diào)用callback方法,以把事件發(fā)送至針對與所述事件相關(guān)的事件主題所登記的消費者(過程塊5316)。服務(wù)器側(cè)數(shù)據(jù)中樞確定是否針對正在被處理的給定事件主題接收到新的事件(過程塊5318)。如果接收到新的事件,則服務(wù)器側(cè)數(shù)據(jù)中樞把事件添加到事件隊列(過程塊5310),以在下一processEvents階段期間進行處理。返回至過程塊5318,如果沒有接收到新的事件數(shù)據(jù),則服務(wù)器側(cè)數(shù)據(jù)中樞關(guān)于處理事件過程中所涉及的所有命令調(diào)用render方法(過程塊5320)。服務(wù)器側(cè)數(shù)據(jù)中樞收集從處理事件的過程中所涉及的所有命令所接收的所有呈遞的結(jié)果,并且把內(nèi)容發(fā)送至客戶機,以加以顯示(過程塊5322),此后,所述過程終止。返回至客戶機的內(nèi)容是以超文本語言或JavaScript返回的,以在客戶機瀏覽器上顯示?,F(xiàn)在,轉(zhuǎn)向圖54,根據(jù)本發(fā)明的說明性實施例,示出當(dāng)客戶機側(cè)數(shù)據(jù)中樞確定是否把事件發(fā)送至服務(wù)器,以進行處理時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由客戶機側(cè)數(shù)據(jù)中樞諸如圖6中的數(shù)據(jù)中樞634、圖14中的數(shù)據(jù)中樞1412以及圖19A中的數(shù)據(jù)中樞1910實現(xiàn)。所述過程開始于客戶機側(cè)數(shù)據(jù)中樞接收由生產(chǎn)者命令激發(fā)的事件時(過程塊5402)。客戶機側(cè)數(shù)據(jù)中樞把事件發(fā)送至向所述數(shù)據(jù)中樞登記為與事件相關(guān)的事件主題的消費者的、客戶機上的任何命令(過程塊5404)??蛻魴C側(cè)數(shù)據(jù)中樞確定是否應(yīng)該把事件發(fā)送至服務(wù)器側(cè)數(shù)據(jù)中樞(過程塊5406)。如果客戶機側(cè)數(shù)據(jù)中樞確定不應(yīng)該把事件發(fā)送至服務(wù)器側(cè)數(shù)據(jù)中樞,則客戶機側(cè)數(shù)據(jù)中樞在客戶機上處理事件(過程塊5408)。如果客戶機側(cè)數(shù)據(jù)中樞確定應(yīng)該把事件發(fā)送至服務(wù)器,則客戶機側(cè)數(shù)據(jù)中樞調(diào)用processClientEvent(處理客戶機事件)方法,以把事件發(fā)送至服務(wù)器側(cè)數(shù)據(jù)中樞,以進行處理(過程塊5410)??蛻魴C側(cè)數(shù)據(jù)中樞從服務(wù)器側(cè)數(shù)據(jù)中樞接收processClientEvent的結(jié)果(過程塊5412)。客戶機側(cè)數(shù)據(jù)中樞使用來自服務(wù)器的processClientEvent的結(jié)果中所接收的新Wiki頁內(nèi)容更新客戶機上所顯示的Wiki頁(過程塊5414),此后,所述過程終止。59現(xiàn)在,轉(zhuǎn)向圖55,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)作為processClientEvent方法調(diào)用的結(jié)果服務(wù)器側(cè)數(shù)據(jù)中樞從客戶機側(cè)數(shù)據(jù)中樞接收事件時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由服務(wù)器側(cè)數(shù)據(jù)中樞諸如圖6中的數(shù)據(jù)中樞638、圖14中的數(shù)據(jù)中樞1404以及圖15中的數(shù)據(jù)中樞1500實現(xiàn)。所述過程開始于服務(wù)器側(cè)數(shù)據(jù)中樞從客戶機側(cè)數(shù)據(jù)中樞接收針對給定事件主題諸如主題B的事件時(過程塊5502)。服務(wù)器側(cè)數(shù)據(jù)中樞把針對主題B的事件發(fā)送至事件隊列(過程塊5504)。在下一processEvent階段期間,服務(wù)器側(cè)數(shù)據(jù)中樞處理事件隊列中針對主題B的事件(過程塊5506)。服務(wù)器側(cè)數(shù)據(jù)中樞把針對主題B的事件發(fā)送至登記為針對主題B的監(jiān)聽者/消費者的服務(wù)器上的一組消費者(過程塊5508)。服務(wù)器側(cè)數(shù)據(jù)中樞從服務(wù)器上的生產(chǎn)者接收針對主題B的新的事件數(shù)據(jù)(過程塊5510)。激發(fā)新的事件數(shù)據(jù)的生產(chǎn)者為在過程塊5508中接收事件數(shù)據(jù)的一或多個消費者。服務(wù)器側(cè)數(shù)據(jù)中樞把新事件數(shù)據(jù)添加到事件隊列(過程塊5512)。在下一processEvent階段期間,服務(wù)器側(cè)數(shù)據(jù)中樞處理針對主題B的新的事件(過程塊5514)。服務(wù)器側(cè)數(shù)據(jù)中樞把新的事件發(fā)送至登記為針對主題B的監(jiān)聽者/消費者的服務(wù)器上的消費者(過程塊5516)。服務(wù)器側(cè)數(shù)據(jù)關(guān)于處理針對主題B的事件的過程中所涉及的所有命令調(diào)用render方法(過程塊5518)。服務(wù)器側(cè)數(shù)據(jù)中樞接收呈超文本語言或JavaScript代碼呈遞形式的、事件的命令處理的結(jié)果(過程塊5520)。服務(wù)器側(cè)數(shù)據(jù)中樞捆綁(bundle)來自所有命令的呈遞,并把這些呈遞發(fā)送至客戶機數(shù)據(jù)中樞(過程塊5522),此后,所述過程終止。本發(fā)明的說明性實施例還提供了用于事件激發(fā)的變元(argument)檢測的一種計算機實現(xiàn)的方法、裝置以及計算機可用程序代碼。事件激發(fā)涉及把事件發(fā)送至數(shù)據(jù)中樞,以進行處理的過程。所述過程聚積來自一組源的變元數(shù)據(jù),以形成聚積數(shù)據(jù)集合。所述過程生成用于激發(fā)事件的最小充分變元(minimumsu伍cientargument)的列表,以形成最小變元集合。所述過程把聚積數(shù)據(jù)集合與該最小變元集合比較,以確定該最小變元集合是否可用。響應(yīng)于確定該最小變元集合可用,所述過程觸發(fā)命令激發(fā)事件?,F(xiàn)在,轉(zhuǎn)向圖56,根據(jù)本發(fā)明的說明性實施例,示出了當(dāng)Wiki變元對象60執(zhí)行最小充分變元過程時發(fā)生的操作的流程圖。在這一說明性的例子中,所述過程由Wiki命令對象諸如圖14中的Wiki命令1404或者Wiki命令1412實現(xiàn)。所述過程開始于Wiki變元對象聚積來自一組源的變元數(shù)據(jù)時(過程塊5602)。Wiki變元對象根據(jù)形成變元集合的所聲明的參數(shù)準(zhǔn)則,生成最小充分變元集合(過程塊5604)。Wiki變元對象把聚積變元數(shù)據(jù)集合與最小變元集合比較(過程塊5606)。Wiki變元對象確定是否存在充分的變元(過程塊5608)。如果Wiki變元對象確定存在充分的變元,則Wiki變元對象激發(fā)dateAvailable(數(shù)據(jù)可用)事件,指示所要求的數(shù)據(jù)可用于激發(fā)事件(過程塊5610),此后,所述過程終止。如果Wiki變元對象確定不存在充分的變元,則Wiki變元對象確定是否已經(jīng)接收了新的數(shù)據(jù)(過程塊5612)。如果已經(jīng)接收了新的數(shù)據(jù),則所述過程返回至過程塊5604,其中Wiki變元生成新的聚積數(shù)據(jù)集合,以確定現(xiàn)在是否存在充分的變元。如果沒有接收新的數(shù)據(jù),則此后所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖57,根據(jù)本發(fā)明的說明性實施例,描述了當(dāng)Wiki變元對象確定是否設(shè)置了命令的最少所需變元時發(fā)生的areArgmentsset(設(shè)置了參數(shù))方法的過程的流程圖。在這一說明性的例子中,所述過程由Wiki命令對象諸如圖14中的Wiki命令1404或者Wiki命令1412實現(xiàn)。所述過程開始于接收來自對象的用于激發(fā)事件的調(diào)用,該事件要求在激發(fā)變元之前存在變元值的最小充分集合(過程塊5702)。所述過程把所需變元的列表生成為變元列表(過程塊5704)。接下來,所述過程確定變元的列表中是否存在尚未檢查的更多的變元(過程塊5706)。換句話說,所述過程通過確定變元列表中哪一個變元為1列表中下一個將被;險查的變元,標(biāo)識下一個將被檢查或處理的變元。所述過程通過確定變元是否可用與有效,檢查列表中的下一個變元,迭代這一過程,直至已就可用性和有效性檢查了列表中的所有變元。如果列表不包含任何額外的未處理或未檢查的變元,則所述過程向調(diào)用者對象返回布爾值"真"(過程塊5710),此后,所述過程終止。返回至過程塊5706,如果列表包含下一個未處理或未檢查的變元,則所述過程確定是否設(shè)置了變元列表中的該下一個變元(過程塊5708)。所述過程從未處理的變元的列表中去除下一個變元(過程塊5706)。如果在過程塊5708處所述過程確定設(shè)置了變元,則所述過程返回至過程塊5706,以繼續(xù)處理列表,直至已經(jīng)檢查了變元列表中的所有變元。如果所述過程確定未設(shè)置該變元,則所述方法向調(diào)用者返回布爾值"假"(過程塊5712),此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向圖58,根據(jù)本發(fā)明的說明性實施例,示出了用于檢測是否應(yīng)該激發(fā)變元/可用事件的setCheckArgument(設(shè)置檢查變元)方法的過程的流程圖。在這一說明性的例子中,所述過程由Wiki命令對象諸如圖14中的Wiki命令1404或Wiki命令1412實現(xiàn)。所述過程開始于確定是否設(shè)置了標(biāo)識符變元(過程塊5802)。標(biāo)識符變元為屬于數(shù)據(jù)中樞命令的默認(rèn)的變元。標(biāo)識符變元用于在事件存在于數(shù)據(jù)中樞中的整個期間唯一地標(biāo)識該事件。如果所述過程確定未設(shè)置標(biāo)識符變元,則此后,所述過程終止。返回至過程塊5802,如果設(shè)置了標(biāo)識符變元,則所述過程確定要求在激發(fā)所標(biāo)識的事件之前存在的所有變元是否可用(過程塊5806)。所述過程通過檢查標(biāo)志進行這一確定,其確定在先前所定義的所要求的變元的集合中的所有變元是否可用。如果所述過程確定所要求的變元集合中先前定義的變元不可用,則所述過程調(diào)用areArgumentsSet方法(過程塊5808)。如果所述過程從areArgumentsSet接收到"假"的返回值,則此后,所述過程終止?,F(xiàn)在,轉(zhuǎn)向步驟5808,如果變元設(shè)置過程返回"真"值,則所述過程創(chuàng)建數(shù)據(jù)可用事件對象(過程塊5810)。數(shù)據(jù)可用事件對象指示要求在激發(fā)所標(biāo)識的事件之前存在的所有變元都存在。所述過程激發(fā)數(shù)據(jù)可用事件對象,以觸發(fā)與所標(biāo)識的事件相關(guān)的命令,以激發(fā)所標(biāo)識的事件(過程塊5812)。返回到過程塊5806,如果所述過程確定areArgumentsSet方法返回"真",如圖57中的過程塊5708中所示,則所述過程創(chuàng)建數(shù)據(jù)可用事件對象(過程塊5810)。接下來,所述過程關(guān)于數(shù)據(jù)中樞對象調(diào)用fireEvent(激發(fā)事件)方法,其中以數(shù)據(jù)可用對象作為該方法的變元,以激發(fā)事件對象(過程塊5812)。fireEvent方法把事件傳遞于任何監(jiān)聽過程。此后,所述過程終止。圖59為流程圖,圖示根據(jù)本發(fā)明的說明性實施例的、定義Wiki頁的Wiki頁布置的操作。在過程塊5912~5920中特別強調(diào)針對Wiki頁繼承Wiki頁布置的操作。圖59中的操作可以由Wiki引擎諸如圖4中的Wiki引擎402,更具體地,可以由Wiki控制器諸如圖5中的Wiki控制器500實現(xiàn)。所述操作開始于Wiki引擎接收顯示頁的請求時(過程塊5902)。所述請求通常為由遠62程客戶機瀏覽器發(fā)出的HTTP請求。Wiki控制器對象處置請求。Wiki控制器對象開始呈遞與布置頁相組合的所請求的頁的過程(過程塊5卯4)。在本發(fā)明的說明性實施例中,通過調(diào)用Wiki對象諸如圖5中的Wiki對象508的showPage(顯示頁)方法,援用呈遞所請求的頁的過程。showPage方法取得所請求的Wiki頁,并且呈遞可以在客戶機瀏覽器中顯示的所請求的Wiki頁的HTML版本。Wiki對象擔(dān)當(dāng)針對用于為新請求的Wiki頁生成內(nèi)容的所有對象和字段的儲存庫。作為頁呈遞過程的一部分,援用第一子過程(過程塊5906)。第一子過程執(zhí)行創(chuàng)建所請求的頁的數(shù)據(jù)模型所需的數(shù)據(jù)操縱。在本發(fā)明的說明性實施例中,所請求的Wiki頁的數(shù)據(jù)模型為Wiki頁對象諸如圖5中的Wiki頁526。在本發(fā)明的說明性實施例中,第一子過程為processPage(處理頁)方法,其由showPage方法調(diào)用。第一子過程援用第二子過程(過程塊5908)。第二子過程的目的在于加載與作為當(dāng)前請求的主題的wiki頁相關(guān)的Wiki布置頁。在本發(fā)明的說明性實施例中,第二子過程為loadLayout(加載布置)方法。第二子過程確定所請求的Wiki頁的數(shù)據(jù)模型的布置字段是否包含Wiki布置頁名(過程塊5910)。在本發(fā)明的說明性實施例中,布置字段為Wiki頁對象的對象變量,諸如圖5中的頁526的對象變量528。如果第二子過程確定布置字段不包含針對當(dāng)前所請求的Wiki頁的Wiki布置頁名(過程塊5910的"no"輸出),則第二子過程確定當(dāng)前所請求的Wiki頁是否具有祖先Wiki頁(過程塊5912)。祖先Wiki頁為那些出現(xiàn)在頁命名層次結(jié)構(gòu)中的較高層上的Wiki頁。例如,如果把Wiki頁命名為"LevelOne/LevelTwo",并且存在命名為"LevelOne的Wiki頁,則把命名為"LevelOne"的Wiki頁視為Wiki頁"LevelOne/LevelTwo"的祖先。在本發(fā)明的另一說明性實施例中,第二子過程通過檢查Wiki頁對象的路徑字段,確定當(dāng)前所請求的Wiki頁是否具有祖先Wiki頁。如果路徑字段包含Wiki頁的名字,則確定當(dāng)前所請求的Wiki頁具有祖先Wiki頁。如果第二子過程確定當(dāng)前所請求的Wiki頁具有祖先Wiki頁(過程塊5912的"yes"輸出),則第二子過程取得路徑,把路徑加載于陣列中,并且反轉(zhuǎn)該陣列的次序,以致于最近祖先首先出現(xiàn)(過程塊5914)。在頁名層次結(jié)構(gòu)中,最近祖先為緊出現(xiàn)在最后段之前的名字段。例如,如果把頁命名為"LevelOne/LevelTwo/LevelThree,,,則該頁的最近3且先頁為名為"LevelTwo"的頁。該頁的最遠祖先頁為名為"LevelOne"的頁。接下來,第二子過程確定Wiki_page表中的行,或表項,是否與路徑陣列中的頁標(biāo)識之一相匹配(過程塊5916)。Wiki_page表為包括Wiki頁對象的對象變量的數(shù)據(jù)庫中的表。在本發(fā)明的說明性實施例中,頁表中的表項,或行,包括標(biāo)識(ID)、account(賬戶)、tag(標(biāo)簽)、time(時間)、body(主體)、Owneridentity(ownerID)(擁有者標(biāo)識)、modifiedJ)y(由…修改)、isLastest(是最近的)、layout(布置)、isLayout(是布置)、isEditing(是正在編輯)、commentOn(注釋)、path(路徑)、attributes(屬性)(attrib)以及error(錯誤)字段。如果第二子過程確定存在匹配(過程塊5916的"是"輸出),則第二子過程加載作為匹配所返回的Wiki布置頁(過程塊5918)。把在Wiki_page表中發(fā)現(xiàn)具有匹配表項的祖先頁稱為匹配的祖先頁。在本發(fā)明的說明性實施例中,第二子過程通過援用第三子過程加載從查詢作為匹配所返回的Wiki布置頁,該第三子過程加載作為匹配所返回的Wiki布置頁。在本發(fā)明的另一個說明性實施例中,第三子過程為Wiki對象的loadPage方法。接下來,操作轉(zhuǎn)向過程塊5924。如果第二子過程確定不存在匹配(過程塊5916的"否"輸出),則第二子過程加載默認(rèn)的布置頁(過程塊5920)。在本發(fā)明的說明性實施例中,調(diào)用Wiki對象的loadPage方法,以加載默認(rèn)的布置頁。然后,操作轉(zhuǎn)向過程塊5924。如果第二子過程確定當(dāng)前所請求的Wiki頁不具有祖先Wiki頁(過程塊5912的"否"輸出),則第二子過程加載默認(rèn)的布置頁(過程塊5920)。在本發(fā)明的說明性實施例中,調(diào)用Wiki對象的loadPage方法,以加載默認(rèn)的布置頁。然后,操作轉(zhuǎn)向過程塊5924。如果第二子過程確定針對當(dāng)前針對所請求的Wiki頁設(shè)置了布置字段(過程塊5910的"是,,輸出),則第二子過程加載在該布置字段中所命名的布置頁(過程塊5922)。在本發(fā)明的說明性實施例中,調(diào)用Wiki對象的loadPage方法,以加載所命名的布置頁。接下來,第二子過程向第一子過程返回布置Wiki頁對象(過程塊5924)。在本發(fā)明的說明性實施例中,第二子過程經(jīng)由第三子過程向第一子過程返回布置Wiki頁對象。第一子過程把當(dāng)前所請求的Wiki頁的Wiki頁對象的主體字段的內(nèi)容放入頁部件"主體"中,頁部件"主體"為Wiki布置頁對象的主體字段的一部分(過程塊5926)。主體字段為諸如圖5中的頁526的對象變量528的Wiki頁對象的對象變量。在本發(fā)明的說明性實施例中,第一子過程通過用當(dāng)前所請求的Wiki頁的Wiki頁對象的主體字段取代Wiki布置頁對象中的特殊模板變量,而把當(dāng)前所請求的Wiki頁的Wiki頁對象的主體字段的內(nèi)容放入Wiki布置頁對象的主體字段中。在本發(fā)明的說明性實施例中,特殊模板變量為串變量。在本發(fā)明的另一個說明性實施例中,第一子過程通過串替換,用當(dāng)前所請求的Wiki頁的主體取代特殊模板變量。接下來,用Wiki布置頁對象的主體字段取代當(dāng)前所請求的頁的Wiki頁對象的主體字段(過程塊5928)。Wiki布置頁對象的主體字段包括頁部件頭標(biāo)、菜單、右邊距、左邊距、腳標(biāo)、以及主體。在客戶機瀏覽器中呈遞頁的處理如常繼續(xù)(過程塊5930),然后,操作結(jié)束。因此,當(dāng)在客戶機瀏覽器中呈遞時,當(dāng)前所請求的Wiki頁包括包裹(wrap)在相關(guān)Wiki布置頁中的當(dāng)前所請求的Wiki頁的原始內(nèi)容。于是,本發(fā)明的說明性實施例提供了把Wiki頁內(nèi)容嵌入布置頁的主體中的方法。此外,可以把具體的層與Wiki頁相關(guān)聯(lián)。用戶可以通過簡單地創(chuàng)建新Wiki頁以及對新創(chuàng)建的Wiki頁的內(nèi)容進行編輯,而創(chuàng)建新Wiki布置頁。由按命令向其提供內(nèi)容的區(qū)段命名的Wiki命令,提供新創(chuàng)建的Wiki頁的每一區(qū)段的默認(rèn)的內(nèi)容。用戶可以通過使用HTML頁流,把來自這些Wiki命令的內(nèi)容包括在用戶所希望的頁上的任何位置。用戶可以把其它靜態(tài)HTML內(nèi)容和其它動態(tài)Wiki命令包括在新創(chuàng)建的Wiki頁中,如用戶看起來適當(dāng)那樣。另外,本發(fā)明的這些說明性實施例提供用于Wiki頁從祖先頁繼承Wiki頁的布置的方法。每一個Wiki頁具有作為該Wiki頁的祖先頁的、與該Wiki頁相關(guān)的頁的列表。把祖先頁的列表存儲在Wiki對象的字段中。在本發(fā)明的說明性實施例中,把該字段稱為路徑字段。使用查詢,該查詢按反向?qū)哟谓Y(jié)構(gòu)次序在包含Wiki頁布置指定符(specifier)的祖先列表中找出第一Wiki頁。然后選擇指定的布置頁,用于待繼承的目標(biāo)頁。圖60為根據(jù)本發(fā)明的說明性實施例的、呈遞Wiki頁的操作的流程圖。可以由WikiS1擎諸如圖4中的Wiki引擎402,更具體地,由Wiki控制器諸如圖5中的Wiki控制器500實現(xiàn)圖60中的操作。所述操作開始于Wiki引擎接收顯示W(wǎng)iki頁的請求時(過程塊6002),所述請求通常為遠程客戶機瀏覽65器所發(fā)出的HTTP請求。Wiki控制器對象處置所述請求。Wiki控制器對象開始呈遞與Wiki布置頁相組合的、所請求的Wiki頁的過程(過程塊6004)。在本發(fā)明的說明性實施例中,通過調(diào)用諸如圖5中的Wiki對象508的Wiki對象的showPage方法,援用呈遞所請求的Wiki頁的過程。showPage方法取得所請求的Wiki頁,并且呈遞所請求的Wiki頁的HTML版本,其可以在客戶機瀏覽器中顯示。Wiki對象擔(dān)當(dāng)用于生成新的所請求的Wiki頁的內(nèi)容的所有對象與字段的儲存庫。接下來,Wiki引擎測試存儲在諸如圖5中的Wiki頁526的所請求的Wiki頁的、被稱為部件字段的字段中的位掩碼的位掩碼設(shè)置(過程塊6006)。部件字段位掩碼包括相應(yīng)于Wiki頁中的每個頁部件諸如頭標(biāo)、菜單、腳標(biāo)等的位。如果針對給定頁部件的位或設(shè)置具有值1,則允許布置頁中的相應(yīng)的頁部件Wiki命令把Wiki命令所生成的內(nèi)容貢獻于Wiki頁。如果針對給定頁部件的比特或設(shè)置具有值0,則不允許布置頁中的接下來,所述操作把所請求的Wiki頁與相關(guān)的Wiki布置頁組合(過程塊6008),從而形成組合的頁。在本發(fā)明的說明性實施例中,為了確定與所請求的Wiki頁相關(guān)的Wiki布置頁,對頁表進行檢查,以確定與所請求的Wiki頁相關(guān)的具體Wiki布置頁。在本發(fā)明的說明性實施例中,把頁表稱為Wiki_page表。如果所請求的Wiki頁不具有頁表中與該Wiki頁相關(guān)的具體Wiki布置頁,則把默認(rèn)的Wiki布置頁與所請求的Wiki頁相關(guān)聯(lián)與相組合。因此,本發(fā)明的這些說明性實施例提供用于編程地(progmmmatically)隱藏和顯示W(wǎng)iki頁布置區(qū)段。把Wiki頁設(shè)置實現(xiàn)為當(dāng)用戶編輯Wiki頁時可由用戶編輯的復(fù)選框。通過選中和未選中復(fù)選框,用戶控制各種頁部件以及頁評論、附件和電子郵件的可視性?,F(xiàn)在,轉(zhuǎn)向圖61,圖61根據(jù)本發(fā)明的說明性實施例,描述了服務(wù)器側(cè)數(shù)據(jù)中樞對象類的類定義。服務(wù)器側(cè)數(shù)據(jù)中樞對象諸如圖21中的服務(wù)器側(cè)數(shù)據(jù)中樞對象2100具有由諸如代碼6102中的類變量的Wiki數(shù)據(jù)中樞類定義所定義的屬性與對象變量。這一說明性的Wiki數(shù)據(jù)中樞類定義提供了Wiki命令對象陣列6104、消費者標(biāo)識符陣列6106、以及生產(chǎn)者標(biāo)識符陣列6108。于是,每次針對給定的頁實例實例化服務(wù)器側(cè)數(shù)據(jù)中樞時,由諸如上面所示的Wiki數(shù)據(jù)中樞類定義的Wiki數(shù)據(jù)中樞類定義來定義針對該服務(wù)器側(cè)數(shù)據(jù)中樞實例的數(shù)據(jù)中樞屬性。現(xiàn)在,轉(zhuǎn)向圖62,圖62根據(jù)本發(fā)明的說明性實施例,描述了針對數(shù)據(jù)中樞管理方法的類的方法接口集合。數(shù)據(jù)中樞管理方法集合6200為與服務(wù)器側(cè)數(shù)據(jù)中樞相關(guān)的數(shù)據(jù)中樞管理方法接口,諸如圖14中的數(shù)據(jù)中樞管理1402。代碼6202為用于恢復(fù)保存在文件系統(tǒng)或其它數(shù)據(jù)存儲設(shè)備諸如圖1的存儲器108中的數(shù)據(jù)中樞對象中的方法的例子。代碼6204為用于保存或高速緩存數(shù)據(jù)中樞對象的實例到文件系統(tǒng)的方法的例子。現(xiàn)在,轉(zhuǎn)向圖63A,根據(jù)本發(fā)明的說明性實施例,示出針對生產(chǎn)者與消費者的類的方法接口集合。生產(chǎn)者與消費者集合6300為與服務(wù)器側(cè)數(shù)據(jù)中樞相關(guān)的數(shù)據(jù)中樞方法接口,諸如圖21中的生產(chǎn)者與消費者2104。數(shù)據(jù)中樞管理方法集合6200為數(shù)據(jù)中樞管理方法接口,諸如圖21中的生產(chǎn)者與消費者2104。代碼6302為把命令添加到數(shù)據(jù)中樞的方法。代碼6304為得到作為數(shù)據(jù)中樞成員的命令的方法。代碼6306為得到命令的方法。代碼6308為被調(diào)用來添加生產(chǎn)者命令的方法。代碼6310為添加可編輯的生產(chǎn)者命令的方法。可編輯的生產(chǎn)者命令提供了可以被編輯用于創(chuàng)建、更新以及刪除操作的數(shù)據(jù)。代碼6312為去除生產(chǎn)者命令諸如常規(guī)的或可編輯的生產(chǎn)者命令的方法。代碼6314為得到所有生產(chǎn)者的列表的方法。代碼6316為添加作為針對具體主題的監(jiān)聽者的消費者命令的方法。代碼6318為去除作為針對具體主題的監(jiān)聽者的消費者命令的方法。代碼6320為得到正在監(jiān)聽具體主題的消費者命令的列表的方法。代碼6322為添加作為針對具體命令的監(jiān)聽者的客戶機消費者命令的方法。代碼6324為用于添加客戶機JavaScript處置器的命令。代碼6326為去除作為針對具體主題的監(jiān)聽者的消費者命令的代碼。代碼6328為得到正在監(jiān)聽具體主題的消費者命令的列表的方法。代碼6330為添加作為針對具體主題的監(jiān)聽者的客戶機消費者的方法。代碼6332為針對屬于客戶機側(cè)數(shù)據(jù)中樞的命令,在客戶機上生成JavaScript代碼的方法?,F(xiàn)在,轉(zhuǎn)向圖63B,根據(jù)本發(fā)明的說明性實施例,示出針對主題方法的類的方法接口集合。主題方法集合6340為針對諸如圖21中的主題2106的月l務(wù)器側(cè)數(shù)據(jù)中樞上的主題方法的方法接口。例如,代碼6342為用于添加事件主題的方法的例子。代碼6344為用于去除事件主題的方法。67現(xiàn)在,轉(zhuǎn)向圖64,圖64圖示了根據(jù)本發(fā)明的說明性實施例,針對事件處理方法的類的方法接口集合。事件處理方法集合6400為針對諸如圖21中的事件處理2108的服務(wù)器側(cè)數(shù)據(jù)中樞上的事件處理方法的方法接口。例如,代碼6402為用于激發(fā)事件的方法。代碼6404為用于處理服務(wù)器上的事件的方法。代碼6406為用于處理被指定于服務(wù)器的客戶機事件的方法??梢猿膳匕讯鄠€事件發(fā)送給服務(wù)器。現(xiàn)在,轉(zhuǎn)向圖65,根據(jù)本發(fā)明的說明性實施例,示出了針對命令管理方法的類的方法接口集合。命令管理方法集合6500為針對服務(wù)器側(cè)數(shù)據(jù)中樞上的命令管理方法諸如圖21中的命令管理2110的方法接口。例如,代碼6502為用于針對命令設(shè)置變元的方法。這改變了源中的變元。代碼6504為用于從頁源中刪除命令的方法?,F(xiàn)在,轉(zhuǎn)向圖66,根據(jù)本發(fā)明的說明性實施例,描述了客戶機側(cè)數(shù)據(jù)中樞對象類的類定義。由Wiki客戶機側(cè)數(shù)據(jù)中樞的Wiki數(shù)據(jù)中樞類定義來定義數(shù)據(jù)中樞屬性與對象變量,如代碼6600中所示。代碼6602為針對消費者標(biāo)識符的對象變量。代碼6604為針對主題的對象變量。代碼6606為針對事件的對象變量?,F(xiàn)在,轉(zhuǎn)向圖67,根據(jù)本發(fā)明的說明性實施例,示出了生產(chǎn)者與消費者方法的類的方法接口集合。生產(chǎn)者與消費者方法集合6700為客戶機側(cè)數(shù)據(jù)中樞上的生產(chǎn)者與消費者方法接口,諸如圖22中的生產(chǎn)者與消費者2202。例如,代碼6702為用于添加消費者命令的方法。代碼6704為用于去除消費者命令的方法。現(xiàn)在,轉(zhuǎn)向圖68,根據(jù)本發(fā)明的說明性實施例,描述了針對主題方法的類的方法接口集合的圖示。主題方法集合6800為針對客戶機側(cè)數(shù)據(jù)中樞上的主題方法諸如圖22中的主題2204的方法接口。例如,代碼6802為用于添加可用于其它消費者命令的主題的方法。代碼6804為用于得到可用主題列表的方法。現(xiàn)在,轉(zhuǎn)向圖69,根據(jù)本發(fā)明的說明性實施例,描述了針對事件處理方法的類的方法接口集合的圖示。事件處理方法集合6900為針對客戶機側(cè)數(shù)據(jù)中樞上的事件處理方法諸如圖22中的事件處理2206的方法接口。例如,代碼6902為一種用于激發(fā)所有排隊的事件的方法。代碼6卯4為激發(fā)事件的方法。代碼6906為一種向服務(wù)器發(fā)送事件,以^l行的方法?,F(xiàn)在,轉(zhuǎn)向圖70,根據(jù)本發(fā)明的說明性實施例,示出了針對命令管理方法的類的方法接口集合。命令管理方法集合7000為針對客戶機側(cè)數(shù)據(jù)中樞上的命令管理方法諸如圖22中的命令管理2208的方法接口。例如,代碼7002為用于添加Wiki命令的方法。代碼7004為用于刪除命令的方法。數(shù)據(jù)中樞對象定義了消費者可以訂購的主題,以及生產(chǎn)者命令可以發(fā)表或激發(fā)的主題。例如,搜尋部件為訂購搜尋主題的消費者。當(dāng)用戶接口從用戶接收搜尋項目時,用戶接口激發(fā)針對所述搜尋主題的事件。換句話說,用戶接口為發(fā)表消費者搜尋部件所訂購的主題的生產(chǎn)者?,F(xiàn)在,轉(zhuǎn)向圖71,根據(jù)本發(fā)明的說明性實施例,描述了數(shù)據(jù)中樞主題對象的類的對象變量與方法接口的集合。對象變量7100定義了主題對象的屬性。所述方法集合為針對客戶機側(cè)數(shù)據(jù)中樞或服務(wù)器側(cè)數(shù)據(jù)中樞上的數(shù)據(jù)中樞主題對象諸如圖21中的數(shù)據(jù)中樞主題對象2112和圖22中的數(shù)據(jù)中樞主題對象2210的方法接口。在本發(fā)明的說明性實施例中,與服務(wù)器相關(guān)的數(shù)據(jù)中樞主題對象和與客戶機相關(guān)的數(shù)據(jù)中樞主題對象具有相同的對象變量與方法?,F(xiàn)在,轉(zhuǎn)向圖72,根據(jù)本發(fā)明的說明性實施例,描述了數(shù)據(jù)中樞事件對象的類的類定義與方法接口的圖示。類定義7200定義了事件對象的屬性。例如,代碼7202定義了針對主題的對象變量。所有對象變量均具有主題對象變量中的主題值。代碼7204定義了針對值的對象變量。事件對象可以具有在對象變量值中存儲的數(shù)據(jù)。然而,并非所有事件對象都包括數(shù)據(jù)。在本發(fā)明的說明性的實施例中,所述方法集合為針對數(shù)據(jù)中樞事件對象諸如圖21中的數(shù)據(jù)中樞事件對象2114和圖22中的數(shù)據(jù)中樞對象2212的方法接口。與服務(wù)器相關(guān)的數(shù)據(jù)中樞事件和與客戶機的數(shù)據(jù)中樞事件對象具有相同的對象變量與方法。數(shù)據(jù)中樞對象、數(shù)據(jù)中樞主題對象和/或數(shù)據(jù)中樞事件對象可以包括未在這些說明性實施例中描述的額外的方法,而不背離本發(fā)明的說明性實施例的范圍。另外,在根據(jù)本發(fā)明的這些說明性實施例的數(shù)據(jù)中樞對象、數(shù)據(jù)中樞主題對象、和/或數(shù)據(jù)中樞事件對象的方法集合中,可以不存在與數(shù)據(jù)中樞對象、數(shù)據(jù)中樞主題對象、和/或凄t據(jù)中樞事件相關(guān)的一或多個方法。在基于事件的Wiki部件模型中,某些Wiki部件要求在部件可以答復(fù)或者激發(fā)事件對象之前存在變元值的最小充分集合。這些最小充分變元可以來自多個、異類(disparate)的源。因此,本發(fā)明的說明性實施例的方面提供了最小充分變元檢測方案,其聚集來自潛在多個源的變元數(shù)據(jù),并且把變元集合與所聲明的參數(shù)準(zhǔn)則進行匹配,以便僅當(dāng)存在滿足所聲明/所定義的參數(shù)準(zhǔn)則的最小充分變元,才激發(fā)"數(shù)據(jù)可用"事件。Wiki變元對象為與Wiki命令諸如圖14中的Wiki命令1404和Wiki命令1412相關(guān)的對象。Wiki變元對象具有"avail(效用)"屬性,指示激發(fā)命令所需的變元是否已經(jīng)設(shè)置以及有效。圖73是根據(jù)本發(fā)明的說明性實施例的、針對Wiki變元對象的類定義的圖示。由關(guān)于命令對象諸如圖14中的Wiki命令對象1404和1412的Wiki變元對象,執(zhí)行用于檢測是否激發(fā)變元/可用事件的算法。代碼7302為對象變量,指示變元對象是否有效。代碼7304為變元對象,指示變元是否被設(shè)置以及有效?,F(xiàn)在,轉(zhuǎn)向圖74,根據(jù)本發(fā)明的說明性實施例,示出了針對檢測是否激發(fā)變元/可用事件的算法的偽代碼。在這一例子中,代碼7400針對如下算法,該算法確定用于激發(fā)數(shù)據(jù)中樞事件對象的最少所需變元集合中的每一變元是否可用。在代碼7402處檢查每一變元,以確定可用變量是否為空(null)。如果算法指示所述集合中的每一變元可用,則代碼7406確定變元是否為可用并且被設(shè)置。如果變元可用并且4皮設(shè)置,則代碼7408激發(fā)與變元集合相關(guān)的新的數(shù)據(jù)中樞事件對象。因此,本發(fā)明的說明性實施例的方面提供了服務(wù)器側(cè)數(shù)據(jù)中樞對象和相應(yīng)的客戶機側(cè)數(shù)據(jù)中樞對象,以在Wiki環(huán)境和客戶機環(huán)境中的命令之間傳播或路由事件對象。數(shù)據(jù)中樞對象的利用使得在與給定Wiki頁相關(guān)的事件的處理期間命令能夠更容易地交互。應(yīng)該注意的是,盡管以上詳細地描述的本發(fā)明的說明性實施例是關(guān)于Wiki環(huán)境中的Wiki應(yīng)用而描述的,然而,上述本發(fā)明的說明性實施例并不局限于Wiki環(huán)境中的Wiki應(yīng)用。在本說明書中作為例子的Wiki環(huán)境中的Wiki應(yīng)用的使用絕不旨在對本發(fā)明的范圍加以任何的限制。對于本領(lǐng)域普通技術(shù)人員而言,顯然上述本發(fā)明的說明性實施例同樣適用于任何可由一組用戶通過接口訪問的共享環(huán)境。另外,盡管就JavaScript語言解釋了上述說明性實施例的某些方面,然而,在本說明書中作為例子的對JavaScript語言的使用絕不旨在對本發(fā)明的范圍加以任何的限制。本領(lǐng)域普通技術(shù)人員將意識到,可以70使用任何面向?qū)ο蟮哪_本語言實現(xiàn)上述說明性實施例。各附圖中的流程圖和方框圖說明了根據(jù)本發(fā)明的各種實施例的方法、裝置以及計算機程序產(chǎn)品的可能的實現(xiàn)的體系結(jié)構(gòu)、功能以及操作。在這一方面,流程圖或方框圖中的每一個框,可以代表模塊、段或者代碼的一部分,其包括用于實現(xiàn)一或多個指定邏輯功能的一或多條指令。還應(yīng)該加以注意的是,在某些替代性的實現(xiàn)中,所述框中所提到的功能,可以不按圖中所提到的次序?qū)崿F(xiàn)。例如,相繼示出的兩個框?qū)嶋H上可以實質(zhì)上并發(fā)地執(zhí)行,或者取決于所涉及的功能,有時可以按相反的次序執(zhí)行所述框。本發(fā)明可以呈完全硬件實施、完全軟件實施或者既包含硬件元件,也包括軟件元件的形式。在優(yōu)選的實施例中,按軟件形式實現(xiàn)本發(fā)明,其包括,但不局限于固件、駐留軟件、微代碼等。而且,本發(fā)明還可以呈可從計算機可用或者計算機可讀媒體訪問的計算機程序產(chǎn)品的形式,提供可由或者可以結(jié)合計算機或者任何指令執(zhí)行系統(tǒng)使用的程序代碼。就本說明書的目的而言,計算機可用或者計算機可讀媒體可以為任何實際的裝置,其可包括、存儲、通信、傳播、或者輸送由或者結(jié)合指令執(zhí)行系統(tǒng)、裝置、或設(shè)備使用的程序。所述媒體可以為電子、磁、光、電磁、紅外、或者半導(dǎo)體系統(tǒng)(或者裝置或者設(shè)備)或者傳播媒體。計算機可讀媒體的例子包括半導(dǎo)體或者固態(tài)存儲器、磁帶、可拆卸計算機盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、硬磁盤以及光盤。光盤的當(dāng)前的例子包括緊致盤-只讀存儲器(CD-ROM)、緊致盤-讀/寫存儲器(CD-R/W)以及DVD。適合于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個直接或者通過系統(tǒng)總線間接耦合于存儲器元件的處理器。存儲器元件可以包括在程序代碼的實際執(zhí)行期間所使用的局部存儲器、大容量存儲器、超高速緩沖存儲器,其為至少某些程序代碼提供臨時存儲,以減少執(zhí)行期間必須從大容量存儲器取得代碼的次數(shù)。輸入/輸出或1/0設(shè)備(包括,但不局限于鍵盤、顯示器、定位設(shè)備等),可以直接或者通過居間的I/O控制器耦合于所述系統(tǒng)。也可以把網(wǎng)絡(luò)適配器耦合于所述系統(tǒng),以使所述數(shù)據(jù)處理系統(tǒng)能夠通過居間的專用或公共網(wǎng)絡(luò)耦合于其它數(shù)據(jù)處理系統(tǒng)或者遠程打印機、或者存儲設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器以及Ethemet(以太網(wǎng))卡僅為當(dāng)前可用類型的網(wǎng)絡(luò)適配器的一些。已出于說明和描述的目的給出了本發(fā)明的描述,然而該描述并不旨在是窮盡的也不旨在把本發(fā)明限制于所公開的形式。本領(lǐng)域中的普通技術(shù)人員將會明顯意識到對本發(fā)明的諸多修改與本發(fā)明的諸多變通形式。所選擇和所描述的實施例,旨在對本發(fā)明的原理、實際應(yīng)用進行充分的解釋,以及旨在使本領(lǐng)域中的其他普通技術(shù)人員也能夠理解針對那些適合于所考慮的具體應(yīng)用的、具有各種修改的不同的實施例的本發(fā)明。權(quán)利要求1.一種用于通過頁來定義頁布置的計算機實現(xiàn)的方法,所述計算機實現(xiàn)的方法包括響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求,執(zhí)行創(chuàng)建所述當(dāng)前頁的數(shù)據(jù)模型所必需的數(shù)據(jù)操縱;響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求,選擇具體的布置頁來形成所選布置頁;組合所述所選布置頁與所述當(dāng)前頁以形成組合頁;以及向客戶機瀏覽器發(fā)送所述組合頁。2.根據(jù)權(quán)利要求1的計算機實現(xiàn)的方法,其中,所述頁是在允許單個或多個用戶有效地整合靜態(tài)和交互式內(nèi)容的合作網(wǎng)頁環(huán)境中的頁。3.根據(jù)權(quán)利要求1的計算機實現(xiàn)的方法,其中,所述組合所述所選布置頁與所述當(dāng)前頁以形成組合頁的步驟還包括將所述當(dāng)前頁的內(nèi)容放置到所述所選布置頁的主體字段中;以及用所述所選布置頁的所述主體字段來替換所述當(dāng)前頁的主體字段。4.根據(jù)權(quán)利要求3的計算機實現(xiàn)的方法,其中,用于將所述當(dāng)前頁的內(nèi)容放置到所述所選布置頁的主體字段中的步驟包括執(zhí)行字串替代以用所述當(dāng)前頁的內(nèi)容來替換在所述所選布置頁中的模板變量。5.稂據(jù)權(quán)利要求4的計算機實現(xiàn)的方法,其中,所述模板變量是稱為%_BODY—%的字串變量。6.根據(jù)權(quán)利要求1的計算機實現(xiàn)的方法,其中,所述組合頁的布置是能夠使用命令的集合來編輯的。7.根據(jù)權(quán)利要求6的計算機實現(xiàn)的方法,其中,所述命令的集合中的每個命令生成布置部件的內(nèi)容。8.根據(jù)權(quán)利要求7的計算機實現(xiàn)的方法,其中,對于所述布置部件來命名所述命令的集合中的每個命令,其中所述命令對于所述布置部件而生成所述內(nèi)容。9.根據(jù)權(quán)利要求6的計算機實現(xiàn)的方法,其中,所述命令是用于實現(xiàn)允許單個或多個用戶有效地整合靜態(tài)和交互式內(nèi)容的合作網(wǎng)頁環(huán)境的功能或處理的命令。10.—種包括計算機可用介質(zhì)的計算機程序產(chǎn)品,包括用于通過頁來定義頁布置的計算機可用程序代碼,所述計算機程序產(chǎn)品包括用于響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求、執(zhí)行創(chuàng)建所述當(dāng)前頁的數(shù)據(jù)模型所必需的數(shù)據(jù)操縱的計算機可用程序代碼;用于響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求、選擇具體的布置頁來形成所選布置頁的計算機可用程序代碼;用于組合所述所選布置頁與所述當(dāng)前頁以形成組合頁的計算機可用程序代碼;以及用于向客戶機瀏覽器發(fā)送所述組合頁的計算機可用程序代碼。11.根據(jù)權(quán)利要求10的計算機程序產(chǎn)品,其中,所述頁是在允許單個或多個用戶有效地整合靜態(tài)和交互式內(nèi)容的合作網(wǎng)頁環(huán)境中的頁。12.根據(jù)權(quán)利要求10的計算機程序產(chǎn)品,其中,所述組合所述所選布置頁與所述當(dāng)前頁以形成組合頁的計算機可用程序代碼還包括用于將所述當(dāng)前頁的內(nèi)容放置到所述所選布置頁的主體字段中的計算機可用程序代碼;以及用于用所述所選布置頁的所述主體字段來替換所述當(dāng)前頁的主體字段的計算機可用程序代碼。13.根據(jù)權(quán)利要求12的計算機程序產(chǎn)品,其中,用于將所述當(dāng)前頁的內(nèi)容放置到所迷所選布置頁的主體字段中的計算機可用程序代碼包括用于執(zhí)行字串替代以用所述當(dāng)前頁的內(nèi)容來替換在所述所選布置頁中的模板變量的計算機可用程序代碼。14.根據(jù)權(quán)利要求13的計算機程序產(chǎn)品,其中,所述模板變量是稱為。/。一BODY一。/o的字串變量。15.根據(jù)權(quán)利要求IO的計算機程序產(chǎn)品,其中,所述組合頁的布置是能夠使用命令的集合來編輯的。16.根據(jù)權(quán)利要求15的計算機程序產(chǎn)品,其中,所述命令的集合中的每個命令生成布置部件的內(nèi)容。17.根據(jù)權(quán)利要求16的計算機程序產(chǎn)品,其中,對于所述布置部件來命名所述命令的集合中的每個命令,其中所述命令對于所述布置部件而生成所述內(nèi)容。18.根據(jù)權(quán)利要求15的計算機程序產(chǎn)品,其中,所迷命令是用于實現(xiàn)允許單個或多個用戶有效地整合靜態(tài)和交互式內(nèi)容的合作網(wǎng)頁環(huán)境的功能或處理的命令。19.一種用于通過頁來定義頁布置的數(shù)據(jù)處理系統(tǒng),所述數(shù)據(jù)處理系統(tǒng)包括存儲設(shè)備,其中所述存儲設(shè)備存儲計算機可用程序代碼;以及處理器,其中所述處理器執(zhí)行計算機可用程序代碼,以便響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求,執(zhí)行創(chuàng)建所述當(dāng)前頁的數(shù)據(jù)模型所必需的數(shù)據(jù)操縱;響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求,選擇具體的布置頁來形成所選布置頁;組合所述所選布置頁與所述當(dāng)前頁以形成組合頁;以及向客戶機瀏覽器發(fā)送所述組合頁。20.根據(jù)權(quán)利要求19的數(shù)據(jù)處理系統(tǒng),其中,執(zhí)行計算機可用程序代碼以便組合所述所選布置頁與所述當(dāng)前頁以形成組合頁還包括執(zhí)行計算機可用程序代碼以便將所述當(dāng)前頁的內(nèi)容放置到所述所選布置頁的主體字段中以及用所述所選布置頁的所述主體字段來替換所述當(dāng)前頁的主體字段。全文摘要提供了一種用于通過網(wǎng)頁來定義網(wǎng)頁布置的方法。響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求,進行創(chuàng)建當(dāng)前頁的數(shù)據(jù)模型所必需的數(shù)據(jù)操縱。而且,響應(yīng)于從客戶機瀏覽器接收到顯示當(dāng)前頁的請求,選擇具體的布置頁來形成所選布置頁。所選布置頁與當(dāng)前頁組合以形成組合頁。組合頁被發(fā)送到客戶機瀏覽器。文檔編號G06F17/30GK101490674SQ200780025816公開日2009年7月22日申請日期2007年7月3日優(yōu)先權(quán)日2006年7月7日發(fā)明者布賴斯·A·柯蒂斯,斯圖爾特·尼古拉斯,韋恩·E·維克奈爾申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1