欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于建立可擴展業(yè)務(wù)應(yīng)用的類型系統(tǒng)的制作方法

文檔序號:6348013閱讀:124來源:國知局
專利名稱:用于建立可擴展業(yè)務(wù)應(yīng)用的類型系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及計算機軟件,更具體地說,涉及用于建立可擴展業(yè)務(wù)應(yīng)用的平臺。
背景技術(shù)
現(xiàn)今的許多企業(yè)具有用于管理電子信息的兩個共生系統(tǒng)(ecosystem)數(shù)據(jù)庫共 生系統(tǒng),其中通過使用專用的、通常復雜的軟件應(yīng)用(此處被稱作傳統(tǒng)業(yè)務(wù)應(yīng)用),信息被 捕獲并保存在共享數(shù)據(jù)庫中;以及電子表格(spreadsheet)共生系統(tǒng),其中信息使用電子 表格在個體之間交換,通常以ad-hoc方式。數(shù)據(jù)庫共生系統(tǒng)特別適合于共享的企業(yè)環(huán)境,因為信息被集中存儲,因此可由多 個用戶訪問以用于查看、修改、分析、審核、報告和其它功能。此外,用作數(shù)據(jù)條目的前端的 傳統(tǒng)業(yè)務(wù)應(yīng)用通常被設(shè)計為支持業(yè)務(wù)背景中有用的特征(例如,安全性、工作流等)。然而, 該共生系統(tǒng)的顯著缺點是,傳統(tǒng)業(yè)務(wù)應(yīng)用通常不能由非編程人員(例如,終端用戶)建立或 定制。其結(jié)果是,這樣的用戶被約束于輸入和管理這些應(yīng)用最初被編程為支持的特定種類 的數(shù)據(jù)。在電子表格共生系統(tǒng)中,用戶具有輸入和保持跟蹤適合于他們的特定需要的任何 類型數(shù)據(jù)的靈活性。例如,利用諸如微軟Excel的傳統(tǒng)電子表格應(yīng)用,用戶可容易地輸入、 修改和重新安排任何單元或由單元構(gòu)成的組中的數(shù)據(jù)。此外,因為電子表格本質(zhì)上是以數(shù) 據(jù)為中心,而不是以代碼為中心的,所以沒有任何編程專長的用戶也可建立和定制電子表 格來執(zhí)行各種任務(wù)。這使得電子表格對于廣大用戶而言是有吸引力并且易掌握的數(shù)據(jù)管理 工具。然而,電子表格不支持從共享數(shù)據(jù)庫存儲/檢索數(shù)據(jù)或其它面向業(yè)務(wù)的特征,從而約 束了它們在多用戶企業(yè)設(shè)置中的有用性。因此,希望具有用于建立新種類的應(yīng)用的技術(shù),能結(jié)合電子表格和傳統(tǒng)的數(shù)據(jù)庫 驅(qū)動的業(yè)務(wù)應(yīng)用這兩方面。

發(fā)明內(nèi)容
本發(fā)明的實施例提供了一種用于開發(fā)可擴展業(yè)務(wù)應(yīng)用的平臺(此處被稱為可擴 展應(yīng)用平臺,Extensible Application Platform,或XAP)。在一組實施例中,XAP可包括 基于可擴展標記語言(XML)的應(yīng)用模型,該模型被設(shè)計為支持高度的應(yīng)用可擴展性。例如, XAP應(yīng)用模型可支持應(yīng)用語義的聲明式定義、應(yīng)用數(shù)據(jù)和元數(shù)據(jù)的分離、以及允許數(shù)據(jù)對象
4實例(例如,XML文檔)的約束和計算(例如,XQuery約束和計算)隨時間改變的靈活的類 型系統(tǒng)。在某些實施例中,可經(jīng)由被配置成與類似電子表格的客戶機側(cè)用戶界面互操作的 服務(wù)器側(cè)的數(shù)據(jù)庫/應(yīng)用引擎來實現(xiàn)XAP應(yīng)用模型。使用類似電子表格的UI,非編程人員 可建立、定制并運行在如傳統(tǒng)業(yè)務(wù)應(yīng)用的共享數(shù)據(jù)庫上工作的應(yīng)用工作流。根據(jù)本發(fā)明的一個實施例,提供了一種用于驗證數(shù)據(jù)對象實例,諸如XML文檔實 例的方法。該方法包括由計算機系統(tǒng)存儲XML文檔的一組XQuery狀態(tài),并由計算機系統(tǒng)在 第一時間點確定該組XQuery狀態(tài)的第一子集。然后,在該第一時間點關(guān)于該第一子集來驗 證XML文檔的實例,而無需關(guān)于不在第一子集中的XQuery狀態(tài)驗證該實例。在一個實施例中,該方法進一步包括在第二時間點確定該組XQuery狀態(tài)的第二 子集,其中所述第二子集與第一子集不同。然后在第二時間點關(guān)于該第二子集驗證該實例, 而無需關(guān)于不在第二子集中的XQuery狀態(tài)驗證該實例。在一個實施例中,該方法進一步包括存儲XML文檔的類型,并自動地在第一時間 點和第二時間點兩個時間點關(guān)于該類型驗證該實例。在一個實施例中,該組XQuery狀態(tài)中的每個狀態(tài)被存儲為單獨的XML文檔。在一個實施例中,該組狀態(tài)中的每個XQuery狀態(tài)限定一組XQuery約束,并且關(guān)于 第一子集驗證該實例包括關(guān)于由第一子集限定的多組XQuery約束檢查該實例。在進一步 的實施例中,每個XQuery約束是無副作用的布爾表達式。在一個實施例中,該組XQuery狀態(tài)中的至少一個XQuery狀態(tài)在層級上是另一個 XQuery狀態(tài)的子狀態(tài),并且由該至少一個XQuery狀態(tài)限定的該組XQuery約束包括從該另 一個XQuery狀態(tài)繼承的XQuery約束。在一個實施例中,該組XQuery狀態(tài)中的至少一個XQuery狀態(tài)限定了一組XQuery 計算,并且關(guān)于第一子集驗證該實例包括進行由第一子集限定的該組XQuery計算。在進 一步的實施例中,該組XQuery計算的結(jié)果被存儲在該實例的一個或多個域中。在一個實施例中,如果在第一時間點成功地驗證了該實例,則用指示該實例對于 第一子集有效的信息標記該實例。根據(jù)本發(fā)明的另一個實施例,提供了一種其上存儲有可由計算機系統(tǒng)執(zhí)行的程序 代碼的計算機可讀存儲介質(zhì)。該程序代碼包括使計算機系統(tǒng)存儲XML文檔的一組XQuery 狀態(tài)并在第一時間點確定該組XQuery狀態(tài)的第一子集以用于驗證XML文檔的實例的代碼。 該程序代碼進一步包括使該計算機系統(tǒng)在第一時間點關(guān)于第一子集驗證該實例,而無需關(guān) 于不在第一子集中的XQuery狀態(tài)驗證該實例的代碼。根據(jù)本發(fā)明的另一個實施例,提供了一種系統(tǒng)。該系統(tǒng)包括處理組件,被配置成 存儲XML文檔的一組XQuery狀態(tài)并在第一時間點確定該組XQuery狀態(tài)的第一子集以用于 驗證該XML文檔的實例。該處理組件被進一步配置成在第一時間點關(guān)于該第一子集驗證該 實例,而無需關(guān)于不在第一子集中的XQuery狀態(tài)驗證該實例??蓞⒄照f明書的剩余部分和附圖來實現(xiàn)對此處公開的實施例的性質(zhì)和優(yōu)點的進
一步的理解。


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