專利名稱:基于圖的計(jì)算中的數(shù)據(jù)日志記錄的制作方法
技術(shù)領(lǐng)域:
本說(shuō)明書一般涉及基于圖的計(jì)算中的數(shù)據(jù)日志記錄(logging)。
背景技術(shù):
復(fù)雜計(jì)算經(jīng)常能夠通過(guò)有向圖被表達(dá)為數(shù)據(jù)流,有向圖具有與圖的頂點(diǎn)關(guān) 聯(lián)的計(jì)算的組件以及與圖的連接(弧、邊)相應(yīng)的組件之間的數(shù)據(jù)流。在美國(guó)專利 5, 966, 072( "Executing Computations Expressed As Graphs")
于圖的計(jì)算的系統(tǒng)。在一些情況下,以可供人讀的形式——被稱為“business rules(商務(wù) 規(guī)則),,——描述與頂點(diǎn)關(guān)聯(lián)的計(jì)算。
發(fā)明內(nèi)容
一般說(shuō)來(lái),在一個(gè)方面,提供一種方法,包括接收針對(duì)基于圖的計(jì)算的至少一個(gè) 規(guī)則說(shuō)明書,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù)據(jù)流的元素而連接的數(shù)據(jù)處理組件,該 規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定用于確定取決于輸 入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的 至少一個(gè)數(shù)據(jù)處理組件的變換,包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接 口 ;以及使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中 的數(shù)據(jù)處理組件的運(yùn)行,根據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及存 儲(chǔ)或者輸出所生成的日志信息。多個(gè)方面可以包括一個(gè)或多個(gè)下列特征配置日志的特征包括選擇至少一個(gè)事件,將針對(duì)該至少一個(gè)事件而生成日志信 肩、ο根據(jù)與接收到的規(guī)則說(shuō)明書關(guān)聯(lián)的規(guī)則,所述至少一個(gè)事件與數(shù)據(jù)流中的變換記
錄關(guān)聯(lián)。所述至少一個(gè)事件包括識(shí)別將被變換的記錄中的錯(cuò)誤。所述至少一個(gè)事件包括對(duì)于給定記錄滿足規(guī)則例的條件。。對(duì)于給定記錄滿足規(guī)則例的條件包括基于給定記錄中的值滿足邏輯表達(dá)式。對(duì)于規(guī)則例滿足規(guī)則例的條件包括將記錄中的值與關(guān)聯(lián)于所述規(guī)則例的值相比較。生成日志信息包括生成分別包括規(guī)則集的細(xì)節(jié)的一個(gè)或多個(gè)圖例日志消息,該 規(guī)則集包含由接收到的規(guī)則說(shuō)明書定義的規(guī)則,以及生成多個(gè)跟蹤日志消息,其中,每個(gè)跟 蹤日志消息與圖例記錄關(guān)聯(lián)并且根據(jù)與接收到的規(guī)則說(shuō)明書關(guān)聯(lián)的規(guī)則描述與數(shù)據(jù)流中的變換記錄關(guān)聯(lián)的至少一個(gè)事件。描述事件的跟蹤日志消息使用圖例記錄中的索引描述數(shù)據(jù)處理組件的至少一個(gè) 輸入或輸出。生成一個(gè)或多個(gè)圖例消息包括每次運(yùn)行基于圖的計(jì)算生成一個(gè)圖例消息。使用生成的變換的數(shù)據(jù)處理組件根據(jù)與接收到的規(guī)則說(shuō)明書關(guān)聯(lián)的第一規(guī)則對(duì) 數(shù)據(jù)流中的輸入記錄進(jìn)行變換?;谒櫟倪\(yùn)行生成日志信息包括針對(duì)指定準(zhǔn)則被滿足的、第一規(guī)則的各個(gè)規(guī) 則例生成日志消息?;谒櫟倪\(yùn)行生成日志信息包括生成日志消息是針對(duì)由所述數(shù)據(jù)處理組件 使用所生成的變換生成的經(jīng)變換的記錄中的每個(gè)值的。存儲(chǔ)或者輸出生成的日志信息包括從所述一個(gè)或多個(gè)數(shù)據(jù)處理組件的日志端口 輸出日志消息。存儲(chǔ)或者輸出生成的日志信息還包括從數(shù)據(jù)處理組件中的日志端口接收日志消 息的數(shù)據(jù)流并且存儲(chǔ)至少部分地源自所述日志消息的日志信息。該方法還包括過(guò)濾接收到的日志消息的數(shù)據(jù)流并且存儲(chǔ)源自日志消息的子集的 日志fn息ο存儲(chǔ)或者輸出所生成的日志信息還包括從指示指定準(zhǔn)則被滿足的、被觸發(fā)的規(guī) 則例的數(shù)據(jù)處理組件中的日志端口接收日志消息的數(shù)據(jù)流,檢查所述日志消息以確定為每 個(gè)規(guī)則的每個(gè)規(guī)則例提供至少一個(gè)日志消息的經(jīng)縮減的輸入記錄集,所述規(guī)則通過(guò)由全部 輸入記錄觸發(fā)的規(guī)則說(shuō)明書所定義,以及存儲(chǔ)經(jīng)縮減的輸入記錄集。一般說(shuō)來(lái),在另一方面,提供一種計(jì)算機(jī)系統(tǒng),包括存儲(chǔ)系統(tǒng),存儲(chǔ)針對(duì)基于圖的 計(jì)算的至少一個(gè)規(guī)則說(shuō)明書,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù)據(jù)流的元素而連接的數(shù) 據(jù)處理組件,該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定用 于確定取決于輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;生成器,被配置為基于接收到的規(guī)則 說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù)處理組件的變換,包括提供用于配置與所 生成的變換關(guān)聯(lián)的日志的特征的接口 ;以及基于圖的計(jì)算系統(tǒng),被配置為使用所生成的變 換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù)據(jù)處理組件的運(yùn)行,根 據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及存儲(chǔ)或者輸出所生成的日志 fn息ο一般說(shuō)來(lái),在另一方面,提供一種計(jì)算機(jī)程序,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,該計(jì)算 機(jī)程序包括導(dǎo)致計(jì)算機(jī)系統(tǒng)執(zhí)行以下步驟的指令接收針對(duì)基于圖的計(jì)算的至少一個(gè)規(guī)則 說(shuō)明書,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù)據(jù)流的元素而連接的數(shù)據(jù)處理組件,該規(guī)則 說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定用于確定取決于輸入數(shù) 據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少 一個(gè)數(shù)據(jù)處理組件的變換,包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接口 ; 以及使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù) 據(jù)處理組件的運(yùn)行,根據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及存儲(chǔ)或 者輸出所生成的日志信息。一般說(shuō)來(lái),在另一方面,提供一種計(jì)算機(jī)系統(tǒng),包括用于接收針對(duì)基于圖的計(jì)算的至少一個(gè)規(guī)則說(shuō)明書的裝置,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù)據(jù)流的元素而連接的 數(shù)據(jù)處理組件,該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定 用于確定取決于輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;用于基于接收到的規(guī)則說(shuō)明書生成 針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù)處理組件的變換的裝置,包括提供用于配置與所生成 的變換關(guān)聯(lián)的日志的特征的接口 ;以及用于使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流的裝 置,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù)據(jù)處理組件的運(yùn)行,根據(jù)所配置的日志特征, 基于所跟蹤的運(yùn)行生成日志信息,以及存儲(chǔ)或者輸出所生成的日志信息。在附圖以及下面的描述中給出本發(fā)明的一個(gè)或多個(gè)實(shí)施例的細(xì)節(jié)。本發(fā)明的其它 特征、目的和優(yōu)點(diǎn)將從說(shuō)明書和附圖以及權(quán)利要求中變得明顯。
圖IA示出在基于圖的計(jì)算環(huán)境中將輸入數(shù)據(jù)變換為輸出數(shù)據(jù)。圖IB示出在基于圖的計(jì)算中的圖的一個(gè)例子。圖IC示出利用日志記錄信息的變換生成的框圖。圖2A示出基于電子表格的規(guī)則條目(entry)的一個(gè)例子。圖2B示出單個(gè)規(guī)則的一個(gè)例子。圖3示出在基于圖的計(jì)算環(huán)境中將數(shù)據(jù)記入日志的部分操作的流程圖。圖4是在基于圖的計(jì)算環(huán)境中的日志記錄結(jié)構(gòu)的圖形用戶接口的圖示。
具體實(shí)施例方式用于數(shù)據(jù)日志記錄和審核機(jī)制的示范性上下文(context)包括基于圖的計(jì)算范 例(paradigm),其將與基于圖的計(jì)算關(guān)聯(lián)的元數(shù)據(jù)存儲(chǔ)在基于圖的計(jì)算系統(tǒng)中。在此場(chǎng) 景中,每個(gè)計(jì)算機(jī)程序使用計(jì)算圖實(shí)現(xiàn),也稱作數(shù)據(jù)流圖,或者簡(jiǎn)稱為圖。一個(gè)圖包括表示 數(shù)據(jù)處理組件的一個(gè)或多個(gè)節(jié)點(diǎn)或者頂點(diǎn),它們由表示組件之間數(shù)據(jù)的流動(dòng)的有向邊聯(lián)接 (join)。圖能夠在并行處理環(huán)境下運(yùn)行。系統(tǒng)跟蹤圖的開發(fā)過(guò)程中的變化,執(zhí)行統(tǒng)計(jì)分析 和相關(guān)性分析,并且管理與圖的開發(fā)有關(guān)的元數(shù)據(jù)。與圖有關(guān)的元數(shù)據(jù)的存儲(chǔ)使得數(shù)據(jù)影 響分析能夠發(fā)生,給用戶視覺(jué)感知數(shù)據(jù)如何隨其在圖中的行進(jìn)而改變,以及那些變化對(duì)其 它圖的影響。另外,系統(tǒng)提供的配置/變化管理能夠當(dāng)存在代碼變化時(shí)存儲(chǔ)圖的多個(gè)版本, 由此確保最新的代碼和數(shù)據(jù)可用。商務(wù)規(guī)則,比如元數(shù)據(jù)的子集,存儲(chǔ)在系統(tǒng)中。例如,在美國(guó)申請(qǐng) No. 11/733,434——通過(guò)引用的方式將其合并于此——中描述了各個(gè)方面的商務(wù)規(guī)則。每 個(gè)商務(wù)規(guī)則都能夠存儲(chǔ)在單獨(dú)的對(duì)象中。商務(wù)規(guī)則能夠表達(dá)為用于將數(shù)據(jù)從一種格式轉(zhuǎn)換 到另一種格式、進(jìn)行有關(guān)數(shù)據(jù)的判定或者基于一組輸入數(shù)據(jù)生成新數(shù)據(jù)的一組準(zhǔn)則。例如, 在圖IA中,航班預(yù)訂系統(tǒng)中的記錄102包括表示乘客的姓名104、今年已經(jīng)飛行了多少英里 106、他的票的等級(jí)108以及他所坐的行110的字段的值。商務(wù)規(guī)則表示這樣的乘客應(yīng)該放 進(jìn)登機(jī)組1。商務(wù)規(guī)則一般容易為人理解,即,“頭等艙乘客在組1”,但是在它可以用于操作 數(shù)據(jù)以前可能需要被翻譯成計(jì)算機(jī)能夠理解的語(yǔ)言。為了在基于圖的計(jì)算環(huán)境中實(shí)現(xiàn)商務(wù)規(guī)則,生成變換(transform) 112,其從一個(gè) 或多個(gè)數(shù)據(jù)源——例如輸入數(shù)據(jù)集100——接收諸如記錄102這樣的輸入記錄,并且提供輸出記錄,例如,記錄114,表示對(duì)于輸出數(shù)據(jù)集120來(lái)說(shuō)乘客姓名104以及他在哪個(gè)組 118。在本例中,數(shù)據(jù)集被示出為顯示一個(gè)示范性記錄,但是通常數(shù)據(jù)集可以包括任意數(shù)量 的記錄。輸入和輸出數(shù)據(jù)集可以被處理為數(shù)據(jù)流,例如,像組成數(shù)據(jù)集的數(shù)據(jù)流入圖或者流 出圖一樣。然后,可以在基于圖的計(jì)算中實(shí)現(xiàn)變換,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù)據(jù) 流的元素而連接的數(shù)據(jù)處理組件。例如,圖IB的簡(jiǎn)單計(jì)算圖130將輸入視為兩個(gè)數(shù)據(jù)集 132、134 (例如,經(jīng)常飛行數(shù)據(jù)和航班預(yù)定數(shù)據(jù)),將每個(gè)集合中的數(shù)據(jù)在單獨(dú)的格式化組 件136、138中進(jìn)行格式化從而它們能被一起使用,并且在聯(lián)合組件140中將它們聯(lián)合以產(chǎn) 生輸出數(shù)據(jù)集142。變換本身可以是基于圖的計(jì)算,諸如圖130中的計(jì)算,或者可以在圖的 組件內(nèi)實(shí)現(xiàn),諸如組成圖130的獨(dú)立組件136、138和140。為了為非專業(yè)用戶簡(jiǎn)化變換的創(chuàng)建,為這些用戶以他們熟悉的格式提供了一種工 具用于輸入一組商務(wù)規(guī)則,稱為規(guī)則集,該工具告訴計(jì)算機(jī)系統(tǒng)他們需要變換做些什么。規(guī) 則集是產(chǎn)生單個(gè)變換的一組規(guī)則。一個(gè)規(guī)則可以由一個(gè)或多個(gè)規(guī)則例(rule case)組成, 這些規(guī)則例根據(jù)輸入來(lái)確定用于規(guī)則的輸出的不同值。一個(gè)規(guī)則也可以包括其它規(guī)則。一 個(gè)規(guī)則集中的其它規(guī)則可以產(chǎn)生針對(duì)額外輸出或者替換輸出的值。規(guī)則集可以包含其它規(guī) 則集,這稱為“內(nèi)含(included)”規(guī)則集。在圖IC中示出利用日志記錄信息(logging information)的變換生成系統(tǒng)的一 般模型。商務(wù)規(guī)則環(huán)境(business rules environment,BRE)包括生成器150,其從編輯 器巧4接收規(guī)則集152作為輸入并且生成變換156。作為變換生成選項(xiàng)中的一個(gè),可以隨 后通過(guò)定制圖形用戶接口中的各種日志記錄(logging)事件和信息來(lái)激活日志記錄。日志 (log)是發(fā)生在組織的系統(tǒng)和網(wǎng)絡(luò)內(nèi)的事件的記錄。日志由條目組成;每個(gè)條目都包含與 已經(jīng)在系統(tǒng)或者網(wǎng)絡(luò)內(nèi)發(fā)生的特定事件有關(guān)的信息。日志能夠用于解決問(wèn)題,以及用于提 供許多功能,諸如優(yōu)化系統(tǒng)和網(wǎng)絡(luò)性能、記錄用戶的動(dòng)作以及提供對(duì)調(diào)查異?;顒?dòng)有用的 數(shù)據(jù)。日志能夠包含與許多不同類型的事件有關(guān)的信息。根據(jù)系統(tǒng)的體系結(jié)構(gòu)以及變換和 商務(wù)規(guī)則的目的,所生成的變換156可以提供給基于圖的計(jì)算系統(tǒng)158作為將用于圖中的 一個(gè)組件或者作為整個(gè)圖本身。例如,生成器150可以是編譯器、定制的程序或者另一個(gè)基 于圖的計(jì)算,被配置為使用標(biāo)準(zhǔn)工具以接收規(guī)則集152并輸出變換156。生成器150還可以在規(guī)則集152被編輯時(shí)更新變換156。當(dāng)規(guī)則集152被編輯時(shí), 編輯器1 可以為編輯器提供整個(gè)規(guī)則集或者它可以僅提供新的或者修改的規(guī)則或規(guī)則 例15加。根據(jù)使用變換的系統(tǒng)的性能以及需要,生成器150可以生成全新的變換以替換初 始變換156,或者它可以提供包含所述變換的組件156a。不需要一個(gè)單獨(dú)的、專用的運(yùn)行引擎用于在基于圖的計(jì)算158期間執(zhí)行日志記錄 操作。日志記錄能夠被配置為當(dāng)其被運(yùn)行時(shí)使用由圖組件調(diào)用的函數(shù)而發(fā)生。針對(duì)不同的 日志記錄結(jié)構(gòu),能夠提供針對(duì)規(guī)則運(yùn)行的不同審核報(bào)告。例如,如圖IC中虛線箭頭所示(而 非實(shí)線箭頭示出的實(shí)際數(shù)據(jù)流),日志160a可以回溯到規(guī)則集152中的特定輸入記錄;而 日志160b可以反映專用規(guī)則例15 在早先時(shí)間就已經(jīng)被激發(fā)(fire) 了。參考圖2A,在一些例子中,可以將規(guī)則以電子表格格式輸入。電子表格200中的 觸發(fā)列202、204、206、208相應(yīng)于可用數(shù)據(jù)值,以及行210a-h相應(yīng)于規(guī)則例,S卩,與可用數(shù)據(jù) 值有關(guān)的準(zhǔn)則集合。如果對(duì)于在其中規(guī)則例具有準(zhǔn)則的各個(gè)觸發(fā)列來(lái)說(shuō),給定記錄(例如,圖IA中的102)的數(shù)據(jù)值滿足觸發(fā)準(zhǔn)則,那么規(guī)則例210η就應(yīng)用于該記錄。如果應(yīng)用規(guī)則 例210η,則基于一個(gè)或多個(gè)輸出列212生成輸出。其所有的觸發(fā)準(zhǔn)則都得以滿足的規(guī)則例 可以稱為“已觸發(fā)(triggered)”。每個(gè)輸出列212相應(yīng)于一個(gè)潛在的輸出變量,可應(yīng)用的 行210η的相應(yīng)單元格中的值為該變量確定輸出——如果有的話。單元格可以包含分配給 變量的值或者它可以包含必須被評(píng)估以生成輸出值的表達(dá)式,如下面將討論的那樣。雖然 在圖2Α中僅示出一個(gè)輸出列,但是可以存在多于一個(gè)輸出列??梢源嬖谌舾刹煌愋偷挠|發(fā)列,包括相應(yīng)于變量的列、包含表達(dá)式但是對(duì)其計(jì) 算一次然后將其當(dāng)作變量對(duì)待的列、以及僅包含表達(dá)式的列。其它列類型包括僅包含數(shù)據(jù) 的列,以及基于僅包含數(shù)據(jù)的列指定對(duì)于每行進(jìn)行評(píng)估的表達(dá)式的列。僅包含表達(dá)式的列 比那些與變量相應(yīng)的列或者當(dāng)作變量對(duì)待的列簡(jiǎn)單。在圖2Α的例子中,第一行210a僅在一列202中具有準(zhǔn)則,這表示如果一個(gè)旅客的 經(jīng)常飛行英里的總數(shù)大于1,000, 000,那么不管任何其它列可能具有什么值都應(yīng)用該規(guī)則 例。在該情況下,針對(duì)該用戶的“乘機(jī)組(BoardingGroup)”輸出變量被設(shè)置為組1。同樣 地,第二規(guī)則例210b表示任何在頭等艙的乘機(jī)者都在組1中。在一些例子中,規(guī)則被順次 評(píng)估,因此一個(gè)超過(guò)1,000, 000英里且持頭等艙票的旅客將在組1中,但是將僅觸發(fā)第一規(guī) 則例210a。一旦觸發(fā)了規(guī)則例,就不需要評(píng)估該規(guī)則中的其它規(guī)則例了。接下來(lái)的規(guī)則例210c基于兩個(gè)輸入值202和204——如果針對(duì)經(jīng)常飛行英里總 數(shù)和當(dāng)年英里數(shù)二者定義的準(zhǔn)則都滿足的話,那么該乘機(jī)者在組2中。在第四規(guī)則例210d 中,任何的商務(wù)艙客戶也在組2中。其余的規(guī)則例210e-h包含與其它規(guī)則例相關(guān)的準(zhǔn)則, 即,“其它(else)”和“相同的(same)”?!捌渌?Else) ”表示在位于那一行之上且具有與左 邊相同準(zhǔn)則的行中(即,規(guī)則210b和210d)、那一列中沒(méi)有一個(gè)準(zhǔn)則得以滿足,而“相同的 (same) ”表示如果針對(duì)該列應(yīng)用了在該規(guī)則例之上的規(guī)則例則應(yīng)用該規(guī)則例。因此,第五 規(guī)則例210e應(yīng)用于任一這樣的記錄其不匹配頭兩列202或204中的任一準(zhǔn)則(因?yàn)樗鼞?yīng) 當(dāng)已經(jīng)由規(guī)則例210a或210c處理過(guò)了),在“座位等級(jí)”列中不具有“頭等”或“商務(wù)”(列 206中的“其它(else) ”關(guān)鍵字),并且具有小于或等于10的“座位行”值208。其余規(guī)則例 210f-h中的每一個(gè)都應(yīng)用于這樣的記錄其也不匹配具有列202或204中的值的、任一較 高的規(guī)則例,在“座位等級(jí)”列中不具有“頭等”或“商務(wù)艙”,并且具有適當(dāng)?shù)摹白恍小敝?。圖2A的例子中的規(guī)則例210a_h也可以表示為獨(dú)立的簡(jiǎn)單規(guī)則,各自在它們自己 的電子表格中,如圖2B所示。規(guī)則220a-d分別相應(yīng)于圖2A的行210a_d,而規(guī)則220e具 有相應(yīng)于合起來(lái)的行210e-h的四個(gè)規(guī)則例。用戶可以分別地創(chuàng)建這些獨(dú)立規(guī)則,而非生成 圖2A中示出的整個(gè)表格。每個(gè)規(guī)則例包含用于各個(gè)觸發(fā)列的值以及用于各個(gè)輸出列的值 (該值可以為空,即,實(shí)際上被設(shè)置為“任意”)。當(dāng)多個(gè)規(guī)則生成相同的輸出時(shí),將這些規(guī)則 排序并且對(duì)它們按次序進(jìn)行考慮,直到針對(duì)輸入觸發(fā)一個(gè)規(guī)則中的規(guī)則例并且生成輸出為 止。如果規(guī)則中沒(méi)有規(guī)則例被觸發(fā),那么就處理生成相同輸出的下一個(gè)規(guī)則。如果在任一 規(guī)則中都沒(méi)有例對(duì)于某一輸出觸發(fā),那么就使用缺省值。在一些例子中,編輯器接口 150可以用圖識(shí)別包含表達(dá)式的單元格。這將幫助用 戶理解兩個(gè)表達(dá)式之間的差異,一個(gè)表達(dá)式將獨(dú)立地被評(píng)估為真或假,一個(gè)表達(dá)式返回與 列變量相比較的值。當(dāng)用戶打字時(shí),他可以例如通過(guò)在開頭處打星號(hào),來(lái)指示特定單元格將 是一個(gè)表達(dá)式單元格。
9
對(duì)于相應(yīng)于輸出變量的列,單元格可以包含下列中的一個(gè)·值。該值將分配給輸出變量。 表達(dá)式。該表達(dá)式的值將分配給輸出變量。如果表達(dá)式評(píng)估為空(NULL),那么 該字段得到空值,除非輸出字段不可為空。在輸出字段不可為空但得到空值的情況下,生成錯(cuò)誤。 關(guān)鍵字“空(null)”。如果輸出字段可為空,那么該字段將分配為空。否則,生成錯(cuò)誤。 空字串。如果輸出字段具有缺省值,則分配該缺省值。否則,單元格被當(dāng)作好像 它包含關(guān)鍵字“空(null)”一樣對(duì)待。·關(guān)鍵字“相同的(same)”。輸出字段被賦以在上面的單元格中所計(jì)算的相同的值。如果可能的話,在檢測(cè)到錯(cuò)誤時(shí)就將其報(bào)告,S卩,將“null”放入非可空字段的輸出 列中。然而,一些錯(cuò)誤直到測(cè)試時(shí)間或運(yùn)行時(shí)間才被報(bào)告。是創(chuàng)建為表格行還是獨(dú)立規(guī)則,每個(gè)規(guī)則都具有特定的特征集合。規(guī)則集可以為 它們包括的規(guī)則來(lái)確定這些特征。這些特征可以包括名稱、規(guī)則類型、說(shuō)明和注解字段、輸 出變量列表、輸入變量列表、自變量列表、觸發(fā)列列表、修改歷史、測(cè)試數(shù)據(jù)集和錯(cuò)誤處理行 為。名稱是不言自明的,并且用于列出規(guī)則集中的規(guī)則。在一些例子中,規(guī)則類型是規(guī)則集 的屬性。輸出變量列表是由規(guī)則指定的值或生成的變量集合。這可以從規(guī)則集繼承而來(lái), 并且可以存在一個(gè)或多個(gè)輸出。輸入變量列表識(shí)別規(guī)則用于評(píng)估記錄所需要的所有變量, 包括在列的最上面那些以及內(nèi)部表達(dá)式使用的那些(例如,圖2A中的規(guī)則210c所使用的 “去年經(jīng)常飛行英里數(shù)”值在表達(dá)式中使用但是不具有其自己的列)。規(guī)則可以是單發(fā)的(single-fired)或者多發(fā)的(multi-fired)。例如,多個(gè)規(guī)則 例可以用于針對(duì)一個(gè)或多個(gè)輸出生成多個(gè)值。能夠觸發(fā)多個(gè)規(guī)則例的規(guī)則稱為多發(fā)規(guī)則。 多發(fā)規(guī)則是基于由規(guī)則計(jì)算的輸出的類型而單獨(dú)地識(shí)別的。如果由一個(gè)規(guī)則計(jì)算的(多 個(gè))輸出是多個(gè)列表(在每個(gè)記錄中可能具有多個(gè)值的輸出),那么該規(guī)則就是一個(gè)多發(fā)規(guī) 則。在多發(fā)規(guī)則中,一旦一個(gè)規(guī)則例被觸發(fā),相應(yīng)的輸出值就被附加到輸出的值的列表中。 然而,不同于單發(fā)規(guī)則,在多發(fā)規(guī)則中,評(píng)估即使在規(guī)則例被觸發(fā)之后也繼續(xù)進(jìn)行。每個(gè)后 續(xù)規(guī)則例也被評(píng)估,并且觸發(fā)的各個(gè)規(guī)則例將導(dǎo)致其它值被附加到針對(duì)(多個(gè))輸出的值 的列表中。在一些例子中,可以通過(guò)進(jìn)行“與(AND) ”運(yùn)算的行和進(jìn)行“或(OR) ”運(yùn)算的列中 的規(guī)則例,以與上述相反的方式來(lái)評(píng)估規(guī)則。也就是說(shuō),只有當(dāng)每行觸發(fā)(對(duì)行進(jìn)行“與” 運(yùn)算)但是僅一個(gè)單元格需要針對(duì)每行為真以觸發(fā)(對(duì)列進(jìn)行“或”運(yùn)算),規(guī)則才產(chǎn)生輸
出ο自變量列表僅對(duì)函數(shù)規(guī)則存在。它識(shí)別輸入到規(guī)則的參數(shù)的名稱和類型,并且可 以是規(guī)則集的屬性。觸發(fā)列列表識(shí)別哪些列可以觸發(fā)規(guī)則的應(yīng)用。除了圖2A和2B的例子 中示出的輸入變量之外,觸發(fā)列可以相應(yīng)于參數(shù)、查找變量、來(lái)自較早規(guī)則的輸出變量、內(nèi) 含規(guī)則集的輸出變量、對(duì)規(guī)則集的參數(shù)或者表達(dá)式。它們還可以包括來(lái)自函數(shù)規(guī)則的輸入
變量,即,自變量。錯(cuò)誤處理確定從規(guī)則集創(chuàng)建的變換如何處理當(dāng)評(píng)估規(guī)則時(shí)發(fā)生的錯(cuò)誤。對(duì)于處理觸發(fā)表達(dá)式中的錯(cuò)誤來(lái)說(shuō),選項(xiàng)是將允許錯(cuò)誤或?qū)⒑雎藻e(cuò)誤,在允許錯(cuò)誤的情況下,變換拒 絕導(dǎo)致錯(cuò)誤的記錄,忽略錯(cuò)誤相當(dāng)于假定觸發(fā)表達(dá)式為假并且繼續(xù)前進(jìn)到下一個(gè)規(guī)則。對(duì) 于輸出表達(dá)式來(lái)說(shuō),可以通過(guò)以下方式來(lái)處理錯(cuò)誤允許錯(cuò)誤且拒絕記錄,忽略錯(cuò)誤且將輸 出設(shè)置為空,或者忽略規(guī)則中的行且繼續(xù)前進(jìn)到下一行。如上所述,從規(guī)則集生成變換。規(guī)則集可以具有下列特征名稱、說(shuō)明、以及灃解——這些標(biāo)識(shí)規(guī)則集。根據(jù)后端實(shí)施方式,規(guī)則集可以包括 其在系統(tǒng)內(nèi)位置的標(biāo)識(shí)。在一些例子中,規(guī)則集的位置是項(xiàng)目中的路徑。在一些例子中,規(guī) 則集可以組織在關(guān)系數(shù)據(jù)庫(kù)中并且通過(guò)名稱定位。修改歷史包括修改名稱、日期以及登記 注角軍(check-in comments)。奪換類型~確定從規(guī)則集中生成什么類型的變換??赡苤蛋ㄖ匦赂袷交?、聯(lián) 合、上卷(rollup)以及過(guò)濾,如下面討論的那樣。輸入數(shù)據(jù)集——提供字段列表以及經(jīng)命名的常數(shù)以供編輯。在一些例子中,當(dāng)生 成變換時(shí),缺省地,將假定輸入數(shù)據(jù)集中的一個(gè)的記錄格式。可以存在多個(gè)輸入數(shù)據(jù)集,允 許規(guī)則集生成針對(duì)不同環(huán)境的變換。還允許多個(gè)邏輯到物理映射的集合,即,不同的物理名 稱集合。在一些例子中,存在具有一個(gè)或多個(gè)數(shù)據(jù)集的輸入映射表。在一些例子中,聯(lián)合組 件可以具有多個(gè)輸入映射表,并且每個(gè)可以具有多個(gè)數(shù)據(jù)集。輸m數(shù)據(jù)集——提供輸出字段名稱列表。缺省地,當(dāng)生成變換時(shí)將假定輸出數(shù)據(jù) 集中的一個(gè)的記錄格式。輸出數(shù)據(jù)集可以與輸入數(shù)據(jù)集相同。內(nèi)含規(guī)則集將不具有輸出數(shù) 據(jù)集。在一些例子中,因?yàn)榫哂休斎霐?shù)據(jù)集,所以存在多個(gè)輸出數(shù)據(jù)集,允許規(guī)則集生成針 對(duì)不同環(huán)境的變換。內(nèi)含規(guī)則集列表——一個(gè)規(guī)則集可以使用由另一個(gè)規(guī)則集計(jì)算的輸出字段(明確 列出的輸出字段,而非輸出記錄格式的字段)?;趯?duì)從包含規(guī)則集中可見的內(nèi)含規(guī)則集中 輸出的變量的集合進(jìn)行定義的內(nèi)含規(guī)則集映射表,內(nèi)含規(guī)則集中的輸出變量可以用作包含 規(guī)則集中的變量。內(nèi)含變換文件列表——可以選擇性地包括對(duì)在處理規(guī)則集時(shí)將使用的變換進(jìn)行 指定的一個(gè)或多個(gè)文件。列出變量和常量的一系列映射表——這些表與輸入和輸出數(shù)據(jù)集交織在一起。它 們使得變量列表為編輯器所知并且將商務(wù)名稱與技術(shù)名稱之間的映射記入文檔。每個(gè)變量 具有一個(gè)商務(wù)名稱、技術(shù)名稱(其可以使用表達(dá)式計(jì)算)和基本類型(字串、數(shù)字、日期或 者日期時(shí)間)。與每個(gè)變量關(guān)聯(lián)的是將商務(wù)名稱與技術(shù)名稱之間的映射記入文檔的常量的 可選列表。下面更詳細(xì)地描述變量表。對(duì)外部測(cè)試數(shù)據(jù)文件的參考——測(cè)試文件用于測(cè)試規(guī)則,類似于上面討論的嵌入 式測(cè)試數(shù)據(jù)集。不拒絕標(biāo)志——如果該標(biāo)志被設(shè)定的話,那么由規(guī)則集生成的變換將不拒絕記錄 (拋棄錯(cuò)誤)??梢允褂迷摌?biāo)志以使得拋棄錯(cuò)誤的規(guī)則將被忽略,好像那些規(guī)則從未觸發(fā)一樣。部署表——列出一個(gè)或多個(gè)部署,其(間接地)指示哪些規(guī)則應(yīng)該包括在各個(gè)創(chuàng) 建中。稍后更詳細(xì)地描述部署表??稍栮P(guān)鍵字——使用戶能夠指定專用輸入字段的商務(wù)名稱,該商務(wù)名稱代表用于聯(lián)合類型和上卷類型規(guī)則集的關(guān)鍵字。在一些例子中,關(guān)鍵字實(shí)際上通過(guò)關(guān)鍵字的類型被 實(shí)現(xiàn)為輸入變量表中的一個(gè)條目。杳找文件的可詵列表——提供商務(wù)名稱、關(guān)鍵字信息以及輸入變量和常量的完整 表,每個(gè)查找文件一個(gè)表。下面更詳細(xì)地描述查找文件支持。參數(shù)表——列出多個(gè)變量,這些變量的值來(lái)自環(huán)境或者來(lái)自運(yùn)行時(shí)參數(shù)集。規(guī)則集與若干不同表關(guān)聯(lián)1.輸入變量和常量表。對(duì)于變換類型的規(guī)則集,該表包含規(guī)則中將被引用的輸入 記錄格式的字段。不是每個(gè)記錄格式的字段都需要列出,但是它們通常是如此。對(duì)于聯(lián)合 類型的規(guī)則集,將存在多個(gè)輸入表,每個(gè)表代表用于聯(lián)合操作的一個(gè)輸入數(shù)據(jù)集。2.用于所有內(nèi)含規(guī)則集的輸入變量和常量表。在使用內(nèi)含規(guī)則集時(shí),每個(gè)內(nèi)含規(guī) 則集都具有它自己的輸入變量和常量表。當(dāng)建立一個(gè)變換時(shí),由內(nèi)含規(guī)則集使用的輸入變 量被映射到完成該包含的規(guī)則集的上下文中的實(shí)際輸入。因此,該列表被提升到包含規(guī)則 集中。如果多個(gè)內(nèi)含規(guī)則集被包括,那么每個(gè)輸入變量表都被提升。(如果內(nèi)含規(guī)則集本身 包括一個(gè)規(guī)則集,那么就不提升第二級(jí)變量。)從內(nèi)含規(guī)則集提升的輸入變量和常量不可用 于包含規(guī)則集中。該表被包括,因此可以在到內(nèi)含規(guī)則集的輸入與到包含規(guī)則集的輸入之 間建立映射。更多細(xì)節(jié)參見下文。3.用于所有內(nèi)含規(guī)則集的輸出變量和常量表。當(dāng)規(guī)則集已經(jīng)被內(nèi)含時(shí),那些內(nèi)含 規(guī)則集的輸出變?yōu)榈桨?guī)則集的輸入。該表列出所有那些變量。它一開始被直接填充以 所有內(nèi)含規(guī)則集中的輸出變量和常量表;然而,可以改變商務(wù)名稱以避免名稱沖突。對(duì)于該 表來(lái)說(shuō),技術(shù)名稱是該內(nèi)含規(guī)則集內(nèi)部的商務(wù)名稱。4.輸出變量和常量表。對(duì)于變換類型的規(guī)則集來(lái)說(shuō),該表包含將被規(guī)則集計(jì)算的 輸出記錄格式的字段。不進(jìn)行計(jì)算的輸出變量也可以被包括并且將被規(guī)則集忽略。(所生 成的變換具有用于將輸入復(fù)制到輸出的通配符規(guī)則。另外,輸出可以包括缺省值在其中。)輸出變量也可以被用作中間變量,意指由一個(gè)規(guī)則產(chǎn)生的輸出的值可以在稍后的 規(guī)則中被引用。有時(shí),通過(guò)這樣的方式使用輸出而不將其直接包括在來(lái)自變換的輸出記錄 中。5.參數(shù)表。規(guī)則可以包括對(duì)參數(shù)的引用。在運(yùn)行時(shí)在圖的參數(shù)集的上下文中解析 參數(shù)。類似于其它變量,在規(guī)則集中參數(shù)具有商務(wù)名稱、技術(shù)名稱(例如,SRUNDATE)和類型。6.針對(duì)每個(gè)查找文件的變量映射表。這些類似于輸入表,但是映射到針對(duì)查找文 件的記錄格式的字段。不共享規(guī)則集(被設(shè)計(jì)用于生成變換)通常受輸入和輸出數(shù)據(jù)集兩者約束。輸入 數(shù)據(jù)集是輸入變量的源。輸出數(shù)據(jù)集是輸出變量的源。有時(shí)一個(gè)規(guī)則集將具有多個(gè)輸入數(shù) 據(jù)集和/或多個(gè)輸出數(shù)據(jù)集。在那種情況下,每個(gè)輸入數(shù)據(jù)集和輸出數(shù)據(jù)集都是變換的可 能輸入或輸出??梢詢H存在輸入變量的一個(gè)集合(除聯(lián)合操作外),但是對(duì)于不同的數(shù)據(jù)集 可以存在不同的商務(wù)名稱與技術(shù)名稱之間的映射。在某些情況下,輸入變量可以由規(guī)則集 使用并且存在于一個(gè)輸入數(shù)據(jù)集中而不存在于第二輸入數(shù)據(jù)集中。在那種情況下,表達(dá)式 被指定為第二輸入數(shù)據(jù)集中的缺失變量的技術(shù)名稱。如果規(guī)則集不使用輸入變量,那么不 必針對(duì)每個(gè)輸入數(shù)據(jù)集提供技術(shù)名稱。
內(nèi)含規(guī)則集被稍有不同地對(duì)待。內(nèi)含規(guī)則集可以不具有關(guān)聯(lián)的輸入和輸出數(shù)據(jù) 集。而是,它們具有輸入變量和輸出變量。包括內(nèi)含規(guī)則集的規(guī)則集負(fù)責(zé)映射輸入和輸出。變量可以具有下列屬性,并且可以以表格形式呈現(xiàn)給用戶1.商務(wù)名稱(邏輯名稱)。商務(wù)名稱是規(guī)則中使用的名稱。在一些例子中,施加 限制以使得兩個(gè)輸入變量不可以具有相同的名稱,兩個(gè)輸出變量不可以具有相同的名稱, 來(lái)自內(nèi)含規(guī)則集的兩個(gè)輸出不可以具有相同的名稱,并且同一個(gè)查找文件中兩個(gè)查找變量 不可以具有相同的名稱。輸入變量可以具有與輸出變量相同的名稱。在這種情況下,用戶 接口可以基于上下文或者通過(guò)使用諸如在輸出變量名稱的前面的“out. ”這樣的前綴消除 輸入與輸出的歧義。不同查找文件中的查找變量可以具有相同的名稱。因此,使用諸如查 找文件本身的名稱這樣的前綴將消除它們的歧義。2.簡(jiǎn)單類型。在一些例子中,可以支持四個(gè)基本類型——字串、數(shù)字、日期和日 期時(shí)間。這些相應(yīng)于類型字串(int)、十進(jìn)制00)、日期(“YYYY-MM-DD”)和日期時(shí)間 ("YYYY-MM-DD Hffi4:MI:SS.nnnnnn”)。在變換中使用的在基本類型與實(shí)際類型之間的轉(zhuǎn) 換將與商務(wù)規(guī)則的編輯分開進(jìn)行處理,例如,通過(guò)所生成的變換組件。3.缺省值。缺省值僅為輸出變量所需要。它是一個(gè)在以下情況時(shí)使用的值(1) 在規(guī)則中的輸出列中對(duì)于該輸出存在空單元格,或者O)當(dāng)沒(méi)有規(guī)則觸發(fā)以計(jì)算該輸出的 值時(shí)。只要輸出變量可為空,缺省值就可以是NULL(空)(空單元格被解釋為NULL)。缺省值是表達(dá)式,就如在規(guī)則表達(dá)式表中的輸出列中所使用的那樣。這意味著缺 省值可以指代輸入變量或輸出常量或者包含表達(dá)式。缺省值也可以指代其它輸出,只要沒(méi) 有弓I入迂回(circularity)。4.技術(shù)名稱(物理名稱)或表達(dá)式。它是指定變量的表達(dá)式。有可能使用表達(dá)式 而非字段名稱用于輸入和包括的變量(在一些例子中,不允許對(duì)于輸出變量使用表達(dá)式)。 在向量的情況中,表達(dá)式應(yīng)該是充分證明資格的(qualified)。當(dāng)處理提示的(prompted)變量以及來(lái)自內(nèi)含規(guī)則集的輸入和輸出變量時(shí),與變 量關(guān)聯(lián)的技術(shù)名稱實(shí)際上只是共享的規(guī)則集內(nèi)部所使用的商務(wù)名稱。當(dāng)處理僅內(nèi)部使用的 輸出變量時(shí)(在一個(gè)規(guī)則中計(jì)算并且在后來(lái)的規(guī)則中使用的中間變量),技術(shù)名稱可以為空。5.可選說(shuō)明和注解。常量各種變量表包括對(duì)于常量以及變量的映射。常量相應(yīng)于C++中的enums。系統(tǒng) 可以支持最初來(lái)自有效值和無(wú)效值的常量值,以及最初來(lái)自有效范圍和無(wú)效范圍的常量范 圍。另外,可以創(chuàng)建代表區(qū)別性值和/或范圍的集合的常量。常量與變量關(guān)聯(lián)。這意味著常量的商務(wù)名稱不一定在整個(gè)規(guī)則集上是唯一的。編 輯器將基于在規(guī)則中常量出現(xiàn)在哪一列而正常知道對(duì)于任一常量的上下文;然而,對(duì)于用 戶來(lái)說(shuō)有可能選擇屬于表達(dá)式中不同變量的常量。在那種情況下,常量將通過(guò)變量名稱來(lái) 證明資格(例如,“航線等級(jí).商務(wù)”)。當(dāng)計(jì)算輸出變量時(shí),僅僅使用單個(gè)值常量(為輸出字段分配范圍沒(méi)有意義)。常量具有下列屬性,并且將以表格形式呈現(xiàn)給用戶(變量和常量可以混合,類似于將一個(gè)表嵌入到另一個(gè)表內(nèi)部)。1.變量名稱。(多個(gè))常量應(yīng)用于一個(gè)變量。變量名稱實(shí)際上是關(guān)聯(lián)變量本身的 一部分。2.商務(wù)名稱。商務(wù)名稱是規(guī)則中使用的名稱。該名稱不需要一定是值標(biāo)識(shí)符,具 體地說(shuō),允許內(nèi)部間隔和標(biāo)點(diǎn)。在某些情況下,用于常量的商務(wù)名稱僅在它們所應(yīng)用的變量 內(nèi)是唯一的。3.常量類型。值、范圍或集合中的一個(gè)。如前所述,范圍和集合在用于對(duì)比(輸 入)而非賦值(輸出)時(shí)是合法的。4.對(duì)于值來(lái)說(shuō)實(shí)際值。在本例中,字串被引用而數(shù)字則不。在缺省形式下引用 日期和日期-時(shí)間(例如,“YYYY-MM-DD”)。也允許使用表達(dá)式,只要該表達(dá)式返回能夠被 自動(dòng)變換為變量類型的簡(jiǎn)單類型。當(dāng)常量是對(duì)于內(nèi)含規(guī)則集的輸入或輸出表的一部分時(shí),不存在值。而是,值是對(duì)于 相應(yīng)輸入或輸出變量的關(guān)聯(lián)常量的商務(wù)名稱。5.對(duì)于范圍來(lái)說(shuō)最小值和最大值。兩者都是常量或表達(dá)式,正如上面文件的實(shí) 際值那樣。范圍被用作在規(guī)則中進(jìn)行比較的簡(jiǎn)略的表達(dá)方式。對(duì)于范圍來(lái)說(shuō)只允許等同性 比較,并且系統(tǒng)將范圍翻譯為“變量>=最小值(variable >= minimum)和變量<=最大 值(variable <= maximum)”。如果沒(méi)有指定最小值,那么該比較的一部分將被跳過(guò)。同樣 地用于最大值。該范圍通過(guò)逗號(hào)隔開最小值和最大值來(lái)存儲(chǔ)。6.對(duì)于集合來(lái)說(shuō)以逗號(hào)隔開的值列表。列表的每個(gè)元素都是一個(gè)常量或表達(dá) 式,類似于上面文件中的實(shí)際值。對(duì)于集合只允許等同性比較,并且系統(tǒng)將集合翻譯為以 “[值的向量列表]的變量成員(variable member of [vectorlist ofvalues]) ”形式的表 達(dá)式。7.可選說(shuō)明和注解。當(dāng)處理來(lái)自共享規(guī)則集的提示變量時(shí),也提示常量。在示出對(duì)于共享規(guī)則集的輸 入和輸出變量的表中,也示出與那些變量關(guān)聯(lián)的常量。對(duì)于那些常量的缺省映射是提示的 信息的一部分,但是用戶能夠推翻(override)常量值。系統(tǒng)將檢測(cè)因?yàn)椴黄ヅ涑A慷谑褂米兞恐泻螘r(shí)存在可能的沖突。具體地說(shuō),如 果(1)任一變量的值被復(fù)制到另一個(gè)變量,(2)如果兩個(gè)變量都定義有常量,以及C3)常量 的集合在名稱和值兩個(gè)方面都不一樣,那么將在用戶需要將一個(gè)變量的值翻譯為其它值時(shí) 生成錯(cuò)誤。源變量包括輸入變量、查找變量、來(lái)自內(nèi)含規(guī)則集的輸出以及用作輸入的輸出變 量。目標(biāo)變量包括輸出變量以及到內(nèi)含規(guī)則集的輸入。在規(guī)則表達(dá)式中或者在變量表中可 能發(fā)生賦值。變量的排序?yàn)榱吮苊庥鼗剡壿?,系統(tǒng)強(qiáng)制變量和規(guī)則的嚴(yán)格排序。全局排序的例子如下輸入變量和參數(shù)。第一內(nèi)含規(guī)則集的輸入映射。第一內(nèi)含規(guī)則集的輸出值。第η個(gè)內(nèi)含規(guī)則集的輸入映射。
第η個(gè)的內(nèi)含規(guī)則集的輸出值。第一查找文件的缺省關(guān)鍵字值。第一查找文件的輸出字段。第η個(gè)查找文件的缺省關(guān)鍵字值。第η個(gè)查找文件的輸出字段。所有輸出變量的缺省值。每個(gè)項(xiàng)目的計(jì)算都使用在前步驟中計(jì)算的值。這意味著,例如,第一內(nèi)含規(guī)則可以 參照它的映射表中的輸入變量和參數(shù)。然而,第二內(nèi)含規(guī)則可以將它的輸入映射到從第一 內(nèi)含規(guī)則計(jì)算得到的輸出。類似地,對(duì)于每個(gè)輸出變量的缺省值在任一規(guī)則之前被計(jì)算,因 此它們基于輸入變量、參數(shù)、查找文件或者來(lái)自任一內(nèi)含規(guī)則的輸出的值。當(dāng)?shù)搅藢?shí)際上計(jì) 算規(guī)則的輸出的時(shí)間時(shí),按次序評(píng)估規(guī)則以使得較晚的規(guī)則可以使用從較早的規(guī)則計(jì)算得 到的值。將數(shù)據(jù)集鏈接到變量在一些例子中,輸入變量表直接來(lái)自輸入數(shù)據(jù)集記錄格式,而商務(wù)名稱來(lái)自有關(guān) 輸入數(shù)據(jù)集的元數(shù)據(jù)。然而,在一些例子中,在規(guī)則集內(nèi)部保留該映射的副本有好處。首 先,在規(guī)則集中保留有變量映射表的副本使得可以在產(chǎn)生環(huán)境的上下文之外編輯規(guī)則集。 規(guī)則集以及關(guān)聯(lián)的規(guī)則可以被串行而成為一個(gè)沙箱(sandbox)并且被編輯為沙箱項(xiàng)目的 一部分。其次,保留有輸入變量映射表的副本使用戶可以解決沖突或相反推翻現(xiàn)有的元數(shù) 據(jù)。例如,如果輸入數(shù)據(jù)集中的兩個(gè)字段映射到相同的商務(wù)名稱,那么就可以在輸入變量表 中改變那些商務(wù)名稱中的一個(gè)。當(dāng)一個(gè)規(guī)則集被首次創(chuàng)建時(shí),輸入變量表是空的。一旦用戶識(shí)別出輸入數(shù)據(jù)集,輸 入變量表就被輸入數(shù)據(jù)集的元數(shù)據(jù)自動(dòng)填充。(相同的邏輯應(yīng)用于輸出變量和輸出數(shù)據(jù)集, 但是為簡(jiǎn)單起見,本討論的余下部分將集中在輸入數(shù)據(jù)集上。)為簡(jiǎn)單起見,在本說(shuō)明書中使用單數(shù)形式的術(shù)語(yǔ)“輸入數(shù)據(jù)集”。存在能夠鏈接到 輸入變量的零個(gè)或多個(gè)輸入數(shù)據(jù)集,以及能夠鏈接到輸出數(shù)據(jù)集的零個(gè)或多個(gè)輸入數(shù)據(jù)集 的單獨(dú)的集合。具體地說(shuō),輸入變量表具有用于商務(wù)名稱的一列,用于類型的一列等等,用 于技術(shù)名稱的許多列,每個(gè)輸入數(shù)據(jù)集一個(gè)技術(shù)名稱。一旦指定單個(gè)輸入數(shù)據(jù)集,就能夠使 用類似的技術(shù)添加第二輸入數(shù)據(jù)集。然而,在第二數(shù)據(jù)集或者后續(xù)數(shù)據(jù)集的情況中,技術(shù)名 稱和商務(wù)名稱之間的映射可以是不那么完整的,特別是因?yàn)橄到y(tǒng)可能無(wú)法算出第二數(shù)據(jù)集 和后續(xù)數(shù)據(jù)集中每個(gè)字段映射到哪一變量。在這些例子中,用戶能夠手動(dòng)地校正任一缺失 的信息。當(dāng)最初從輸入數(shù)據(jù)集創(chuàng)建輸入表時(shí),輸入數(shù)據(jù)集中的每個(gè)字段將導(dǎo)致創(chuàng)建一個(gè)輸 入變量。用于輸入變量的技術(shù)名稱將成為該字段的名稱。將基于字段類型分配類型??杖?(void)將被當(dāng)作字串,實(shí)數(shù)(real)將被當(dāng)作數(shù)字。子記錄將不具有相應(yīng)的輸入變量,雖然 子記錄內(nèi)部的字段將具有相應(yīng)的輸入變量。聯(lián)合體(union)將導(dǎo)致用于該聯(lián)合體的每個(gè)分 支的輸入變量。如果元素是一個(gè)向量,那么相應(yīng)的輸入變量的技術(shù)名稱將假定該向量的第 一元素(“in.Vect
”)。用戶能夠?qū)⑵渫品?。例如,?duì)于一個(gè)多輸出變換來(lái)說(shuō),用戶可以 將技術(shù)名稱改變?yōu)閕n. vect[index]?;蛘?,用戶可以創(chuàng)建與該向量的其它元素相應(yīng)的附加輸入變量,如果該向量長(zhǎng)度固定的話。聯(lián)合體和向量在輸出數(shù)據(jù)集中可能得不到支持(不 會(huì)針對(duì)它們創(chuàng)建輸出變量)。在一些例子中,多輸出組件的變化可以輸出一個(gè)輸出向量而非 多個(gè)輸出記錄。在一些例子中,商務(wù)名稱由元數(shù)據(jù)計(jì)算得來(lái)。用于確定一個(gè)字段的商務(wù)名稱的邏 輯的例子如下如果字段(物理元素Physical Element)具有displayjame (顯示名稱),那么該 字段的diSplay_name被用作商務(wù)名稱。否則,如果字段具有邏輯元素(Logical Element)并且邏輯元素具有display_ name,那么該邏輯元素的displayjame被用作商務(wù)名稱。否則,如果字段具有邏輯元素,那么該邏輯元素的名稱被用作商務(wù)名稱。否則,商務(wù)名稱從技術(shù)名稱計(jì)算得到。如果存在沖突(重名),那么只有一個(gè)商務(wù)名稱將被分配。其它字段將不分配以任 何商務(wù)名稱。在一些例子中,在規(guī)則集和數(shù)據(jù)集元數(shù)據(jù)之間不存在動(dòng)態(tài)鏈接。如果用戶改變?cè)?數(shù)據(jù)數(shù)據(jù)(例如,重新命名邏輯元素),那么那些改變不被系統(tǒng)自動(dòng)獲得。在一些例子中,數(shù) 據(jù)之間的雙向關(guān)系可以用于使這些改變能夠被檢測(cè)到。如果用戶添加第二數(shù)據(jù)集到規(guī)則集,那么系統(tǒng)將設(shè)法使用如上所列出的、相同的 物理到邏輯映射規(guī)則,來(lái)填充用于每一個(gè)商務(wù)名稱的字段。如果變量無(wú)法被映射,那么那些 變量的技術(shù)名詞對(duì)于添加的數(shù)據(jù)集將變?yōu)榭詹⑶矣脩魧⒈仨毷謩?dòng)地填寫字段名稱或者表 達(dá)式??捎米侄螌⒈涣性谟脩艚涌谥械南吕藛沃?。在從數(shù)據(jù)集元數(shù)據(jù)創(chuàng)建輸入變量表的同時(shí),可以將常量添加到輸入變量表,也 可從數(shù)據(jù)集元數(shù)據(jù)添加。系統(tǒng)將創(chuàng)建用于所有有效值和無(wú)效值以及所有與認(rèn)證說(shuō)明書 (Validation Spec)關(guān)聯(lián)的有效范圍和無(wú)效范圍的常量,該認(rèn)證說(shuō)明書與每個(gè)邏輯或物理 元素關(guān)聯(lián)。用于確定常量的商務(wù)名稱的邏輯的例子如下如果有效值(有效范圍,等等)具有displayjame (顯示名稱),那么display_ name將被用作商務(wù)名稱。否則,如果有效值(有效范圍,等等)具有描述,那么該描述將被用作商務(wù)名稱。否則,常量將被包括在變量表中而無(wú)需商務(wù)名稱。沒(méi)有必要從數(shù)據(jù)集開始創(chuàng)建變量。創(chuàng)建輸入變量列表的第二種方法是標(biāo)識(shí)基礎(chǔ) 系統(tǒng)中的邏輯實(shí)體(Logical Entity)。如果選擇了一個(gè)邏輯實(shí)體,那么系統(tǒng)將針對(duì)邏輯 實(shí)體中的每個(gè)邏輯組件來(lái)創(chuàng)建具有一個(gè)變量的變量表。變量的商務(wù)名稱將是邏輯組件的 display_name0如果邏輯組件具有認(rèn)證說(shuō)明書,那么也將使用在前的文件規(guī)則創(chuàng)建常量。最后,輸入和輸出變量能夠被手動(dòng)地添加——要么通過(guò)將它們添加到變量表,要 么通過(guò)在編輯規(guī)則的同時(shí)創(chuàng)建它們。例如,當(dāng)用戶添加一列到規(guī)則中時(shí),他選擇哪個(gè)輸入變 量應(yīng)該用于該列。但是他也能夠選擇“new...(新的)”并即時(shí)地創(chuàng)建輸入變量。然后系統(tǒng) 將提示用戶數(shù)據(jù)類型和可選注解。直到晚些時(shí)候才需要填入技術(shù)名稱。系統(tǒng)需要變量列表以便使規(guī)則能夠被編輯。然而,直到晚些時(shí)候才必須完成商務(wù) 名稱和技術(shù)名稱之間的映射??梢詢H當(dāng)用戶準(zhǔn)備相對(duì)于外部測(cè)試文件測(cè)試整個(gè)規(guī)則或者準(zhǔn)備實(shí)際從規(guī)則集創(chuàng)建變換時(shí)需要映射。內(nèi)含夫見貝Il集(included rule set)在一些例子中,規(guī)則集能夠被共享。具體地說(shuō),內(nèi)含規(guī)則集被設(shè)計(jì)為包括在另一個(gè) 規(guī)則集之內(nèi)以使得其邏輯變?yōu)榘?guī)則集所生成的變換的一部分。雖然內(nèi)含規(guī)則集通常被特定設(shè)計(jì)為共享的,但是也能夠獨(dú)立使用內(nèi)含規(guī)則集以創(chuàng) 建變換。例如,用戶能夠創(chuàng)建針對(duì)過(guò)濾類型(filter-type)的變換計(jì)算布爾輸出的規(guī)則集。 但是同時(shí),規(guī)則集能夠被包括在另一個(gè)變換內(nèi)部并且布爾輸出(共享規(guī)則集的輸出變量, 在該包含規(guī)則集中可用)可用于計(jì)算更復(fù)雜的輸出。內(nèi)含規(guī)則集類似于其它類型的規(guī)則集。它們具有輸入變量和輸出變量。并且它們 本身能夠包括其它內(nèi)含規(guī)則集。但是內(nèi)含規(guī)則集中的輸入和輸出變量的處理不同于變換類 型(transform-type)的規(guī)則集。在變換類型的規(guī)則集中,輸入和輸出變量被映射到技術(shù)名 稱,因此能夠生成變換。但是在內(nèi)含規(guī)則集中,不需要將輸入和輸出變量映射到技術(shù)名稱。 (如果規(guī)則集既被共享又用于生成變換,那么輸入和輸出變量將被映射到技術(shù)名稱用于生 成變換的部署。)當(dāng)用戶將內(nèi)含規(guī)則集包括在另一個(gè)規(guī)則集中時(shí),包含規(guī)則集需要具有用于 映射內(nèi)含規(guī)則集的輸入和輸出的變量映射表。在包含規(guī)則集的上下文中,只有共享規(guī)則集 的輸入變量和輸出變量是可見的。包括在共享規(guī)則集中的任何規(guī)則集的任一變量都不對(duì)包 含規(guī)則集公開。在包含規(guī)則集的上下文中,共享規(guī)則集的輸入變量需要被映射到包含規(guī)則集的變 量,或者使用那些變量的表達(dá)式。共享規(guī)則集的商務(wù)名稱將被列在變量映射表中,但是那些 名稱將不可用于包含規(guī)則集中的規(guī)則中。而是,包含規(guī)則集可以只需要將共享規(guī)則集的每 個(gè)輸入變量(通過(guò)商務(wù)名稱)與包含規(guī)則集中的表達(dá)式匹配。由于考慮在輸入變量、參數(shù)和查找之前評(píng)估內(nèi)含規(guī)則集,因此內(nèi)含規(guī)則集的輸出 能夠被用作查找的關(guān)鍵字。在一些例子中,評(píng)估次序更靈活,并且能夠基于相關(guān)性分析而自 動(dòng)地確定查找相對(duì)評(píng)估內(nèi)含規(guī)則集的次序。因?yàn)樵谟?jì)算任一輸出變量之前評(píng)估內(nèi)含規(guī)則 集,所以包含規(guī)則集中沒(méi)有輸出變量能夠被映射到內(nèi)含規(guī)則集中的輸入。如果到內(nèi)含規(guī)則 集輸入的映射不能通過(guò)簡(jiǎn)單輸入變量完成,那么可以代之以使用表達(dá)式。到內(nèi)含規(guī)則集輸入變量的映射可以是NULL(空),只要內(nèi)含規(guī)則集中的輸入變量 可為空。映射也可以留白。如果映射留白,那么當(dāng)且僅當(dāng)在包含規(guī)則集的輸出的計(jì)算中需 要該輸入變量時(shí),將在變換產(chǎn)生時(shí)間報(bào)告出錯(cuò),。在一些例子中,假定一切都是可為空的,這 將簡(jiǎn)化用戶接口。在包含規(guī)則集的上下文中,共享規(guī)則集的輸入變量也需要映射到包含規(guī)則集中的 商務(wù)名稱。該映射表是上面所述一個(gè)映射表的反向。當(dāng)映射共享規(guī)則集的輸入變量時(shí),表 將共享規(guī)則集的輸入變量的商務(wù)名稱映射到包含規(guī)則集中的現(xiàn)有變量。但是當(dāng)映射共享規(guī) 則集的輸出變量時(shí),包含規(guī)則集具有指定用于共享規(guī)則集的輸出的商務(wù)名稱的表——將包 含規(guī)則集中的名稱映射到共享規(guī)則集中相應(yīng)的名稱。需要輸出變量映射來(lái)解決潛在的命名沖突。缺省映射是簡(jiǎn)單地在包含規(guī)則集和共 享規(guī)則集中都使用相同的商務(wù)名稱。但是共享規(guī)則集中的輸出變量的名稱可能與包含規(guī)則 集中已經(jīng)定義的變量的商務(wù)名稱沖突,因此可以改變包含規(guī)則集中所映射的名稱。并不是來(lái)自共享規(guī)則集的每個(gè)輸出都需要被映射。如果一個(gè)輸出未映射,那么該輸出就不能用于包含規(guī)則集中,并且將忽略來(lái)自共享規(guī)則集的相應(yīng)邏輯。另一方面,來(lái)自共 享規(guī)則集的所有輸入都可以被映射,雖然如果規(guī)則集設(shè)計(jì)者確信將不需要它們,那么它們 就可能被映射到不感興趣的變量。在一些例子中,系統(tǒng)本身可以確定哪些輸入真的需要被 映射。在一些例子中,映射表通過(guò)商務(wù)名稱而非通過(guò)引用完成。當(dāng)共享規(guī)則集包括在另 一個(gè)規(guī)則集中時(shí),包含規(guī)則集得到來(lái)自共享規(guī)則集的輸入和輸出的副本。這些名稱與映射 信息一起被存儲(chǔ)在包含規(guī)則集中??梢詫?duì)共享規(guī)則集進(jìn)行改變,導(dǎo)致添加、刪除或者重新命 名某些輸入或者輸出。包含規(guī)則集和內(nèi)含規(guī)則集之間的引用完整性問(wèn)題可以在從系統(tǒng)加載規(guī)則集時(shí)由 包含規(guī)則集處理。從包含規(guī)則集中刪除從共享規(guī)則集消失的輸入變量。添加到共享規(guī)則集 的輸入變量被添加到包含規(guī)則集中的映射表,但是保持不被映射。同樣地,添加到共享規(guī)則 集的輸出變量得以添加到包含規(guī)則集中的映射表,但是保持不被映射。如果輸出變量從共 享規(guī)則集中被刪除,并且在包含規(guī)則集中沒(méi)有使用它,那么就只是從映射表中刪除它,但是 如果在包含規(guī)則集中使用它,那么用戶得到一個(gè)該變量不再可用的出錯(cuò)消息。包含規(guī)則集實(shí)際上存留來(lái)自共享規(guī)則集的冗余信息。具體地說(shuō),在輸入和輸出變 量映射表中,包含規(guī)則集可以只需要將共享規(guī)則集中的商務(wù)名稱列表與包含規(guī)則集中的相 應(yīng)名稱一起維持。為了有效率,包含規(guī)則集也存留類型、缺省值、說(shuō)明和注解,它們?nèi)慷紡?共享規(guī)則集中復(fù)制而來(lái)。這些值在編輯包含規(guī)則集時(shí)只可讀,但是為了生成報(bào)告和其它分 析的效率而被包括在其中。共享規(guī)則集映射表在內(nèi)含規(guī)則集中也具有一個(gè)附加條目,該附加條目是一個(gè)附加 注解。這使用戶能夠添加其它注解到所映射的值。杳找文件規(guī)則集可以選擇性地具有一個(gè)或多個(gè)查找文件。規(guī)則集中的每個(gè)查找文件都包括 下列信息1.查找文件的商務(wù)名稱。2.可選說(shuō)明和注解。3.用于組成關(guān)鍵字的字段的商務(wù)名稱列表。在查找文件被添加到表達(dá)式中時(shí)使 用這些名稱,因此用戶看到類似這樣的lookup(My Lookup File,〈customer name key>, 〈account type key (查找(我的查找文件,< 客戶名稱關(guān)鍵字 >,< 賬戶類型關(guān)鍵字>)。4.用于每一個(gè)關(guān)鍵字的缺省表達(dá)式列表。5.查找文件的技術(shù)名稱。在一些例子中,可以在部署中推翻它們。6. 一個(gè)或多個(gè)查找數(shù)據(jù)集。每個(gè)查找文件被不嚴(yán)格地約束在系統(tǒng)內(nèi)的數(shù)據(jù)集上, 正如規(guī)則集被輸入數(shù)據(jù)集約束一樣。缺省地,存在與規(guī)則集中的每個(gè)查找文件關(guān)聯(lián)的一個(gè) 查找數(shù)據(jù)集,但是可以存在更多查找數(shù)據(jù)集以便用于替換的部署。7.輸入變量和常量表。除了對(duì)每個(gè)查找文件存在一個(gè)表之外,它類似于用于規(guī)則 集的輸入變量和常量表。通過(guò)輸入變量,用于查找文件的輸入變量和常量表可以具有與每 個(gè)關(guān)聯(lián)的查找數(shù)據(jù)集相應(yīng)的多個(gè)技術(shù)名稱。除了可能存在多于一個(gè)查找文件之外,類似于輸入變量那樣對(duì)查找文件進(jìn)行處 理。每個(gè)查找文件在一個(gè)頁(yè)面上被編輯,在商務(wù)名稱和技術(shù)名稱之間具有映射表并且可以與多個(gè)數(shù)據(jù)集關(guān)聯(lián)。它們也具有與每個(gè)字段關(guān)聯(lián)的常量。可以通過(guò)以從輸入數(shù)據(jù)集加載輸 入變量的元數(shù)據(jù)的方式讀取查找數(shù)據(jù)集的元數(shù)據(jù),來(lái)初始化查找文件的映射。如果用戶使用查找字段變量,并且在查找中沒(méi)有發(fā)現(xiàn)關(guān)鍵字,那么該字段的值假 定為空。如果該字段為空,除非規(guī)則例被專門觸發(fā),否則規(guī)則例就將評(píng)估為假并且被跳過(guò)。 在這種情況下,不生成出錯(cuò)消息。如果用戶使用查找文件變量(查找文件本身而非字段), 那么就假定函數(shù)lookupjiiatch,因此查找文件變量評(píng)估為真或假。兩種情況都應(yīng)用于或者 輸入列或者輸出列的規(guī)則表達(dá)式。如果用戶使用查找字段變量作為缺省輸出變量,那么不 能找出查找就被譯成NULL(空)。與正常處理過(guò)程相比,查找操作較慢,在查找操作中關(guān)鍵字被用來(lái)從參考文件中 檢索一個(gè)或多個(gè)數(shù)據(jù)記錄。BRE包含代碼,該代碼被設(shè)計(jì)為通過(guò)針對(duì)每個(gè)記錄高速緩存查找 結(jié)果,來(lái)限制花費(fèi)高的查找操作的數(shù)目。每當(dāng)規(guī)則引用查找變量(應(yīng)當(dāng)由查找操作返回的 值中的一個(gè))時(shí),變換生成過(guò)程就將查找操作變?yōu)樽映绦蛘{(diào)用。子程序包含在每個(gè)記錄一 開始的時(shí)候被初始化為假的全局布爾變量,其指示子程序是否已經(jīng)被當(dāng)前記錄調(diào)用。查找 子程序第一次被調(diào)用,布爾變量將為假。在本例下,布爾變量被設(shè)置為真。然后執(zhí)行實(shí)際查 找操作并且由查找調(diào)用返回的記錄被高速緩存到一個(gè)變量中。最后,在啟用測(cè)試時(shí),查找操 作的結(jié)果被添加到事件日志中。在處理相同記錄期間的任一后續(xù)查找操作將調(diào)用相同的子程序。然而,對(duì)于后續(xù) 子程序調(diào)用來(lái)說(shuō),布爾變量將變?yōu)檎?。這改變了子程序的行為,以使得可以返回先前讀取并 且高速緩存的數(shù)據(jù)而非進(jìn)行多余的查找操作(并且避免生成額外的日志事件)。為簡(jiǎn)單起見,高速緩存只作用于單個(gè)關(guān)鍵字值。如果對(duì)相同的查找文件使用不同 的關(guān)鍵字值(在相同的記錄中)進(jìn)行多個(gè)引用,那么那些查找結(jié)果中只有一個(gè)將被高速緩 存。全部其它查找子程序調(diào)用將翻譯成實(shí)際查找操作。也就是說(shuō),熟練的從業(yè)者將看到,如 何能夠通過(guò)使用用于經(jīng)高速緩存的結(jié)果的哈希表而非簡(jiǎn)單變量,將該查找擴(kuò)展為支持具有 不同關(guān)鍵字的多個(gè)查找。鍾規(guī)則集可以參照參數(shù)。在一些例子中,每個(gè)規(guī)則集具有一個(gè)可選參數(shù)表,就像變量 表一樣,可選參數(shù)表將參數(shù)的商務(wù)名稱映射到它們的技術(shù)名稱。參數(shù)表中的每個(gè)條目都具 有下列特征1.商務(wù)名稱。這是當(dāng)參數(shù)將出現(xiàn)在規(guī)則正文中時(shí)它的名稱。通常,無(wú)論輸入變量 在何處使用都能夠使用參數(shù)。2.技術(shù)名稱。這是在開發(fā)環(huán)境中參數(shù)的名稱。3.參數(shù)的類型(字串、十進(jìn)制、日期或者日期時(shí)間)。在生成的變換中,當(dāng)需要時(shí) 將參數(shù)轉(zhuǎn)換為其它類型。4.可選說(shuō)明和注解。除了參數(shù)的值在整個(gè)輸入文件上是常量,并且在處理開始時(shí)它們的值是外部指定 的之外,參數(shù)與變量相仿。測(cè)試規(guī)則和日志記錄生成變換的一部分包括測(cè)試它將對(duì)應(yīng)的規(guī)則。規(guī)則也經(jīng)認(rèn)證,也就是說(shuō),經(jīng)語(yǔ)法和 語(yǔ)義一致性檢查。與認(rèn)證相對(duì),測(cè)試包括規(guī)則的運(yùn)行并且由用戶確定正確性,例如通過(guò)提供
19期望的輸出或者將輸出與期望值進(jìn)行手工比較。系統(tǒng)支持兩個(gè)級(jí)別的測(cè)試。如先前所述,每個(gè)規(guī)則可以具有一個(gè)關(guān)聯(lián)的測(cè)試數(shù)據(jù) 集,以值和期望結(jié)果的嵌入式表的形式。這被稱為單元測(cè)試。在編輯一個(gè)規(guī)則時(shí),可以針對(duì) 測(cè)試數(shù)據(jù)的每行重新評(píng)估規(guī)則的輸出。實(shí)際結(jié)果和期望結(jié)果之間的任一不匹配或者不能產(chǎn) 生有效結(jié)果都將突出顯示以待解決。在一些例子中,對(duì)使用標(biāo)準(zhǔn)機(jī)制的服務(wù)器過(guò)程可存取外部輸入測(cè)試文件。使用外 部文件的測(cè)試稱為文件測(cè)試。測(cè)試文件具有與用于規(guī)則集的輸入數(shù)據(jù)集匹配的記錄格式。 在一些例子中,可以提供替換的記錄格式。選擇性地,用戶能夠標(biāo)識(shí)包含期望結(jié)果的數(shù)據(jù) 集。系統(tǒng)針對(duì)測(cè)試數(shù)據(jù)集運(yùn)行規(guī)則集并且顯示產(chǎn)生了什么輸出以及為什么生成。如果期望 結(jié)果被包括,那么系統(tǒng)就將實(shí)際結(jié)果與期望結(jié)果進(jìn)行比較并且列出所有不同的記錄。在一 些例子中,接口能夠擴(kuò)展以使用戶能夠增量地重新訓(xùn)練個(gè)別值。單元測(cè)試與文件測(cè)試之間的一些差別包括1.對(duì)于查找文件來(lái)說(shuō)在單元測(cè)試模式下,對(duì)于每個(gè)測(cè)試?yán)?test case),每個(gè)查 找變量的值被定義為該測(cè)試的一部分。不指定關(guān)鍵字;當(dāng)測(cè)試運(yùn)行時(shí),對(duì)于每個(gè)測(cè)試?yán)?、?duì) 于每個(gè)查找變量假定相同的值。測(cè)試數(shù)據(jù)集包含多個(gè)測(cè)試?yán)?,每個(gè)測(cè)試?yán)軌驗(yàn)槊總€(gè)查找 變量指定不同的值。在文件測(cè)試模式下,使用真實(shí)的查找文件。這意味著不同的關(guān)鍵字將 返回不同的值,但是它也意味著針對(duì)特定關(guān)鍵字的、用于任一給定查找變量的值在測(cè)試期 間不能被改變。2.對(duì)于內(nèi)含規(guī)則集來(lái)說(shuō)在單元測(cè)試模式下,不運(yùn)行內(nèi)含規(guī)則集并且甚至不必要 是完整的。而是,對(duì)于來(lái)自每個(gè)內(nèi)含規(guī)則集的每個(gè)輸出在測(cè)試數(shù)據(jù)集中指定一個(gè)值。在文 件測(cè)試模式下,內(nèi)含規(guī)則集以它們將在產(chǎn)品中運(yùn)行的方式運(yùn)行。這暗含著內(nèi)含規(guī)則集所需 要的任一查找文件或者參數(shù)也必須在測(cè)試時(shí)間指定。3.對(duì)于參數(shù)來(lái)說(shuō)在單元測(cè)試模式下,可以對(duì)于針對(duì)每個(gè)測(cè)試?yán)拿總€(gè)參數(shù)設(shè)置 不同的值。在文件測(cè)試模式下,每個(gè)參數(shù)的值對(duì)于整個(gè)測(cè)試都是常量。4.對(duì)于當(dāng)前日期來(lái)說(shuō)當(dāng)測(cè)試時(shí),如果該規(guī)則參照當(dāng)前日期或者時(shí)間,用戶指定 應(yīng)該為當(dāng)前日期和時(shí)間假定的值。在單元測(cè)試模式下,日期與時(shí)間對(duì)于每個(gè)測(cè)試?yán)梢允?不同的。在文件測(cè)試模式下,針對(duì)整個(gè)測(cè)試設(shè)置單個(gè)日期和時(shí)間值(該值可以是與運(yùn)行測(cè) 試的時(shí)候機(jī)器的日期和時(shí)間不同的值)。5.對(duì)于記錄格式和映射來(lái)說(shuō)不需要對(duì)于單元測(cè)試指定映射;測(cè)試完全基于變量 的商務(wù)名稱完成。對(duì)于文件測(cè)試來(lái)說(shuō),所有變量被映射到技術(shù)名稱并且指定用于輸入、輸出 和查找的記錄格式。通過(guò)定制的日志記錄特征來(lái)測(cè)試和認(rèn)證規(guī)則集,如圖3中所示的流程圖300中所 示。接收一個(gè)或多個(gè)規(guī)則集和相應(yīng)的測(cè)試數(shù)據(jù)作為輸入(302)。生成器基于規(guī)則集生成 (304)變換并且使用它計(jì)算測(cè)試數(shù)據(jù)中的每個(gè)記錄的輸出值??蛇x地,用戶能夠通過(guò)跟蹤 (trace)包括所生成的變換的、基于圖的計(jì)算的運(yùn)行(308),來(lái)配置(306)將生成的日志的 特性。在基于圖的計(jì)算中,相關(guān)組件的“l(fā)og(日志)”端口用于測(cè)試輸出。“l(fā)og”端口是用 于組件的帶外通信信道。它是從變換得到附加輸出元數(shù)據(jù)的一種方法,其不需要改變實(shí)際 輸出數(shù)據(jù)的記錄格式。日志記錄信息從日志端口輸出(310)作為集中到日志文件中日志消 息,該日志文件存儲(chǔ)在運(yùn)行期間可訪問(wèn)的存儲(chǔ)系統(tǒng)中??蛇x地,可以過(guò)濾日志消息并且將其子集存儲(chǔ)在日志文件中。例如,因?yàn)檩敵鲇涗浳锤淖?例如,如果對(duì)于給定輸入記錄,沒(méi)有 規(guī)則例被觸發(fā)),所以包括所生成的變換的組件可以使大多數(shù)的輸入記錄通過(guò)。可能期望只 存儲(chǔ)與已觸發(fā)的規(guī)則例相應(yīng)的日志消息,這些已觸發(fā)的規(guī)則例改變輸入記錄的字段中的一 個(gè)或多個(gè)值。圖中的一個(gè)或多個(gè)組件可以過(guò)濾來(lái)自日志端口的記錄以使得只有那些日志消 息被寫入日志文件中。針對(duì)測(cè)試生成的變換可以與將針對(duì)正常運(yùn)行生成的變換稍有不同。例如,在正常 運(yùn)行下,使用變換的組件可以在給定輸出端口生成給定類型的輸出記錄。在測(cè)試時(shí)間,與輸 出有關(guān)的測(cè)試被發(fā)送到日志端口,而輸出記錄保持不變。從第一測(cè)試?yán)_始起,測(cè)試?yán)妮斎氡惠斎胱儞Q中,并且輸出連同哪個(gè)規(guī)則生成 它的指示一起,被寫入到輸出陣列。該過(guò)程對(duì)每行重復(fù)直到評(píng)估了最后一行。然后,輸出陣 列可以用來(lái)生成如上所討論的結(jié)果表。可以評(píng)估輸出陣列以確定規(guī)則集是否有效。輸出值 可以包括在測(cè)試數(shù)據(jù)中,因?yàn)閺囊粋€(gè)測(cè)試生成的輸出值可以與在前的測(cè)試中生成的值相比 較。從輸出陣列的第一行開始起,將生成的輸出與來(lái)自測(cè)試數(shù)據(jù)或者在前的測(cè)試結(jié)果的期 望輸出相比較。如果任一輸出不匹配,那么將該不匹配記入日志。對(duì)每一行重復(fù)該過(guò)程。在 一些例子中,評(píng)估步驟被集成到輸出-生成步驟中,并且每個(gè)所生成的輸出都在它們被生 成時(shí)與相應(yīng)的期望輸出進(jìn)行比較。任一不匹配或者在處理測(cè)試數(shù)據(jù)結(jié)果過(guò)程中的其它錯(cuò)誤 都被記入日志。如上所述,一個(gè)規(guī)則集的輸出可以是到另一個(gè)規(guī)則集的輸入,在該情況下內(nèi) 含規(guī)則集被評(píng)估為包含規(guī)則集的一部分。用戶可以通過(guò)輸出字段,或者通過(guò)可能使用輸入字段的表達(dá)式,限制被測(cè)試的規(guī) 則。在一些例子中,用戶可以在測(cè)試期間選擇禁用某一規(guī)則。在一些例子中,用戶不必等待 整個(gè)測(cè)試文件被處理;一旦頭幾個(gè)記錄得到輸出,測(cè)試結(jié)果就可用。除了測(cè)試數(shù)據(jù)本身之外,可以跟蹤(308)下列任一信息以便進(jìn)行文件測(cè)試和日志 記錄1.輸入數(shù)據(jù)集的物理位置(Physical Location) 0其被存儲(chǔ)在用于每個(gè)輸入數(shù)據(jù) 集的輸入變量表中的規(guī)則集中。對(duì)于聯(lián)合類型的數(shù)據(jù)集,需要所有物理位置。每當(dāng)需要物 理位置時(shí),都可以使用數(shù)據(jù)庫(kù)中的表名。2.輸入數(shù)據(jù)集的記錄格式。缺省地,從針對(duì)輸入數(shù)據(jù)集的數(shù)據(jù)集定義中取得該記 錄格式。輸入變量中存在一個(gè)位置,用于用經(jīng)核對(duì)而記入沙箱中的不同記錄格式來(lái)推翻該 記錄格式。對(duì)于聯(lián)合類型的變換,需要所有記錄格式。3.使用哪個(gè)部署。4.所有查找文件的物理位置。被存儲(chǔ)在查找文件表中。5.用于每個(gè)查找文件的記錄格式。從與每個(gè)查找文件關(guān)聯(lián)的數(shù)據(jù)集定義中或者從 推翻的記錄格式文件取得。6.每個(gè)參數(shù)的值。其將在測(cè)試參數(shù)會(huì)話中設(shè)置。7.輸出文件的物理位置。僅當(dāng)完成回歸(比較)(regression(comparison))測(cè)試 時(shí)需要。它存儲(chǔ)在輸出變量表中。8.輸出文件的記錄格式。再一次地,僅當(dāng)完成回歸測(cè)試時(shí)需要,并且從輸出數(shù)據(jù)集 定義或者從可選的推翻記錄格式文件中取得。9.項(xiàng)目沙箱的位置。必須在主機(jī)上的沙箱之外完成測(cè)試。沙箱應(yīng)該是包含規(guī)則集
2的項(xiàng)目的經(jīng)核對(duì)的副本。所有的記錄格式文件將從沙箱中取得。10.當(dāng)一個(gè)規(guī)則參照“now (現(xiàn)在)”、“today (今天)”或者類似的值時(shí)用于日期和 時(shí)間的值。在該例子中,缺省地,變換不將單元格狀態(tài)寫入日志,然而,該功能可以在用戶接 口 400中被激活,如圖4中所示。也就是說(shuō),允許用戶配置(306)日志特征,諸如打開和關(guān) 閉各種特定準(zhǔn)則的日志記錄。接口 400包括用于指定日志消息(稱作“日志記錄”)何時(shí)被 創(chuàng)建(包括針對(duì)每個(gè)輸入記錄,何時(shí)發(fā)生錯(cuò)誤或者指定的表達(dá)式何時(shí)為真)的部分410,和 用于指定每個(gè)日志消息中包括些什么(例如,規(guī)則例激發(fā)、輸入值、輸出值、查找值、包括輸 出值表格的規(guī)則集、參數(shù)值和/或評(píng)估每個(gè)單元格的結(jié)果)的部分420。日志記錄輸入、輸 出等等使運(yùn)行變慢但僅僅是很少量的。將單元格狀態(tài)記入日志顯著地減慢運(yùn)行,或許減慢 如量級(jí)階次(order of magnitude)那么多。將執(zhí)行測(cè)試并且依照指定結(jié)構(gòu)顯示檢索到的 結(jié)果。當(dāng)不測(cè)試和/或進(jìn)行日志記錄時(shí),生成器仍然可以生成將輸入、輸出等等記入日 志的變換,并且在產(chǎn)生過(guò)程中使用那個(gè)變換。增強(qiáng)的變換生成相同的輸出并且生成可以被 分析、后運(yùn)行的一系列日志消息以確定運(yùn)行了哪些規(guī)則。如果用戶將日志文件中生成的日 志消息保存(310),那么,即使沒(méi)有使用任何測(cè)試輸入,也可以在產(chǎn)生過(guò)程中重放規(guī)則集的 運(yùn)行這一事實(shí)之后使用BRE。該運(yùn)行被稱作回放并且它對(duì)審核有用。日志文件包含輸入、輸 出、查找、觸發(fā)的規(guī)則例等等的細(xì)節(jié),如所討論的那樣。它還具有一個(gè)頭,其準(zhǔn)確地記錄哪個(gè) 版本的規(guī)則集(名稱和版本)被用來(lái)生成創(chuàng)建日志文件的變換。當(dāng)正在產(chǎn)生過(guò)程中運(yùn)行時(shí), 客戶應(yīng)當(dāng)將日志端口的輸出保存為一個(gè)文件(可選地,壓縮文件)。為了回放一個(gè)會(huì)話,以 供審核,客戶將BRE投入應(yīng)用然后開始回放會(huì)話??蛻魳?biāo)識(shí)包含會(huì)話日志的文件。然后BRE 讀取頭,打開所指示的規(guī)則集和版本,然后處理其余的日志文件,好像它在文件或單元測(cè)試 模式下運(yùn)行一樣。在回放期間的顯示與用戶在運(yùn)行文件或單元測(cè)試之后看到的顯示相同, 除了諸如以下幾點(diǎn)之外(1)沒(méi)有相對(duì)于回歸數(shù)據(jù)的比較;( 像單元格狀態(tài)那樣的一些信 息或許將從日志中遺失,因此它將不被示出,和(3)因?yàn)檎谑境龅囊?guī)則集的版本可能不 是當(dāng)前版本,所以在回放期間規(guī)則集將是只讀的。當(dāng)啟用日志記錄功能時(shí),生成的變換被修改為包括日志記錄聲明。可以通過(guò)調(diào)用 write_to_log()生成日志消息,其是一個(gè)輸出任意字串到日志端口的函數(shù)。當(dāng)使用write_ to_log時(shí),指定格式的數(shù)據(jù)被寫入日志端口。例如,示范性日志端口格式如下record
string(/')node ;
string(/')timestamp ;
string(/‘)component ;
string(/‘)subcomponent
string(/‘)event_type ;
string(/\nf )event_text
end ; 日志記錄信息全部存儲(chǔ)在eVent_teXt字段,其包含在對(duì)Write_t0_l0g()的調(diào)用 中指定的字串。日志端口記錄中的其它字段被自動(dòng)地通過(guò)組件填充,并且被BRE忽略。
22
event_text (專用于日志消息)的格式的例子如下recorddecimal (‘ ‘ ) count ;//事件數(shù)目recorddecimal (‘ ‘ )recNum ;//記錄編號(hào),1 是第一個(gè)記錄,0 是圖例(legend)
string (1) opCode -J/ 見下decimal (‘ ‘ ) rule set ;//哪個(gè)內(nèi)含規(guī)則集,0是主規(guī)則集decimal (‘ ‘ ) group ;//哪個(gè)輸入組,哪個(gè)規(guī)則,等等decimal (‘ ‘ ) index ;//輸入索引,輸出索引,規(guī)則例,等等string(l)nullFlag ;//空白或者用于空值的星號(hào)(“_”)stringC \x01' ) value ;//輸入值,輸出值,等等end events[count];end ;下面是示范性操作碼(opCode)“I” is an input variable. // ftA^fi"0" is an output variable.//輸出變量“K” is a lookup key. // 查找關(guān)鍵字“L”is a lookup variable.//查找變量"R,,is a triggered rule case, for non-legend records. For legend records it is a rule.//被觸發(fā)的規(guī)則例,用于非圖例記錄。對(duì)于圖例記錄,其是一個(gè)規(guī)則"C,,is a rule cell ;it is only used when testing-level tracing is enabled,except for the legend where itis always used.//規(guī)則單兀,其僅在測(cè)試級(jí) 跟蹤被啟用時(shí)使用,除了 一直使用它的圖例記錄之外。"P" is a parameter. // 參數(shù)“H” is a column heading.//歹Ij標(biāo)題"N,,is a rule set name ;it is onlyused in legend records.//規(guī)則集名稱, 僅在圖例記錄中使用"V" is a version number ;it is only used in legend records.//版本號(hào),僅 在圖例記錄中使用"D,,is a difference record ;it is onlyused when testing.//差別記錄,僅在 測(cè)試時(shí)使用在該例子中,每個(gè)輸入記錄將有一個(gè)日志消息。日志消息將包含一串事件。對(duì)于 每個(gè)輸入記錄的一大串事件,將對(duì)每個(gè)輸入、每個(gè)輸出、每個(gè)查找字段、每個(gè)運(yùn)行的規(guī)則例
等等制作一個(gè)事件。在本例中,日志事件中的值字段不是二進(jìn)制的。其不包含專用字符hexOl或換行 符,因?yàn)樗鼈儗⒉徽_地觸發(fā)事件或日志記錄之間的分隔符。而是,所有值都被轉(zhuǎn)換為可印 刷的字串。不可打印的字符被轉(zhuǎn)換為十六進(jìn)制字串(例如,換行符->“\x0a”)。二進(jìn)制 變量被轉(zhuǎn)換為十進(jìn)制,等等。變換中的任何優(yōu)化(像使用內(nèi)部查找文件一樣)在必要時(shí)也都可以被禁用,以確保準(zhǔn)確地日志記錄。當(dāng)看到第一記錄時(shí),日志消息被創(chuàng)建,其包含相應(yīng)規(guī)則集的細(xì)節(jié)。這就是所謂的 “圖例(legend)”日志消息,并且對(duì)于給定規(guī)則集每個(gè)圖運(yùn)行就生成其一次。圖例日志消息 的第一部分包括日志格式版本以及規(guī)則集位置和版本號(hào)(回放所需)。其后將是將各個(gè)輸 入、輸出、規(guī)則、查找文件、查找字段、參數(shù)等等的名稱記入文件的信息。這些名稱與索引關(guān) 聯(lián)(1是第一輸入變量,2是第二輸入變量等等)。這使得后續(xù)與事件關(guān)聯(lián)的“跟蹤”日志消 息通過(guò)索引而非名稱來(lái)引用變量和規(guī)則,以節(jié)省日志文件中的空白。在圖例日志消息寫入到日志文件之后,對(duì)于由正在記入日志的圖處理的數(shù)據(jù)流的 第一記錄以及每個(gè)后續(xù)記錄來(lái)說(shuō),任何后續(xù)日志記錄事件都可能發(fā)生,每個(gè)都與相應(yīng)的跟 蹤日志消息關(guān)聯(lián)。(1)如果輸入記錄被記入日志,那么就對(duì)于針對(duì)每個(gè)輸入記錄將那些輸入變量的 值記入文件的每個(gè)輸入變量創(chuàng)建一個(gè)日志消息。(2)如果參數(shù)被記入日志,那么就對(duì)于將這些參數(shù)的值記入文件的每個(gè)輸入變量 創(chuàng)建一個(gè)日志消息。(3)如果存在內(nèi)含規(guī)則集,那么運(yùn)行內(nèi)含規(guī)則集中的規(guī)則。那些規(guī)則將依據(jù)該邏輯 遞歸地生成日志消息。(4)如果例狀態(tài)被記入日志,那么就計(jì)算每個(gè)規(guī)則中對(duì)于每個(gè)例的值并且記入日
ο(5)使用鏈在一起的if-then-else (如果-則-否則)邏輯或switch (跳轉(zhuǎn))聲 明或者內(nèi)部查找來(lái)運(yùn)行實(shí)際的規(guī)則邏輯。一旦得知哪個(gè)規(guī)則例觸發(fā),就針對(duì)觸發(fā)的規(guī)則例 創(chuàng)建日志消息。(6)同樣,一旦得知哪個(gè)規(guī)則例觸發(fā),就將值寫入規(guī)則的輸出變量并且同時(shí),針對(duì) 將分配的值記入文件的每個(gè)輸出(例如,經(jīng)變換的記錄中的值)創(chuàng)建日志消息。(7)在評(píng)估這些規(guī)則由子例程操控的同時(shí)查找參考完成。子例程邏輯將執(zhí)行查找, 然后針對(duì)從查找文件讀取的每個(gè)變量創(chuàng)建日志消息,所述變量將用作關(guān)鍵字的值和找到的 所有查找變量的值記入文件。然后,子例程將返回查找值到主邏輯。查找子例程將保留一 個(gè)表示其是否已經(jīng)被調(diào)用的布爾變量,以避免對(duì)于同一個(gè)關(guān)鍵字生成重復(fù)的日志事件。(8)如果沒(méi)有規(guī)則例觸發(fā),那么就將運(yùn)行最后的else分句(或者用于跳轉(zhuǎn)聲明的 缺省分句)以分配缺省輸出值。同時(shí),將針對(duì)將分配的值記入文件的每個(gè)輸出創(chuàng)建日志消 肩、ο可以通過(guò)各種方法使用從日志端口提供的日志記錄信息。例如,在某些情況下,對(duì) 于給定場(chǎng)景(scenario),與用作測(cè)試數(shù)據(jù)集的數(shù)據(jù)集關(guān)聯(lián)的輸入記錄的數(shù)目可以大于所期 望的數(shù)目,諸如在測(cè)試某個(gè)圖中的數(shù)據(jù)處理組件的規(guī)則集中使用的測(cè)試數(shù)據(jù)集。來(lái)自日志 端口的日志記錄信息可以在圖的初始運(yùn)行期間由圖的組件處理。這些組件可以檢查日志及 記錄信息以確定對(duì)于規(guī)則集的規(guī)則中的每個(gè)規(guī)則例,提供至少一個(gè)跟蹤日志消息所需要的 輸入記錄的最小集。例如,這些組件識(shí)別第一輸入記錄,在每個(gè)規(guī)則中的各個(gè)例針對(duì)該第一 輸入記錄被觸發(fā)。然后將那些被標(biāo)識(shí)的記錄與縮減的測(cè)試數(shù)據(jù)集相關(guān)聯(lián)地存儲(chǔ),在該縮減 的測(cè)試數(shù)據(jù)集中已經(jīng)過(guò)濾出所有其它輸入記錄。經(jīng)縮減的測(cè)試數(shù)據(jù)集仍然使規(guī)則集中相同 規(guī)則和規(guī)則例的能夠測(cè)試,但是可以小得多并且更加有效地用于測(cè)試。
交疊分析在一些例子中,如上所述,當(dāng)用戶相對(duì)于規(guī)則集運(yùn)行測(cè)試數(shù)據(jù)集時(shí),可以跟蹤每個(gè) 被觸發(fā)的規(guī)則,也就是說(shuō),如果較高優(yōu)先級(jí)的規(guī)則例的未使得其所有輸入條件得到滿足,則 使其所有輸入條件都得到滿足并且已經(jīng)產(chǎn)生輸出的規(guī)則例。在處理了測(cè)試數(shù)據(jù)之后,系統(tǒng) 可以對(duì)測(cè)試輸出數(shù)據(jù)進(jìn)行后處理并且生成未由任何一個(gè)測(cè)試?yán)|發(fā)的每個(gè)規(guī)則或者規(guī)則 例的列表。該信息可以疊加在編輯器中規(guī)則的顯示上以快速地示出哪些規(guī)則被觸發(fā)或者未 被觸發(fā)。通過(guò)該信息,用戶能夠查找被其它規(guī)則模糊掉的可能規(guī)則,也就是說(shuō),重疊的規(guī)則。 也可以針對(duì)各個(gè)規(guī)則例示出計(jì)數(shù)。計(jì)數(shù)可能只是在得知規(guī)則例是否被觸發(fā)上有用,特別是 對(duì)于調(diào)節(jié)值以實(shí)現(xiàn)輸出的期望分布以及對(duì)于識(shí)別對(duì)調(diào)整性能最可能的規(guī)則例。變換牛成過(guò)稈通過(guò)將各個(gè)規(guī)則集轉(zhuǎn)換為變換來(lái)在應(yīng)用(圖)中評(píng)估商務(wù)規(guī)則。然后,變換附著 于圖中的某一組件。這些組件可以是包含以特定方式鏈接以便運(yùn)行變換的一組標(biāo)準(zhǔn)組件的 子圖。然后,這些子圖可以通過(guò)附加組件被使用,例如,對(duì)于聯(lián)合和上卷使用關(guān)鍵字??梢砸远喾N方式從商務(wù)規(guī)則中生成變換碼。在變換的內(nèi)部沒(méi)有被設(shè)計(jì)成為用戶編 輯型的例子中,生成過(guò)程可能導(dǎo)致難以理解但是比逐個(gè)應(yīng)用規(guī)則更加有效地實(shí)現(xiàn)規(guī)則的變 換。在某些情況下,專用的查找文件或者其它技術(shù)可以用于提高所生成的變換的性能。如 何生成變換的一些細(xì)節(jié)可以存儲(chǔ)在一個(gè)部署中。可以在多個(gè)圖中使用的規(guī)則集可以具有針 對(duì)其不同的可能用戶的多個(gè)部署。規(guī)則集也可以包含規(guī)則超集(super set of rules)—— 僅其中的一些為各個(gè)部署所需要——其具有識(shí)別當(dāng)生成變換時(shí)使用哪些規(guī)則的部署。如果 規(guī)則具有許多常數(shù)值,極少量表達(dá)式(如果有的話),那么不使用if then else邏輯,而可 以使用查找表。在這種情況下,查找表是規(guī)則的一部分(沒(méi)有分別地保存)。例如,考慮該 規(guī)則
權(quán)利要求
1.一種方法,包括接收針對(duì)基于圖的計(jì)算的至少一個(gè)規(guī)則說(shuō)明書,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù) 據(jù)流的元素而連接的數(shù)據(jù)處理組件,該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī) 則,所述規(guī)則例指定用于確定取決于輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù)處理組件的變換, 包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接口 ;以及使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù)據(jù)處理組件的運(yùn)行,根據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及存儲(chǔ)或者輸出所生成的日志信息。
2.如權(quán)利要求1所述的方法,其中,配置日志的特征包括選擇至少一個(gè)事件,將針對(duì)該 至少一個(gè)事件而生成日志信息。
3.如權(quán)利要求2所述的方法,其中,根據(jù)與接收到的規(guī)則說(shuō)明書關(guān)聯(lián)的規(guī)則,所述至少 一個(gè)事件與數(shù)據(jù)流中的變換記錄關(guān)聯(lián)。
4.如權(quán)利要求3所述的方法,其中,所述至少一個(gè)事件包括識(shí)別將被變換的記錄中的 錯(cuò)誤。
5.如權(quán)利要求3所述的方法,其中,所述至少一個(gè)事件包括對(duì)于給定記錄滿足規(guī)則例 的條件。。
6.如權(quán)利要求5所述的方法,其中,對(duì)于給定記錄滿足規(guī)則例的條件包括基于給定記 錄中的值滿足邏輯表達(dá)式。
7.如權(quán)利要求5所述的方法,其中,對(duì)于給定記錄滿足規(guī)則例的條件包括將記錄中的 值與關(guān)聯(lián)于所述規(guī)則例的值相比較。
8.如權(quán)利要求1所述的方法,其中,生成日志信息包括生成分別包括規(guī)則集的細(xì)節(jié)的一個(gè)或多個(gè)圖例日志消息,該規(guī)則集包含由接收到的規(guī) 則說(shuō)明書定義的規(guī)則,以及生成多個(gè)跟蹤日志消息,其中,每個(gè)跟蹤日志消息與圖例記錄關(guān)聯(lián)并且根據(jù)與接收到 的規(guī)則說(shuō)明書關(guān)聯(lián)的規(guī)則描述與數(shù)據(jù)流中的變換記錄關(guān)聯(lián)的至少一個(gè)事件。
9.如權(quán)利要求8所述的方法,其中,描述事件的跟蹤日志消息使用圖例記錄中的索引 描述數(shù)據(jù)處理組件的至少一個(gè)輸入或輸出。
10.如權(quán)利要求8所述的方法,其中,生成一個(gè)或多個(gè)圖例消息包括每次運(yùn)行基于圖的 計(jì)算生成一個(gè)圖例消息。
11.如權(quán)利要求1所述的方法,其中,使用生成的變換的數(shù)據(jù)處理組件根據(jù)與接收到的 規(guī)則說(shuō)明書關(guān)聯(lián)的第一規(guī)則對(duì)數(shù)據(jù)流中的輸入記錄進(jìn)行變換。
12.如權(quán)利要求11所述的方法,其中,基于所跟蹤的運(yùn)行生成日志信息包括針對(duì)指定 準(zhǔn)則被滿足的第一規(guī)則的各個(gè)規(guī)則例生成日志消息。
13.如權(quán)利要求11所述的方法,其中,基于所跟蹤的運(yùn)行生成日志信息包括生成日志 消息是針對(duì)由所述數(shù)據(jù)處理組件使用所生成的變換生成的經(jīng)變換的記錄中的每個(gè)值的。
14.如權(quán)利要求11所述的方法,其中,存儲(chǔ)或者輸出生成的日志信息包括從所述一個(gè) 或多個(gè)數(shù)據(jù)處理組件的日志端口輸出日志消息。
15.如權(quán)利要求14所述的方法,其中,存儲(chǔ)或者輸出生成的日志信息還包括從數(shù)據(jù)處 理組件中的日志端口接收日志消息的數(shù)據(jù)流并且存儲(chǔ)至少部分地源自所述日志消息的日 志fn息ο
16.如權(quán)利要求15所述的方法,還包括過(guò)濾接收到的日志消息的數(shù)據(jù)流并且存儲(chǔ)源自 日志消息的子集的日志信息。
17.如權(quán)利要求14所述的方法,其中,存儲(chǔ)或者輸出所生成的日志信息還包括從數(shù)據(jù)處理組件中的日志端口接收指示指定準(zhǔn)則被滿足的、被觸發(fā)的規(guī)則例的日志消 息的數(shù)據(jù)流,檢查所述日志消息以確定為每個(gè)規(guī)則的每個(gè)規(guī)則例提供至少一個(gè)日志消息的經(jīng)縮減 的輸入記錄集,所述規(guī)則通過(guò)由全部輸入記錄觸發(fā)的規(guī)則說(shuō)明書所定義,以及 存儲(chǔ)經(jīng)縮減的輸入記錄集。
18.一種計(jì)算機(jī)系統(tǒng),包括存儲(chǔ)系統(tǒng),存儲(chǔ)針對(duì)基于圖的計(jì)算的至少一個(gè)規(guī)則說(shuō)明書,該基于圖的計(jì)算具有通過(guò) 鏈接表示數(shù)據(jù)流的元素而連接的數(shù)據(jù)處理組件,該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則 例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定用于確定取決于輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;生成器,被配置為基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù) 處理組件的變換,包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接口 ;以及 基于圖的計(jì)算系統(tǒng),被配置為使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括 在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù)據(jù)處理組件的運(yùn)行, 根據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及 存儲(chǔ)或者輸出所生成的日志信息。
19.一種計(jì)算機(jī)程序,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,該計(jì)算機(jī)程序包括導(dǎo)致計(jì)算機(jī)系統(tǒng)執(zhí) 行以下步驟的指令接收針對(duì)基于圖的計(jì)算的至少一個(gè)規(guī)則說(shuō)明書,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù) 據(jù)流的元素而連接的數(shù)據(jù)處理組件,該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī) 則,所述規(guī)則例指定用于確定取決于輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù)處理組件的變換, 包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接口;以及 使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括 在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù)據(jù)處理組件的運(yùn)行, 根據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及 存儲(chǔ)或者輸出所生成的日志信息。
20.一種計(jì)算機(jī)系統(tǒng),包括用于接收針對(duì)基于圖的計(jì)算的至少一個(gè)規(guī)則說(shuō)明書的裝置,該基于圖的計(jì)算具有通過(guò) 鏈接表示數(shù)據(jù)流的元素而連接的數(shù)據(jù)處理組件,該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則 例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定用于確定取決于輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則;用于基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù)處理組件的 變換的裝置,包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接口 ;以及用于使用 所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流的裝置,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中的數(shù)據(jù)處理組件的運(yùn)行, 根據(jù)所配置的日志特征,基于所跟蹤的運(yùn)行生成日志信息,以及 存儲(chǔ)或者輸出所生成的日志信息。
全文摘要
針對(duì)基于圖的計(jì)算接收至少一個(gè)規(guī)則說(shuō)明書,該基于圖的計(jì)算具有通過(guò)鏈接表示數(shù)據(jù)流的元素而連接的數(shù)據(jù)處理組件。該規(guī)則說(shuō)明書定義分別與一個(gè)或多個(gè)規(guī)則例關(guān)聯(lián)的規(guī)則,所述規(guī)則例指定用于確定根據(jù)輸入數(shù)據(jù)的一個(gè)或多個(gè)輸出值的準(zhǔn)則。基于接收到的規(guī)則說(shuō)明書生成針對(duì)基于圖的計(jì)算中的至少一個(gè)數(shù)據(jù)處理組件的變換,包括提供用于配置與所生成的變換關(guān)聯(lián)的日志的特征的接口。使用所生成的變換來(lái)變換至少一個(gè)數(shù)據(jù)流,包括在運(yùn)行時(shí)跟蹤基于圖的計(jì)算中數(shù)據(jù)處理組件的運(yùn)行,根據(jù)所配置的日志特征基于所跟蹤的運(yùn)行生成日志信息,以及存儲(chǔ)或者輸出所生成的日志信息。
文檔編號(hào)G06F17/00GK102138139SQ200980133372
公開日2011年7月27日 申請(qǐng)日期2009年6月30日 優(yōu)先權(quán)日2008年6月30日
發(fā)明者喬爾·古爾德, 戴維·菲利莫爾, 斯科特·斯圖德爾 申請(qǐng)人:起元技術(shù)有限責(zé)任公司