稱(邏輯名稱)。商務(wù)名稱是規(guī)則中使用的名稱。在一些例子中,施加 限制以使得兩個(gè)輸入變量不可以具有相同的名稱,兩個(gè)輸出變量不可以具有相同的名稱, 來自內(nèi)含規(guī)則集的兩個(gè)輸出不可以具有相同的名稱,并且同一個(gè)查找文件中兩個(gè)查找變量 不可以具有相同的名稱。輸入變量可以具有與輸出變量相同的名稱。在這種情況下,用戶 接口可以基于上下文或者通過使用諸如在輸出變量名稱的前面的"out. "這樣的前綴消除 輸入與輸出的歧義。不同查找文件中的查找變量可以具有相同的名稱。因此,使用諸如查 找文件本身的名稱這樣的前綴將消除它們的歧義。
[0088] 2.簡(jiǎn)單類型。在一些例子中,可以支持四個(gè)基本類型一一字串、數(shù)字、日期和日 期時(shí)間。這些相應(yīng)于類型字串(int)、十進(jìn)制(20)、日期("YYYY-MM-DD")和日期時(shí)間 ("YYYY-MM-DDHH24:MI:SS.nnnnnn")。在變換中使用的在基本類型與實(shí)際類型之間的轉(zhuǎn) 換將與商務(wù)規(guī)則的編輯分開進(jìn)行處理,例如,通過所生成的變換組件。
[0089] 3.缺省值。缺省值僅為輸出變量所需要。它是一個(gè)在以下情況時(shí)使用的值:(1) 在規(guī)則中的輸出列中對(duì)于該輸出存在空單元格,或者(2)當(dāng)沒有規(guī)則觸發(fā)以計(jì)算該輸出的 值時(shí)。只要輸出變量可為空,缺省值就可以是NULL(空)(空單元格被解釋為NULL)。
[0090] 缺省值是表達(dá)式,就如在規(guī)則表達(dá)式表中的輸出列中所使用的那樣。這意味著缺 省值可以指代輸入變量或輸出常量或者包含表達(dá)式。缺省值也可以指代其它輸出,只要沒 有引入迂回(circularity)。
[0091] 4.技術(shù)名稱(物理名稱)或表達(dá)式。它是指定變量的表達(dá)式。有可能使用表達(dá)式 而非字段名稱用于輸入和包括的變量(在一些例子中,不允許對(duì)于輸出變量使用表達(dá)式)。 在向量的情況中,表達(dá)式應(yīng)該是充分證明資格的(qualified)。
[0092] 當(dāng)處理提示的(prompted)變量以及來自內(nèi)含規(guī)則集的輸入和輸出變量時(shí),與變 量關(guān)聯(lián)的技術(shù)名稱實(shí)際上只是共享的規(guī)則集內(nèi)部所使用的商務(wù)名稱。當(dāng)處理僅內(nèi)部使用的 輸出變量時(shí)(在一個(gè)規(guī)則中計(jì)算并且在后來的規(guī)則中使用的中間變量),技術(shù)名稱可以為 空。
[0093] 5.可選說明和注解。
[0094] 常量
[0095] 各種變量表包括對(duì)于常量以及變量的映射。常量相應(yīng)于C++中的enums。系統(tǒng) 可以支持最初來自有效值和無效值的常量值,以及最初來自有效范圍和無效范圍的常量范 圍。另外,可以創(chuàng)建代表區(qū)別性值和/或范圍的集合的常量。
[0096] 常量與變量關(guān)聯(lián)。這意味著常量的商務(wù)名稱不一定在整個(gè)規(guī)則集上是唯一的。編 輯器將基于在規(guī)則中常量出現(xiàn)在哪一列而正常知道對(duì)于任一常量的上下文;然而,對(duì)于用 戶來說有可能選擇屬于表達(dá)式中不同變量的常量。在那種情況下,常量將通過變量名稱來 證明資格(例如,"航線等級(jí).商務(wù)")。
[0097] 當(dāng)計(jì)算輸出變量時(shí),僅僅使用單個(gè)值常量(為輸出字段分配范圍沒有意義)。
[0098] 常量具有下列屬性,并且將以表格形式呈現(xiàn)給用戶(變量和常量可以混合,類似 于將一個(gè)表嵌入到另一個(gè)表內(nèi)部)。
[0099] 1.變量名稱。(多個(gè))常量應(yīng)用于一個(gè)變量。變量名稱實(shí)際上是關(guān)聯(lián)變量本身的 一部分。
[0100] 2.商務(wù)名稱。商務(wù)名稱是規(guī)則中使用的名稱。該名稱不需要一定是值標(biāo)識(shí)符,具 體地說,允許內(nèi)部間隔和標(biāo)點(diǎn)。在某些情況下,用于常量的商務(wù)名稱僅在它們所應(yīng)用的變量 內(nèi)是唯一的。
[0101] 3.常量類型。值、范圍或集合中的一個(gè)。如前所述,范圍和集合在用于對(duì)比(輸 入)而非賦值(輸出)時(shí)是合法的。
[0102] 4.對(duì)于值來說:實(shí)際值。在本例中,字串被引用而數(shù)字則不。在缺省形式下引用 日期和日期-時(shí)間(例如,"YYYY-MM-DD")。也允許使用表達(dá)式,只要該表達(dá)式返回能夠被 自動(dòng)變換為變量類型的簡(jiǎn)單類型。
[0103] 當(dāng)常量是對(duì)于內(nèi)含規(guī)則集的輸入或輸出表的一部分時(shí),不存在值。而是,值是對(duì)于 相應(yīng)輸入或輸出變量的關(guān)聯(lián)常量的商務(wù)名稱。
[0104] 5.對(duì)于范圍來說:最小值和最大值。兩者都是常量或表達(dá)式,正如上面文件的實(shí) 際值那樣。范圍被用作在規(guī)則中進(jìn)行比較的簡(jiǎn)略的表達(dá)方式。對(duì)于范圍來說只允許等同性 比較,并且系統(tǒng)將范圍翻譯為"變量 >=最小值(variable〉=minimum)和變量〈=最大值 (variable〈 =maximum)"。如果沒有指定最小值,那么該比較的一部分將被跳過。同樣地 用于最大值。該范圍通過逗號(hào)隔開最小值和最大值來存儲(chǔ)。
[0105] 6.對(duì)于集合來說:以逗號(hào)隔開的值列表。列表的每個(gè)元素都是一個(gè)常量或表達(dá) 式,類似于上面文件中的實(shí)際值。對(duì)于集合只允許等同性比較,并且系統(tǒng)將集合翻譯為以 "[值的向量列表]的變量成員(variablememberof[vectorlistofvalues])"形式的 表達(dá)式。
[0106]7.可選說明和注解。
[0107] 當(dāng)處理來自共享規(guī)則集的提示變量時(shí),也提示常量。在示出對(duì)于共享規(guī)則集的輸 入和輸出變量的表中,也示出與那些變量關(guān)聯(lián)的常量。對(duì)于那些常量的缺省映射是提示的 信息的一部分,但是用戶能夠推翻(override)常量值。
[0108] 系統(tǒng)將檢測(cè)因?yàn)椴黄ヅ涑A慷谑褂米兞恐泻螘r(shí)存在可能的沖突。具體地說,如 果(1)任一變量的值被復(fù)制到另一個(gè)變量,(2)如果兩個(gè)變量都定義有常量,以及(3)常量 的集合在名稱和值兩個(gè)方面都不一樣,那么將在用戶需要將一個(gè)變量的值翻譯為其它值時(shí) 生成錯(cuò)誤。源變量包括輸入變量、查找變量、來自內(nèi)含規(guī)則集的輸出以及用作輸入的輸出變 量。目標(biāo)變量包括輸出變量以及到內(nèi)含規(guī)則集的輸入。在規(guī)則表達(dá)式中或者在變量表中可 能發(fā)生賦值。
[0109] 奪量的棑序
[0110] 為了避免迂回邏輯,系統(tǒng)強(qiáng)制變量和規(guī)則的嚴(yán)格排序。全局排序的例子如下:
[0111] 輸入變量和參數(shù)。
[0112] 第一內(nèi)含規(guī)則集的輸入映射。
[0113] 第一內(nèi)含規(guī)則集的輸出值。
[0114] …
[0115] 第n個(gè)內(nèi)含規(guī)則集的輸入映射。
[0116] 第n個(gè)的內(nèi)含規(guī)則集的輸出值。
[0117] 第一查找文件的缺省關(guān)鍵字值。
[0118] 第一查找文件的輸出字段。
[0119] …
[0120] 第n個(gè)查找文件的缺省關(guān)鍵字值。
[0121] 第n個(gè)查找文件的輸出字段。
[0122] 所有輸出變量的缺省值。
[0123] 每個(gè)項(xiàng)目的計(jì)算都使用在前步驟中計(jì)算的值。這意味著,例如,第一內(nèi)含規(guī)則可以 參照它的映射表中的輸入變量和參數(shù)。然而,第二內(nèi)含規(guī)則可以將它的輸入映射到從第一 內(nèi)含規(guī)則計(jì)算得到的輸出。類似地,對(duì)于每個(gè)輸出變量的缺省值在任一規(guī)則之前被計(jì)算,因 此它們基于輸入變量、參數(shù)、查找文件或者來自任一內(nèi)含規(guī)則的輸出的值。當(dāng)?shù)搅藢?shí)際上計(jì) 算規(guī)則的輸出的時(shí)間時(shí),按次序評(píng)估規(guī)則以使得較晚的規(guī)則可以使用從較早的規(guī)則計(jì)算得 到的值。
[0124]將數(shù)據(jù)集鏈接到奪量
[0125] 在一些例子中,輸入變量表直接來自輸入數(shù)據(jù)集記錄格式,而商務(wù)名稱來自有關(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è)。
[0126] 當(dāng)一個(gè)規(guī)則集被首次創(chuàng)建時(shí),輸入變量表是空的。一旦用戶識(shí)別出輸入數(shù)據(jù)集,輸 入變量表就被輸入數(shù)據(jù)集的元數(shù)據(jù)自動(dòng)填充。(相同的邏輯應(yīng)用于輸出變量和輸出數(shù)據(jù)集, 但是為簡(jiǎn)單起見,本討論的余下部分將集中在輸入數(shù)據(jù)集上。)
[0127] 為簡(jiǎn)單起見,在本說明書中使用單數(shù)形式的術(shù)語"輸入數(shù)據(jù)集"。存在能夠鏈接到 輸入變量的零個(gè)或多個(gè)輸入數(shù)據(jù)集,以及能夠鏈接到輸出數(shù)據(jù)集的零個(gè)或多個(gè)輸入數(shù)據(jù)集 的單獨(dú)的集合。具體地說,輸入變量表具有用于商務(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)可能無法算出第二數(shù)據(jù)集 和后續(xù)數(shù)據(jù)集中每個(gè)字段映射到哪一變量。在這些例子中,用戶能夠手動(dòng)地校正任一缺失 的信息。
[0128] 當(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[0]")。用戶能夠?qū)⑵渫品@?,?duì)于一個(gè)多輸出變換來說,用戶可以 將技術(shù)名稱改變?yōu)閕n.vect[index]。或者,用戶可以創(chuàng)建與該向量的其它元素相應(yīng)的附加 輸入變量,如果該向量長(zhǎng)度固定的話。聯(lián)合體和向量在輸出數(shù)據(jù)集中可能得不到支持(不 會(huì)針對(duì)它們創(chuàng)建輸出變量)。在一些例子中,多輸出組件的變化可以輸出一個(gè)輸出向量而非 多個(gè)輸出記錄。
[0129] 在一些例子中,商務(wù)名稱由元數(shù)據(jù)計(jì)算得來。用于確定一個(gè)字段的商務(wù)名稱的邏 輯的例子如下:
[0130] 如果字段(物理元素PhysicalElement)具有display_name(顯示名稱),那么該 字段的display_name被用作商務(wù)名稱。
[0131] 否則,如果字段具有邏輯元素(LogicalElement)并且邏輯元素具有display_ name,那么該邏輯元素的display_name被用作商務(wù)名稱。
[0132] 否則,如果字段具有邏輯元素,那么該邏輯元素的名稱被用作商務(wù)名稱。
[0133] 否則,商務(wù)名稱從技術(shù)名稱計(jì)算得到。
[0134] 如果存在沖突(重名),那么只有一個(gè)商務(wù)名稱將被分配。其它字段將不分配以任 何商務(wù)名稱。
[0135] 在一些例子中,在規(guī)則集和數(shù)據(jù)集元數(shù)據(jù)之間不存在動(dòng)態(tài)鏈接。如果用戶改變?cè)?數(shù)據(jù)數(shù)據(jù)(例如,重新命名邏輯元素),那么那些改變不被系統(tǒng)自動(dòng)獲得。在一些例子中,數(shù) 據(jù)之間的雙向關(guān)系可以用于使這些改變能夠被檢測(cè)到。
[0136] 如果用戶添加第二數(shù)據(jù)集到規(guī)則集,那么系統(tǒng)將設(shè)法使用如上所列出的、相同的 物理到邏輯映射規(guī)則,來填充用于每一個(gè)商務(wù)名稱的字段。如果變量無法被映射,那么那些 變量的技術(shù)名詞對(duì)于添加的數(shù)據(jù)集將變?yōu)榭詹⑶矣脩魧⒈仨毷謩?dòng)地填寫字段名稱或者表 達(dá)式。可用字段將被列在用戶接口中的下拉菜單中。
[0137] 在從數(shù)據(jù)集元數(shù)據(jù)創(chuàng)建輸入變量表的同時(shí),可以將常量添加到輸入變量表,也 可從數(shù)據(jù)集元數(shù)據(jù)添加。系統(tǒng)將創(chuàng)建用于所有有效值和無效值以及所有與認(rèn)證說明書 (ValidationSpec)關(guān)聯(lián)的有效范圍和無效范圍的常量,該認(rèn)證說明書與每個(gè)邏輯或物理 元素關(guān)聯(lián)。
[0138] 用于確定常量的商務(wù)名稱的邏輯的例子如下:
[0139] 如果有效值(有效范圍,等等)具有display_name(顯示名稱),那么display_ name將被用作商務(wù)名稱。
[0140] 否則,如果有效值(有效范圍,等等)具有描述,那么該描述將被用作商務(wù)名稱。
[0141] 否則,常量將被包括在變量表中而無需商務(wù)名稱。
[0142] 沒有必要從數(shù)據(jù)集開始創(chuàng)建變量。創(chuàng)建輸入變量列表的第二種方法是標(biāo)識(shí)基礎(chǔ) 系統(tǒng)中的邏輯實(shí)體(LogicalEntity)。如果選擇了一個(gè)邏輯實(shí)體,那么系統(tǒng)將針對(duì)邏輯 實(shí)體中的每個(gè)邏輯組件來創(chuàng)建具有一個(gè)變量的變量表。變量的商務(wù)名稱將是邏輯組件的 display_name。如果邏輯組件具有認(rèn)證說明書,那么也將使用在前的文件規(guī)則創(chuàng)建常量。
[0143] 最后,輸入和輸出變量能夠被手動(dòng)地添加一一要么通過將它們添加到變量表,要 么通過在編輯規(guī)則的同時(shí)創(chuàng)建它們。例如,當(dāng)用戶添加一列到規(guī)則中時(shí),他選擇哪個(gè)輸入變 量應(yīng)該用于該列。但是他也能夠選擇"new-(新的)"并即時(shí)地創(chuàng)建輸入變量。然后系統(tǒng) 將提示用戶數(shù)據(jù)類型和可選注解。直到晚些時(shí)候才需要填入技術(shù)名稱。
[0144] 系統(tǒng)需要變量列表以便使規(guī)則能夠被編輯。然而,直到晚些時(shí)候才必須完成商務(wù) 名稱和技術(shù)名稱之間的映射。可以僅當(dāng)用戶準(zhǔn)備相對(duì)于外部測(cè)試文件測(cè)試整個(gè)規(guī)則或者準(zhǔn) 備實(shí)際從規(guī)則集創(chuàng)建變換時(shí)需要映射。
[0145] 內(nèi)含規(guī)貝丨丨集(includedruleset)
[0146] 在一些例子中,規(guī)則集能夠被共享。具體地說,內(nèi)含規(guī)則集被設(shè)計(jì)為包括在另一個(gè) 規(guī)則集之內(nèi)以使得其邏輯變?yōu)榘?guī)則集所生成的變換的一部分。
[0147] 雖然內(nèi)含規(guī)則集通常被特定設(shè)計(jì)為共享的,但是也能夠獨(dú)立使用內(nèi)含規(guī)則集以創(chuàng) 建變換。例如,用戶能夠創(chuàng)建針對(duì)過濾類型(filter-type)的變換計(jì)算布爾輸出的規(guī)則集。 但是同時(shí),規(guī)則集能夠被包括在另一個(gè)變換內(nèi)部并且布爾輸出(共享規(guī)則集的輸出變量, 在該包含規(guī)則集中可用)可用于計(jì)算更復(fù)雜的輸出。
[0148] 內(nèi)含規(guī)則集類似于其它類型的規(guī)則集。它們具有輸入變量和輸出變量。并且它們