專利名稱:用于建立可擴(kuò)展業(yè)務(wù)應(yīng)用的類型系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及計(jì)算機(jī)軟件,更具體地說,涉及用于建立可擴(kuò)展業(yè)務(wù)應(yīng)用的平臺(tái)。
背景技術(shù):
現(xiàn)今的許多企業(yè)具有用于管理電子信息的兩個(gè)共生系統(tǒng)(ecosystem)數(shù)據(jù)庫共 生系統(tǒng),其中通過使用專用的、通常復(fù)雜的軟件應(yīng)用(此處被稱作傳統(tǒng)業(yè)務(wù)應(yīng)用),信息被 捕獲并保存在共享數(shù)據(jù)庫中;以及電子表格(spreadsheet)共生系統(tǒng),其中信息使用電子 表格在個(gè)體之間交換,通常以ad-hoc方式。數(shù)據(jù)庫共生系統(tǒng)特別適合于共享的企業(yè)環(huán)境,因?yàn)樾畔⒈患写鎯?chǔ),因此可由多 個(gè)用戶訪問以用于查看、修改、分析、審核、報(bào)告和其它功能。此外,用作數(shù)據(jù)條目的前端的 傳統(tǒng)業(yè)務(wù)應(yīng)用通常被設(shè)計(jì)為支持業(yè)務(wù)背景中有用的特征(例如,安全性、工作流等)。然而, 該共生系統(tǒng)的顯著缺點(diǎn)是,傳統(tǒng)業(yè)務(wù)應(yīng)用通常不能由非編程人員(例如,終端用戶)建立或 定制。其結(jié)果是,這樣的用戶被約束于輸入和管理這些應(yīng)用最初被編程為支持的特定種類 的數(shù)據(jù)。在電子表格共生系統(tǒng)中,用戶具有輸入和保持跟蹤適合于他們的特定需要的任何 類型數(shù)據(jù)的靈活性。例如,利用諸如微軟Excel的傳統(tǒng)電子表格應(yīng)用,用戶可容易地輸入、 修改和重新安排任何單元或由單元構(gòu)成的組中的數(shù)據(jù)。此外,因?yàn)殡娮颖砀癖举|(zhì)上是以數(shù) 據(jù)為中心,而不是以代碼為中心的,所以沒有任何編程專長的用戶也可建立和定制電子表 格來執(zhí)行各種任務(wù)。這使得電子表格對(duì)于廣大用戶而言是有吸引力并且易掌握的數(shù)據(jù)管理 工具。然而,電子表格不支持從共享數(shù)據(jù)庫存儲(chǔ)/檢索數(shù)據(jù)或其它面向業(yè)務(wù)的特征,從而約 束了它們在多用戶企業(yè)設(shè)置中的有用性。因此,希望具有用于建立新種類的應(yīng)用的技術(shù),能結(jié)合電子表格和傳統(tǒng)的數(shù)據(jù)庫 驅(qū)動(dòng)的業(yè)務(wù)應(yīng)用這兩方面。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供了一種用于開發(fā)可擴(kuò)展業(yè)務(wù)應(yīng)用的平臺(tái)(此處被稱為可擴(kuò) 展應(yīng)用平臺(tái),Extensible Application Platform,或XAP)。在一組實(shí)施例中,XAP可包括 基于可擴(kuò)展標(biāo)記語言(XML)的應(yīng)用模型,該模型被設(shè)計(jì)為支持高度的應(yīng)用可擴(kuò)展性。例如, XAP應(yīng)用模型可支持應(yīng)用語義的聲明式定義、應(yīng)用數(shù)據(jù)和元數(shù)據(jù)的分離、以及允許數(shù)據(jù)對(duì)象
4實(shí)例(例如,XML文檔)的約束和計(jì)算(例如,XQuery約束和計(jì)算)隨時(shí)間改變的靈活的類 型系統(tǒng)。在某些實(shí)施例中,可經(jīng)由被配置成與類似電子表格的客戶機(jī)側(cè)用戶界面互操作的 服務(wù)器側(cè)的數(shù)據(jù)庫/應(yīng)用引擎來實(shí)現(xiàn)XAP應(yīng)用模型。使用類似電子表格的UI,非編程人員 可建立、定制并運(yùn)行在如傳統(tǒng)業(yè)務(wù)應(yīng)用的共享數(shù)據(jù)庫上工作的應(yīng)用工作流。根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種用于驗(yàn)證數(shù)據(jù)對(duì)象實(shí)例,諸如XML文檔實(shí) 例的方法。該方法包括由計(jì)算機(jī)系統(tǒng)存儲(chǔ)XML文檔的一組XQuery狀態(tài),并由計(jì)算機(jī)系統(tǒng)在 第一時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第一子集。然后,在該第一時(shí)間點(diǎn)關(guān)于該第一子集來驗(yàn) 證XML文檔的實(shí)例,而無需關(guān)于不在第一子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例。在一個(gè)實(shí)施例中,該方法進(jìn)一步包括在第二時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第二 子集,其中所述第二子集與第一子集不同。然后在第二時(shí)間點(diǎn)關(guān)于該第二子集驗(yàn)證該實(shí)例, 而無需關(guān)于不在第二子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例。在一個(gè)實(shí)施例中,該方法進(jìn)一步包括存儲(chǔ)XML文檔的類型,并自動(dòng)地在第一時(shí)間 點(diǎn)和第二時(shí)間點(diǎn)兩個(gè)時(shí)間點(diǎn)關(guān)于該類型驗(yàn)證該實(shí)例。在一個(gè)實(shí)施例中,該組XQuery狀態(tài)中的每個(gè)狀態(tài)被存儲(chǔ)為單獨(dú)的XML文檔。在一個(gè)實(shí)施例中,該組狀態(tài)中的每個(gè)XQuery狀態(tài)限定一組XQuery約束,并且關(guān)于 第一子集驗(yàn)證該實(shí)例包括關(guān)于由第一子集限定的多組XQuery約束檢查該實(shí)例。在進(jìn)一步 的實(shí)施例中,每個(gè)XQuery約束是無副作用的布爾表達(dá)式。在一個(gè)實(shí)施例中,該組XQuery狀態(tài)中的至少一個(gè)XQuery狀態(tài)在層級(jí)上是另一個(gè) XQuery狀態(tài)的子狀態(tài),并且由該至少一個(gè)XQuery狀態(tài)限定的該組XQuery約束包括從該另 一個(gè)XQuery狀態(tài)繼承的XQuery約束。在一個(gè)實(shí)施例中,該組XQuery狀態(tài)中的至少一個(gè)XQuery狀態(tài)限定了一組XQuery 計(jì)算,并且關(guān)于第一子集驗(yàn)證該實(shí)例包括進(jìn)行由第一子集限定的該組XQuery計(jì)算。在進(jìn) 一步的實(shí)施例中,該組XQuery計(jì)算的結(jié)果被存儲(chǔ)在該實(shí)例的一個(gè)或多個(gè)域中。在一個(gè)實(shí)施例中,如果在第一時(shí)間點(diǎn)成功地驗(yàn)證了該實(shí)例,則用指示該實(shí)例對(duì)于 第一子集有效的信息標(biāo)記該實(shí)例。根據(jù)本發(fā)明的另一個(gè)實(shí)施例,提供了一種其上存儲(chǔ)有可由計(jì)算機(jī)系統(tǒng)執(zhí)行的程序 代碼的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。該程序代碼包括使計(jì)算機(jī)系統(tǒng)存儲(chǔ)XML文檔的一組XQuery 狀態(tài)并在第一時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第一子集以用于驗(yàn)證XML文檔的實(shí)例的代碼。 該程序代碼進(jìn)一步包括使該計(jì)算機(jī)系統(tǒng)在第一時(shí)間點(diǎn)關(guān)于第一子集驗(yàn)證該實(shí)例,而無需關(guān) 于不在第一子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例的代碼。根據(jù)本發(fā)明的另一個(gè)實(shí)施例,提供了一種系統(tǒng)。該系統(tǒng)包括處理組件,被配置成 存儲(chǔ)XML文檔的一組XQuery狀態(tài)并在第一時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第一子集以用于 驗(yàn)證該XML文檔的實(shí)例。該處理組件被進(jìn)一步配置成在第一時(shí)間點(diǎn)關(guān)于該第一子集驗(yàn)證該 實(shí)例,而無需關(guān)于不在第一子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例??蓞⒄照f明書的剩余部分和附圖來實(shí)現(xiàn)對(duì)此處公開的實(shí)施例的性質(zhì)和優(yōu)點(diǎn)的進(jìn)
一步的理解。
圖1是根據(jù)本發(fā)明的實(shí)施例的可使用的系統(tǒng)架構(gòu)的簡化框圖。
5
圖2是根據(jù)本發(fā)明的實(shí)施例的可使用的計(jì)算機(jī)系統(tǒng)的簡化框圖。圖3是根據(jù)本發(fā)明的實(shí)施例的用于驗(yàn)證XAP元素實(shí)例的過程的流程圖。圖4是根據(jù)本發(fā)明的實(shí)施例的用于關(guān)于特定類型/狀態(tài)驗(yàn)證XAP元素實(shí)例的過程 的流程圖。圖5是根據(jù)本發(fā)明的實(shí)施例的類型/狀態(tài)層級(jí)的簡化框圖。圖6是根據(jù)本發(fā)明的實(shí)施例的XAP應(yīng)用流程的簡化框圖。
具體實(shí)施例方式在下面的說明中,為了解釋的目的,闡述了眾多細(xì)節(jié)以提供對(duì)本發(fā)明實(shí)施例的理 解。然而,對(duì)本領(lǐng)域普通技術(shù)人員顯而易見的是,某些實(shí)施例在沒有一些上述細(xì)節(jié)的情況下 也能夠?qū)嵺`。本發(fā)明的實(shí)施例提供了用于開發(fā)可擴(kuò)展業(yè)務(wù)應(yīng)用的平臺(tái)(此處被稱為可擴(kuò)展應(yīng) 用平臺(tái)或XAP)。在一組實(shí)施例中,XAP可包括基于可擴(kuò)展標(biāo)記語言(XML)的應(yīng)用模型,該模 型被設(shè)計(jì)為支持高度的應(yīng)用可擴(kuò)展性。例如,XAP應(yīng)用模型可支持應(yīng)用語義的聲明式定義、 應(yīng)用數(shù)據(jù)和元數(shù)據(jù)的分離、以及允許數(shù)據(jù)對(duì)象實(shí)例(例如,XML文檔)的約束和計(jì)算(例如, XQuery約束和計(jì)算)隨時(shí)間改變的靈活的類型系統(tǒng)。在某些實(shí)施例中,可經(jīng)由被配置成與 類似電子表格的客戶機(jī)側(cè)用戶界面互操作的服務(wù)器側(cè)的數(shù)據(jù)庫/應(yīng)用引擎來實(shí)現(xiàn)XAP應(yīng)用 模型。使用類似電子表格的UI,非編程人員可建立、定制并運(yùn)行在如傳統(tǒng)業(yè)務(wù)應(yīng)用的共享數(shù) 據(jù)庫上工作的應(yīng)用工作流。1. XAP系統(tǒng)架構(gòu)圖1是根據(jù)本發(fā)明的實(shí)施例可使用的系統(tǒng)架構(gòu)100的簡化框圖。如圖所示,系統(tǒng) 架構(gòu)100可包括一個(gè)或多個(gè)客戶機(jī)102、104,一個(gè)或多個(gè)服務(wù)器106、108,以及經(jīng)由網(wǎng)絡(luò)112 通信地耦合的一個(gè)或多個(gè)數(shù)據(jù)庫110。盡管圖1繪出了兩個(gè)客戶機(jī)、兩個(gè)服務(wù)器和一個(gè)數(shù)據(jù) 庫,但可支持任何數(shù)量的客戶機(jī)、服務(wù)器和數(shù)據(jù)庫??蛻魴C(jī)102、104被配置成呈現(xiàn)類似電子表格的客戶機(jī)側(cè)UI (此處被稱為XAP UI), 用于建立和運(yùn)行XAP應(yīng)用。在一組實(shí)施例中,可使用諸如AJAX或Adobe Flex的基于Web 的技術(shù)來編程XAP UI ;在這些情況下,客戶機(jī)102、104可在傳統(tǒng)Web瀏覽器應(yīng)用中呈現(xiàn)XAP UI。在其它實(shí)施例中,可在專有客戶機(jī)應(yīng)用中呈現(xiàn)XAP UI0客戶機(jī)102、104可以是通用計(jì) 算機(jī),諸如運(yùn)行微軟Windows、蘋果OSX或其它消費(fèi)者操作系統(tǒng)的臺(tái)式或膝上型計(jì)算機(jī)???戶機(jī)102、104還可以是能夠通過網(wǎng)絡(luò)進(jìn)行通信并與服務(wù)器106、108交互的任何其它類型的 電子設(shè)備(例如,智能電話、PDA、書寫板、上網(wǎng)本等)。服務(wù)器106、108被配置成執(zhí)行服務(wù)器側(cè)的XAP應(yīng)用/數(shù)據(jù)庫引擎,并向客戶機(jī) 102、104提供各種計(jì)算和數(shù)據(jù)存儲(chǔ)服務(wù)。在某些實(shí)施例中,服務(wù)器106、108可以是可縮放 的服務(wù)器云(server cloud)的一部分。像客戶機(jī)102、104—樣,服務(wù)器106、108可以是 運(yùn)行任何各種消費(fèi)者操作系統(tǒng)的通用計(jì)算機(jī)。服務(wù)器106、108還可以是專用的服務(wù)器計(jì)算 機(jī),諸如安裝在機(jī)架上的服務(wù)器,其被配置成運(yùn)行面向服務(wù)器的操作系統(tǒng)(例如,Solaris, FreeBSD、Linux 等)。服務(wù)器106、108能夠接收和處理來自客戶機(jī)102、104的多個(gè)不同類型的XAP服務(wù) 請(qǐng)求。在一個(gè)實(shí)施例中,服務(wù)器106、108能夠接收和處理用于生成由客戶機(jī)102、104呈現(xiàn)的XAP UI的多個(gè)部分的請(qǐng)求。在另一個(gè)實(shí)施例中,服務(wù)器106、108能夠接收和處理用于 執(zhí)行各種XAP應(yīng)用語義的請(qǐng)求。例如,如下面要進(jìn)一步詳細(xì)說明的,用戶可限定應(yīng)用數(shù)據(jù) 對(duì)象(例如XML文檔)的類型和狀態(tài),其中每個(gè)類型或狀態(tài)包括一組約束和/或計(jì)算(例 如,XQuery約束/計(jì)算)。服務(wù)器106、108能夠執(zhí)行這些約束和計(jì)算(經(jīng)由例如XQuery引 擎),并將結(jié)果提供給客戶機(jī)102、104。而在另一個(gè)實(shí)施例中,服務(wù)器106、108能夠接收并處理用于從共享數(shù)據(jù)庫110存 儲(chǔ)和/或檢索信息的請(qǐng)求。一般來講,數(shù)據(jù)庫110用作所有XAP應(yīng)用數(shù)據(jù)和元數(shù)據(jù)的中央數(shù) 據(jù)存儲(chǔ)。在特定實(shí)施例中,數(shù)據(jù)庫110可以被實(shí)現(xiàn)為基于XML的數(shù)據(jù)庫,并且所有XAP數(shù)據(jù) 和元數(shù)據(jù)都可以被封裝成XML文檔。這實(shí)現(xiàn)了優(yōu)于諸如基于SQL的存儲(chǔ)等其它方案的許多 優(yōu)點(diǎn)。例如,基于XML的存儲(chǔ)支持?jǐn)?shù)據(jù)模式改變而不要求改變XML文檔實(shí)例,并且允許XML 文檔的多個(gè)用戶變形同時(shí)存在?;赬ML文檔的存儲(chǔ)還支持非結(jié)構(gòu)化的、半結(jié)構(gòu)化的和高 度結(jié)構(gòu)化的數(shù)據(jù)。這些特征便利了在應(yīng)用模型級(jí)別上的定制化,這是XAP的一個(gè)重要方面。在圖1的實(shí)施例中,數(shù)據(jù)庫110,作為單個(gè)邏輯實(shí)例,駐留在一個(gè)或多個(gè)與服務(wù)器 106、108分離的機(jī)器中。例如,數(shù)據(jù)庫110可駐留在單獨(dú)的甲骨文RDBMS服務(wù)器中。在該實(shí) 施例中,服務(wù)器106、108能夠經(jīng)由RDBMS協(xié)議,諸如Oracle Callable Interface(OCI)與 數(shù)據(jù)庫110進(jìn)行通信。在作為替代的實(shí)施例中,能夠以分布方式實(shí)現(xiàn)數(shù)據(jù)庫110,其中,數(shù) 據(jù)庫被分割為駐留在服務(wù)器106、108(和服務(wù)器云中的其它服務(wù)器)中的許多單獨(dú)的(邏 輯)實(shí)例。根據(jù)該設(shè)計(jì),每個(gè)服務(wù)器能夠負(fù)責(zé)存儲(chǔ)和管理整個(gè)數(shù)據(jù)存儲(chǔ)的一部分。在其中XAP客戶機(jī)側(cè)和服務(wù)器側(cè)之間的交互是基于Web的實(shí)現(xiàn)方式中,客戶機(jī) 102、104能夠經(jīng)由HTTP請(qǐng)求與服務(wù)器106、108通信。此外,可在諸如Apache的Web服務(wù)器 模塊內(nèi)實(shí)現(xiàn)由服務(wù)器106、108執(zhí)行的處理。在其中XAP客戶機(jī)側(cè)和服務(wù)器側(cè)之間的交互是 基于專有技術(shù)的實(shí)現(xiàn)方式中,客戶機(jī)102、104和服務(wù)器106、108能夠經(jīng)由定制的協(xié)議進(jìn)行
通{曰。網(wǎng)絡(luò)112可以是任何類型的數(shù)據(jù)通信網(wǎng)絡(luò),諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、虛擬 網(wǎng)絡(luò)(例如,VPN)或因特網(wǎng)。在某些實(shí)施例中,系統(tǒng)架構(gòu)110的各種組件能夠通過不同類 型的網(wǎng)絡(luò)進(jìn)行通信。例如,在一個(gè)實(shí)施例中,客戶機(jī)102、104能夠經(jīng)由因特網(wǎng)與服務(wù)器106、 108通信,服務(wù)器106、108能夠經(jīng)由安全的局域網(wǎng)(例如,企業(yè)內(nèi)部網(wǎng))與數(shù)據(jù)庫110通信。應(yīng)理解,系統(tǒng)架構(gòu)100是示例性的,并且不旨在限制本發(fā)明的實(shí)施方式。例如,在 一個(gè)替代性的實(shí)施例中,服務(wù)器106、108的計(jì)算和數(shù)據(jù)存儲(chǔ)功能可被分段到兩個(gè)不同類型 的服務(wù)器——計(jì)算服務(wù)器和存儲(chǔ)服務(wù)器中。因此,能夠經(jīng)由分離的計(jì)算和存儲(chǔ)云單獨(dú)地縮 放計(jì)算和存儲(chǔ)管理資源。在另一個(gè)替代性的實(shí)施例中,由服務(wù)器106、108進(jìn)行的處理的多 個(gè)部分可由客戶機(jī)102、104處理,并且客戶機(jī)能夠直接與數(shù)據(jù)庫110交互。本領(lǐng)域技術(shù)人 員將認(rèn)識(shí)到其它變形、修改和替換。圖2是根據(jù)本發(fā)明的實(shí)施例使用的計(jì)算機(jī)系統(tǒng)200的簡化框圖。例如,計(jì)算機(jī)系 統(tǒng)200可用于實(shí)現(xiàn)圖1中說明的客戶機(jī)或服務(wù)器102、104、106和108中的任何一個(gè)。如圖 2所示,計(jì)算機(jī)系統(tǒng)200可包括經(jīng)由總線子系統(tǒng)204與多個(gè)外圍設(shè)備進(jìn)行通信的一個(gè)或多個(gè) 處理器202。這些外圍設(shè)備可包括存儲(chǔ)子系統(tǒng)206 (包括內(nèi)存子系統(tǒng)208和文件存儲(chǔ)子系統(tǒng) 210)、用戶接口輸入設(shè)備212、用戶接口輸出設(shè)備214和網(wǎng)絡(luò)接口子系統(tǒng)216??偩€子系統(tǒng)204能夠提供用于使計(jì)算機(jī)系統(tǒng)200的各個(gè)組件和子系統(tǒng)按照意圖彼此通信的機(jī)制。盡管總線子系統(tǒng)204被示意性地示為單個(gè)總線,但總線子系統(tǒng)的替代性實(shí) 施例可利用多個(gè)總線。網(wǎng)絡(luò)接口子系統(tǒng)216可用作用于在計(jì)算機(jī)系統(tǒng)200和其它計(jì)算機(jī)系統(tǒng)或網(wǎng)絡(luò)(例 如,圖1的網(wǎng)絡(luò)112)之間傳送數(shù)據(jù)的接口。網(wǎng)絡(luò)接口子系統(tǒng)216的實(shí)施例可包括以太網(wǎng)卡、 調(diào)制解調(diào)器(電話、衛(wèi)星、電纜、ISDN等)、數(shù)字用戶線(DSL)單元等。用戶接口輸入設(shè)備212可包括鍵盤、指點(diǎn)設(shè)備(例如,鼠標(biāo)、跟蹤球、觸摸板等)、掃 描儀、條形碼掃描儀、包括在顯示器中的觸摸屏、音頻輸入設(shè)備(例如,語音識(shí)別系統(tǒng)、揚(yáng)聲 器等)和其它類型的輸入設(shè)備。一般來講,術(shù)語“輸入設(shè)備”的使用旨在包括用于將信息輸 入到計(jì)算機(jī)系統(tǒng)200的所有可能類型的設(shè)備和機(jī)制。用戶接口輸出設(shè)備214可包括顯示器子系統(tǒng)、打印機(jī)、傳真機(jī)或非可視顯示器,諸 如音頻輸出設(shè)備等。顯示器子系統(tǒng)可以是陰極射線管(CRT)、諸如液晶顯示器(LCD)的平板 設(shè)備、或投影設(shè)備。一般來講,術(shù)語“輸出設(shè)備”的使用旨在包括用于從計(jì)算機(jī)系統(tǒng)200輸 出信息的所有可能類型的設(shè)備和機(jī)制。存儲(chǔ)子系統(tǒng)206可包括內(nèi)存子系統(tǒng)208和文件/盤存儲(chǔ)子系統(tǒng)210。子系統(tǒng)208 和210代表可存儲(chǔ)提供本發(fā)明的功能性的程序代碼和/或數(shù)據(jù)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。內(nèi)存子系統(tǒng)208可包括多個(gè)內(nèi)存,包括用于在程序執(zhí)行期間存儲(chǔ)指令和數(shù)據(jù)的主 隨機(jī)存取存儲(chǔ)器(RAM) 218、和其中存儲(chǔ)固定指令的只讀存儲(chǔ)器(ROM) 220。文件存儲(chǔ)子系統(tǒng) 210可提供程序和數(shù)據(jù)文件的持久(即,非易失性)存儲(chǔ),并且可包括磁或固態(tài)硬盤驅(qū)動(dòng)器、 帶有相關(guān)聯(lián)的可移除介質(zhì)的軟盤驅(qū)動(dòng)器、帶有相關(guān)聯(lián)的可移除介質(zhì)(例如,⑶_R0M、DVD、藍(lán) 光等)的光學(xué)驅(qū)動(dòng)器、基于可移除閃存存儲(chǔ)器的驅(qū)動(dòng)器或卡、和/或現(xiàn)有技術(shù)中已知的其它 類型的存儲(chǔ)介質(zhì)。應(yīng)理解,計(jì)算機(jī)系統(tǒng)200是示例性的,并且不旨在限制本發(fā)明的實(shí)施方式。具有比 系統(tǒng)200更多或更少組件的許多其它配置是可能的。2. XAP APPLICATION MODEL下面的章節(jié)描述XAP應(yīng)用模型的組件。該應(yīng)用模型可包括尤其是,數(shù)據(jù)結(jié)構(gòu)構(gòu)造 (例如,元素、類型、狀態(tài))、組構(gòu)造(例如,文檔)和形成XAP應(yīng)用的基礎(chǔ)的其它應(yīng)用級(jí)構(gòu)造 (例如,約束、計(jì)算、鏈接、活動(dòng))等。在一組實(shí)施例中,許多這些組件可經(jīng)由類似電子表格的 UI被聲明式地定義,從而允許熟悉電子表格(但可能不具有編程專長)的用戶建立并運(yùn)行 XAP應(yīng)用。在各個(gè)實(shí)施例中,XAP應(yīng)用模型被設(shè)計(jì)成促進(jìn)高度的定制化和最小化其中對(duì)應(yīng)用 數(shù)據(jù)結(jié)構(gòu)的改變(例如,添加新數(shù)據(jù)對(duì)象、修改應(yīng)用于現(xiàn)有數(shù)據(jù)對(duì)象的業(yè)務(wù)規(guī)則等)要求修 改程序代碼的實(shí)例。此外,應(yīng)用模型被設(shè)計(jì)成促進(jìn)在XAP應(yīng)用之間共享和重復(fù)使用組件。這 些設(shè)計(jì)原理反映在下面描述的模型的多個(gè)方面。2. 1 元素元素是將名稱(從而語義)與一條數(shù)據(jù)相關(guān)聯(lián)的XAP數(shù)據(jù)結(jié)構(gòu)構(gòu)造(construct)。 如果兩個(gè)元素實(shí)例共享相同的元素名稱,則它們可被認(rèn)為是可比較的。在一組實(shí)施例中, XAP元素可被表示為XML元素。例如,XAP元素名稱可對(duì)應(yīng)于XML元素名稱,并且XAP元素 實(shí)例內(nèi)的數(shù)據(jù)可對(duì)應(yīng)于XML元素的標(biāo)簽內(nèi)包括的數(shù)據(jù)。此外,XAP元素(以及其它XAP模 型實(shí)體)可使用傳統(tǒng)的XML命名空間來命名。因此,XAP元素名稱可由命名空間(例如,"http://xap. oracle, com/demo/store,,或被簡稱為“store” )和命名空間內(nèi)的本地名稱 (例如,“order”,是購買定購數(shù)據(jù)對(duì)象的簡稱)組成。 在一組實(shí)施例中,XAP元素可以是標(biāo)量元素或結(jié)構(gòu)元素。XAP標(biāo)量元素是包含一條 數(shù)據(jù)的元素。因此,標(biāo)量元素可被視為原子數(shù)據(jù)對(duì)象。在特定的實(shí)施例中,標(biāo)量元素可對(duì)應(yīng) 于XAP UI中的單個(gè)數(shù)據(jù)域。下面是存儲(chǔ)美國郵政編碼的值的標(biāo)量元素實(shí)例(使用XML標(biāo) 簽來定義)的例子〈storezipcode>90210</storezipcode>在某些實(shí)施例中,標(biāo)量元素可與標(biāo)量數(shù)據(jù)類型相關(guān)聯(lián)。標(biāo)量數(shù)據(jù)類型可用作對(duì)XAP 應(yīng)用/數(shù)據(jù)庫引擎如何存儲(chǔ)和索引該元素的實(shí)例的提示。如果標(biāo)量元素的實(shí)例數(shù)據(jù)不能被 轉(zhuǎn)換成具體的標(biāo)量數(shù)據(jù)類型,則該數(shù)據(jù)可被存儲(chǔ)為串。由XAP支持的標(biāo)量數(shù)據(jù)類型的例子 包括 空-空元素通過其是否存在來傳遞信息。這些也被稱為標(biāo)志元素。 布爾-布爾元素包含真/假值。對(duì)于比較(collation)的目的,真排在假之后。 整數(shù)-整數(shù)包含補(bǔ)碼整數(shù)(two,s complement integer),大小最高為例如64 位(可使用約束將其限制到較小的大小)。 浮點(diǎn)-浮點(diǎn)包含浮點(diǎn)值??梢韵嗤绞?數(shù)值地)比較浮點(diǎn)數(shù)和整數(shù)。 小數(shù)-小數(shù)包含具有無限精度的使用基數(shù)為10位表示的浮點(diǎn)值。數(shù)值比校。 串-串包含零或更多UniCOde(UTF8)字符的陣列。串值按照值索引以UTF8 二 進(jìn)制排序進(jìn)行比較。 二進(jìn)制-二進(jìn)制包含零或更多8比特字節(jié)的陣列。二進(jìn)制比較。 日期-日期包含格里歷(Gregorian calendar)日期,由年、月和日構(gòu)成。時(shí)間 比較。 時(shí)間-時(shí)間包含時(shí)、分、秒、分?jǐn)?shù)秒。時(shí)間比校。 鏈接-鏈接是提供對(duì)另一個(gè)(結(jié)構(gòu))元素實(shí)例的引用的XAP構(gòu)造。XAP結(jié)構(gòu)元素是包含一個(gè)或多個(gè)其它標(biāo)量或結(jié)構(gòu)元素的元素。因此,結(jié)構(gòu)元素可被 視為層級(jí)數(shù)據(jù)對(duì)象。在特定實(shí)施例中,結(jié)構(gòu)元素可對(duì)應(yīng)于XAP UI中的一行數(shù)據(jù)(包括多個(gè) 數(shù)據(jù)域)。下面是包括“線路”、“城市”和“郵政編碼”標(biāo)量元素的美國式地址的結(jié)構(gòu)元素實(shí) 例的例子<storeaddress)〈storeline>ABC Avenue</store1ine><store:line>Apt. 123</store:line)<store:city>Beverly Hills</store:city><store:zipcode>90210</store:zipcode></store:address)在一組實(shí)施例中,結(jié)構(gòu)元素的每個(gè)實(shí)例可在共享XAP數(shù)據(jù)庫(例如,圖1的數(shù)據(jù)庫 110)中被表示和存儲(chǔ)為單獨(dú)的XAP文檔(例如,XML文檔)。下面將在“文檔”的章節(jié)中更 詳細(xì)地討論XAP文檔。此外,每個(gè)結(jié)構(gòu)元素可與XAP類型和一個(gè)或多個(gè)XAP狀態(tài)相關(guān)聯(lián)。一般來講,結(jié) 構(gòu)元素的XAP類型可定義不變的一組規(guī)則(即,約束),該組規(guī)則用于在其生命期中驗(yàn)證該元素的實(shí)例,并且結(jié)構(gòu)元素的XAP狀態(tài)可定義僅用于在某些時(shí)間驗(yàn)證該元素實(shí)例的多組規(guī) 則。下面將在“類型和狀態(tài)”章節(jié)中更詳細(xì)地討論XAP類型和狀態(tài)。在一組實(shí)施例中,XAP元素在共享XAP數(shù)據(jù)庫內(nèi)可以是唯一的,因此在所有XAP應(yīng) 用的團(tuán)體內(nèi)可具有全局作用范圍。這促進(jìn)了應(yīng)用之間的元素名稱的共享和重復(fù)使用。例如, 如果用戶創(chuàng)建了在一個(gè)XAP應(yīng)用中名為“xap:address”的元素,則該元素名稱可以對(duì)創(chuàng)建 其它XAP應(yīng)用的其它用戶可見(并且可用于重復(fù)使用)。此外,共享的元素在每個(gè)應(yīng)用中可 具有相同語義(例如,數(shù)據(jù)結(jié)構(gòu)、類型、狀態(tài))。這有多個(gè)益處/特征,諸如應(yīng)用之間公共的 數(shù)據(jù)對(duì)象的一致行為/外觀,以及基于元素名稱的自動(dòng)數(shù)據(jù)合并。2. 2.文檔XAP文檔是用于組織XAP數(shù)據(jù)(例如,元素實(shí)例)和XAP元數(shù)據(jù)(例如,類型和狀 態(tài)定義)的分組構(gòu)造。在一組實(shí)施例中,XAP文檔可被表示為XML文檔。XAP文檔可被視為 XAP系統(tǒng)中隔離和原子改變的單元。因此,當(dāng)XAP應(yīng)用正在操作/修改一個(gè)文檔時(shí),該應(yīng)用 可確保該文檔內(nèi)的所有信息是內(nèi)部一致的。在各個(gè)實(shí)施例中,所有XAP文檔可存儲(chǔ)在共享的XAP數(shù)據(jù)庫中,并且可經(jīng)由虛擬文 件系統(tǒng)接口訪問。在一個(gè)實(shí)施例中,可由XAP應(yīng)用/數(shù)據(jù)庫引擎為由用戶創(chuàng)建的結(jié)構(gòu)元素 的每個(gè)實(shí)例創(chuàng)建和存儲(chǔ)新文檔。下面是封裝“st0re:0rder”元素實(shí)例的數(shù)據(jù)的示例XML文 檔< ? xml version=" 1.0〃 encoding =" IS0-8859-1" ><store: order xmlns: xap = " http://xap.oracle.com"xmlns:xlink = " http://www. w3. org/1999/xlink"xmlns: store = " http://xap.oracle.com/demo/store" >
<store:ordernumber>12345</store:ordernumber>〈store:date>2008-08_08</store:date〉<store:name>Herman Munster</store:name><store:shipto xlink:href = " /customers/munster. xml#_001〃 /><store:orderline xap: id=" _001〃 ><store:item xlink:href =〃 /products/widget, xml" /><store:price>10. 00</store:price><store:quantity>2</store:quantity)<store:total>20. 00</store:total)</store:orderline><store:orderline xap: id=" _002" ><store:item xlink:href =〃 /products/grommet. xml" /><store:price>20.00</store:price><store:quantity)1</store:quantity)<store:total>20. 00</store:total)</store:orderline><store: totalMO. 00</store: total)</store:order)
10
還可以為由用戶聲明式地定義的XAP元數(shù)據(jù)定義(即,描述XAP數(shù)據(jù)或XAP應(yīng)用 流的語義的數(shù)據(jù))創(chuàng)建和存儲(chǔ)XAP文檔。這種元數(shù)據(jù)定義的例子包括類型、狀態(tài)和活動(dòng)。 在一個(gè)實(shí)施例中,XAP元數(shù)據(jù)定義可被存儲(chǔ)在與XAP元素實(shí)例分離的XML文檔中。該途徑 使數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)之間的依賴性最小化,從而便利應(yīng)用定制化。在用戶定義的數(shù)據(jù)和元數(shù)據(jù)以外,每個(gè)XAP文檔可進(jìn)一步包括駐留在單獨(dú)的XML 元素樹上的系統(tǒng)元數(shù)據(jù)。該系統(tǒng)元數(shù)據(jù)可以包括例如文檔的創(chuàng)建者、修改日期、訪問許可 (ACL)和大小(字節(jié))。系統(tǒng)元數(shù)據(jù)還可以識(shí)別已關(guān)于該文檔驗(yàn)證了的類型/狀態(tài)的列表、 以及被發(fā)現(xiàn)的錯(cuò)誤列表。在一組實(shí)施例中,可根據(jù)兩個(gè)級(jí)別-主版本和次版本,來版本化XAP文檔。只要 XAP文檔經(jīng)由XAP UI “公布”,就創(chuàng)建主版本,并且該主版本對(duì)應(yīng)于對(duì)其它用戶可見的文檔 變化。如果當(dāng)創(chuàng)建主版本時(shí)其它用戶正在修改文檔的過程中,則那些用戶可能需要將它們 的改變并入新的主版本。文檔的次版本可經(jīng)由XAP UI客戶機(jī)自動(dòng)地或手動(dòng)地創(chuàng)建,并且對(duì)應(yīng)于編輯該文檔 的用戶的個(gè)人保存點(diǎn)。在次版本中捕獲的變化對(duì)于其它用戶不可見,并且將使其不可見直 到公布該變化并創(chuàng)建新的主版本。在一組實(shí)施例中,共享的XAP數(shù)據(jù)庫可維護(hù)文檔的所有先前的主版本的拷貝。如 下面的“約束”章節(jié)中描述的,當(dāng)XAP應(yīng)用存在于特定時(shí)間點(diǎn)時(shí),這允許XAP應(yīng)用參考XAP文 檔中的歷史數(shù)據(jù)。2. 3.鏈接鏈接是一種XAP標(biāo)量元素,其引用存儲(chǔ)在與包含該鏈接的文檔/元素實(shí)例分離的 XAP文檔中的結(jié)構(gòu)元素實(shí)例。鏈接可用于引用在多個(gè)元素實(shí)例中共享的數(shù)據(jù),而無需一定要 復(fù)制每個(gè)實(shí)例中的數(shù)據(jù)。在一組實(shí)施例中,XAP鏈接可以經(jīng)由傳統(tǒng)XML XLink來表示。上面的“文檔”章節(jié)中示出的“ store order ”文檔包括三個(gè)鏈接(在下面突出顯
示)<store order xmlns xap = “ http://xap.oracle.com"xmlns :xlink = " http://Vww.w3.org/1999/xlink"xmlns: store = " http://xap.oracle.com/demo/store" ><store:ordernumber>12345</store:ordernumber>〈store:date>2008-08_08</store:date〉<store:name>Herman Munster</store:name><store:shipto xlink:href = " /customers/munster. xml#_001〃 /><store:orderline xap: id=" _001〃 ><store:item xlink:href =〃 /products/widget, xml" /><store:price>10. 00</store:price><store:quantity>2</store:quantity)<store:total>20. 00</store:total)</store:orderline><store:orderline xap: id=" _002" ><store:item xlink:href =〃 /products/grommet. xml" />
11
<storeprice>20.00</storeprice><storequantity>l</store:quantity)<store:total>20. 00</store:total)</store:orderline><store: totalMO. 00</store: total)</store: order>在該例子中,"store:order”元素實(shí)例包括到“customers/munster. xml#_0001”中 存儲(chǔ)的客戶的送貨地址的鏈接。此外,“store:order”元素實(shí)例包括到分別在“products/ widget, xml”和“products/grommet. xml”中存儲(chǔ)的兩個(gè)分開的貨物說明的鏈接。在一組實(shí)施例中,XAP鏈接可指向(默認(rèn))最新的參考文檔的主版本。該行為可 通過約束鏈接指向特定的歷史版本(由版本號(hào)識(shí)別)而改變。使用傳統(tǒng)的XLink來實(shí)現(xiàn)XAP鏈接的一個(gè)問題是XLink是不可逆的。為了解決這 個(gè)問題,XAP可包括被稱為xap:getInLinkS()的內(nèi)置函數(shù),其提供了從特定目標(biāo)元素的逆 導(dǎo)航。在一組實(shí)施例中,xapdetlnLinksO可將(1)目標(biāo)元素,(2)要找到的鏈接的類型作 為自變量。例如,可使用下述代碼來找到被發(fā)送到特定地址的所有訂單$x: = xapgetlnLinks($address, ‘storeorder/storeshipto‘)2. 4.類型和狀杰傳統(tǒng)類型系統(tǒng)提供一類數(shù)據(jù)的名稱、以及限制可以處于該類中的數(shù)據(jù)的種類的規(guī) 則或約束的列表。類型系統(tǒng)在下面意義上有用它們可將關(guān)于該程序代碼想要構(gòu)成的數(shù)據(jù) 的假設(shè)代碼化,從而使代碼不那么復(fù)雜。然而,現(xiàn)有的類型系統(tǒng)具有多個(gè)缺陷使應(yīng)用開發(fā) (并且,具體地講,應(yīng)用定制化)的多個(gè)方面很困難。首先,現(xiàn)有的類型系統(tǒng)假設(shè)每個(gè)數(shù)據(jù)對(duì)象(例如,XML文檔)具有單個(gè)類型,并且 該類型是不可變的。因此,應(yīng)用于數(shù)據(jù)對(duì)象的約束不能隨時(shí)間修改。這在若干不同場景中 是有問題的。例如,考慮流過購買訂單工作流的“訂單”對(duì)象。該訂單對(duì)象可經(jīng)歷多個(gè)不同 的工作流階段,諸如“新”、“開帳單”、“送貨”和“完畢”。從業(yè)務(wù)的角度,為了適當(dāng)驗(yàn)證該訂 單對(duì)象,該訂單對(duì)象會(huì)需要在不同階段呈現(xiàn)不同的域和/或約束(例如,在送貨階段是跟蹤 號(hào))。然而,通過單一的靜態(tài)類型,不能支持此類動(dòng)態(tài)修改約束。另一個(gè)例子是,考慮這樣一個(gè)應(yīng)用,其最初被開發(fā)為存儲(chǔ)“個(gè)人”對(duì)象的單個(gè) “SSN”(社會(huì)安全號(hào))屬性(假設(shè)每個(gè)人具有一個(gè)SSN)。在部署了該應(yīng)用之后,具有身份證 被盜的問題的人可被輸入該應(yīng)用,并且該人可具有分配給她的第二 SSN。在該情況下,該應(yīng) 用需要被修改為支持“人”對(duì)象中的第二 SSN屬性。然而,通過單一的靜態(tài)類型,此類的定 制也不能被支持(在不重寫應(yīng)用代碼的情況下)。現(xiàn)有的類型系統(tǒng)的第二個(gè)問題是類型定義通常與程序代碼和/或數(shù)據(jù)緊密結(jié) 合。例如,在許多情況下,類型是以程序式(programmatically)定義的而不是以聲明式 (declaratively)定義的。這使得非編程人員難以進(jìn)行類型修改,因?yàn)樾枰貙懞椭鼐幾g受 影響的程序代碼。在其它實(shí)例中,類型定義通常與它們所涉及的數(shù)據(jù)一起被存儲(chǔ)。這通常 允許當(dāng)存儲(chǔ)和訪問該數(shù)據(jù)時(shí)進(jìn)行一些優(yōu)化,但當(dāng)進(jìn)行類型修改時(shí),需要觸及所有現(xiàn)有的數(shù) 據(jù)實(shí)例。XAP應(yīng)用模型提供了克服這些和其它相似問題的靈活的類型系統(tǒng)。在一組實(shí)施例中,XAP類型系統(tǒng)可包括兩個(gè)不同的分類構(gòu)造類型和狀態(tài)。這兩個(gè)構(gòu)造可具有需要滿足的 名稱和一組約束,以使得該類型/狀態(tài)關(guān)于數(shù)據(jù)對(duì)象實(shí)例(即,元素實(shí)例/XML文檔實(shí)例) 有效。XAP類型與傳統(tǒng)類型相似之處在于XAP元素實(shí)例可僅與一個(gè)XAP類型相關(guān)聯(lián),并且 該XAP類型在該實(shí)例的生命期內(nèi)是“激活”的(即,強(qiáng)制使用該類型約束)。然而,XAP元素 實(shí)例還可以與多個(gè)XAP狀態(tài)相關(guān)聯(lián),并且一個(gè)或多個(gè)XAP狀態(tài)可以在該實(shí)例的生命期中的 各個(gè)點(diǎn)對(duì)于該實(shí)例是激活的或不激活的。利用該基于狀態(tài)的范式,XAP應(yīng)用可隨時(shí)間向元 素實(shí)例應(yīng)用變化的多組約束。在一組實(shí)施例中,XAP類型/狀態(tài)中包括的約束可被表示為XQuery表達(dá)式。因此, 此處,XAP類型/狀態(tài)還被稱為XQuery類型/狀態(tài)。在某些實(shí)施例中,可聲明式地(而不是程序式地)定義XAP類型和狀態(tài),并將其存 儲(chǔ)在與它們涉及的元素?cái)?shù)據(jù)分離的XAP文檔(例如,XML文檔)中。因此,XAP類型和狀態(tài) 中捕獲的應(yīng)用語義可由非編程人員定義/定制,而不要求重寫程序代碼或修改現(xiàn)有元素實(shí) 例。在一個(gè)實(shí)施例中,一旦已由用戶創(chuàng)建了類型或狀態(tài),該類型或狀態(tài)可自動(dòng)地(經(jīng)由共享 的XAP數(shù)據(jù)庫)對(duì)XAP用戶的全部團(tuán)體可用,以在其它XAP應(yīng)用中重復(fù)使用或定制。圖3是根據(jù)本發(fā)明的實(shí)施例用于驗(yàn)證XAP元素實(shí)例(例如,XML文檔實(shí)例)的過 程300的流程圖。在一組實(shí)施例中,可通過在圖1的服務(wù)器106或108上運(yùn)行的XAP應(yīng)用 /數(shù)據(jù)庫引擎來執(zhí)行過程300。在塊302,可存儲(chǔ)一個(gè)類型和一組狀態(tài),其中該類型和該組狀態(tài)與XAP元素相關(guān) 聯(lián)。如上所述,該類型可定義永遠(yuǎn)關(guān)于該元素的實(shí)例被檢查的一組約束,而狀態(tài)可定義在特 定時(shí)間點(diǎn)可能或可能不關(guān)于元素實(shí)例被檢查的多組約束。在一組實(shí)施例中,該類型的名稱 與元素的名稱相同,而狀態(tài)的名稱可以不同。例如,之前描述的“storemrder”結(jié)構(gòu)元素 可具有命名為“store order”的相關(guān)聯(lián)的類型,以及例如分別命名為“store neworder", "store:paidorder,,、“store: shippedorder,,禾口 "store cIosedorder,,的四個(gè)相關(guān)聯(lián)的狀 態(tài)。在塊304,可在第一時(shí)間點(diǎn)確定該組狀態(tài)的第一子集,以用于驗(yàn)證元素的實(shí)例。在 一組實(shí)施例中,在將XAP元素實(shí)例/文檔作為XAP活動(dòng)(在下面的“活動(dòng)”章節(jié)中進(jìn)一步詳 細(xì)說明)的一部分提交的基礎(chǔ)上可驗(yàn)證該XAP元素實(shí)例/文檔。當(dāng)提交該活動(dòng)時(shí),XAP活 動(dòng)的定義可指定(經(jīng)由“輸出狀態(tài)”屬性)哪個(gè)或哪些狀態(tài)是激活的,從而應(yīng)該被驗(yàn)證。因 此,在塊304的確定步驟可對(duì)應(yīng)于在提交一個(gè)活動(dòng)的點(diǎn)確定哪些狀態(tài)被該活動(dòng)指定為是激 活的。例如,假設(shè)上面描述的“ store order ”元素實(shí)例已經(jīng)經(jīng)由“ TakeOrder ”活動(dòng)被 輸入XAP應(yīng)用,該活動(dòng)指定“storemeworder”狀態(tài)作為其輸出狀態(tài)。在該情況下,可確 定第一子集包括“storemeworder”狀態(tài)。一旦確定了第一子集,可在第一時(shí)間點(diǎn)關(guān)于 類型和第一子集驗(yàn)證該元素實(shí)例(塊306)。因此,在提交“Take Order”活動(dòng)時(shí),可關(guān)于 “ store order ”類型禾口“ store neworder ”狀態(tài)驗(yàn)證該“ store order ”元素實(shí)例(而無需驗(yàn) 證"store:paidorder,,、“store shippedorder,,禾口 "store closedorder,,狀態(tài))。在塊308,可在第二時(shí)間點(diǎn)確定該組狀態(tài)的第二子集,以用于驗(yàn)證該實(shí)例,其中,該 第二子集與第一子集不同。例如,假設(shè)“storemrder”元素已經(jīng)由“Bill Order”活動(dòng)被 支付,所述“Bill Order”活動(dòng)指定“storNpaidorder”狀態(tài)作為其輸出狀態(tài)。在該情況
13下,可確定第二子集包括“storNpaidorder”狀態(tài)。一旦確定了第二子集,可在第二時(shí)間點(diǎn) 關(guān)于該類型和第二子集驗(yàn)證該實(shí)例(塊308)。因此,在提交“BillOrder”活動(dòng)時(shí),可關(guān)于 “ store order ”類型和“ store paidorder ”狀態(tài)驗(yàn)證該“ store order ”元素實(shí)例(而無需 驗(yàn)證“storeneworder"store shippedorder,,禾口 "store closedorder,,狀態(tài))??蓪?duì)于修改“storemrder”元素實(shí)例的其余的下游活動(dòng)(例如,“Ship Order”、 "Close Order”等)重復(fù)塊304-308。因此,XAP可(經(jīng)由不同的激活狀態(tài))在該實(shí)例的生命 期內(nèi)對(duì)“storeorder”實(shí)例應(yīng)用改變的一組約束。在某些實(shí)施例中,基本類型“xaporder" 可以一直被驗(yàn)證,而不管哪些狀態(tài)是激活的。在一些實(shí)施例中,XAP類型系統(tǒng)可包括被稱為“sticky state”的狀態(tài)的變形。如關(guān) 于步驟304和308所述的,確定元素實(shí)例的哪些狀態(tài)是激活的可基于活動(dòng)的輸出狀態(tài);如果 狀態(tài)沒有被列為輸出狀態(tài),則將不被驗(yàn)證。當(dāng)特定狀態(tài)被標(biāo)記為粘附狀態(tài)(sticky state) 時(shí),每次修改元素實(shí)例/文檔時(shí)都關(guān)于該元素實(shí)例/文檔驗(yàn)證該狀態(tài)。在一組實(shí)施例中,活 動(dòng)可將其自己的輸出狀態(tài)標(biāo)記為粘附的,從而使得該狀態(tài)對(duì)于所有下游活動(dòng)是激活的,而 不管是否是那些活動(dòng)的輸出狀態(tài)。在另一組實(shí)施例中,活動(dòng)可采用之前為元素實(shí)例/文檔 驗(yàn)證過的現(xiàn)有狀態(tài),并將其標(biāo)記為粘附的。而在另一組實(shí)施例中,活動(dòng)可去除之前粘附在元 素實(shí)例/文檔上的粘附狀態(tài)。在某些實(shí)施例中,活動(dòng)可具有兩個(gè)輸出狀態(tài)(一個(gè)粘附,另一 個(gè)不粘附),并且這兩個(gè)狀態(tài)可以用AND連在一起。應(yīng)理解,過程300是示例性的,并且變形和修改是可能的??刹⒘械貓?zhí)行按順序描 述的步驟,可改變步驟的順序,并且可修改、組合、添加或省略步驟。本領(lǐng)域技術(shù)人員將認(rèn)識(shí) 到其它變形、修改和替換。圖4是根據(jù)本發(fā)明的實(shí)施例的用于關(guān)于特定類型/狀態(tài)驗(yàn)證元素實(shí)例(例如,XML 文檔實(shí)例)的過程400的流程圖。在一組實(shí)施例中,過程400可被執(zhí)行為圖3的塊306和 310的一部分。在塊402中,可關(guān)于在類型/狀態(tài)中定義的約束來檢查元素實(shí)例中的數(shù)據(jù)。在一 組實(shí)施例中,類型/狀態(tài)可取決于約束為真或者約束為假。在特定實(shí)施例中,與類型/狀態(tài) 相關(guān)聯(lián)的所有約束都必須被滿足,以使該類型/狀態(tài)有效。作為驗(yàn)證過程的一部分,還可以執(zhí)行類型/狀態(tài)中包括的任何計(jì)算(塊404)。 XAP計(jì)算是可用于用計(jì)算值填充結(jié)構(gòu)元素實(shí)例中的特定標(biāo)量子元素的公式。例如,在 “storemrder”元素的情況下,可使用計(jì)算來確定將所有訂單行的值加在一起的“order total”。下面在“計(jì)算”章節(jié)中更詳細(xì)地討論XAP計(jì)算。如果在塊402執(zhí)行的檢查成功,則可用實(shí)例相對(duì)于該類型/狀態(tài)有效的指示來標(biāo) 記存儲(chǔ)該元素實(shí)例的文檔(塊406、408)。如果在步驟404執(zhí)行的檢查不成功,則可生成錯(cuò) 誤消息(塊406、410)。在一組實(shí)施例中,錯(cuò)誤消息可具體識(shí)別未滿足的約束或一組約束。應(yīng)理解過程400是示例性的,并且變形和修改是可能的。可并列地執(zhí)行按順序描 述的步驟,可改變步驟的順序,并且可修改、組合、添加或省略步驟。本領(lǐng)域技術(shù)人員將認(rèn)識(shí) 到其它變形、修改和替換。在某些實(shí)施例中,XAP類型和狀態(tài)可被組織成一個(gè)或多個(gè)類型/狀態(tài)層級(jí),使得類 型/狀態(tài)層級(jí)中的子類型/狀態(tài)能夠繼承其父類型/狀態(tài)的所有語義(例如,約束、計(jì)算 等)。該特征允許用戶重復(fù)使用和定制由其它用戶定義的類型和狀態(tài)。圖5示出了實(shí)例層級(jí)500。在該實(shí)施例中,層級(jí)500支持多個(gè)繼承,從而“客戶產(chǎn)品服務(wù)訂單”狀態(tài)可從“客戶 服務(wù)訂單”狀態(tài)和“產(chǎn)品訂單”狀態(tài)繼承語義。2.5.約束XAP可支持多個(gè)不同類型的預(yù)定的聲明式約束,包括 平面(facet)-對(duì)標(biāo)量元素的值的限制; 基數(shù)(cardinality)-對(duì)子元素可在父元素中出現(xiàn)的次數(shù)的限制; 組分-用于在元素內(nèi)或元素之間構(gòu)成約束的規(guī)則; 引用-對(duì)引用其它元素或來自其它元素的引用的檢查; 只讀-對(duì)在之前的活動(dòng)期間可改變什么數(shù)據(jù)的限制;以及 唯一-指定特定元素的值在文檔內(nèi)唯一;以及 編碼-以XQuery編寫的開放式(open-ended)約束。在一組實(shí)施例中,XAP約束可以被表達(dá)為XQuery表達(dá)式,并且因此在此處被稱為 XQuery 約束。2. 5. 1.平面平面約束的例子包括“寬度”、“范圍”、“包含(in)”、“精度”和“模式”。寬度約束 可用于對(duì)串和二進(jìn)制數(shù)據(jù)類型的標(biāo)量元素設(shè)置最小或最大尺寸。這可用于例如對(duì)XAP UI 中的文本域,諸如地址行,設(shè)置最大尺寸。范圍約束可對(duì)任何標(biāo)量元素,包括那些具有數(shù)值、日期/時(shí)間、串和二進(jìn)制數(shù)據(jù)類 型的標(biāo)量元素,設(shè)置包含性和/或排除性的上界和/或下界。例如,排除性的下界范圍約束 可用于要求一個(gè)量大于零。包含約束可定義值的列表,目標(biāo)標(biāo)量元素應(yīng)該在其中。一般來講,這些值應(yīng)該與目 標(biāo)標(biāo)量元素的底層數(shù)據(jù)類型相匹配。精度約束可用于指定數(shù)值的有效位的總數(shù)、基數(shù)之后的位數(shù)、和/或最小舍入單 位。例如,對(duì)于貨幣域的精度約束可指定基數(shù)之后的兩位用于美元面額,并且可進(jìn)一步要求 舍入至最接近的硬幣值。模式約束可限制串值以匹配常規(guī)表達(dá)。例如,郵政編碼域可被限制為匹配5位郵 編或使用常規(guī)表達(dá)的郵編+4標(biāo)準(zhǔn)。2. 5. 2.基數(shù)基數(shù)約束的例子包括“出現(xiàn)”、“選擇”、“聯(lián)合”和“組”。出現(xiàn)約束可對(duì)父元素中子 元素的出現(xiàn)次數(shù)設(shè)置具體的最小值(minoccurs)或最大值(maxoccurs)。該約束可用于例 如需要子元素(minoccurs = 1),不允許子元素(maxoccurs = 0),或?qū)⒆釉丶s束為單一 值(maxoccurs = 1)。選擇約束可列出相互排斥的子元素的列表。當(dāng)來自子元素列表的恰好一個(gè)元素 必須出現(xiàn)時(shí),該約束可有用處。例如,選擇約束可以要求社會(huì)安全號(hào)(SSN)或雇主身份號(hào) (EIN)出現(xiàn),但不是都出現(xiàn)。聯(lián)合約束可要求子元素的列表中的至少一個(gè)出現(xiàn)。例如,聯(lián)合約束可要求電子郵 件地址或電話號(hào)碼。與選擇約束不同,二者可都出現(xiàn)。組約束可要求子元素列表中的所有元素集體出現(xiàn)。當(dāng)元素的一個(gè)子集必須一起出 現(xiàn),或一起不出現(xiàn)時(shí),該約束有用。例如,組約束可要求城市元素和州元素集體出現(xiàn)。
2. 5. 3.組分組分約束的例子包括“存在”、“子元素-狀態(tài)”、“子元素-驗(yàn)證”和“組合”。存 在約束可要求存在子代元素的至少一個(gè)實(shí)例。盡管其它組分約束僅應(yīng)用于元素的直接子元 素,但存在約束可指定向下到達(dá)嵌套的子元素的路徑,并要求至少一個(gè)出現(xiàn)。在一組實(shí)施例 中,存在約束可被標(biāo)志為反向的,從而要求不存在與路徑相匹配的出現(xiàn)。子元素_狀態(tài)約束可要求子元素處于(或者不處于)一個(gè)特定狀態(tài)。在某些實(shí)施 例中,該約束還可包含子元素的類型。這提供了一種手段,使得要求可沿XAP結(jié)構(gòu)元素實(shí)例 /文檔向下貫徹,或跨另一個(gè)文檔中的元素。子元素-驗(yàn)證約束與子元素_狀態(tài)約束相似,但可再驗(yàn)證嵌套的元素。組合約束本身不提供任何驗(yàn)證,但可用于根據(jù)“先決”規(guī)則(下面描述)組合多個(gè) 約束。2.5.4.引用引用約束應(yīng)用于作為鏈接的子標(biāo)量元素。引用約束的例子包括“作用域”、“非循 環(huán)”和“歷史”。作用域約束可要求鏈接與鏈接集合中的一個(gè)相匹配(或不匹配)。在一 組實(shí)施例中,作用域約束可使用由相對(duì)于同一父元素的另一個(gè)子元素的路徑定義的鏈接 集合。例如,作用域約束可用于限制<st0re:billt0>鏈接指向一個(gè)地址,該地址是在由 <store:purchaser)鏈接所指向的客戶下發(fā)現(xiàn)的地址中的一個(gè)。請(qǐng)注意,如果未出現(xiàn)該子 元素,則可認(rèn)為滿足作用域約束;換句話說,僅當(dāng)子元素存在并指向不在鏈接集合中的事物 時(shí),才算破壞作用域約束。在某些實(shí)施例中,作用域約束可被聲明為反向的,也就是說,要求 子元素不在鏈接集合中。在這些情況下,僅當(dāng)子元素存在并在鏈接集合中時(shí)才算破壞該約 束ο非循環(huán)約束可要求鏈接不沿特定路徑指回父元素。歷史約束可要求鏈接指向固定(即,歷史)版本的目標(biāo)元素實(shí)例/文檔。在各個(gè) 實(shí)施例中,如果不使用歷史約束來約束鏈接,則鏈接會(huì)指向目標(biāo)的最新的版本。2. 5. 5.只讀在一組實(shí)施例中,關(guān)于類型/狀態(tài)驗(yàn)證元素實(shí)例/文檔的行為出現(xiàn)在數(shù)據(jù)修改 (例如,活動(dòng))的范圍內(nèi)。只讀約束可用于標(biāo)記沒資格被改變的元素。如果將只讀約束用于 常規(guī)狀態(tài),則它僅能夠防止使用該狀態(tài)作為輸出狀態(tài)的活動(dòng)修改所指示的元素(這可用于 例如,使得域?qū)τ赨I流中的僅一個(gè)屏幕可讀)。如果將只讀約束用于粘附狀態(tài)中,則可“鎖 定”所指示的元素,使得它們不能被任何下游活動(dòng)修改。2. 5. 6.唯一唯一約束可用于將子元素定義為在特定結(jié)構(gòu)元素實(shí)例/文檔的上下文內(nèi)是唯一 的。在一組實(shí)施例中,唯一性可作為連接唯一關(guān)鍵字(concatenated unique key)應(yīng)用于 單個(gè)子元素,或作為連接唯一關(guān)鍵字應(yīng)用于多個(gè)子元素。例如,唯一約束可要求員工元素的 姓、名和地址的連接是唯一的。2. 5. 7.編碼編碼約束是可被評(píng)估以產(chǎn)生真或假值的代碼塊(例如,XQuery表達(dá)式)。在 一組實(shí)施例中,編碼約束可被用于定義子元素之間的條件。例如,編碼約束可要求在 “storemrder”元素中的送貨量小于定購的量。在某些實(shí)施例中,編碼約束可以是沒有副作用的,并僅根據(jù)它們的輸入來產(chǎn)生一致的結(jié)果。2. 5. 8.組合約束在一組實(shí)施例中,上面描述的XAP約束可以根據(jù)布爾邏輯條件被聲明式地組合成 多約束表達(dá)式。然后,這些多約束表達(dá)式可與類型/狀態(tài)相關(guān)聯(lián)。此外,可根據(jù)“先決”系 統(tǒng)對(duì)約束排序,從而允許多約束表達(dá)式中的某些約束在其它約束之前被評(píng)估。在先決系統(tǒng)中,XAP約束可列出零個(gè)或更多其它約束作為“先決”,從而聲明它自己 從屬于這些約束。然后,XAP應(yīng)用/數(shù)據(jù)庫引擎可在評(píng)估從屬約束之前檢查先決約束。約 束可使用兩個(gè)關(guān)鍵字以啟動(dòng)該功能 驗(yàn)證-在評(píng)估從屬約束之前,要求先決為真。 拒絕-在驗(yàn)證從屬約束之前,要求先決為假。此外,存在確定如何組合先決檢查的結(jié)果的兩個(gè)關(guān)鍵字 和-必須滿足所有先決(按照需要,驗(yàn)證為真或驗(yàn)證為假)。 或-必須滿足至少一個(gè)先決。在一組實(shí)施例中,約束可以被標(biāo)記為具有對(duì)其先決的“軟”依賴性。這與如果先決 不滿足,則在沒有評(píng)估約束的情況下,XAP將認(rèn)為約束失敗了的普通邏輯相反。而是,如果 先決不滿足,在沒有評(píng)估約束的情況下,軟約束可被認(rèn)為成功了。2.6.計(jì)算XAP計(jì)算是可與XAP類型或狀態(tài)相關(guān)聯(lián)的計(jì)算構(gòu)造。具體地講,XAP計(jì)算在結(jié)構(gòu)元 素的上下文中指定被分配了評(píng)估表達(dá)式(右手側(cè)或RHS)的結(jié)果的標(biāo)量子元素(左手側(cè)或 LHS)。一旦對(duì)具體元素實(shí)例/文檔運(yùn)行了計(jì)算,則計(jì)算的結(jié)果可作為數(shù)據(jù)被存儲(chǔ)在該實(shí)例/ 文檔中??墒褂糜?jì)算來例如,在根據(jù)其它域中輸入的數(shù)據(jù)自動(dòng)填充/更新的XAP應(yīng)用中提 供“虛擬”域。在某些實(shí)施例中,XAP計(jì)算可被表示為XQuery表達(dá)式,并因此在此處也被稱 為XQuery計(jì)算。下面是可為之前描述的“storemrder”元素/類型定義的計(jì)算的例子· price: = xap:deref (item)/price通過從鏈接的物品實(shí)例中拷貝物品標(biāo)價(jià)來計(jì)算物品價(jià)格· total = price * quantity通過價(jià)格乘以數(shù)量來計(jì)算行總額· total: = sum(. . /total)通過將所有的行總額相加來計(jì)算訂單總額在某些實(shí)施例中,永遠(yuǎn)相對(duì)于特定父元素來定義XAP計(jì)算,并且LHS ( S卩,計(jì)算目 標(biāo))永遠(yuǎn)是該父元素的直接子元素。例如,在上面的例子中,相對(duì)于“storemrderline”元 素定義第一和第二計(jì)算,并且那些計(jì)算的LHS是“ store order line ”的直接子元素。相對(duì)于 “ store order ”元素定義第三計(jì)算,并且該計(jì)算的LHS側(cè)是“ store order ”的直接子元素。 在另一組實(shí)施例中,LHS是父元素本地的(即,它不能是鏈接文檔中的域)。計(jì)算的RHS (即, 公式)可使用本地和鏈接的值(例如,經(jīng)由上面第一計(jì)算中示出的Xap:deref()操作符)。在一組實(shí)施例中,XAP計(jì)算可定義迭代上下文以在其中評(píng)估公式。該上下文 可以是識(shí)別對(duì)其運(yùn)行計(jì)算的一組子元素的相對(duì)XPath(沒有謂詞(predicate))。這允 許父元素定義沿結(jié)構(gòu)層級(jí)比其直接子元素遠(yuǎn)的計(jì)算。例如,在上面的第三計(jì)算中,公式“sum(. ./total) ”使用上下文“../”來將加和的范圍縮小至“storemrderline”,而不是 “storemrder”的級(jí)別。在某些實(shí)施例中,由父元素(通過縮小范圍)定義的計(jì)算可不考慮 對(duì)子元素定義的計(jì)算。默認(rèn)地,XAP計(jì)算可以在每一次經(jīng)由XAP UI修改RHS中的任何數(shù)據(jù)時(shí)運(yùn)行/再運(yùn) 行。XAP計(jì)算也可具有允許用戶控制他們運(yùn)行的條件的下述預(yù)定標(biāo)志 僅運(yùn)行一次-用于不應(yīng)重復(fù)的計(jì)算,如存儲(chǔ)文檔上的時(shí)間戳,或向文檔分配來 自序列的ID。 僅當(dāng)出現(xiàn)所有RHS元素時(shí)運(yùn)行-用于如果需要的所有數(shù)據(jù)沒出現(xiàn)時(shí)不應(yīng)運(yùn)行計(jì) 算的實(shí)例。例如,如果計(jì)算基于郵政編碼為地址生成城市和州,則當(dāng)沒有郵政編碼時(shí)不應(yīng)運(yùn) 行計(jì)算。 僅當(dāng)提交了文檔時(shí)運(yùn)行-僅在活動(dòng)的上下文中是可應(yīng)用的。 僅當(dāng)沒有數(shù)據(jù)已經(jīng)出現(xiàn)在LHS中時(shí)運(yùn)行。如關(guān)于圖5的類型/狀態(tài)層級(jí)在上面描述的,類型/狀態(tài)可從它們的父元素繼承 計(jì)算。如果由于本地定義和繼承的計(jì)算,對(duì)于特定LHS目標(biāo)元素,類型/狀態(tài)具有沖突的 計(jì)算定義,則可按照類型/狀態(tài)時(shí)間戳的順序來運(yùn)行計(jì)算(例如,較新的狀態(tài)比較老的狀 態(tài)具有優(yōu)先性,并且對(duì)元素的基本類型定義的計(jì)算可具有最低的優(yōu)先性)。下面是可關(guān)于 "store:order"的子類型存在的計(jì)算的例子,不管計(jì)算價(jià)格的普通方法是什么 price: = xap:deref (item)/price * (l~xap:deref (. . /billto)/discount)通過采用標(biāo)價(jià)并應(yīng)用客戶折扣來計(jì)算物品價(jià)格。2. 7.活動(dòng)XAP活動(dòng)是定義XAP應(yīng)用的工作流的應(yīng)用級(jí)構(gòu)造。具體地講,每個(gè)XAP活動(dòng)可對(duì)應(yīng) 于業(yè)務(wù)流中的一個(gè)處理步驟,諸如“Take0rder”、“Bill Order","Ship Order”等。通常來 講,XAP活動(dòng)是終端用戶能夠?qū)τ蒟AP管理的元素實(shí)例/文檔進(jìn)行改變(例如,添加、編輯 或刪除數(shù)據(jù))的手段。在一組實(shí)施例中,每個(gè)XAP活動(dòng)能夠與XAP UI中的UI屏幕相關(guān)聯(lián)。此外,每個(gè)活 動(dòng)可包括,尤其是,輸入查詢和輸出狀態(tài)。當(dāng)首先呈現(xiàn)UI時(shí),輸入查詢可用于查詢具有特定 XAP類型的XAP文檔(例如,元素實(shí)例/XML文檔實(shí)例)。此外,這些文檔可根據(jù)一些過濾標(biāo) 準(zhǔn)被過濾(例如,檢索已經(jīng)關(guān)于“store paidorder”狀態(tài)被驗(yàn)證了的類型為“store order” 的所有文檔)。由輸入查詢返回的結(jié)果集合對(duì)應(yīng)于當(dāng)前活動(dòng)的上下文中需要被操作的數(shù)據(jù)
皇A
朱口 ο在一組實(shí)施例中,活動(dòng)的輸入查詢可以是普通XQuery (例如,不具有腳本或更新 的XQuery 1.0)或XAP聲明性查詢。XAP聲明性查詢被設(shè)計(jì)成有利于使用XAP UI的基本工 作流和查詢定義。在一些實(shí)施例中,用于定義XAP聲明性查詢的UI可自動(dòng)地過濾出已經(jīng)用 當(dāng)前活動(dòng)的輸出狀態(tài)驗(yàn)證了的文檔。此外,UI可指定狀態(tài)的列表來檢查已經(jīng)被處理過的文 檔,并指定直接子元素、操作符和常量的列表,以創(chuàng)建簡單的(fielcKoperatorkonstant) 查詢標(biāo)準(zhǔn),它們可以是用AND連接在一起的?;顒?dòng)的輸出狀態(tài)可指定一旦該活動(dòng)完成并且提交了任何修改的文檔就將被檢查 的XAP狀態(tài)。提交文檔可使得文檔關(guān)于基本類型和輸出狀態(tài)被驗(yàn)證,使得運(yùn)行任何計(jì)算、公 布改變(即,創(chuàng)建主版本),從而它們對(duì)于其它XAP用戶可見,并用輸出狀態(tài)已被驗(yàn)證的指示
18標(biāo)記該文檔。圖6是示出用于使用狀態(tài)和活動(dòng)的示例性XAP應(yīng)用的工作流600的簡化框圖。如 圖所示,已經(jīng)為該應(yīng)用定義了的狀態(tài)(由圓圈表示)是“新”、“已支付”、“已送貨”和“完畢”, 并且已經(jīng)為該應(yīng)用定義的活動(dòng)(由正方形表示)是“下訂單”、“收帳”、“送貨訂單”和“關(guān)閉 訂單”。假設(shè)被管理的信息的基本類型是“訂單”。在一組實(shí)施例中,“下訂單”活動(dòng)可具有空的輸入查詢,并可將其輸出狀態(tài)指定為 “新”。因此,當(dāng)呈現(xiàn)對(duì)應(yīng)于“下訂單”活動(dòng)的表單時(shí),可向用戶呈現(xiàn)空表單以輸入新訂單數(shù) 據(jù)。一旦用戶已輸入了訂單數(shù)據(jù)并指示“下訂單”活動(dòng)完成,XAP引擎就可關(guān)于被定義為輸 出狀態(tài)的“新”狀態(tài)驗(yàn)證數(shù)據(jù)。例如,XAP引擎可檢查每個(gè)新訂單文檔是否具有訂單號(hào)。然 后,XAP引擎可將文檔標(biāo)記為處于“新”狀態(tài),并將更新后的文檔存儲(chǔ)在共享的XAP數(shù)據(jù)庫中 以用于進(jìn)一步處理?!笆諑ぁ被顒?dòng)可具有輸入查詢,該查詢檢索已關(guān)于“新”狀態(tài)被驗(yàn)證(但沒有關(guān)于其 它狀態(tài)被驗(yàn)證)了的“訂單”類型的所有文檔,并且可將其輸出狀態(tài)指定為“已支付”。因 此,當(dāng)呈現(xiàn)對(duì)應(yīng)于“收帳”活動(dòng)的表單時(shí),該表單可顯示系統(tǒng)中已輸入但還未開帳單的所有 訂單。一旦用戶恰當(dāng)?shù)匦薷牧擞唵螖?shù)據(jù),并指示“收帳”活動(dòng)完成,則XAP引擎就可以關(guān)于 被定義為輸出狀態(tài)的“已支付”狀態(tài)驗(yàn)證修改后的數(shù)據(jù)。例如,XAP引擎可檢查每個(gè)訂單文 檔是否具有帳單信息。然后,XAP引擎可將文檔標(biāo)記成處于“已支付”狀態(tài),并將更新后的文 檔存儲(chǔ)在共享的XAP數(shù)據(jù)庫中以用于進(jìn)一步處理?!八拓浻唵巍被顒?dòng)可具有輸入查詢,該查詢檢索已關(guān)于“已支付”狀態(tài)被驗(yàn)證了(但 沒有關(guān)于“已送貨”狀態(tài)被驗(yàn)證)的“訂單”類型的所有文檔,并且可將其輸出狀態(tài)指定為 “已送貨”。因此,當(dāng)呈現(xiàn)對(duì)應(yīng)于“送貨訂單”活動(dòng)的表單時(shí),該表單可顯示系統(tǒng)中已支付但 還未送貨的所有訂單。一旦用戶恰當(dāng)?shù)匦薷牧擞唵螖?shù)據(jù),并指示“送貨訂單”活動(dòng)完成,XAP 引擎就可以關(guān)于被定義為輸出狀態(tài)的“已送貨”狀態(tài)驗(yàn)證修改后的數(shù)據(jù)。例如,XAP引擎可 檢查每個(gè)訂單文檔是否具有送貨跟蹤號(hào)。然后,XAP引擎可將文檔標(biāo)記成處于“已送貨”狀 態(tài),并將更新后的文檔存儲(chǔ)在共享的XAP數(shù)據(jù)庫中以用于進(jìn)一步處理。最后,“關(guān)閉訂單”活動(dòng)可具有輸入查詢,該查詢檢索已關(guān)于“已送貨”狀態(tài)被驗(yàn)證 了(但沒有關(guān)于“完畢”狀態(tài)被驗(yàn)證)的“訂單”類型的所有文檔,并且可將其輸出狀態(tài)指定 為“完畢”。因此,當(dāng)呈現(xiàn)對(duì)應(yīng)于“關(guān)閉訂單”活動(dòng)的表單時(shí),該表單可顯示系統(tǒng)中已送貨但 還未完畢的所有訂單。一旦用戶恰當(dāng)?shù)匦薷牧擞唵螖?shù)據(jù),并指示“關(guān)閉訂單”活動(dòng)完成,XAP 引擎就可以關(guān)于被定義為輸出狀態(tài)的“完畢”狀態(tài)驗(yàn)證修改后的數(shù)據(jù)。例如,XAP引擎可檢 查每個(gè)訂單文檔包括已接收到訂單的指示。然后,XAP引擎可將文檔標(biāo)記成處于“已關(guān)閉” 狀態(tài),并將更新后的文檔存儲(chǔ)在共享的XAP數(shù)據(jù)庫中。在圖6的例子中,所有活動(dòng)可以是人類活動(dòng),因?yàn)樾枰藖斫?jīng)由XAP UI輸入或修 改由輸入查詢返回的數(shù)據(jù)。對(duì)于這些類型的活動(dòng),XAP UI可通過在數(shù)據(jù)被輸入從屬域時(shí)自 動(dòng)地填寫UI中的LHS元素,連續(xù)運(yùn)行由基本類型或狀態(tài)定義的任何計(jì)算(就像常規(guī)電子表 格一樣)。此外,XAP UI可連續(xù)地檢查由輸出狀態(tài)定義的約束,使得用戶可以在鍵入的同時(shí) 能夠被提示驗(yàn)證錯(cuò)誤(這與在提交文檔之后才提供那些錯(cuò)誤相反)。XAP還能夠支持計(jì)算機(jī)活動(dòng),即可經(jīng)由程序代碼(例如,XQuery腳本代碼)使 其自動(dòng)化或半自動(dòng)化的活動(dòng)。在一組實(shí)施例中,計(jì)算機(jī)活動(dòng)可修改共享的XAP數(shù)據(jù)庫中
19的任何文檔,和/或調(diào)用外部Web服務(wù)。如果,例如,計(jì)算機(jī)活動(dòng)中的XQuery代碼塊調(diào)用 xap:submit()擴(kuò)展功能來處理文檔提交,則XQuery代碼可捕捉從輸出狀態(tài)驗(yàn)證出現(xiàn)的任 何例外。如果XQuery代碼不能修正通過輸出狀態(tài)驗(yàn)證所找到的所有例外,則標(biāo)記該文檔, 使得它們可稍后由人類用戶查詢以解決錯(cuò)誤。盡管在上面描述了本發(fā)明的具體實(shí)施例,但各種修改、變更、替換構(gòu)造和等同物也 在本發(fā)明的范圍內(nèi)。例如,XAP不限于在企業(yè)環(huán)境中使用,并且可用于建立在共享數(shù)據(jù)庫上 層運(yùn)行的任何類型的應(yīng)用流。此外,盡管已關(guān)于某些流程圖和步驟描述了本發(fā)明的實(shí)施例, 但本領(lǐng)域技術(shù)人員應(yīng)顯而易見地得出本發(fā)明的范圍不限于所描述的流程圖和步驟。此外,盡管本發(fā)明的實(shí)施例是使用硬件和軟件的特定組合描述的,但應(yīng)認(rèn)為硬件 和軟件的其它組合也在本發(fā)明的范圍內(nèi)。因此,說明書和附圖應(yīng)被視為是示例性的而不是限制性的。顯然,在不偏離如下面 的權(quán)利要求書中所述的本發(fā)明的較寬的精神和范圍的情況下,可以對(duì)其進(jìn)行添加、刪減和 其它修改。
20
權(quán)利要求
一種方法,包括由計(jì)算機(jī)系統(tǒng)存儲(chǔ)XML文檔的一組XQuery狀態(tài);由所述計(jì)算機(jī)系統(tǒng)在第一時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第一子集;以及由所述計(jì)算機(jī)系統(tǒng)在第一時(shí)間點(diǎn)關(guān)于所述第一子集驗(yàn)證XML文檔的實(shí)例,而不關(guān)于不在第一子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例。
2.如權(quán)利要求1所述的方法,進(jìn)一步包括在第二時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第二子集,所述第二子集與第一子集不同;以及在第二時(shí)間點(diǎn)關(guān)于所述第二子集驗(yàn)證該實(shí)例,而不關(guān)于不在第二子集中的XQuery狀 態(tài)驗(yàn)證該實(shí)例。
3.如權(quán)利要求2所述的方法,進(jìn)一步包括存儲(chǔ)XML文檔的類型;以及自動(dòng)地在第一時(shí)間點(diǎn)和第二時(shí)間點(diǎn)關(guān)于該類型驗(yàn)證該實(shí)例。
4.如權(quán)利要求1所述的方法,其中,該組XQuery狀態(tài)中的每個(gè)XQuery狀態(tài)被存儲(chǔ)為單 獨(dú)的可擴(kuò)展標(biāo)記語言(XML)文檔。
5.如權(quán)利要求1所述的方法,其中,該組XQuery狀態(tài)中的每個(gè)XQuery狀態(tài)定義一組 XQuery 約束。
6.如權(quán)利要求5所述的方法,其中,該組XQuery約束中的每個(gè)XQuery約束是無副作用 的布爾表達(dá)式。
7.如權(quán)利要求5所述的方法,其中,該組XQuery狀態(tài)中的至少一個(gè)XQuery狀態(tài)是層級(jí) 中另一個(gè)XQuery狀態(tài)的子狀態(tài),并且其中,由所述至少一個(gè)XQuery狀態(tài)定義的該組XQuery 約束包括從所述另一個(gè)XQuery狀態(tài)繼承的XQuery約束。
8.如權(quán)利要求5所述的方法,其中,關(guān)于第一子集驗(yàn)證該實(shí)例包括關(guān)于由該第一子集 定義的多組XQuery約束檢查該實(shí)例。
9.如權(quán)利要求5所述的方法,其中,該組XQuery狀態(tài)中的至少一個(gè)XQuery狀態(tài)進(jìn)一步 定義一組XQuery計(jì)算。
10.如權(quán)利要求9所述的方法,其中,關(guān)于所述第一子集驗(yàn)證該實(shí)例包括進(jìn)行由該第 一子集定義的多組XQuery計(jì)算。
11.如權(quán)利要求10所述的方法,其中,所述多組XQuery計(jì)算的結(jié)果存儲(chǔ)在該實(shí)例的一 個(gè)或多個(gè)域中。
12.如權(quán)利要求1所述的方法,其中,如果在第一時(shí)間點(diǎn)成功地驗(yàn)證了該實(shí)例,則以指 示該實(shí)例關(guān)于第一子集有效的信息來標(biāo)記該實(shí)例。
13.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有可由計(jì)算機(jī)系統(tǒng)執(zhí)行的程序代碼,所述程序 代碼包括使所述計(jì)算機(jī)系統(tǒng)存儲(chǔ)XML文檔的一組XQuery狀態(tài)的代碼;使所述計(jì)算機(jī)系統(tǒng)在第一時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第一子集,以驗(yàn)證所述XML文 檔的實(shí)例的代碼;以及使所述計(jì)算機(jī)系統(tǒng)在第一時(shí)間點(diǎn)關(guān)于該所述第一子集驗(yàn)證所述實(shí)例,而不關(guān)于不在第 一子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例的代碼。
14.如權(quán)利要求13所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,所述程序代碼進(jìn)一步包括使所述計(jì)算機(jī)系統(tǒng)在第二時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第二子集以驗(yàn)證該實(shí)例的代 碼,所述第二子集與第一子集不同;以及使所述計(jì)算機(jī)系統(tǒng)在第二時(shí)間點(diǎn)關(guān)于該第二子集驗(yàn)證該實(shí)例,而不關(guān)于不在第二子集 中的XQuery狀態(tài)驗(yàn)證該實(shí)例的代碼。
15.一種系統(tǒng),包括 處理組件,被配置成存儲(chǔ)XML文檔的一組XQuery狀態(tài); 在第一時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第一子集以驗(yàn)證該 XML文檔的實(shí)例;以及在第一時(shí)間點(diǎn)關(guān)于該第一子集驗(yàn)證該實(shí)例,而不關(guān)于不在 第一子集中的XQuery狀態(tài)驗(yàn)證該實(shí)例。
16.如權(quán)利要求15所述的系統(tǒng),其中,所述處理組件進(jìn)一步被配置成在第二時(shí)間點(diǎn)確定該組XQuery狀態(tài)的第二子集以驗(yàn)證該實(shí)例,所述第二子集與第一 子集不同;以及在第二時(shí)間點(diǎn)關(guān)于該第二子集驗(yàn)證該實(shí)例,而不關(guān)于不在第二子集中的XQuery狀態(tài) 驗(yàn)證該實(shí)例。
全文摘要
用于開發(fā)可擴(kuò)展業(yè)務(wù)應(yīng)用的平臺(tái)(在此處被稱為可擴(kuò)展應(yīng)用平臺(tái)或XAP)。在一組實(shí)施例中,XAP可包括基于可擴(kuò)展標(biāo)記語言(XML)的應(yīng)用模型,該模型被設(shè)計(jì)為支持高度的應(yīng)用擴(kuò)展性。例如,XAP應(yīng)用模型可支持應(yīng)用語義的聲明性定義、應(yīng)用數(shù)據(jù)和元數(shù)據(jù)的分離、以及允許數(shù)據(jù)對(duì)象實(shí)例(例如,XML文檔)的約束和計(jì)算(例如,XQuery約束和計(jì)算)隨時(shí)間改變的靈活的類型系統(tǒng)。在某些實(shí)施例中,可經(jīng)由被配置成與類似電子表格的客戶機(jī)側(cè)用戶接口互操作的服務(wù)器側(cè)的數(shù)據(jù)庫/應(yīng)用引擎來實(shí)現(xiàn)該XAP應(yīng)用模型。使用類似電子表格的UI,非編程人員可如傳統(tǒng)業(yè)務(wù)應(yīng)用一樣建立、定制并運(yùn)行在共享的數(shù)據(jù)庫上工作的應(yīng)用工作流。
文檔編號(hào)G06F17/30GK101971176SQ201080001180
公開日2011年2月9日 申請(qǐng)日期2010年5月19日 優(yōu)先權(quán)日2009年5月20日
發(fā)明者A·奈瑪特, D·麥克馬洪, E·塞德拉, R·墨茜 申請(qǐng)人:甲骨文國際公司