背景技術:
:本說明書涉及系統(tǒng)分析。計算機用于處理大量數(shù)據(jù)。一般來說,使用至少部分地由計算機程序員編寫的計算機程序來處理數(shù)據(jù)。這些數(shù)據(jù)處理系統(tǒng)可以是復雜的。業(yè)務和技術要求可以要求程序改變。實現(xiàn)改變要求分配人員以作出改變。技術實現(xiàn)要素:一般來說,在方面1,方法包括如下動作:接收與至少兩個邏輯數(shù)據(jù)集有關的信息,與邏輯數(shù)據(jù)集有關的信息用于針對各個邏輯數(shù)據(jù)集而標識該邏輯數(shù)據(jù)集中的至少一個字段的標識符以及與該字段有關的格式信息;接收與轉換有關的信息,該信息用于標識轉換要從中接收數(shù)據(jù)的第一邏輯數(shù)據(jù)集以及要被提供轉換后的數(shù)據(jù)的第二邏輯數(shù)據(jù)集;接收對邏輯數(shù)據(jù)集的字段至少之一的一個或多個提出的改變;基于與所述轉換有關的信息以及與所述第一邏輯數(shù)據(jù)集和所述第二邏輯數(shù)據(jù)集有關的信息來分析所述一個或多個提出的改變;基于所述分析來計算所提出的改變的一個或多個度量;以及存儲與所述一個或多個度量有關的信息。該方面的其它實施例包括對應的計算機系統(tǒng)、設備以及記錄在一個或多個計算機存儲裝置上的計算機程序,其各自被配置為執(zhí)行所述方法的動作。一個或多個計算機的系統(tǒng)可被配置為通過在系統(tǒng)上安裝在操作中使該系統(tǒng)執(zhí)行特定動作的軟件、固件、硬件或其組合來執(zhí)行該動作。一個或多個計算機程序可被配置為通過包括在由數(shù)據(jù)處理設備執(zhí)行時使該設備執(zhí)行特定動作的指令來執(zhí)行該動作。所述方法包括根據(jù)方面1的方面2,其中,所計算的度量提供直接影響的測量結果。所述方法包括根據(jù)方面1或2的方面3,其中,所計算的度量提供間接影響的測量結果。所述方法包括根據(jù)權利要求1、2或3的方面4,其中,所提出的改變是包括數(shù)據(jù)集中的字段格式的改變或轉換的改變的組之一。所述方法包括根據(jù)方面1、2、3或4的方面5,其中,所述轉換包括要應用于來自所述第一邏輯數(shù)據(jù)集的數(shù)據(jù)的一個或多個規(guī)則,以及分析所述一個或多個提出的改變還基于所述一個或多個規(guī)則。所述方法包括根據(jù)方面1、2、3、4或5的方面6,其中,所述方法還包括該方面的其它實施例的動作,包括基于所述度量將成本與所提出的改變相關聯(lián)。方面可以包括以下優(yōu)點中的一個或多個優(yōu)點??梢怨烙嬜鞒龈淖兊姆秶统杀???梢詷俗R改變將影響程序的位置??梢赃m當?shù)胤峙滟Y源。根據(jù)以下描述和權利要求書,本發(fā)明的其它特征和優(yōu)點將變得顯而易見。附圖說明圖1示出針對多個可執(zhí)行程序的數(shù)據(jù)沿襲(datalineage)的示例。圖2示出示例規(guī)則集以及該規(guī)則集的輸入。圖3示出人可讀規(guī)則集300的示例。圖4示出將規(guī)則從人可讀形式轉換為包含機器可讀代碼的轉換的處理。圖5示出基于帶注釋的代碼而生成報告的報告生成器。圖6示出可以使用影響分析技術的數(shù)據(jù)處理系統(tǒng)的示例。圖7是典型影響分析過程的流程圖。圖8a是示出主要元件的相互關系的本發(fā)明的一個實施例的框圖。圖8b是數(shù)據(jù)流圖的框圖。圖9是包含具有指定運行時參數(shù)的上卷組件和排序組件904的典型圖的框圖。圖10是表示將與圖相關聯(lián)的運行時參數(shù)網格的圖形對話框的一個實施例的示圖。圖11是總結使用運行時參數(shù)的處理的流程圖。圖12是由關鍵字提示生成的圖形對話框的一個實施例的示圖。圖13是由過濾提示生成的圖形對話框的一個實施例的示圖。圖14是由上卷提示生成的圖形對話框的一個實施例的示圖。圖15是由重新格式化提示生成的圖形對話框的一個實施例的示圖。圖16a是第一個圖中的合并聯(lián)接(mergejoin)組件聯(lián)接來自文件a和b的數(shù)據(jù)并將結果輸出至輸出文件的框圖。圖16b是第二個圖中的上卷(rollup)組件聚合來自文件a的數(shù)據(jù)并將結果輸出至輸出文件的框圖。圖16c是圖中的合并聯(lián)接(mergejoin)組件聯(lián)接來自文件a和b的數(shù)據(jù)并且上卷(rollup)組件聚合所產生的數(shù)據(jù)并將最終結果輸出至輸出文件的框圖。圖17是呈現(xiàn)具有條件解釋控件的條件的圖形對話框的一個實施例的示圖。圖18是示出發(fā)生中毒的情況的圖的示圖。圖19是總結包括完全移除(removecompletely)條件組件的圖的運行時準備的處理的流程圖。圖20是總結包括針對本發(fā)明的特定實施例的用流代替(replacewithflow)條件組件的圖的運行時準備的處理的流程圖。圖21是表示在沒有運行時參數(shù)的情況下的上卷應用的圖的示圖。圖22是表示圖21中的上卷應用的運行時參數(shù)化版本的圖的示圖。圖23是表示針對圖22的示例應用的運行時參數(shù)網格的圖形對話框的一個實施例的示圖。圖24a是表示由web界面(webinterface)根據(jù)圖23的參數(shù)網格中的信息而生成的表單的圖形對話框的一個實施例的示圖。圖24b是用戶用參數(shù)值填寫的圖24a中的表單的示圖。圖25是表示運行時參數(shù)化上卷和聯(lián)接應用的圖的示圖。圖26是表示針對圖25的示例應用的運行時參數(shù)網格的圖形對話框的一個實施例的示圖。圖27是表示由web界面(webinterface)根據(jù)圖26的參數(shù)網格中的信息而生成的表單的圖形對話框的一個實施例的示圖。圖28是表示運行時參數(shù)化上卷-聯(lián)接-排序應用的圖的示圖。圖29是表示針對圖28中所示的示例應用的運行時參數(shù)網格的圖形對話框的一個實施例的示圖。圖30a是傳播元數(shù)據(jù)的圖的示圖。圖30b是針對圖30a的圖中的組件的子圖的示圖。圖31是針對元數(shù)據(jù)傳播處理的流程圖。圖32a是包括具有組件內和組件間相關性的參數(shù)的圖。圖32b和32c是表示圖32a中的圖的參數(shù)之間的相關性的相關圖。圖33是修改后的拓撲排序處理的示圖。圖34a是示出通過現(xiàn)有技術薪資系統(tǒng)的簡化樣本示例的數(shù)據(jù)流的示圖。圖34b是根據(jù)本發(fā)明的與圖34a中的圖相對應的圖。圖35是根據(jù)本發(fā)明的驅動程序的框圖。圖36是根據(jù)本發(fā)明的用于執(zhí)行圖的方法的流程圖。圖37a和37b是圖36中所示的方法的步驟的流程圖。圖38a、38b、38c、38d、38e、38f、38g和38h是圖36中所示的方法的步驟的流程圖。圖39是圖36中所示的方法的步驟的流程圖。圖40是圖36中所示的方法的步驟的流程圖。圖41是根據(jù)本發(fā)明的示出插入源適配器的步驟的流程圖。圖42a是說明圖的框圖。圖42b示出根據(jù)本發(fā)明的源適配器的插入。圖43是本發(fā)明所適用的示例圖的第一階段。圖44是本發(fā)明所適用的示例圖的第二階段。圖45是本發(fā)明所適用的示例圖的第二階段。圖46是本發(fā)明所適用的示例圖的第三階段。圖47是本發(fā)明所適用的示例圖的第四階段。圖48是本發(fā)明所適用的示例圖的第五階段。圖49是本發(fā)明所適用的示例圖的第六階段。具體實施方式一般地,數(shù)據(jù)處理系統(tǒng)可以從源讀取數(shù)據(jù),對數(shù)據(jù)執(zhí)行操作以產生新數(shù)據(jù),并將新數(shù)據(jù)存儲在數(shù)據(jù)存儲器中。數(shù)據(jù)處理系統(tǒng)的復雜度從微不足道到極其復雜不等。在較復雜的系統(tǒng)中,對數(shù)據(jù)處理系統(tǒng)作出的改變可具有寬范圍的可能難以確定的影響。為了確定對系統(tǒng)作出改變的影響,確定系統(tǒng)中直接受到改變影響的部分以及系統(tǒng)中間接受到改變影響的部分是有幫助的。一般來說,系統(tǒng)中直接受到改變影響的部分可能需要個人手動地調整系統(tǒng)。例如,可能需要程序員來改變應用的內容和行為。一般來說,系統(tǒng)中間接受到改變影響的部分可能要求對這些部分進行測試,以確保程序員作出的改變不會對應用的行為產生不利影響。為了確定改變范圍,分析系統(tǒng)以確定數(shù)據(jù)如何流經系統(tǒng)。還分析系統(tǒng)以確定對系統(tǒng)所使用的數(shù)據(jù)或該數(shù)據(jù)的處理的改變會如何影響系統(tǒng)的其它部分。圖1示出針對多個組件的數(shù)據(jù)沿襲100的示例。組件可以包括邏輯數(shù)據(jù)集和轉換。轉換可以例如是數(shù)據(jù)流圖、java程序、經編譯的可執(zhí)行程序或其任何組合。一般來說,轉換可以接受輸入數(shù)據(jù)并且可以生成輸出數(shù)據(jù)。例如,圖1的104接受來自邏輯數(shù)據(jù)集1102和邏輯數(shù)據(jù)集2103的輸入數(shù)據(jù),并生成被提供至邏輯數(shù)據(jù)集2的輸出數(shù)據(jù)。一般來說,邏輯數(shù)據(jù)集表示存儲數(shù)據(jù)的一個或多個物理數(shù)據(jù)集。物理數(shù)據(jù)集可以包括可每天變化的唯一數(shù)據(jù)。在一些實現(xiàn)中,具有不同數(shù)據(jù)的物理數(shù)據(jù)集可以存儲在單獨的文件中。例如,11月8日的外匯匯率數(shù)據(jù)的數(shù)據(jù)集可以存儲在文件“exchangerate_11_08”中,11月9日的外匯匯率數(shù)據(jù)的數(shù)據(jù)集可以存儲在文件“exchangerate_11_09”中,然而,11月8日的匯率數(shù)據(jù)的數(shù)據(jù)集和11月9日的匯率數(shù)據(jù)的數(shù)據(jù)集兩者有共同點。例如,兩個數(shù)據(jù)集共享共同的數(shù)據(jù)格式。邏輯數(shù)據(jù)集使得程序或一系列程序能夠被構建為獨立于物理數(shù)據(jù)集的特定內容來執(zhí)行對這些數(shù)據(jù)集的操作。一般來說,與邏輯數(shù)據(jù)集有關的信息包括不隨數(shù)據(jù)集中存儲的數(shù)據(jù)變化的數(shù)據(jù)集的屬性的信息。例如,與邏輯數(shù)據(jù)集有關的信息可以包括字段名稱、數(shù)據(jù)類型、記錄格式、約束和其它特征。邏輯數(shù)據(jù)集可被分類為數(shù)據(jù)源和數(shù)據(jù)宿。單個邏輯數(shù)據(jù)集可以是一個轉換的數(shù)據(jù)宿和另一轉換的數(shù)據(jù)源。邏輯數(shù)據(jù)集的相應物理數(shù)據(jù)集可以例如是關系數(shù)據(jù)庫中的表或文件系統(tǒng)上的文件(等)。數(shù)據(jù)源可以讀取存儲在邏輯數(shù)據(jù)集中的數(shù)據(jù)記錄并且可以創(chuàng)建內存中數(shù)據(jù)記錄。組件接受由數(shù)據(jù)源創(chuàng)建的內存中數(shù)據(jù)記錄,并修改或轉換該數(shù)據(jù)??梢愿淖兓蜣D換數(shù)據(jù)值。可以創(chuàng)建新的數(shù)據(jù)記錄。數(shù)據(jù)宿可以提供數(shù)據(jù)流圖的出口點并且可以存儲輸出的記錄。與數(shù)據(jù)源相同,數(shù)據(jù)宿可以例如訪問關系數(shù)據(jù)庫表或存儲在文件系統(tǒng)上的文件。可以在計算機或其它類型的計算機裝置上執(zhí)行組件。在其它實現(xiàn)中,數(shù)據(jù)流圖的執(zhí)行可以分布在多個計算裝置之間。在一些實現(xiàn)中,組件可以例如在輸入端口上接受輸入數(shù)據(jù),并例如在輸出端口上產生輸出數(shù)據(jù)。鏈接將第一組件的輸出端口連接至第二組件的輸入端口。一些組件可以具有多個輸入和輸出端口。將數(shù)據(jù)記錄從入口點導航至出口點的組件和鏈接的序列稱為路徑。可以使用數(shù)據(jù)沿襲來標識不同的路徑并跟蹤通過一個或多個組件的數(shù)據(jù)流。在該示例中,數(shù)據(jù)元素“x”102是邏輯數(shù)據(jù)集1的成員,數(shù)據(jù)元素“y”103是邏輯數(shù)據(jù)集2的成員。一般來說,數(shù)據(jù)元素是指存儲在邏輯數(shù)據(jù)集內的單個記錄。數(shù)據(jù)元素可以例如是邏輯數(shù)據(jù)集,其中該邏輯數(shù)據(jù)集可以是關系數(shù)據(jù)庫中的表并且數(shù)據(jù)元素可以是該表中的行。將數(shù)據(jù)元素“x”和數(shù)據(jù)元素“y”輸入至圖形1104中。圖1生成邏輯數(shù)據(jù)集2106。邏輯數(shù)據(jù)集2包含數(shù)據(jù)元素“a”108和數(shù)據(jù)元素“b”110。將這些數(shù)據(jù)元素輸入至圖2112中。數(shù)據(jù)元素“a”用于生成數(shù)據(jù)元素“c”114。將數(shù)據(jù)元素“c”提供作為規(guī)則集1116的輸入。一般來說,規(guī)則集是應用于數(shù)據(jù)以生成輸出的規(guī)則的集合。規(guī)則集可以例如是應用于數(shù)據(jù)元素中的值的一系列測試和結果。規(guī)則集可以接受一個或多個輸入并且基于這些輸入的值來產生一個或多個輸出。一般來說,規(guī)則集可以編譯為或變?yōu)橛嬎銠C可執(zhí)行轉換。出于解釋目的和空間考慮,已經簡化了圖1中所示的數(shù)據(jù)沿襲圖100。一般來說,存在單獨一行的省略號表示已經省略了一個或多個組件和數(shù)據(jù)源??赡馨l(fā)生未示出的數(shù)據(jù)轉換。例如,數(shù)據(jù)元素“a”108可以被轉換以生成數(shù)據(jù)元素“c”114。數(shù)據(jù)元素“e”118可以被轉換以生成數(shù)據(jù)元素“g”122等。規(guī)則集1生成兩個輸出:數(shù)據(jù)元素“e”118和數(shù)據(jù)元素“f”120。數(shù)據(jù)元素“e”用于生成數(shù)據(jù)元素“g”122。將數(shù)據(jù)元素“g”提供作為規(guī)則集2130的輸入。規(guī)則集2產生數(shù)據(jù)元素“i”132的輸出。數(shù)據(jù)元素“i”用于生成邏輯數(shù)據(jù)集3138的數(shù)據(jù)元素“j”140。數(shù)據(jù)元素“f”120用于生成數(shù)據(jù)元素“h”124和數(shù)據(jù)元素“d”126。數(shù)據(jù)元素“b”110用于生成數(shù)據(jù)元素“m”128。將數(shù)據(jù)元素“m”128和數(shù)據(jù)元素“d”126提供作為規(guī)則集3134的輸入。規(guī)則集3生成數(shù)據(jù)元素“k”136。數(shù)據(jù)元素“k”用于生成邏輯數(shù)據(jù)集3138的數(shù)據(jù)元素“l(fā)”142。將數(shù)據(jù)元素“y”提供作為規(guī)則集4144的輸入。規(guī)則集4144生成邏輯數(shù)據(jù)集3138的數(shù)據(jù)元素“n”146。對邏輯數(shù)據(jù)集或數(shù)據(jù)元素作出的改變可能影響許多不同的規(guī)則集和數(shù)據(jù)元素。這些改變可以包括對模式或記錄格式的改變以及對不同數(shù)據(jù)元素的有效值的改變。例如,如果數(shù)據(jù)元素的記錄模式改變(例如,記錄模式可以從數(shù)字變?yōu)樽址侄?,則改變可能影響利用該數(shù)據(jù)元素的每個規(guī)則集以及利用取決于改變后的數(shù)據(jù)元素的數(shù)據(jù)元素的每個規(guī)則集。例如,對數(shù)據(jù)元素c的記錄格式作出的改變可以影響規(guī)則集1、數(shù)據(jù)元素e、數(shù)據(jù)元素f、數(shù)據(jù)元素g、數(shù)據(jù)元素h、數(shù)據(jù)元素d、規(guī)則集2、數(shù)據(jù)元素i、數(shù)據(jù)元素j、規(guī)則集3、數(shù)據(jù)元素k和數(shù)據(jù)元素l。對數(shù)據(jù)元素x的記錄格式作出的改變可以影響數(shù)據(jù)沿襲中的每個其它元素(除了數(shù)據(jù)元素y、規(guī)則集4或數(shù)據(jù)元素n之外)。系統(tǒng)可以生成提供關于對數(shù)據(jù)元素或規(guī)則集的改變的影響的信息的報告。例如,報告150提供關于對圖2上的數(shù)據(jù)元素a的改變的影響的信息。報告150包括方向列。方向列表示生成報告的數(shù)據(jù)沿襲的方向。方向可以是向上游的(參考數(shù)據(jù)沿襲中在數(shù)據(jù)元素之前的規(guī)則集、邏輯數(shù)據(jù)集和數(shù)據(jù)元素)或向下游的(參考數(shù)據(jù)沿襲中在數(shù)據(jù)元素之后的規(guī)則集、邏輯數(shù)據(jù)集和數(shù)據(jù)元素)。例如,數(shù)據(jù)元素c在規(guī)則集1的上游并且在數(shù)據(jù)元素a的下游。報告150還包括圖列154。圖列標識作為一部分報告的主體的圖。在該示例中,圖2112是報告的主體。報告還包括圖字段列156。圖字段列標識作為報告主體的字段。一般來說,如果方向是向下游的,則字段將會是圖的輸入,如果方向是向上游的,則字段是圖的輸出。在該示例中,數(shù)據(jù)元素a108和b110是報告的主體。報告150還包括規(guī)則集字段列158。規(guī)則集字段列標識作為輸入(在下游報告的情況下)或輸出(在上游報告的情況下)的數(shù)據(jù)元素。規(guī)則集列160標識作為報告的行的主體的規(guī)則集。在該示例中,報告提供與數(shù)據(jù)元素c有關的信息作為規(guī)則集1的輸入(在第一行166中),提供與數(shù)據(jù)元素g有關的信息作為規(guī)則集2的輸入(在第二行168中),提供與數(shù)據(jù)元素h有關的信息作為規(guī)則集2的輸入(在第三行170中),提供與數(shù)據(jù)元素d有關的信息作為規(guī)則集3的輸入(在第四行172中),以及提供與數(shù)據(jù)元素m有關的信息作為規(guī)則集4的輸入(在第五行174中)。報告150還包括直接列162和間接列164。如以下進一步所述,通過分析代碼來確定直接列和間接列。然而,為了完整性而使其呈現(xiàn)在此處。直接列報告了在規(guī)則集內直接引用由規(guī)則集字段標識的數(shù)據(jù)元素的次數(shù)。例如,直接列可以包括將值直接分配給輸出的表達式的計數(shù)。間接列164標識由規(guī)則集字段標識的數(shù)據(jù)元素影響由規(guī)則集字段標識的規(guī)則集內的一個或多個其它數(shù)據(jù)元素的值的次數(shù)。例如,間接列可以顯示有助于輸出數(shù)據(jù)元素的值的規(guī)則情況或其它表達式的總數(shù)的計數(shù)。對于通過業(yè)務規(guī)則計算的輸出,表達式計數(shù)是規(guī)則情況的數(shù)量,包括默認值(如果有的話)。在該示例中,數(shù)據(jù)元素“c”在規(guī)則集1中直接引用13次,并影響一個或多個其它數(shù)據(jù)元素的值70次。為了生成報告150,系統(tǒng)處理規(guī)則集以確定哪些數(shù)據(jù)元素與該規(guī)則集相關。規(guī)則集可被表示為可以例如用于將數(shù)據(jù)從一種格式轉換為另一種格式從而進行與該數(shù)據(jù)有關的確定或基于一組輸入數(shù)據(jù)而生成新數(shù)據(jù)的一組標準。圖2示出示例規(guī)則集以及該規(guī)則集的輸入。如上所述,規(guī)則集3134具有兩個輸入:數(shù)據(jù)元素“d”126和數(shù)據(jù)元素“m”128。規(guī)則集3134可以將輸入引用為“年數(shù)”參數(shù)202和“收入”參數(shù)204。在該示例中,“年數(shù)”參數(shù)202和“收入”參數(shù)204由轉換206來處理,如以下更詳細地描述。轉換206產生被提供作為數(shù)據(jù)元素“d”136的“風險”輸出208。圖3示出人可讀規(guī)則集300的示例。人可讀規(guī)則集300可以使用圖形用戶界面(gui)來定義,或者可以以平面文件或其它結構來定義。如下所述,人可讀規(guī)則集300可稍后編譯為轉換,例如圖2中的轉換206。例如,人可讀規(guī)則集300可被編譯為圖1中的規(guī)則集3134。例如,數(shù)據(jù)元素d表示收入,并且數(shù)據(jù)元素m表示作為客戶的年數(shù)。再次參考圖3,以列表形式示出人可讀規(guī)則集300。圖3中呈現(xiàn)的人可讀規(guī)則集300可用于基于兩個輸入302:年數(shù)306和收入308來確定風險類別310,作為輸出304。在該示例中,存在七個潛在的條件。第一規(guī)則312聲明,如果一個人是15年以上的客戶了,則無論收入如何,風險都很低。第二規(guī)則314聲明,如果客戶具有超過$150,000的收入,則無論這個人成為客戶的年數(shù)如何,風險都很低。第三規(guī)則316聲明,如果一個人是十年以上(但15年以下)的客戶了,并且具有$60,000以上的收入,則風險很低。第四規(guī)則318聲明,如果一個人是5年以上的客戶了,則無論收入如何,風險都是中等的。第五規(guī)則320聲明,如果一個人具有大于$50,000的收入,則無論這個人成為客戶的時間量如何,風險都是中等的。第六規(guī)則322聲明,如果一個人是三年以上的客戶了,并且具有$40,000以上的收入,則風險很低。第七規(guī)則324是聲明在其它方面風險很高的全方位規(guī)則。注意到,在該示例中,按順序評價規(guī)則。一旦一個人有資格獲得風險類別,則規(guī)則處理完成。例如,如果一個人是15年以上的客戶了,并且被分配“低”風險(從行312看出),則剩余的行將永遠不會執(zhí)行。為了確定對輸入或輸出字段之一的改變的影響,系統(tǒng)可以執(zhí)行如下所述的對規(guī)則集的分析。為了在基于圖的計算環(huán)境中實現(xiàn)規(guī)則集,生成從一個或多個數(shù)據(jù)源(例如,數(shù)據(jù)元素“c”106)接收輸入記錄并將數(shù)據(jù)元素插入到輸出數(shù)據(jù)集(例如,數(shù)據(jù)元素“e”118和數(shù)據(jù)元素“f”120)中的轉換。輸入和輸出數(shù)據(jù)集還可被稱為數(shù)據(jù)流。如圖1中所示,然后可以在具有通過鏈接表示數(shù)據(jù)流的元素而連接的數(shù)據(jù)處理組件的基于圖的計算中實現(xiàn)轉換。圖4示出可以將人可讀規(guī)則集轉換為包含機器可讀代碼的轉換的處理。將規(guī)則集402,例如圖3中的人可讀規(guī)則集300提供給規(guī)則生成器408。規(guī)則生成器將規(guī)則集402編譯為中間形式。例如,規(guī)則生成器406可以生成帶注釋的代碼408。帶注釋的代碼408可以包括報告的定義對規(guī)則的改變的直接和間接影響的度量410。例如,人可讀規(guī)則集300可以導致生成帶注釋的代碼,諸如:如上所述,直接影響描述了在規(guī)則集內直接引用或設定由規(guī)則集字段標識的數(shù)據(jù)元素的次數(shù)。間接影響標識由規(guī)則集字段標識的數(shù)據(jù)元素影響規(guī)則集內的一個或多個其它數(shù)據(jù)元素的值的次數(shù)。規(guī)則生成器406可以生成能夠以多種方式發(fā)生的直接和間接度量。例如,在一些實現(xiàn)中,規(guī)則生成器406可以分析規(guī)則集,以在每次訪問數(shù)據(jù)元素時以及每次另一值取決于數(shù)據(jù)元素時進行標識。還可以跟蹤更復雜的場景。規(guī)則生成器406可以跟蹤取決于輸入或輸出值中的值的每個變量,而無論怎樣間接。例如,如果變量影響中間值并且中間值影響最終值,則系統(tǒng)可以將中間值和最終值記錄為間接影響。例如,人可讀規(guī)則集300具有訪問年數(shù)306輸入的值的四個規(guī)則和訪問收入308輸入的值的四個規(guī)則、以及設定風險310輸出的值的七個規(guī)則。在一些實現(xiàn)中,可以假定規(guī)則集,以至少一次地設定每個參數(shù)的值。例如,當輸入值被提供給規(guī)則集時,設定年數(shù)輸入。在一些實現(xiàn)中,規(guī)則生成器406可以對至少部分地取決于參數(shù)的規(guī)則集中的規(guī)則數(shù)量進行計數(shù)。例如,人可讀規(guī)則集300包括取決于年數(shù)306輸入的七個規(guī)則、取決于收入308輸入的七個規(guī)則、以及設定風險310輸出的七個規(guī)則。如上所述,規(guī)則324是全方位規(guī)則。在一些實現(xiàn)中,全方位規(guī)則可被規(guī)則生成器406忽略。帶注釋的代碼408可被提供給規(guī)則編譯器412。規(guī)則編譯器412可以將帶注釋的代碼408編譯為轉換206。一般來說,轉換是機器(或虛擬機)可執(zhí)行程序,例如,可執(zhí)行程序416。參考圖4,報告生成器可以基于用于數(shù)據(jù)沿襲4的帶注釋的代碼402而生成報告408。例如,參考圖1,系統(tǒng)可以使用數(shù)據(jù)沿襲來確定例如數(shù)據(jù)元素x影響數(shù)據(jù)元素a、b、c、d、e、f、g、h、i、j、k、l和m的值。因此,在處理圖2時,系統(tǒng)確定對數(shù)據(jù)元素x的改變涉及規(guī)則集1、規(guī)則集2和規(guī)則集3。然而,數(shù)據(jù)元素x不涉及規(guī)則集4。因此,報告生成器可以確定,規(guī)則集4無需作為對數(shù)據(jù)元素x的改變的影響分析的一部分而受到分析。圖5示出基于帶注釋的代碼而生成報告的報告生成器。報告生成器506標識出哪些輸入將受到改變的影響并且記錄來自所計算的影響度量的結果。例如,數(shù)據(jù)元素“x”影響規(guī)則集3的兩個輸入。因此,報告生成器將度量(圖4中的410)記錄在報告(諸如圖1中的行172、174)中。在一些實現(xiàn)中,成本可以與直接統(tǒng)計和間接統(tǒng)計各自相關聯(lián)。例如,可以確定,直接影響將需要預定量的程序員時間和預定量的質量保證人員時間。類似地,可以確定,間接影響將需要預定量的質量保證人員時間?;陬A定時間、直接和間接影響的統(tǒng)計以及與計算機程序員時間和質量保證人員時間相關聯(lián)的成本,系統(tǒng)可以提供對所分析的系統(tǒng)作出改變的成本估計。在一些實現(xiàn)中,規(guī)則生成器可以用于輔助開發(fā)者標識系統(tǒng)(例如由圖1中的數(shù)據(jù)沿襲100表示的系統(tǒng))的不同部分。圖6示出可以使用影響分析技術的數(shù)據(jù)處理系統(tǒng)600的示例。系統(tǒng)600可以包括數(shù)據(jù)源602,該數(shù)據(jù)源602可以包括諸如存儲裝置或到在線數(shù)據(jù)流的連接的一個或多個數(shù)據(jù)源,其各自能夠以多種格式(例如,數(shù)據(jù)庫表、電子表格文件、純文本文件或由大型機使用的本機格式)中的任意格式存儲或提供數(shù)據(jù)。執(zhí)行環(huán)境604包括規(guī)則生成器606和報告生成器612。執(zhí)行環(huán)境604可以在諸如unix操作系統(tǒng)的版本的合適的操作系統(tǒng)的控制下安裝在例如一個或多個通用計算機上。例如,執(zhí)行環(huán)境604可以包括多節(jié)點并行計算環(huán)境,該多節(jié)點并行計算環(huán)境包括使用多個中央處理單元(cpu)或處理器核心的計算機系統(tǒng)的配置,所述多個中央處理單元(cpu)或處理器核心可以是本地的(例如,諸如對稱多處理(smp)計算機的多處理器系統(tǒng))、或本地分布式的(例如,連接為集群或大規(guī)模并行處理(mpp)系統(tǒng)的多個處理器)系統(tǒng),或者是遠程的、或遠程分布式的(例如,經由局域網(lan)和/或廣域網(wan)而連接的多個處理器)、或其任何組合。規(guī)則生成器模塊606從數(shù)據(jù)源602讀取規(guī)則規(guī)范,并存儲用于規(guī)則的帶注釋的代碼。提供數(shù)據(jù)源602的存儲裝置可以在執(zhí)行環(huán)境604的本地,例如,存儲在連接到安裝執(zhí)行環(huán)境604的計算機的存儲介質(例如,硬盤驅動608)上,或者可以在執(zhí)行環(huán)境604的遠處,例如,安裝在通過遠程連接(例如,由云計算基礎架構提供的遠程連接)而與安裝執(zhí)行環(huán)境604的計算機進行通信的遠程系統(tǒng)(例如,大型機610)上。報告生成器612使用規(guī)則生成器606所生成的帶注釋的代碼以及可存儲在數(shù)據(jù)源602中的數(shù)據(jù)沿襲來生成作出改變的影響的報告。輸出數(shù)據(jù)可以存儲614回數(shù)據(jù)源602或執(zhí)行環(huán)境604可訪問的或以其它方式使用的數(shù)據(jù)存儲系統(tǒng)616中。數(shù)據(jù)存儲系統(tǒng)616也可由開發(fā)環(huán)境618訪問,其中開發(fā)者620能夠確定對其它編程結構的數(shù)據(jù)元素、規(guī)則作出改變的影響。在一些實現(xiàn)中,開發(fā)環(huán)境618是用于將應用開發(fā)為包括頂點(表示數(shù)據(jù)處理組件或數(shù)據(jù)集)的數(shù)據(jù)流圖的系統(tǒng),所述頂點通過頂點之間的定向鏈接(表示工作元素、即數(shù)據(jù)的流動)來連接。例如,關于管理基于圖的應用的參數(shù)(managingparametersforgraph-basedapplications)而更詳細地描述了這樣的環(huán)境。以下描述了用于執(zhí)行這樣的基于圖的計算的系統(tǒng)。根據(jù)該系統(tǒng)制成的數(shù)據(jù)流圖提供了用于將信息輸入和輸出圖組件所表示的各個處理、用于使信息在處理之間移動并且用于定義處理的運行順序的方法。該系統(tǒng)包括從任何可用方法中選擇處理間通信方法的算法(例如,根據(jù)圖的鏈接的通信路徑可以使用tcp/ip或unix域套接字或者使用共享內存來在處理之間傳遞數(shù)據(jù))。圖7是典型影響分析過程700的流程圖。處理可由數(shù)據(jù)處理系統(tǒng),諸如圖6中的數(shù)據(jù)處理系統(tǒng)600來執(zhí)行。接收與兩個數(shù)據(jù)集有關的信息(702)。邏輯數(shù)據(jù)集信息可以針對每個邏輯數(shù)據(jù)集而標識該邏輯數(shù)據(jù)集中的至少一個字段的標識符以及與該字段有關的格式信息。接收與轉換有關的信息(704)。信息可以從兩個邏輯數(shù)據(jù)集中標識出轉換要從中接收數(shù)據(jù)的第一邏輯數(shù)據(jù)集以及要被提供轉換后的數(shù)據(jù)的第二邏輯數(shù)據(jù)集。轉換可以包括要應用于所述第一邏輯數(shù)據(jù)集中的數(shù)據(jù)的一個或多個規(guī)則,并且其中分析所述一個或多個提出的改變的潛在影響還基于所述一個或多個規(guī)則。接收一個或多個提出的改變(706)。所提出的改變可以是對數(shù)據(jù)集中的字段格式的改變、對轉換的改變、或對規(guī)則集的改變。在一些實現(xiàn)中,所提出的改變標識邏輯數(shù)據(jù)集中的字段或者在不指定改變的性質的情況下要進行更改的轉換。例如,所提出的改變可以指定,在不表明改變是從十進制記錄格式到字符串記錄格式的情況下要改變字段“x”。分析所提出的改變(708)。計算所提出的改變的度量(710)。該度量可以測量改變的影響。該度量可以包括直接影響的測量結果和/或間接影響的測量結果。直接影響的測量結果的示例包括但不限于規(guī)則集中的訪問改變后的輸入?yún)?shù)的位置。間接影響的測量結果的示例包括但不限于規(guī)則集中的基于改變后的輸入?yún)?shù)中的值來設定值的位置。存儲度量(712)。度量可以存儲在平面文件、關系數(shù)據(jù)庫或任何其它永久數(shù)據(jù)存儲器中。度量能夠以報告的形式存儲??梢陨蓸俗R影響的度量的報告。該報告可以將直接影響的測量結果和間接影響的測量結果與數(shù)據(jù)沿襲的特定部分相關聯(lián)。例如,報告可以表明,特定的數(shù)據(jù)流圖、數(shù)據(jù)流圖字段、規(guī)則集字段或規(guī)則集與直接影響的測量結果和間接影響的測量結果相關聯(lián)。在一些實現(xiàn)中,報告可以例如通過超文本傳輸協(xié)議(http)鏈接綁定到數(shù)據(jù)沿襲中。選擇或點擊鏈接可以將客戶端裝置上的瀏覽器導航至允許用戶查看數(shù)據(jù)沿襲的特定部分的應用或網站。例如,參考圖1,選擇或點擊第三行170可以致使客戶端裝置上的瀏覽器或其它應用顯示數(shù)據(jù)流圖“圖2”112。在一些實現(xiàn)中,可以例如通過突出顯示來區(qū)分特定的圖、圖字段、規(guī)則集字段和規(guī)則集。在一些實現(xiàn)中,報告可以包括可以與所提出的改變相關聯(lián)的平均開發(fā)和測試成本。例如,報告可以將美元成本與直接改變相關聯(lián)并且將美元成本與間接改變相關聯(lián)。在一些實現(xiàn)中,美元成本可以是提供給處理的參數(shù)。在其它實現(xiàn)中,默認值可以與每個改變相關聯(lián)。例如,直接改變可被確定為$100成本,并且間接成本可被確定為$25成本。管理基于圖的應用的參數(shù)圖8a是示出主要元件的相互關系的本發(fā)明的一個實施例的框圖。圖形開發(fā)環(huán)境(gde)802提供了用于創(chuàng)建可執(zhí)行圖并且定義針對圖組件的參數(shù)的用戶界面。gde可以例如是可從本發(fā)明的受讓人獲得的co>operatinggde。gde802與存儲庫804和并行操作系統(tǒng)806進行通信。同樣連接到存儲庫804和并行操作系統(tǒng)806的是web界面(webinterface)808和執(zhí)行程序810。存儲庫804優(yōu)選地是可擴展的面向對象的數(shù)據(jù)庫系統(tǒng),其被設計為支持基于圖的應用的開發(fā)和執(zhí)行以及基于圖的應用和其它系統(tǒng)(例如,其它操作系統(tǒng))之間的元數(shù)據(jù)的交換。存儲庫804是用于包括(但不限于)文檔、記錄格式、轉換函數(shù)、圖、作業(yè)和監(jiān)視信息的各種元數(shù)據(jù)的存儲系統(tǒng)。存儲庫是本領域已知的;參見例如美國專利5,930,794;6,032,158;6,038,558;和6,044,374。并行操作系統(tǒng)806接受在gde802中生成的數(shù)據(jù)流圖的表示,并生成與圖所定義的處理邏輯和資源相對應的計算機指令。并行操作系統(tǒng)806然后通常在多個處理器(無需是同構型的)上執(zhí)行那些指令。合適的并行操作系統(tǒng)是可從本發(fā)明的受讓人獲得的co>operatingweb界面(webinterface)808提供了存儲庫104的內容的基于網絡瀏覽器的視圖。使用web界面(webinterface)808,用戶可以瀏覽對象、創(chuàng)建新對象、更改現(xiàn)有對象、指定應用參數(shù)、調度作業(yè)等。web界面(webinterface)808基于存儲在存儲庫804中的信息來自動地為參數(shù)化圖創(chuàng)建基于表單的用戶界面以獲得該圖的運行時參數(shù)。執(zhí)行程序810是通過web界面(webinterface)808而訪問的可選的基于存儲庫的作業(yè)調度系統(tǒng)。執(zhí)行程序810將作業(yè)和作業(yè)隊列保持為存儲庫804內的對象,并且web界面(webinterface)808提供用以操縱作業(yè)和作業(yè)隊列的視圖和工具。圖8b示出具有通過流824而連接至過濾組件826的輸入數(shù)據(jù)集822的簡單數(shù)據(jù)流圖820。過濾組件826通過流828而連接至輸出數(shù)據(jù)集830。數(shù)據(jù)集可以例如包括提供數(shù)據(jù)(例如,輸入數(shù)據(jù)集)或接收數(shù)據(jù)(例如,輸出數(shù)據(jù)集)以用于數(shù)據(jù)流圖執(zhí)行的計算的文件或數(shù)據(jù)庫表。由數(shù)據(jù)流圖中的“流”表示的數(shù)據(jù)流可被組織為離散的數(shù)據(jù)元素。例如,元素可以包括被組織為記錄(或行)和字段(或列)的數(shù)據(jù)集中的記錄。將描述了與記錄中的值相對應的字段序列和數(shù)據(jù)類型的元數(shù)據(jù)稱為“記錄格式”。圖中的組件和數(shù)據(jù)集具有用于連接到流的輸入和/或輸出端口。流824和828的“源端”分別與輸入數(shù)據(jù)集822的輸出端口和過濾組件826的輸出端口相接合。流824和828的“宿端”分別與過濾組件826的輸入端口和輸出數(shù)據(jù)集830的輸入端口相接合。數(shù)據(jù)集或組件的輸入或輸出端口與元數(shù)據(jù)(諸如流入或流出端口的數(shù)據(jù)的記錄格式)相關聯(lián)。包括用于與組件相關聯(lián)的端口或其它元數(shù)據(jù)的記錄格式的參數(shù)根據(jù)參數(shù)范圍的規(guī)則而被綁定到一個值。參數(shù)可以在設計時或運行時綁定到一個值(即,如下所述的“運行時參數(shù)”)。參數(shù)的值可例如由用戶通過用戶界面(例如,響應于提示)來定義、從文件中定義或者根據(jù)同一上下文或不同上下文中的另一參數(shù)來定義。例如,可以通過指定參數(shù)具有與另一參數(shù)“相同”的關系來從不同的上下文中導出該參數(shù)(例如,在不同組件的上下文中評價的參數(shù))。可以使用與形成“子圖”的流互連的其它組件來實現(xiàn)圖中使用的組件。在將子圖用作另一圖中的組件之前,定義組件的各種特性,諸如組件的輸入和/或輸出端口。在一些情況下,在圖中使用組件之前,應當指定與子圖組件之間的關系有關的組件的特性。例如,可能需要選擇子圖組件的運行時參數(shù)的提示順序。以下更詳細地描述了用于選擇圖中組件的運行時參數(shù)的提示順序的方法。元數(shù)據(jù)傳播與端口相關聯(lián)的元數(shù)據(jù)的值,諸如記錄格式參數(shù),可以通過“傳播”來獲得。元數(shù)據(jù)傳播可能發(fā)生在“外部”或“內部”。對于外部元數(shù)據(jù)傳播,第一組件的端口的記錄格式參數(shù)的值可以通過傳播通過流連接到第一組件的第二組件的端口的記錄格式值來獲得值。該值能夠從流的源端向下游傳播至宿端,或者從流的宿端向上游傳播至源端。元數(shù)據(jù)從已定義元數(shù)據(jù)的端口傳播至未定義元數(shù)據(jù)的端口。對于內部元數(shù)據(jù)傳播,針對組件的一個端口定義的元數(shù)據(jù)基于實現(xiàn)組件的子圖而傳播至該組件的另一端口。在一些情況下,內部元數(shù)據(jù)傳播發(fā)生在“非轉換”內部數(shù)據(jù)路徑上。例如,用戶可以為指定流入排序組件的記錄的數(shù)據(jù)類型的排序組件的輸入端口提供元數(shù)據(jù)。由于排序組件對記錄進行重新排序但不進行轉換,因此排序組件不會改變數(shù)據(jù)類型并且該數(shù)據(jù)類型不變地傳播至排序組件的輸出端口,從而準確地描述流出排序組件的記錄的數(shù)據(jù)類型。一些組件對流過它們的數(shù)據(jù)進行轉換(或可選地進行轉換)。例如,用戶可以為指定流入過濾組件的記錄的字段的過濾組件的輸入端口提供元數(shù)據(jù)。過濾組件可以從每個字段移除給定字段的值。可以使用元數(shù)據(jù)定義來指定如下內容:過濾器組件的輸出端口的元數(shù)據(jù)是根據(jù)組件的過濾操作來與輸入端口的元數(shù)據(jù)相關的。例如可以從指定記錄字段的元數(shù)據(jù)中移除被過濾的字段。即使在已知輸入端口元數(shù)據(jù)之前,也可以提供這樣的元數(shù)據(jù)定義。因此,如以下更詳細地描述,通過允許與端口相關聯(lián)的元數(shù)據(jù)被指定為一個或多個參數(shù)(包括用于另一端口的元數(shù)據(jù))的函數(shù),元數(shù)據(jù)甚至可以在轉換內部數(shù)據(jù)路徑上傳播。這種內部和外部元數(shù)據(jù)傳播可以可選地被配置為在構建圖的設計時發(fā)生,并且用戶為圖中的一些組件的一些端口提供元數(shù)據(jù)??蛇x地,元數(shù)據(jù)傳播可以在構建圖之后(包括在運行時或剛好在運行時之前)發(fā)生。運行時參數(shù)運行時參數(shù)允許應用建立器將參數(shù)值的設置(例如,排序函數(shù)的關鍵字參數(shù)、文件名、記錄格式、轉換函數(shù)等)推遲到運行時(例如,在計算機系統(tǒng)上執(zhí)行或即將執(zhí)行程序的時間)。運行時參數(shù)的值可以由最終用戶提供,或者從存儲在對象存儲庫中的其它運行時參數(shù)或對象的組合中導出。運行時參數(shù)為應用增加了一定量的靈活性。通過使用這些參數(shù)按需計算元數(shù)據(jù)(數(shù)據(jù)格式或類型、以及程序邏輯或轉換)來實現(xiàn)附加靈活性。類型和轉換可以從其它類型和轉換、用戶提供的參數(shù)值以及所存儲的對象(例如,從存儲庫)合成。這使得可以建立適用于任何類型的輸入數(shù)據(jù)或通過一系列經由運行時參數(shù)值直接或間接控制結構的轉換來產生數(shù)據(jù)的“通用”應用。在一些實現(xiàn)中,當創(chuàng)建或編輯運行時參數(shù)時,開發(fā)者可以指定針對每個參數(shù)的提示以及用于顯示提示的條件。如果滿足條件,則系統(tǒng)解釋提示指令以呈現(xiàn)用于接收參數(shù)值的圖形用戶界面(gui)控件。運行時參數(shù)的指定運行時參數(shù)為開發(fā)者提供了一種用于在圖執(zhí)行時(即運行時)基于外部輸入來修改圖的行為的機制。在優(yōu)選實施例中,這些外部值由直接用戶輸入提供。然而,這些外部值也可能來自許多不同的來源,包括環(huán)境變量和命令行參數(shù)。gde802生成正確的代碼,以處理所有這些情況并在圖直接由gde執(zhí)行時為開發(fā)者提示測試值。使用運行時參數(shù),開發(fā)者可例如明確地聲明,輸入文件的路徑將由具有特定名稱的環(huán)境變量提供;然后環(huán)境變量稱為圖形界面的已知部分。因此,對于這些參數(shù),存在定義明確的界面。例如,無需讀取生成的外殼腳本并在其中搜索對環(huán)境變量和命令行參數(shù)的引用以查找控制特定圖的執(zhí)行的參數(shù)集。圖9是包含具有指定運行時參數(shù)的上卷組件902和排序組件904的典型圖900的框圖。運行時參數(shù)(排序組件904的關鍵字和上卷組件902的規(guī)則)將在用于輸入的界面906中呈現(xiàn)給用戶。以下部分描述了如何指定運行時參數(shù)并且創(chuàng)建集成用戶界面以呈現(xiàn)提示用戶輸入的運行時參數(shù)。運行時參數(shù)能夠以多種方式指定或定義。一種方式是使用gde802中顯示的運行時參數(shù)網格。圖10是表示將與圖相關聯(lián)的運行時參數(shù)網格1000的圖形對話框的一個實施例的示圖。通過簡單地填寫適當?shù)淖侄蝸韯?chuàng)建新的運行時參數(shù)。在存儲庫804中創(chuàng)建與每個運行時參數(shù)相關聯(lián)的對象,并將其鏈接到利用參數(shù)的所有圖組件。例如,如果圖排序組件的排序關鍵字被定義為運行時參數(shù),則表示該排序關鍵字參數(shù)的對象被存儲在存儲庫804中并鏈接到相關聯(lián)的排序組件。定義運行時參數(shù)的可選方式是特別地標記圖組件的現(xiàn)有參數(shù)并使其對于其它組件“可見”(將其導出至其它組件)??梢允褂眠@些方法的組合。例如,當創(chuàng)建組件時,開發(fā)者可以將該組件的特定參數(shù)指定為運行時參數(shù)。然而,開發(fā)者可以使用參數(shù)網格來設定圖的所有運行時參數(shù)的默認值和其它特性,并定義新的運行時參數(shù)。當運行圖時,對參數(shù)進行處理以從用戶輸入或從外部程序源(例如,命令行參數(shù)或環(huán)境變量)獲得每個參數(shù)的值。在所示的實施例中,運行時參數(shù)網格1000包括以下字段:名稱1002–此字段包含運行時參數(shù)的名稱?!皊core_threshold”是針對名稱而顯示的示例。類型1004–此字段包含運行時參數(shù)中所要允許的值的類型?!癷nteger”是針對類型而顯示的示例。所示實施例中的支持類型是:·布爾(boolean)–值可以為真或假;·選擇(choice)–值為值列表之一;·整理器(collator)–關鍵字參數(shù)值;·數(shù)據(jù)集(dataset)–外部數(shù)據(jù)文件名和位置;·日期(date)–日期值;·表達式(expression)–算術、邏輯和/或條件表達式(例如,選擇表達式);·浮點數(shù)(float)–浮點數(shù);·整數(shù)(integer)–整數(shù);·布局(layout)–并行或串行布局定義;·記錄格式(recordformat)–記錄描述或包含記錄描述的文件;·字符串(string)–任意字符串;·轉換(transform)–轉換描述或包含轉換描述的文件。位置(loc)1006–此字段與記錄格式和轉換類型一起使用。它指定類型字段1004是否描述文件位置或者其是否包含嵌入式描述。支持的位置有:·嵌入(embedded)–參數(shù)將包含記錄或轉換描述;·主機(host)–參數(shù)將包含對主機上的文件的引用;·本地(local)–參數(shù)將包含對本機上的文件的引用;·存儲庫(repository)–參數(shù)將包含對存儲庫轉換或記錄格式的引用。默認值1008–此字段包含(1)在外部程序源未提供其它值的情況下將使用的運行時參數(shù)的默認值、或(2)描述如何從用戶輸入中導出運行時值或者如何從執(zhí)行圖的用戶交互式地獲得該信息的規(guī)則或表達式。在后一種情況下,如果用戶未提供輸入值,則可以使用第二默認值字段(未示出)來提供運行時參數(shù)的值。對于“布爾”和“選擇”類型,此字段將用戶限制為有效選擇。對于“布局”類型,此字段是只讀的,并顯示當前定義的布局定義。對于所有其它類型,此字段優(yōu)選地是簡單的用戶可向其中輸入有效字符串的文本編輯器。編輯1010–在參數(shù)行中點擊編輯空間1010(或圖標,例如鉛筆圖標)將提供一個更高級的編輯窗口,該編輯窗口使用戶通過用于編輯默認值字段1008的各種選項。在所示的實施例中,以下編輯器可用于其相關聯(lián)的類型:·單行編輯(singlelineedit)–用于整數(shù)、浮點數(shù)、日期和字符串類型;·選擇對話框(choicedialog)–用于布爾和選擇類型;·關鍵字編輯器(keyeditor)–用于整理器類型;·文件瀏覽器(filebrowser)–用于數(shù)據(jù)集類型以及用于位置未嵌入的記錄格式和轉換類型;·轉換編輯器(transformeditor)–用于具有嵌入式位置的轉換類型;·記錄格式編輯器(recordformateditor)–用于具有嵌入式位置的記錄格式類型;·表達式編輯器(expressioneditor)–用于表達式類型;·布局編輯器(layouteditor)–用于布局類型。除非種類字段值(見下文)是“pl”(代表參數(shù)語言),否則啟動上述編輯器。在這種情況下,向用戶呈現(xiàn)編輯器,用以在圖執(zhí)行時定義用于導出或提示參數(shù)值的規(guī)則。描述1012–這是一個自由格式字段,其中開發(fā)者描述運行時參數(shù)的預期值。如果默認值包含用于向用戶請求輸入值的規(guī)則,則在運行時將描述1012用作提示。種類1014–此字段定義了圖要在圖執(zhí)行時獲得相關聯(lián)的參數(shù)的值的情況。支持的種類字段1014的值有:·環(huán)境(environment)–預期在相同名稱的環(huán)境變量中找到運行時參數(shù)的值。如果未定義環(huán)境變量,則使用默認值字段1008中的值。如果需要參數(shù)(即,導出的參數(shù))并且默認值字段1008為空,則將生成運行時錯誤并將停止圖執(zhí)行。·位置(positional)–運行時參數(shù)的值預期在調用應用的命令行上的相對位置處。例如,如果運行時參數(shù)是所定義的第三個位置運行時參數(shù),則其參數(shù)值將被預期為執(zhí)行腳本中的第三個位置命令行參數(shù)。必須提供任何指定的位置參數(shù),如果缺失一個,則將會生成運行時錯誤?!りP鍵詞(keyword)–運行時參數(shù)的值預期為關鍵詞命令行參數(shù)。在所示的實施例中,關鍵詞參數(shù)的形式如下:-<參數(shù)名稱><參數(shù)值>。關鍵詞參數(shù)是可選的,并且只有在未提供關鍵詞參數(shù)且默認值字段1008為空且需要相應的導出參數(shù)的情況下,才會生成運行時錯誤?!す潭?fixed)–參數(shù)的運行時值始終為默認值。這對于在兩個或更多個運行時參數(shù)之間共享常量值是有用的。·pl–運行時參數(shù)的默認值包含pl表達式,該pl表達式將在圖執(zhí)行時被理解為從其它參數(shù)中導出運行時參數(shù)的值、或者提示用戶以獲得附加輸入。被選擇用于與本發(fā)明的任何特定實施例一起使用的組件描述語言(componentdescriptionlanguage)可以是任何合適的腳本語言,諸如公開可用的面向對象的腳本語言“python”。這樣的腳本可以在程序控制下構建元數(shù)據(jù)(類型和轉換),并且對用戶輸入、從外部以編程方式提供的輸入和其它運行時參數(shù)執(zhí)行條件測試、比較、數(shù)據(jù)轉換、算術和邏輯操作、字符串和列表處理以及其它功能,以生成任何運行時參數(shù)的最終值。在所示的實施例中,用于引用直接在運行時參數(shù)網格1000上創(chuàng)建的運行時參數(shù)的有用約定是簡單地輸入以美元符號“$”開頭的參數(shù)名稱。例如,$key引用一個名為key的運行時變量。在所示的實施例中,新的運行時參數(shù)基于針對默認運行時種類(默認運行時種類為“環(huán)境”)的高級選項對話框中的值而默認為的“字符串”類型和默認種類。因為運行時參數(shù)值可以在運行時確定并且pl腳本可以提供條件測試,所以可以創(chuàng)建“條件”運行時參數(shù)。只有當運行時確定的參數(shù)的所有條件啟用時,條件運行時參數(shù)才會為用戶輸入生成提示。因此,例如如果用戶以“否”來響應于請求是否對數(shù)據(jù)集進行排序的第一個提示,則無需顯示請求排序關鍵字的第二個條件提示。因此,在設計階段(“設計時間”),開發(fā)者將圖組件的特定參數(shù)指定為“運行時”參數(shù)。然而將與該圖組件相關聯(lián)的對象與相關參數(shù)數(shù)據(jù)(例如,來自圖9的參數(shù)網格1000的信息的類型)存儲在一起。圖11是總結使用運行時參數(shù)的處理的流程圖。在運行時,(例如,從存儲庫)檢索與要執(zhí)行的應用相對應的參數(shù)對象(步驟1100)。針對每個這樣的對象而確定是否指示出用戶輸入(步驟1102)。如果指示出用戶輸入,則確定是否已經滿足用于顯示提示的任何條件(步驟1103),這可以包括對先前提示的用戶輸入進行評價。如果未指示出用戶輸入,則使用默認值(步驟1108)??蛇x地,可能不需要參數(shù)值(例如,如果用戶未選擇激活排序功能,則將不需要排序關鍵字),因此可以忽略。否則,生成提示以獲得用戶輸入(步驟1104)。如果用戶未輸入特定參數(shù)的值(步驟1106),則可以選擇該參數(shù)的默認值(步驟1108)??蛇x地,可以提出錯誤條件以指示出缺少用戶輸入。在任何情況下(假設沒有由于缺少用戶輸入而造成的錯誤條件),考慮到輸入以及基于其它參數(shù)的依賴性和條件的轉換,確定參數(shù)的最終值(步驟1110)。如果確定用戶輸入未指示出特定參數(shù)(步驟1102),則確定參數(shù)值是否以編程方式從外部提供,諸如通過環(huán)境變量或命令行參數(shù)提供(步驟1112)。如果參數(shù)值不是以編程方式從外部提供,則選擇參數(shù)的默認值(步驟1114)??蛇x地,可以提出錯誤條件以指示出缺少指定類型的可用輸入。在任何情況下(假設沒有由于缺少外部輸入而造成的錯誤條件),考慮到輸入以及基于其它參數(shù)的依賴性和條件的轉換,確定參數(shù)的最終值(步驟1110)。一旦確定最終參數(shù)值,作為可選步驟,可以根據(jù)指定條件和上述規(guī)則完全移除或用流(即,圖鏈接或邊)代替(以下討論的)所有條件組件(步驟1116)。一旦敲定了操作圖結構并確定了最終參數(shù)值,則以常規(guī)方式執(zhí)行圖(步驟1118)。測試值為了在使用運行時參數(shù)創(chuàng)建并測試圖期間支持開發(fā)者,gde802的優(yōu)選實施例還支持運行時參數(shù)的測試值。當開發(fā)者使用運行時參數(shù)運行圖或者想要查看影響圖組件的底層代碼時,gde802顯示相關聯(lián)的測試參數(shù)網格,用戶可以在其中輸入一個或多個運行時參數(shù)的新測試值。優(yōu)選地,記住所使用的最后一組測試值并將其與圖保存在一起。對于每個運行時參數(shù),開發(fā)者在測試值列中輸入期望的測試值。編輯字段可以與每個測試值列相關聯(lián)。除了參數(shù)種類為pl的情況,測試值字段和編輯字段的行為與運行時參數(shù)網格900中的默認值字段和編輯字段相同。如果pl表達式指示出要提示用戶以獲得特定運行時參數(shù)的值,則測試值字段和編輯行為基于相關聯(lián)的pl表達式的解釋。如果pl表達式僅導出基于其它輸入的值,則在正常模式下,運行時參數(shù)在測試值網格中是不可見的。指定運行時參數(shù)如何獲取它們的值在將參數(shù)指定為運行時參數(shù)之后,在存儲庫804中創(chuàng)建相應的對象。如果運行時參數(shù)具有種類字段914值“pl”,則該參數(shù)的默認值字段1008包括具有以下優(yōu)選形式的prompt_for偽函數(shù):prompt_for“prompt-kind[modifiers]”options…如上所示,prompt_for偽函數(shù)可以是基于先前的輸入來確定是否顯示提示的條件表達式的一部分。對于這樣的對象,使用用戶界面來向用戶呈現(xiàn)直接輸入運行時參數(shù)。在優(yōu)選實施例中,web界面(webinterface)808提供該功能。特別地,在運行時,每個運行時參數(shù)對象的每個prompt_for偽函數(shù)由web界面(webinterface)808解析以生成具有相應用戶提示的網頁(例如,以html格式)。(可選地,這樣的網頁可以在運行時間之前生成,并且在運行時簡單地呈現(xiàn)。然而,運行時生成這樣的網頁提供了更大的靈活性。特別地,頁面的內容可以取決于先前的用戶輸入。)web界面(webinterface)808與可顯示這樣的網頁并接收用戶輸入的常規(guī)網絡瀏覽器結合使用。prompt_for偽函數(shù)向web界面(webinterface)808指示如何提示參數(shù)值。特別地,prompt-kind參數(shù)(字符串常量)指示出要呈現(xiàn)何種用戶界面(ui)元素(文本框、下拉列表等)。字符串的修飾符(modifier)部分(以逗號隔開的關鍵詞列表)提供了對于各種提示常見的一些選項。在所示的實施例中,空間在修飾符字符串內是不重要的。修飾符關鍵詞解釋如下:·關鍵詞inplace聲明:元素應當直接呈現(xiàn)在應用的匯總級別用戶界面上,從而允許在不“鉆入”更低級別的情況下提供值。如果未指定inplace,則在匯總級別界面上呈現(xiàn)簡單的“編輯”按鈕,該按鈕將把用戶帶至另一頁面以提供參數(shù)值?!りP鍵詞blankok聲明:用戶無需提供值;應用將以合理的方式處理默認值。如果未指定blankok,則用戶將無法在不提供某些值的情況下執(zhí)行應用。以下是使用不同種類的修飾符的prompt_for調用的一些示例:${prompt_for“text,inplace”}${prompt_for“filter,inplace”,$input_type}${prompt_for“radio,blankok,inplace”,${list1,2,3}}本節(jié)的其余部分列出了各種提示種類及其相應的選項,并解釋了每個提示種類將如何顯示在web界面(webinterface)808所生成的網頁中。text[size]–呈現(xiàn)常規(guī)的單行文本框大小字符寬(如果未提供大小,其默認為瀏覽器的默認文本框大小)。radiochoice-list[description-list]–以一組單選按鈕的形式呈現(xiàn)常規(guī)的“選擇一個”提示,其中一個按鈕用于選擇列表中的每個元素。如果提供描述列表,則每個選擇都標有相應的描述;否則,選擇標有來自選擇列表的字符串形式的相應項。radiopluschoice-list[description-list]–與單選相同,但在文本框旁呈現(xiàn)一個附加按鈕,以允許用戶選擇不在選擇列表中的“寫入”值。checkboxchoice-list[description-list]–以一組復選框的形式呈現(xiàn)常規(guī)的“選擇零個或多個”提示,其中一個按鈕用于選擇列表中的每個元素。如果提供描述列表,則每個選擇都標有相應的描述;否則,選擇標有來自選擇列表的字符串形式的相應項。dropdownchoice-list[description-list,size]–以下拉列表的形式提供常規(guī)的“選擇一個”提示以獲得選擇列表的元素。如果提供描述列表,則每個選擇都標有相應的描述;否則,選擇標有來自選擇列表的字符串形式的相應項。如果提供大小,則許多選擇將立即可見;否則,只有一個選擇可見。multidropdownchoice-list[description-list,size]–以下拉列表的形式提供常規(guī)的“選擇零個或多個”提示以獲得選擇列表的元素。如果提供描述列表,則每個選擇都標有相應的描述;否則,選擇標有來自選擇列表的字符串形式的相應項。如果提供大小,則許多選擇將立即可見;否則,示出瀏覽器的默認項數(shù)。keytype-obj[size]–呈現(xiàn)由給定type-obj中的字段組成的關鍵字(亦稱為整理器)的提示。關鍵字可以具有盡可能多的大小部分,其默認為type-obj中的字段的數(shù)量。圖12是由關鍵字提示生成的圖形對話框1200的一個實施例的示圖。以下是3條關鍵字提示的腳本文本的示例,其中文件/datasets/fixed定義了下拉框1202中示出的可用關鍵字的內容:${prompt_for“key”,${dataset_type“/datasets/fixed”},3}在所示實施例中,正常整理順序是升序的,但是用戶可以通過檢查相關聯(lián)的復選框1204來選擇關鍵字的降序整理順序。filtertype-obj–呈現(xiàn)由給定type-obj的每個字段上的條件組成的過濾表達式的提示。blankok修飾符對過濾器沒有影響;空的過濾產生“真”表達式。圖13是由過濾提示生成的圖形對話框1300的一個實施例的示圖。與每個表達式文本編輯框1304相關聯(lián)的可用字段名稱1302由type-obj定義。將比較值輸入到文本編輯框1304中,并且從相應的下拉列表控件1306中選擇比較運算符(例如,等于,小于,小于或等于)。flexifiltertype-obj–與過濾提示符相同,但呈現(xiàn)了由給定type-obj的每個字段上的條件組成的過濾表達式的提示,其中每行的字段名稱可以從下拉列表中選擇。這允許針對多個條件而使用相同的字段(例如,字段state=ma或字段state=ca)。rolluptype-objkey[size]–基于給定關鍵字上卷的給定type-obj的字段來呈現(xiàn)對于上卷計算的提示。上卷可以具有盡可能多的大小規(guī)則,其默認為type-obj中的字段的數(shù)量。blankok修飾符對上卷沒有影響;空的上卷產生僅提供每個組的關鍵字值的包。圖14是由上卷提示生成的圖形對話框1400的一個實施例的示圖。在所示的實施例中,下拉框列1402定義可用的上卷計算函數(shù)(例如,和、最小值、最大值)。與每個計算相關聯(lián)的可用字段名稱1404由type-obj定義。每個上卷規(guī)則具有用于用戶定義期望表達式的相關聯(lián)的文本編輯框1406、用于(通過布爾表達式)定義源值參與計算的標準的“where”文本編輯框1408、以及用于指定將接收計算結果的字段的輸出字段文本編輯框1410。在可以明確導出的情況下,無需指定輸出字段的名稱。reformattype-obj[size]–基于給定type-obj的字段來呈現(xiàn)對于重新格式化計算的提示。重新格式化可以具有盡可能多的大小規(guī)則,其默認為type-obj中的字段的數(shù)量。圖15是由重新格式化提示生成的圖形對話框1500的一個實施例的示圖。在所示的實施例中,重新格式化提示包括用于簡單地將輸入字段復制到相同名稱的輸出字段的部分1502(使用復選框控件單獨地選擇/取消選擇,或者通過使用全部選擇或全部不選按鈕整體地選擇/取消選擇)。提示的第二部分包括允許定義重新格式化表達式(例如,total=revenue_1-income_2)的文本編輯框1504的列。每個規(guī)則具有相關聯(lián)的輸出字段文本編輯框1506,用于指定將接收重新格式化后的結果的字段。outputspec–呈現(xiàn)輸出數(shù)據(jù)集規(guī)范的提示。所顯示的控件包括用于顯示可用格式選項的下拉控件,以及用于輸入輸出數(shù)據(jù)集的特定實例的名稱的文本編輯框。blankok修飾符對輸出數(shù)據(jù)集規(guī)范沒有影響。fpathstarting-point–呈現(xiàn)文件路徑的提示。該提示本質上是文本框,但旁邊有一個“瀏覽”按鈕,該“瀏覽”按鈕將導致彈出窗口出現(xiàn)以便瀏覽文件路徑。如果文本框非空,則它將被用作瀏覽操作的起點;如果為空,則使用起點(starting-point)參數(shù)。rpathstarting-point–呈現(xiàn)存儲庫路徑的提示。該提示本質上是文本框,但旁邊有一個“瀏覽”按鈕,該“瀏覽”按鈕將導致彈出窗口出現(xiàn)以供瀏覽。如果文本框非空,則它將被用作瀏覽操作的起點;如果為空,則使用起點(starting-point)參數(shù)。radiofpathchoice-list[description-list]–與radioplus相同,但在“寫入(write-in)”槽中呈現(xiàn)fpath樣式框+瀏覽按鈕(fpath-stylebox-plus-browse-button)。radiorpathchoice-list[description-list]–與radioplus相同,但在“寫入(write-in)”槽中呈現(xiàn)rpath樣式框+瀏覽按鈕(rpath-stylebox-plus-browse-button)。條件組件一些實現(xiàn)包括條件組件機制,該條件組件機制允許基于參數(shù)值和計算出的元數(shù)據(jù)來改變圖的組件和流的結構。圖的每個組件都有一個條件,用于控制在運行時該組件是否會出現(xiàn)在圖中。該條件可以通過運行時參數(shù)直接或間接地計算。條件組件可用于各種目的,例如使圖優(yōu)化或專門化。為了優(yōu)化,如果不使用某些數(shù)據(jù)集的值,則應用可以省略對這些數(shù)據(jù)集的處理,從而允許圖更高效地運行。為了專門化,應用可以基于所需的詳細程度來決定若干個不同的輸出數(shù)據(jù)集的產生,或允許執(zhí)行圖的若干個可選部分之一。圖16a是第一個圖中的合并聯(lián)接(mergejoin)組件1600聯(lián)接來自文件a和b的數(shù)據(jù)并將結果輸出至輸出文件1602的框圖。圖16b是第二個圖中的上卷(rollup)組件1604聚合來自文件a的數(shù)據(jù)并將結果輸出至輸出文件1602的框圖。圖16c是圖中的合并聯(lián)接(mergejoin)組件1606聯(lián)接來自文件a和b的數(shù)據(jù)并且上卷(rollup)組件1608聚合所產生的數(shù)據(jù)并將最終結果輸出至輸出文件1602的框圖。使用條件組件,這三個圖可以組合為最初看起來像圖16c中的圖的單個圖,但其確切的結構在運行時才確定。通過設定適當?shù)臈l件,可以用連接(流)來代替上卷組件1608,從而導致運行時圖與圖16a中的圖類似。類似地,通過設定適當?shù)臈l件,可以用到文件a的連接(流)來代替合并聯(lián)接(mergejoin)組件1606,從而導致運行時圖與圖16b中的圖類似。在所示實施例中,條件組件可以是定義頂點的任何圖組件(即,諸如輸入/輸出文件的數(shù)據(jù)集組件、諸如重新格式化或排序組件的處理組件、或已知為子圖的其它圖)。在優(yōu)選實施例中,條件組件由兩個特殊參數(shù)控制:條件(condition)和條件解釋(condition-interpretation)。條件是評價被推遲到運行時的布爾表達式或值。在所示的實施例中,值“假”和“0”指定假條件,所有其他值(包括空)表示真條件。條件解釋參數(shù)具有兩個允許的互斥值:完全移除(removecompletely)和用流代替(replacewithflow)。圖17是呈現(xiàn)具有條件解釋控件1704的條件1702的圖形對話框1700的一個實施例的示圖。條件解釋控件1704允許選擇完全移除解釋1706或者用流代替解釋1708。完全移除:通過這種解釋,如果滿足條件,則將組件及其連接的所有流(例如,圖鏈接或邊)從圖中移除。主動的完全移除條件在功能上將組件及其所有直接連接的流從圖中移除。完全移除條件可以用在任何組件上。從圖中移除的條件組件可以使依賴于該條件組件的存在的其它連接組件“中毒”,從而導致其移除。圖18是示出出現(xiàn)這種中毒的情況的圖1800的示圖。如果輸入文件(inputfile)組件1802上的條件指示移除,并且其相應的條件解釋是完全移除,則將輸入文件組件1802及其連接的流都從圖1800中移除。這轉而會使排序組件1804中毒,從而導致其被移除,因為它的輸入是所需的輸入端口,卻再也沒有與其相連接的任何數(shù)據(jù)流。這轉而會使上卷組件1806中毒,從而導致其被移除,因為它的輸入是所需的輸入端口,但不再有與其相連接的任何數(shù)據(jù)流。停止這種“消失之毒”的唯一辦法是連接至下游組件的可選端口或計數(shù)端口。因此,當輸入文件組件1802上的條件指示移除時,將整個排序上卷圖分支1808有效地從圖1800中移除。圖18中的結果是:名義上,原始圖結構的3輸入聯(lián)接組件1810在運行時變?yōu)?輸入聯(lián)接組件。在一個實現(xiàn)中,中毒的詳細語義(亦稱為“隱含條件”)如下:·如果組件具有所需的端口,并且沒有連接至該組件的活動流,則將組件和連接至組件的所有流從圖中移除?!と绻M件已從圖中完全移除,則將連接至其端口的所有流從圖中移除?!と绻M件被流代替,則將連接至該組件的指定輸入端口和指定輸出端口以外的所有端口的所有流都從圖中移除?!と绻璧乃饕丝跊]有連接到該端口的活動流,則對于具有相同索引的每個相應的可選索引端口,將連接到該相應端口的任何流從圖中移除。這些規(guī)則存在一些令人驚訝的后果。例如,僅具有可選端口的組件永遠不會因為中毒而被移除。因此,如果需要,必須明確地移除該組件。圖19是總結包括完全移除條件組件的圖的運行時準備的處理的流程圖。如果條件解釋是完全移除并且條件未滿足(步驟1900),則不將條件組件從圖中移除(步驟1902)。如果條件滿足(步驟1900),則將條件組件連同連接至該組件的所有流從圖中移除(步驟1904)。然后根據(jù)以上闡述的規(guī)則將所有“有毒的”組件和流從圖中移除(步驟1906)。用流代替:通過這種解釋,如果條件滿足,則用流(例如,圖邊)代替組件。用流代替條件解釋需要附加信息。參考圖17,用戶指定輸入端口1710(或一系列計數(shù)端口)和輸出端口1712(或一系列計數(shù)端口),用于在組件從圖中移除時建立連接。默認情況下,如果正好有一個所需的輸入端口或計數(shù)端口并且正好有一個所需的輸出端口或計數(shù)端口,則這些端口是指定的流通連接端口(分別稱為指定輸入端口和指定輸出端口)。所需的端口是需要連接至少一個流的一個端口。圖20是總結包括針對本發(fā)明的特定實施例的用流代替(replacewithflow)條件組件的圖的運行時準備的處理的流程圖。由于一些組件對所示實施例中的某些可用輸入和輸出的依賴性(其基于co>operating中可用的組件),因此幾條規(guī)則適用于該實現(xiàn)并且使用用流代替條件:·如果條件解釋是用流代替并且條件未滿足(步驟2000),則不將條件組件從圖中移除(步驟2002)。·只有在正好有一個連接至指定輸入端口的活動直線流并且正好有一個連接至指定輸出端口的活動直線流時(“活動”流是已在運行時移除的流),才可以用流代替具有指定輸入端口和指定輸出端口的組件(步驟2004)。如果是這樣,則將組件本身從圖中移除,并且將連接至指定輸入端口的直線活動流和連接至指定輸出端口的直線活動流鏈接在一起(步驟2006)。將直接鏈接到被移除的組件的其它端口(即,特別指定的輸入和輸出端口以外的任何端口)的任何其它流從圖中移除。如上所述,移除連接至被移除的組件的任何“有毒”組件和流(步驟2008)?!と绻哂杏昧鞔鏃l件的組件具有連接至一系列計數(shù)輸入中的不止一個指定輸入端口的活動流(步驟2010),則不將該組件從圖中移除,因為需要該組件來使圖有效(步驟2012)?!ぴ谒栎斎肷暇哂谢顒由热肓鞯慕M件需要特殊的處理。“活動扇入流”意味著組件具有連接至所需輸入端口的活動扇入流或全方位流,或者其具有連接至單個所需輸入端口的不止一個活動直線流。對于這樣的組件,解釋用流代替條件應當用收集所有活動輸入流的收集組件來代替條件組件(步驟2014)。如上所述,然后移除連接至被代替的組件的任何“有毒”流和組件(步驟2016)。元數(shù)據(jù)傳播的方面圖的元數(shù)據(jù)可例如由圖開發(fā)者、圖用戶提供,或者通過來自圖的另一部分的傳播提供??梢詡鞑ジ鞣N元數(shù)據(jù),包括與數(shù)據(jù)或對數(shù)據(jù)的計算相關聯(lián)的元數(shù)據(jù),諸如端口的記錄格式(例如,字段的序列以及流入或流出端口的記錄的數(shù)據(jù)類型)、排序、壓縮方法、字符集、二進制表示(大端、小端)、分區(qū)、組件可能使用的計算資源(例如,處理器,臨時磁盤空間)、數(shù)據(jù)轉換以及組件可能使用的內存量。圖結構的各個方面可能影響元數(shù)據(jù)的傳播。以下描述了這些方面中的兩個方面。組件移除之后的傳播在一些實施例中,在移除圖組件之后生成流時,必須作出關于在修正后的圖中應當如何傳播在這樣的流中定義數(shù)據(jù)的元數(shù)據(jù)的選擇。元數(shù)據(jù)可以從流的任一端獲得。在一些實現(xiàn)中,來自流的上游端的元數(shù)據(jù)是優(yōu)選的。如果流的上游端是被移除的組件(或已由收集組件代替的組件),則gde802通過在圖中向上游“行走”來查找流的元數(shù)據(jù),直到其找到尚未被移除的組件。使用該上游組件所公開的元數(shù)據(jù)來定義所生成的流的數(shù)據(jù)特性。轉換后的元數(shù)據(jù)的傳播如上所述,通過允許與端口相關聯(lián)的元數(shù)據(jù)被指定為一個或多個參數(shù)(包括用于另一端口的元數(shù)據(jù))的函數(shù),元數(shù)據(jù)甚至可以在轉換內部數(shù)據(jù)路徑上傳播。例如,圖30a示出計算對來自數(shù)據(jù)集3002和數(shù)據(jù)集3004的數(shù)據(jù)的聯(lián)接操作的圖3000。在該示例中,圖開發(fā)者在數(shù)據(jù)集的輸出端口處提供元數(shù)據(jù)。然后將該元數(shù)據(jù)傳播至“智能聯(lián)接”組件3006,該“智能聯(lián)接”組件3006計算對輸入數(shù)據(jù)集的記錄的聯(lián)接操作。例如,元數(shù)據(jù)從輸出端口3008傳播至輸入端口3010。然后元數(shù)據(jù)通過“智能聯(lián)接”組件3006而被轉換并且從“智能聯(lián)接”組件3006的輸出端口3016傳播至過濾組件3018的輸入端口3017。圖30b示出實現(xiàn)“智能聯(lián)接”組件3006的子圖。組件3006使用key_field參數(shù),其值表示聯(lián)接組件3050所執(zhí)行的聯(lián)接操作的關鍵字字段。組件3006還使用key_field參數(shù)作為用于包括條件排序組件3054和3056的條件。如果流入輸入端口3010的記錄已經按照key_field進行排序,則去掉排序組件3054。類似地,如果流入輸入端口3014的記錄已經按照key_field進行排序,則去掉排序組件3056。如果輸入記錄的流都尚未按照key_field進行排序,則排序組件3054和3056在記錄流入聯(lián)接組件3050之前對其進行排序。為了能夠通過該“智能聯(lián)接”組件來傳播轉換后的元數(shù)據(jù),圖開發(fā)者將“智能聯(lián)接”組件3006的輸出端口3016的元數(shù)據(jù)(例如,用于描述字段的元數(shù)據(jù))定義為第一輸入端口3010的元數(shù)據(jù)input0.metadata、第二輸入端口3014的元數(shù)據(jù)input1.metadata以及關鍵字字段參數(shù)key_fieldd的函數(shù):output.metadata=metadata_join(key_field,input0.metadata,input1.metadata)通過將函數(shù)參數(shù)綁定到值(相對于適當?shù)纳舷挛?并對結果執(zhí)行函數(shù)metadata_join來確定輸出端口元數(shù)據(jù)。在該示例中,由于端口3010和3014的元數(shù)據(jù)未定義,所以傳播的元數(shù)據(jù)被綁定到元數(shù)據(jù)參數(shù)input0.metadata和input1.metadata。用戶為輸出端口3008提供指定了從端口3008流至“智能聯(lián)接”組件3006的輸入端口3010的記錄的字段“a”和“b”的元數(shù)據(jù)。用戶還為輸出端口3012提供指定了從端口3012流至“智能聯(lián)接”組件3006的輸入端口3014的記錄的字段“a”和“c”的元數(shù)據(jù)。該用戶提供的元數(shù)據(jù)傳播到端口3010和3014。聯(lián)接操作的關鍵字字段是字段a,因此將“形式參數(shù)”key_field綁定到值“a”。函數(shù)metadata_join通過首先確定key_field參數(shù)的值是否是由input0.metadata和input1.metadata指定的兩個字段集中的成員來確定輸出元數(shù)據(jù)。如果是,則輸出元數(shù)據(jù)是兩個字段集的并集。如果不是,則輸出元數(shù)據(jù)表示空的字段集。在元數(shù)據(jù)傳播到“智能聯(lián)接”組件3006的輸入端口(或者以其它方式,例如由用戶提供)之后,“智能聯(lián)接”組件3006的輸出端口的轉換后的元數(shù)據(jù)包括字段a、b和c。然后,該轉換后的元數(shù)據(jù)可被傳播到其它組件。在該示例中,轉換后的元數(shù)據(jù)傳播到過濾組件3018。無論是由用戶提供還是在端口之間傳播,元數(shù)據(jù)都可以顯示給用戶。例如,用戶可以使用輸入設備(例如,鼠標)來選擇要為其查看元數(shù)據(jù)值的組件的一部分。也可以響應于這樣的用戶選擇來觸發(fā)元數(shù)據(jù)傳播。典型元數(shù)據(jù)傳播處理圖31示出典型元數(shù)據(jù)傳播處理3100的流程圖??衫缭趫D每次改變時、響應于用戶動作和/或剛好在圖運行之前執(zhí)行處理3100。處理3100生成3102工作列表,其中圖中的每個組件根據(jù)流所確定的部分定序來定序(例如,如果存在從組件a到組件b的流,則組件a出現(xiàn)在組件b之前)。在流不確定兩個組件之間的唯一順序的情況下,組件標記的字母順序可以用作決定因素。這為工作列表中的組件提供了穩(wěn)定的定序(假設組件標記是唯一的)。如果傳播處理3100對于圖而重復(例如,在添加新的組件之后重復),則新的工作列表在工作列表先前的組件之間保持相同的順序。處理3100起始于工作列表的開始處,并且對于工作列表中的每個組件,處理3100基于實現(xiàn)組件的子圖的規(guī)范(例如,子圖中的數(shù)據(jù)流)來在組件內向內傳播3104元數(shù)據(jù)(例如,從輸入端口向輸出端口,或者從輸出端口向輸入端口)。這種內部元數(shù)據(jù)傳播包括在非轉換數(shù)據(jù)路徑的任一端的端口之間傳遞未轉換的元數(shù)據(jù)。如上所述,內部元數(shù)據(jù)傳播還包括導出具有參考圖的參數(shù)和/或其它端口的元數(shù)據(jù)的元數(shù)據(jù)定義的端口的元數(shù)據(jù)。當處理3100遇到這樣的元數(shù)據(jù)定義時,處理3100評價需要其值來導出元數(shù)據(jù)的任何參數(shù)。在針對工作列表上的組件執(zhí)行內部元數(shù)據(jù)傳播之后,處理3100將元數(shù)據(jù)從具有該元數(shù)據(jù)的組件的每個端口向外傳播3106至沒有元數(shù)據(jù)的相關組件的端口。通過這種向外傳播獲取元數(shù)據(jù)的任何組件將移動3108至工作列表的末尾。處理3100在處理完工作列表上的最后一個組件之后終止3110。支持這類向外元數(shù)據(jù)傳播的組件之間的一類關系是兩個組件的端口(例如,從輸入端口到輸出端口,或者從輸出端口到輸入端口)之間的數(shù)據(jù)流鏈接。支持這類向外元數(shù)據(jù)傳播的組件之間的另一類關系是指示出一個端口的元數(shù)據(jù)也可以用于另一端口的鏈接。這類“元數(shù)據(jù)鏈接”不一定與數(shù)據(jù)流鏈接相對應。例如,端口可以具有到圖中的不特別地與任何端口相關聯(lián)的元數(shù)據(jù)的元數(shù)據(jù)鏈接。組件化子圖中的運行時參數(shù)在子圖被“組件化”地用作另一圖中的組件之前,定義組件的各種特性,諸如組件的輸入和/或輸出端口。對于包括具有運行時參數(shù)的組件的子圖,應選擇運行時參數(shù)的提示順序。由于圖中的組件不一定是按順序定序的,所以運行時參數(shù)可能有多個可能的全局定序來提示用戶。全局定序中的一些與關聯(lián)于每個組件的原始定序不一致。生成用于提示的全局定序是有幫助的,該全局定序盡可能地保留每個組件中的參數(shù)的定序,同時在適當時進行重新定序以考慮依賴性。例如,組件可以將詢問“要處理什么數(shù)據(jù)?”的提示定序在詢問“想在哪里存儲處理后的數(shù)據(jù)?”的提示之前。盡管有可能按任一順序提供提示,但也可以期望按該順序來提供提示。由于在評價所提示的運行時參數(shù)的處理中可能需要評價未提示的運行時參數(shù),因此從所有運行時參數(shù)的評價順序獲得提示順序。用于確定圖的運行時參數(shù)(包括不與任何組件相關聯(lián)的圖的參數(shù))的評價順序的一種方法包括基于表示參數(shù)之間的依賴性的一個或多個有向無環(huán)圖來執(zhí)行拓撲排序。然而,一些拓撲排序算法可能對參數(shù)進行不必要的重新定序,從而導致對運行時參數(shù)的不期望的提示順序。排序示例1在第一個示例中,參數(shù)排序處理提供了針對兩個圖組件的參數(shù)的初始參數(shù)列表:組件i和連接至組件i的組件ii。在該示例中,參數(shù)僅具有“組件內”依賴性。也就是說,組件的參數(shù)僅依賴于同一組件中的其它參數(shù)。參數(shù)定義如下:組件i包括以下參數(shù):x=${prompt_for“text”}y=x+${prompt_for“text”}z=x+y+${prompt_for“text”}q=${prompt_for“text”}組件ii包括以下參數(shù):a=${prompt_for“text”}b=a+${prompt_for“text”}c=${prompt_for“text”}列出參數(shù)的順序定義了要提示用戶以獲得值的期望順序。初始參數(shù)列表保持了每個組件的這種“初始定序”。向每個參數(shù)分配一個“序數(shù)”,以指示出該參數(shù)在初始定序中的位置。下表列出了該初始定序中的參數(shù)。參數(shù)序數(shù)依賴性x0y1xz2x,yq3a4b5ac6“依賴”列指示出列出的參數(shù)所依賴的其它參數(shù)。依賴性對參數(shù)的評價施加了定序約束:參數(shù)需要在由另一個參數(shù)使用(例如,引用)之前定義?!俺R姷耐負渑判颉彼惴ū闅v列表,從而在每次遍歷時將具有零依賴性的參數(shù)傳遞至有序輸出列表。每遍過后,將任何傳遞的參數(shù)從依賴列移除。重復該處理,直到所有參數(shù)都被傳遞。輸出列表中的參數(shù)的順序表示“最終定序”,使得依賴于其它參數(shù)的參數(shù)在其它參數(shù)已被評價之后進行評價。在該示例中,在第一遍時,參數(shù)x,q,a和c被傳遞至輸出列表。在第二遍時,參數(shù)y和b被傳遞至輸出列表。在第三遍和最后一遍時,參數(shù)z被傳遞至輸出列表。因此,參數(shù)的最終定序是:x、q、a、c、y、b、z。雖然該定序確實滿足參數(shù)依賴性所施加的定序約束,但是它對參數(shù)進行了不必要的重新定序。在該示例中,初始定序也滿足參數(shù)依賴性所施加的定序約束。用于確定針對滿足定序約束的圖的參數(shù)的評價順序的其它方法一定遵循初始定序。例如,一些方法對參數(shù)進行定序以滿足定序約束,根據(jù)基于初始定序的基準來進行定序。所述基準可以包括各種基準中的任意基準,該任意基準優(yōu)先將順序保持為接近于初始定序(例如,基于對初始排序的改變來使度量最小化)。在一些情況下,可能不存在唯一的“最佳”定序,這是因為根據(jù)基準,多個定序可以同樣很好地滿足給定基準。遵循初始定序的方法的示例是“修改后的拓撲排序”方法。在該方法中,基于初始定序的基準是:在傳遞不依賴于任何未傳遞參數(shù)的前一參數(shù)之前,使從初始列表傳遞的參數(shù)的數(shù)量最小化。換句話說,“修改后的拓撲排序”在傳遞具有零依賴性的下一參數(shù)之前將所傳遞的參數(shù)從依賴列中移除。對于以上示例,“修改后的拓撲排序”方法生成與初始定序相同的最終定序:x、y、z、q、a、b、c。遵循初始定序的修改后的拓撲排序處理以下為兩個典型“修改后的拓撲排序”處理賦予偽代碼,其中,該兩個處理都遵循由所分配的每個參數(shù)的序數(shù)所確定的初始定序。第二個處理包括優(yōu)化,以提高某些情況下的時間效率。這兩個處理操縱由參數(shù)的輸入數(shù)據(jù)所生成的數(shù)據(jù)結構。假設有n個要定序的參數(shù),則輸入數(shù)據(jù)包括由唯一的參數(shù)名稱、命名參數(shù)所依賴的參數(shù)集(稱為“依賴集”)、以及存儲與命名參數(shù)相關的信息的可選屬性數(shù)據(jù)對象組成的n個三元組的列表。與該輸入數(shù)據(jù)相關聯(lián)的是表示參數(shù)之間的依賴性的一個或多個有向無環(huán)圖,稱為“依賴圖”。每個唯一的參數(shù)名稱與依賴圖中的節(jié)點相對應,并且相關的依賴集與其它節(jié)點到該節(jié)點的鏈接集相對應。因此,鏈接從第一參數(shù)的第一節(jié)點指向依賴于該第一參數(shù)的第二參數(shù)的第二節(jié)點??蛇x地,鏈接方向和參數(shù)依賴性之間的對應關系可以反向。輸出數(shù)據(jù)結構result_list包括來自重新定序(如果需要的話)的輸入數(shù)據(jù)的n個參數(shù)的列表,使得當優(yōu)先將順序保持為接近于初始定序時,在參數(shù)用于評價另一參數(shù)之前對該參數(shù)進行評價。為生成輸出數(shù)據(jù)結構result_list,處理通過將參數(shù)一次一個地從工作數(shù)據(jù)結構param_list傳遞至數(shù)據(jù)輸出結構result_list來“消除”參數(shù)。在消除了所有參數(shù)之后,輸出數(shù)據(jù)結構是完整的。第一個“修改后的拓撲排序”處理包括兩個階段。在第一階段,處理基于用于生成排序后的輸出數(shù)據(jù)結構的輸入數(shù)據(jù)來建立工作數(shù)據(jù)結構。在第二階段,處理根據(jù)這些工作數(shù)據(jù)結構所表示的依賴約束來對參數(shù)進行迭代排序和消除。處理在第一階段中所建立的工作數(shù)據(jù)結構中的一些是詞典,這些詞典是基于散列的數(shù)據(jù)結構??梢栽趏(logn)時間有效地訪問詞典中的項。在第一階段建立以下典型數(shù)據(jù)結構:parm_list[index]:利用號碼索引來進行索引的未消除參數(shù)名稱的有序列表(其中index=0與列表中的第一項相對應)。該數(shù)據(jù)結構是“動態(tài)的”(即,在處理的執(zhí)行期間發(fā)生改變)。按位置對列表進行索引,使得如果從列表中間移除一項,則在被移除的項之后的項的索引相應地移動。n_dependencies_dict[name]:按參數(shù)名稱(name)鍵入的詞典,其條目包含鍵入的參數(shù)所依賴的參數(shù)的數(shù)量。該詞典是動態(tài)的。dependers_dict[name]:按參數(shù)名稱(name)鍵入的詞典,其條目是(也按參數(shù)名稱鍵入的)表示依賴于鍵入?yún)?shù)的參數(shù)集的詞典。該詞典是“靜態(tài)的”(即,不會在處理的執(zhí)行期間發(fā)生改變)。order_dict[name]:按參數(shù)名稱(name)鍵入的詞典,其存儲初始定序中的參數(shù)的序數(shù)位置(范圍從0到n-1的整數(shù))。該詞典是靜態(tài)的。attribute_dict[name]:按參數(shù)名稱(name)鍵入的詞典,其存儲鍵入?yún)?shù)的可選屬性數(shù)據(jù)對象。該詞典是靜態(tài)的。result_list[index]:利用號碼索引來進行索引的表示處理的輸出的參數(shù)名稱和屬性的有序列表(其中index=0與列表中的第一項相對應)。該數(shù)據(jù)結構初始為空。該數(shù)據(jù)結構是動態(tài)的。為了分析處理的時間效率,假設依賴圖的平均“度”(或者來自節(jié)點的鏈接數(shù))為z。建立這些數(shù)據(jù)結構花費了o(n)時間,n_dependencies_dict和dependers_dict除外,后兩者花費了o(n*z)時間。在第二階段,處理根據(jù)排序基準by_n_deps_and_order來對param_list數(shù)據(jù)結構中的參數(shù)進行排序,其中,該排序基準by_n_deps_and_order首先利用這些參數(shù)所依賴的未消除參數(shù)的數(shù)量(即,利用這些參數(shù)的n_dependencies_dict的值)從低到高對這些參數(shù)進行排序,然而利用這些參數(shù)的序數(shù)(即,利用這些參數(shù)的order_dict的值)從低到高對這些參數(shù)進行排序。然后處理消除排序后的param_list中的第一參數(shù)。該參數(shù)的n_dependencies_dict的值應當為零。(如果排序后的sortedparam_list中的第一參數(shù)的n_dependencies_dict的值不為零,則標記錯誤。)為了消除參數(shù),處理將該參數(shù)(連同任何相應屬性一起)附加到result_list,并將所有該參數(shù)的所有依賴項(即,dependers_dict中的參數(shù))的依賴計數(shù)(即,n_dependencies_dict的值)減1。最后,從parm_list刪除該參數(shù)。重復對所得到的第一參數(shù)的這種排序和消除,直到所有參數(shù)都被消除為止。以下是消除過程的偽代碼定義:defeliminate(list,index):result_list.append((list[index],attribute_dict[list[index]]))fordependerindependers_dict[list[index]]:n_dependencies_dict[depender]=n_dependencies_dict[depender]-1deletelist[index]消除過程的參數(shù)是列表(其值例如為parm_list)和索引。函數(shù)result_list.append將位置索引所指示的列表項連同其相關聯(lián)的屬性附加到result_list。然后,針對正在消除的參數(shù)上所鍵入的作為dependers_dict數(shù)據(jù)結構的成員的每個參數(shù)依賴項,該過程減去n_dependencies_dict的值。然后,該過程從列表刪除參數(shù)。消除過程的運行時間是o(zlogn)。以下是第一個“修改后的拓撲排序”處理的排序/消除循環(huán)的偽代碼:處理首先根據(jù)上述的排序基準by_n_deps_and_order、使用對param_list的參數(shù)進行定序的函數(shù)parm_list.sort(by_n_deps_and_order)來對param_list進行初始排序。然后處理進行消除過程并且消除過程之后進行對param_list的另一排序,直到param_list為空為止。處理進行檢查以確保param_list中的第一參數(shù)的依賴數(shù)為零。如果不為零,則處理移除該參數(shù)、記錄循環(huán)錯誤并繼續(xù)。排序花費了o(n\logn),并且循環(huán)范圍為n,使得對循環(huán)的整個運行時間的估計為o(n2logn)。第二個“修改后的拓撲排序”處理利用依賴圖稀疏的情況,使得z<<n。在一個初始排序之后,處理可以保持不依賴于任何其它參數(shù)的參數(shù)的列表候選的排序。這樣減少了如下所述的預期運行時間。以下是第二個“修改后的拓撲排序”處理的偽代碼:處理首先根據(jù)上述的排序基準by_n_deps_and_order、使用對param_list的參數(shù)進行定序的函數(shù)parm_list.sort(by_n_deps_and_order)來對param_list進行初始排序。然后,處理進行具有三個部分(標記為“#部分1”、“#部分2”以及“#部分3”)的循環(huán)。在部分1中,處理建立僅包含具有零依賴性的參數(shù)的候選列表。處理掃描parm_list中的所有參數(shù),并將其附加到候選,從而保留其相對定序。在部分2中,處理進行循環(huán),其中,消除來自候選的參數(shù)并將新的參數(shù)合并到候選中。從候選中消除并從param_list中刪除候選中被保存為this_parm的第一參數(shù)。函數(shù)get_new(this_parm)返回作為新消除的this_parm的dependers_dict的成員并具有零依賴性的參數(shù)名稱列表。然后根據(jù)by_n_deps_and_order對這些參數(shù)(表示已經移除了最后依賴的參數(shù))進行排序(以確保這些參數(shù)按照其各自的序數(shù)進行定序),并將這些參數(shù)合并到候選中。因此,候選列表保持按序數(shù)進行排序的零依賴性參數(shù)的列表。如果發(fā)生了“循環(huán)錯誤”(例如,在兩個參數(shù)根據(jù)彼此進行定義的情況下),僅進入部分3。在這種情況下,處理再次對parm_list進行排序,并且如果parm_list中的第一參數(shù)具有非零依賴性,則刪除該第一參數(shù)、并且循環(huán)重復部分1。假設沒有循環(huán)錯誤,則僅在開始對n個參數(shù)的列表parm_list進行排序,從而導致排序時間為o(nlogn)。此后,排序僅發(fā)生在通過消除候選列表頭部的參數(shù)所新生成的零依賴性參數(shù)的更小列表中。該列表的大小(平均來說)小于z,從而導致排序時間為o(zlogz)、且合并時間為o(z)。因此,循環(huán)的一次迭代的時間為o(zlogz),而總時間為o(nzlogz+nlogn)。對于z不隨著n增加而增長的情況,總時間有效地為o(nlogn)。排序示例2在另一示例中,參數(shù)排序處理(例如,第一個或第二個“修改后的拓撲排序”處理)確定如圖32a所示的具有圖組件3202、3204和3206的圖3200的運行時參數(shù)的初始列表。圖3200還具有與輸入數(shù)據(jù)集3210的輸出端口3208以及輸出數(shù)據(jù)集3214的輸入端口3212相關聯(lián)的運行時參數(shù)。在該示例中,參數(shù)具有“組件內”依賴性和“組件間”依賴性兩者。即,組件的參數(shù)依賴于同一組件中的參數(shù)以及其它組件中的參數(shù)。在該示例中,組件間依賴性由于組件之間的流動而產生,其使得能夠傳播一些參數(shù)所依賴的元數(shù)據(jù)。在圖32a中由從第一參數(shù)或端口到第二參數(shù)或端口的虛線箭頭來表示依賴性。到端口的箭頭表示鏈接參數(shù)的值從該端口傳播到下游端口。來自端口的箭頭表示值從上游端口傳播到鏈接參數(shù)。從第一參數(shù)到第二參數(shù)的箭頭表示第二參數(shù)的值依賴于(例如,引用)第一參數(shù)的值。圖32b基于圖3200而示出參數(shù)p0、p1、p2、p4、p5和p6之間的定序約束的依賴圖3250。圖32c基于圖3200而示出參數(shù)p3、p7、p8和p9之間的定序約束的依賴圖3252。參數(shù)排序處理根據(jù)圖3200中的元素放置的順序來向針對各個圖元素的十個參數(shù)p0、p2、...、p9中的每一個分配序數(shù)。在圖32a中,(例如,用戶使用gde802)添加到圖3200的第一個圖元素是具有參數(shù)p0、p1和p2的組件3202。所添加的第二個元素是具有參數(shù)p3、p4和p5的組件3206。所添加的第三個元素是具有參數(shù)p6的數(shù)據(jù)集3210。所添加的第四個元素是具有參數(shù)p7的數(shù)據(jù)集3214。所添加的最后一個元素是沒有運行時參數(shù)的數(shù)據(jù)集3216。下表列出了由所分配的序數(shù)定義的初始定序中的參數(shù)。以下在各個處理階段的param_list和result_list中的參數(shù)的列表與上述的第一個“修改后的拓撲排序”處理相對應。param_list被顯示為根據(jù)各個階段的排序基準by_n_deps_and_order進行排序。以下在各個處理階段的候選和result_list中的參數(shù)的列表與上述的第二個“修改后的拓撲排序”處理相對應。由于參數(shù)在每個階段保持相同的順序,因此沒有必要在各階段之間對候選進行排序,因此,參考圖33,“修改后的拓撲排序”處理3300把向用戶提示運行時參數(shù)的值的期望第一定序3302、和這些參數(shù)的定序約束3304(例如,依賴圖3350和3352)作為輸入。處理3300根據(jù)該期望第一定序3302來提供滿足定序約束的參數(shù)集的新定序3306。典型用途通常,用戶坐在web界面808的前方,并在存儲庫104中查找該用戶想要運行的應用的圖。通過掃描與應用圖相關聯(lián)的所有對象,web界面808生成允許用戶為應用的運行時參數(shù)指定值的頁面表單。一旦已經指定了所有運行時參數(shù),將應用和參數(shù)設置組合在一起,作為被調度以供執(zhí)行810執(zhí)行的作業(yè)。當運行該作業(yè)時,執(zhí)行810以已知的方式對應用進行排隊,以供在并行操作系統(tǒng)806下執(zhí)行。并行操作系統(tǒng)806收集跟蹤信息和作業(yè)狀態(tài),并將該信息存儲在存儲庫804中,使得用戶和管理員可以跟蹤作業(yè)的進程和性能。示例圖21是表示在沒有運行時參數(shù)的情況下的上卷應用的圖2100的示圖。該圖計算每種類型的賬號數(shù)量,并將結果寫入輸出文件。創(chuàng)建圖的開發(fā)者已經確定了該應用的每個方面:輸入文件組件2102的名稱、輸入數(shù)據(jù)的格式、用于在hashrollup組件2104中對數(shù)據(jù)進行上卷的關鍵字和轉換規(guī)則、輸出格式、以及輸出文件組件2106的名稱。用戶只能精確地按照定義來執(zhí)行該圖。圖22是表示圖21中的上卷應用的運行時參數(shù)化版本的圖2200的示圖。該應用的數(shù)據(jù)流圖結構與非運行時參數(shù)化版本非常類似,但是該應用更加靈活。通過運行時參數(shù),最終用戶可以指定抽象輸入數(shù)據(jù)集2202(將會從中導出輸入文件名稱和格式的存儲對象)的名稱、hashrollup組件2204的上卷關鍵字和上卷規(guī)則、以及輸出文件組件2206的名稱。圖23是表示針對圖22的示例應用的運行時參數(shù)網格2300的圖形對話框的一個實施例的示圖。該圖是圖9所示的參數(shù)網格的填寫版本。注意,許多默認參數(shù)是使用如上所述的prompt_for偽函數(shù)來定義的,因此需要通過web界面808的用戶輸入。雖然該圖的外觀與非運行時參數(shù)化應用圖相差甚微,但是一個或多個參數(shù)網格(或其它合適控制)使得開發(fā)者能夠完全跟蹤控制圖的執(zhí)行的所有參數(shù)。圖24a是表示由web界面808根據(jù)圖23的參數(shù)網格2300中的信息而生成的表單2400的圖形對話框的一個實施例的示圖。在該示例中,表單2400呈現(xiàn)用戶輸入的四個運行時參數(shù):輸入數(shù)據(jù)集存儲庫路徑2402、上卷關鍵字2404、上卷規(guī)則2406以及輸出路徑2408。圖17b是用戶用參數(shù)值填寫的圖24a中的表單2400的示圖。使用與運行時參數(shù)2402-2408相關聯(lián)的直接輸入和/或編輯或瀏覽器控制按鈕,用戶可以提供相應的參數(shù)值2410-2416,以執(zhí)行相關聯(lián)的圖。圖25是表示運行時參數(shù)化上卷和聯(lián)接應用的圖2500的示圖。圖26是表示針對圖25的示例應用的運行時參數(shù)網格2600的圖形對話框的一個實施例的示圖。此處,應用的一些方面已被參數(shù)化,但大多數(shù)方面(包括聯(lián)接關鍵字和輸入數(shù)據(jù)集)保持不變。圖27是表示由web界面808根據(jù)圖26的參數(shù)網格2600中的信息而生成的表單2700的圖形對話框的一個實施例的示圖。注意,由于在顯示頂級表單時已知上卷的輸入類型,因此可以就地提示上卷規(guī)則2702。圖28是表示運行時參數(shù)化上卷-聯(lián)接-排序應用的圖2800的示圖。雖然與圖25中的示例類似,但條件排序組件2802已被添加到圖2800。圖29是表示針對圖28中所示的示例應用的運行時參數(shù)網格2900的圖形對話框的一個實施例的示圖。只有當用戶表示期望排序時,才提示sort_key運行時參數(shù)2902。為了獲得該效果,開發(fā)將prompt_for偽函數(shù)放在sort_key運行時參數(shù)2902的默認值2904的if條件測試內。if條件測試引用第二個運行時參數(shù)do_sort2906。定義do_sort參數(shù)2906的默認值字段2908和描述字段2910,以生成詢問用戶以獲得文本提示“應該存儲數(shù)據(jù)?”的真/假或是/否答案的單選提示。如果針對do_sort參數(shù)2906所提供的值為“真”,則將包括排序組件2802作為運行時的圖的一部分。否則,將會根據(jù)排序組件2802的指定條件解釋從圖中完全移除或者用流來代替排序組件2802。腳本實現(xiàn)雖然gde802有助于構建參數(shù)化圖,但有時存在人們想要提供基于表單的界面的非圖程序。使用應用級pl和存儲庫804,可以對任意外殼腳本進行參數(shù)化。例如,可以以與以下結構類似的結構向文件寫入應用的描述:通用計算機實現(xiàn)本發(fā)明可以在硬件、軟件或者兩者的組合(例如,可編程邏輯陣列)中實現(xiàn)。除非另有指定,否則作為本發(fā)明的一部分而包括的算法不會固有地與任何特定的計算機或其它設備相關。特別地,各種通用機器可以與根據(jù)這里的教導所寫入的程序一起使用,或者其可以更方便地構建更專門化的設備來進行所需的方法步驟。然而,優(yōu)選地,本發(fā)明在一個或多個可編程計算機系統(tǒng)上所執(zhí)行的一個或多個計算機程序中實現(xiàn),其中,該一個或多個可編程計算機系統(tǒng)各自包括至少一個處理器、至少一個數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入裝置或端口以及至少一個輸出裝置或端口。在處理器上執(zhí)行程序代碼以進行這里描述的功能。每一個這種程序可以在任何期望的計算機語言(包括機器編程語言、匯編編程語言、或高級過程編程語言、邏輯編程語言、或面向對象編程語言)中實現(xiàn),以與計算機系統(tǒng)進行通信。在任何情況下,語言可以是編譯語言或解釋語言。優(yōu)選將每一個這種計算機程序存儲在通用或專用可編程計算機可讀取的存儲介質或裝置(例如,固態(tài)介質、磁性介質、或光學介質)上或者下載至該存儲介質或裝置,以在利用計算機系統(tǒng)讀取存儲介質或裝置以進行這里所述的過程的情況下配置計算機并使該計算機進行工作。本發(fā)明的系統(tǒng)還可被視為作為配置有計算機程序的計算機可讀存儲介質來實現(xiàn),其中如此配置成的介質使計算機系統(tǒng)以特定且預定義的方式進行工作,以進行這里所述的功能。已經描述了本發(fā)明的許多實施例。然而,應當理解,可以在不偏離本發(fā)明的精神和范圍的情況下作出各種修改。例如,上述的許多功能步驟可以在基本上不影響整體處理的情況下按不同的順序進行,例如,可以按相反的順序來進行圖11中的步驟1102和1112。因此,其它實施例在所附權利要求書的范圍內。執(zhí)行表示為圖的計算計算基板的概覽根據(jù)本發(fā)明的用于執(zhí)行表示為圖的計算的圖執(zhí)行系統(tǒng)和圖執(zhí)行方法通常將用于具有以下常用設備的計算環(huán)境或基板中,其中,這些常用設備為通信信道、數(shù)據(jù)存儲、處理控制和數(shù)據(jù)訪問方法。出于該原因,將會參考這樣的參考基板來描述圖執(zhí)行系統(tǒng)和圖執(zhí)行方法,盡管該系統(tǒng)和方法不限于這樣的基板。關于通信信道,參考基板提供了創(chuàng)建和破壞通信信道并且如果分布式環(huán)境中要使用上述系統(tǒng)和方法、則對遠程處理器進行同樣操作的設備。這樣的通信信道可以用于在同一處理器上的兩個處理之間或者在不同處理器上的兩個處理之間發(fā)送數(shù)據(jù)??梢蕴峁┒喾N通信信道。關于數(shù)據(jù)存儲,參考基板提供了創(chuàng)建數(shù)據(jù)存儲并且如果分布式環(huán)境中要使用上述系統(tǒng)和方法、則對遠程處理器進行同樣操作的設備。數(shù)據(jù)存儲是保留作業(yè)之間的或者多個處理階段之間的數(shù)據(jù)的存儲器?;暹€提供了允許處理讀取/寫入數(shù)據(jù)存儲的內容的機構。在一些情況下,基板可以提供處理可以讀取/寫入位于遠程節(jié)點上的數(shù)據(jù)存儲的內容的機構,但是本發(fā)明不需要這樣的設備。關于處理控制,基板提供了用以開始處理、判斷該處理何時完成執(zhí)行、以及判斷該處理是否正常終止的設備。該基板提供了如果分布式環(huán)境中要使用上述系統(tǒng)和方法、則開始對遠程處理器的處理的設備。開始處理的操作必須允許傳遞參數(shù),其中,該參數(shù)包括要運行的程序的名稱以及要訪問的任何文件或通信信道的標識符。關于數(shù)據(jù)訪問方法,基板提供了針對該數(shù)據(jù)訪問方法的、基板上所運行的處理可以使用的設備。可以開發(fā)有用的基板,作為通過unix操作系統(tǒng)的各個版本中的任一版本而提供的基板的延伸。unix操作系統(tǒng)提供了兩種類型的通信信道:命名管道和tcp/ip流。命名管道是可用于在同一節(jié)點上的多個處理之間發(fā)送數(shù)據(jù)的點對點通信信道。(術語“節(jié)點”是指可能具有多個處理器和存儲裝置或數(shù)據(jù)存儲、但具有單個共享內存池的計算機。)命名管道由文件系統(tǒng)中的路徑標識。tcp/ip流是可用于在tcp/ip網絡(例如,因特網)的任何位置上的兩個處理之間發(fā)送數(shù)據(jù)的點對點通信信道。建立tcp/ip流需要使用兩個處理建立連接的協(xié)議。許多這樣的協(xié)議在使用中,但是大多數(shù)這樣的協(xié)議面向建立客戶端-服務器連接而不是系統(tǒng)所需的對等連接。擴展基板提供了一種稱為共享內存的附加類型的信道。共享內存是可由多個處理訪問并且可以用于以已知方式發(fā)送數(shù)據(jù)的內存池。共享內存信道包括用于同步訪問的機構。共享內存適用于在同一節(jié)點的多個處理之間發(fā)送數(shù)據(jù),并且是命名管道的有效替代。為了與本發(fā)明一起使用,擴展基板的tcp/ip連接協(xié)議應該適合于對等鏈接。在這樣的協(xié)議中,實體創(chuàng)建“流標識符”,并安排期望流的兩個端點以接收流標識符。這兩個端點向基板提供流標識符,并作為響應而接收到tcp/ip流的連接。使用相同的機構來建立共享內存通信信道。這種協(xié)議的創(chuàng)建是本領域眾所周知的。unix操作系統(tǒng)提供了三種數(shù)據(jù)訪問方法:文件接口、流接口和文件描述符接口。利用文件接口,可以向程序提供文件的名稱,然后程序可以打開文件,對文件進行讀取、寫入,并且在文件內進行搜索。在流接口內,可以向程序提供文件或命名管道的名稱,然后程序可以打開該文件或命名管道,對該文件或命名管道進行讀取或寫入。流接口不允許使用搜索操作或其它僅適用于文件的操作。利用文件描述符接口,(例如利用數(shù)量進行標識的)文件描述符可以在程序被調用之前綁定到文件、命名管道或tcp/ip流。然后程序可以對文件描述符進行讀取或寫入。這類似于流接口,除了一點:利用流接口,可以在程序的外部(即,在程序被調用之前)打開流。為了與本發(fā)明一起使用,擴展基板提供了一種附加的訪問方法:流對象連接(soc)。通過向擴展基板呈現(xiàn)可以作為文件或命名管道的名稱、或者要用于創(chuàng)建tcp/ip流或共享內存信道的標識符的“流對象標識符”(唯一字符串)、“通信方法名稱”、以及“信道/文件標識符”,來創(chuàng)建“流對象”。呼叫方還必須提供源和目的地所在節(jié)點的身份。unix操作系統(tǒng)提供一種類型的數(shù)據(jù)存儲:文件。文件是通常存儲在盤上的字節(jié)序列。文件由文件系統(tǒng)中的路徑、以及標識文件的主機(即,文件所在的節(jié)點)的標識符標識。unix操作系統(tǒng)提供處理控制。為了開始處理,提供以下信息:要運行的程序的名稱、任何命令行參數(shù)、以及文件描述符的任何綁定。命令行參數(shù)可以包括程序所要訪問的文件和命名管道的名稱。文件描述符的每個綁定包含文件描述符數(shù)量以及標識文件或命名管道的路徑或者標識tcp/ip流的輔助信道。另外,命令行參數(shù)可以包含環(huán)境變量的值,unix程序通常需要這些值來描述某些資源可能位于何處、或者對執(zhí)行選項進行配置。圖的概覽本發(fā)明的系統(tǒng)跟蹤稍后將分別描述的處理頂點集、文件頂點集以及數(shù)據(jù)鏈接集的狀態(tài)變量中的計算狀態(tài)。稍后將描述使用這些結構的系統(tǒng)的操作。為了示出本發(fā)明的一些概念,將使用現(xiàn)有技術的示例。圖34a示出通過現(xiàn)有技術薪資系統(tǒng)的簡化示例的數(shù)據(jù)流。該示例的輸入是包含所有雇員的永久記錄的舊的主文件3410、以及包含一周的時間表的更新文件3412。舊的主文件3410按雇員id進行排序。該圖示出以下數(shù)據(jù)流:(1)在步驟3414中對更新文件3412進行排序。(2)在步驟3416中檢查更新,并將不良記錄放到不良記錄文件3418中。(3)在步驟3420中處理來自步驟3416加上舊的主文件3410的更新,以產生新的主文件3422加上工資集3424。處理頂點處理頂點包含以下信息:·處理頂點標識符;·程序模板;·標識工作目錄(即,可能創(chuàng)建過期文件的目錄)的工作目錄標識符;以及·標識工作節(jié)點(即,要發(fā)生處理的節(jié)點)的工作節(jié)點標識符;·具有以下值之一的狀態(tài)變量:禁用、啟用、可運行、不可運行、或完成(初始為禁用)?!び靡员硎卷旤c是否為(以下討論的)適配器頂點的標記。下表示出用于圖34a所示的排序、檢查和處理過程(程序)的三個處理頂點的內容:文件頂點文件頂點與文件相關并包含以下信息:·文件頂點標識符;·數(shù)據(jù)節(jié)點標識符;·數(shù)據(jù)文件標識符;·工作節(jié)點標識符,用于標識希望訪問文件的程序可以使用的工作節(jié)點(該節(jié)點通常將等同于數(shù)據(jù)節(jié)點);·工作目錄標識符,用于標識希望訪問文件的程序可以在何處創(chuàng)建過期文件(這通常與數(shù)據(jù)文件在同一文件系統(tǒng)中);以及·具有以下值之一的狀態(tài)變量:完結、未完結(初始為未完結)。在計算基板提供文件以外的數(shù)據(jù)存儲的情況下,文件頂點中的信息可以擴展以包括表示數(shù)據(jù)存儲的類型的指示符以及標識和使用數(shù)據(jù)存儲所需的信息。下表示出圖34a的圖所示的文件的五個文件頂點的內容:數(shù)據(jù)鏈接數(shù)據(jù)鏈接(或簡單地縮寫為“鏈接”)包含以下信息:·源頂點-文件頂點或處理頂點;·源端口標識符-如果源是文件頂點,則僅允許輸出;·目的地頂點-文件頂點或處理頂點;·目的地端口標識符-如果目的地是文件頂點,則僅允許輸入;·通信方法標識符,其可以是未綁定的、或者是諸如文件、命名管道、tcp/ip或共享內存等的通信信道類型的名稱(初始為未綁定的);以及·狀態(tài)變量,其可以是啟動的或未啟動的(初始為未啟動的)。不止一個數(shù)據(jù)鏈接可以連接到給定文件頂點或處理頂點的給定端口。在圖34a中,連接箭頭用圖形描繪處理頂點和文件頂點之間的聯(lián)接。本發(fā)明中以更具體的形式給出鏈接的概念。轉到圖34b,圖3430示出根據(jù)本發(fā)明從圖34a所示的圖3400得到的處理頂點、文件頂點以及數(shù)據(jù)鏈接。下表將圖3430中示出的七個數(shù)據(jù)鏈接3432、3434、3436、3438、3440、3442和3444制成表格:程序模板處理頂點包括程序模板。程序模板包含與程序有關的兩種基本信息:(1)調用程序所需的信息,諸如程序名稱、命令行參數(shù)和和環(huán)境變量;以及(2)描述程序訪問數(shù)據(jù)的手段的端口描述符的數(shù)組。調用信息的確切形式取決于計算基板。對于已經描述的基于unix的基板,程序名稱是可執(zhí)行文件的名稱加上由空格分隔的一系列字符串組成的命令行參數(shù)。這些字符串中的一些可以是“$portname”的形式,其中“portname”是模板中一個端口的名稱,并且該端口必須使用文件接口或流接口數(shù)據(jù)訪問方法。在這種情況下,字符串“$portname”將在調用時被連接到該端口的文件或命名管道的名稱代替。下表示出圖34b的圖3430所示的三個程序(處理)的說明性程序模板的內容。調用程序所需的信息可以以兩種形式提供。首先,信息可以顯式地存儲在如上表所示的程序模板中。其次,該信息可以動態(tài)地生成,在這種情況下,生成該信息的例程的地址將存儲在程序模板中。程序模板中的端口描述符包含如上表最右邊的三個元素所示的以下信息:·端口的端口標識符;·關于端口是否用于輸入或輸出的指示;以及·可接受方法代碼,諸如reqsfile、reqsnamedpipe、reqsfd或reqssoc(“reqs”代表“需要”),其指示出哪些通信方法是端口可接受的。這些可接受方法代碼是指計算基板所支持的數(shù)據(jù)訪問方法。驅動程序轉到圖35,驅動程序3500(或者簡單地縮寫為“驅動”)提供了用于基于通過用戶界面3504從用戶3502接收到的輸入來描繪圖的手段。由驅動3500生成表示特定圖(諸如圖34b所示的圖)的一個或多個圖數(shù)據(jù)結構3506。然后,驅動3500的圖執(zhí)行控制功能3508允許驅動3500以任何順序以及在需要與外部處理3512進行交互時進行以下外部控制3510功能:·創(chuàng)建處理頂點;·創(chuàng)建文件頂點;·在任意一對(任一種)頂點之間創(chuàng)建數(shù)據(jù)鏈接;·將處理的當前狀態(tài)從禁用變?yōu)閱⒂茫灰约啊ぶ率箞D被執(zhí)行。驅動3500最終響應于用戶3502作出的請求并且使用用戶3502通過用戶界面3504所提供的信息來進行這些操作。用戶3502可以是直接通過圖形用戶界面向驅動3500提供輸入的個人??蛇x地,用戶3502可以是例如通過面向對象接口或過程接口來控制驅動3500的單獨程序。以這種方式,用戶3502可以使用驅動3500來建立并控制圖的執(zhí)行。在用戶3502提供了標識符、程序模板、工作節(jié)點和工作目錄的情況下,驅動3500可以創(chuàng)建圖的處理頂點。工作目錄可以基于工作節(jié)點而被賦予默認值。在用戶3502提供了標識符、數(shù)據(jù)節(jié)點、數(shù)據(jù)文件名、工作節(jié)點和工作文件名的情況下,驅動3500可以創(chuàng)建圖的文件頂點。在優(yōu)選實施例中,工作節(jié)點默認為數(shù)據(jù)節(jié)點。工作文件名可以基于工作節(jié)點和/或數(shù)據(jù)文件名而被賦予默認值。在用戶3502提供了源頂點、目的地頂點、源端口標識符和目的地端口標識符的情況下,驅動3500可以在圖的任意一對頂點之間創(chuàng)建數(shù)據(jù)鏈接。在優(yōu)選實施例中,源端口標識符默認為輸出,并且目的地端口標識符默認為輸入。通過使用戶3502能夠控制處理頂點的啟用/禁用狀態(tài),驅動3500使該用戶3502能夠通過選擇性地啟用處理頂點的子集來對以下描述的處理按照執(zhí)行處理的順序執(zhí)行控制。執(zhí)行圖轉到圖36,在生成初始圖之后,驅動3500控制圖的執(zhí)行,并因此控制圖所描繪的處理。當驅動3500執(zhí)行圖時,其通過進行以下一般階段a-i來執(zhí)行圖:a.只要處理頂點中的任一個處于啟用狀態(tài),驅動3500就重復以下步驟b-i。驅動3500有時可以省略階段c、d和i,并且可以使步驟b、c、e和h中所進行的操作混合。b.驅動3500準備好圖以供執(zhí)行。在該階段,驅動3500標識可運行的處理頂點、選擇用于鏈接的通信方法,并且可以生成適配器節(jié)點,如將會描述地那樣。c.驅動3500啟動數(shù)據(jù)鏈接,如稍后將會詳細描述地那樣。在該階段,驅動3500創(chuàng)建實現(xiàn)通信方法所需的特定計算結構,如將會描述地那樣。d.驅動3500創(chuàng)建計算基板所需的任何其它數(shù)據(jù)結構或文件。對于上述的擴展基板,驅動3500創(chuàng)建鏈接文件,如將會描述地那樣。這允許程序在運行時訪問圖連接信息。e.驅動3500啟動處理,如將會描述地那樣。f.驅動3500等待處理終止。當所有處理已成功終止或者當任何處理異常終止時,該階段完結。g.如果任何處理異常終止,則中斷圖的執(zhí)行。h.否則,可運行狀態(tài)中的所有處理頂點轉變?yōu)橥瓿蔂顟B(tài)。如果沒有處理頂點處于可運行狀態(tài),則將會進行清理階段i,并且將控制返回給呼叫方(例如,驅動3500的用戶3502)并指出執(zhí)行停止。i.驅動3500清理數(shù)據(jù)鏈接和鏈接文件,如將會描述地那樣。這清理了節(jié)點c和d中所創(chuàng)建的一些數(shù)據(jù)結構。以下描述了特定階段的其它詳情。階段b:準備好圖以供執(zhí)行轉到圖37a,驅動3500訪問用戶202初始描繪的圖,并通過應用圖轉換來準備好該圖以供執(zhí)行(步驟3700)。在進行這些轉換的過程中,以已知的方式遍歷定義初始圖的圖數(shù)據(jù)結構,以提取每個頂點和任何相關鏈接。在優(yōu)選實施例中,對所提取出的數(shù)據(jù)結構使用五個圖轉換來準備好圖以供執(zhí)行。在圖仍然不是可執(zhí)行形式的情況下(步驟3702),可以選擇、并且以任何順序以及在需要時(不包括獲得可執(zhí)行圖之前)應用以下描述的五個圖轉換(步驟3704),直到獲得可執(zhí)行圖為止(步驟3716)。這五個圖轉換是:(1)插入文件適配器(步驟3706)、(2)插入通信適配器(步驟3708)、(3)將文件頂點的狀態(tài)設置為完結(步驟3710)、(4)將處理頂點的狀態(tài)設置為可運行或不可運行(步驟3712)、以及(5)設置數(shù)據(jù)鏈接的通信方法(步驟3714)?,F(xiàn)在將描述這些轉換中的每一個轉換以及可以進行該每一個轉換的條件。插入文件適配器。在這種轉換中,驅動3500用文件適配器(即,用鏈接、文件頂點和另一鏈接)來代替鏈接。即,當在圖數(shù)據(jù)結構3506(圖35)的遍歷期間提取或訪問表示鏈接的每個圖數(shù)據(jù)結構時,可以創(chuàng)建修改原始數(shù)據(jù)結構、在原始數(shù)據(jù)結構上展開、或者代替原始數(shù)據(jù)結構的新數(shù)據(jù)結構。對于源(目的地)文件適配器,文件頂點的主機與源(目的地)頂點的主機相同,并且文件頂點的文件是位于源(目的地)頂點的工作目錄中的新文件。這種轉換只有在以下情況下才能進行:(1)源是不處于完成狀態(tài)的文件頂點或處理頂點;以及(2)目的地是處于未完結狀態(tài)的文件頂點或者不處于完成狀態(tài)的處理頂點。插入通信適配器。在這種轉換中,驅動3500用通信適配器(即,用鏈接、處理頂點和另一鏈接)來代替鏈接。處理頂點運行復制程序,其中,該復制程序將數(shù)據(jù)從其輸入復制到其輸出,并且可以對底層基板所支持的通信信道或數(shù)據(jù)存儲進行讀取/寫入。對于源(目的地)通信適配器,處理頂點的主機與源(目的地)頂點的主機相同,并且工作目錄與源(目的地)頂點的工作目錄相同。在啟用狀態(tài)下創(chuàng)建處理頂點。這種轉換只有在以下情況下才能進行:(1)源是處于完成以外的狀態(tài)的處理頂點、或文件頂點;以及(2)目的地是處于完成以外的狀態(tài)的處理頂點、或處于未完結狀態(tài)的文件頂點。將文件頂點的狀態(tài)設置為完結。在這種轉換中,將文件頂點的狀態(tài)設置為完結。這種轉換只有在文件頂點的狀態(tài)為未完結、并且文件頂點的所有輸入是處于完成狀態(tài)的處理頂點的情況下才能進行。將處理頂點的狀態(tài)設置為可運行或不可運行。在這種轉換中,將處理頂點的狀態(tài)設置為可運行或不可運行。這種轉換只有在處理頂點的狀態(tài)為啟用的情況下才能進行。設置數(shù)據(jù)鏈接的通信方法。在這種轉換中,設置數(shù)據(jù)鏈接的通信方法。這種轉換只有在數(shù)據(jù)鏈接的通信方法為未綁定的情況下才能進行。具有以下三個性質的圖是可執(zhí)行的:(1)所有處理頂點都處于以下狀態(tài)其中之一:完成、可運行、不可運行或禁用。(2)所有數(shù)據(jù)鏈接滿足以下所有基準:1)如果數(shù)據(jù)鏈接的源或目的地是可運行處理頂點,則數(shù)據(jù)鏈接的通信方法必須綁定到特定的通信方法。2)如果數(shù)據(jù)鏈接的通信方法是文件以外的任何事物,則該通信鏈接的源和目的地必須是處理頂點,并且如果一個處理頂點是可運行的,則這兩個處理頂點都必須是可運行的。3)如果數(shù)據(jù)鏈接的通信方法是文件,則該數(shù)據(jù)鏈接的源或目的地必須是文件頂點。如果目的地是可運行的處理頂點,則源必須是完結的處理頂點。如果源是可運行的文件頂點,則目的地必須是未完結的文件頂點。(3)綁定到一種通信方法的所有鏈接都滿足該通信方法中固有的約束:1)通信方法必須與鏈接的源端口和目的地端口的訪問方法兼容(這可以通過查閱程序模板來確定)。在已經描述了的擴展基板的情況下,所有通信方法都與soc訪問兼容;除共享內存以外的所有通信方法都與文件描述符訪問兼容;namedpipe和文件與namedpipe訪問兼容;并且只有文件與文件訪問兼容。2)一些通信方法需要源頂點和目的地頂點的節(jié)點是相同的。對于已經描述了的擴展基板,tcp/ip以外的所有通信方法都是如此??梢砸匀魏雾樞驊脠D轉換(例如,可以在重復遍歷圖數(shù)據(jù)結構,直到所有轉換都完結為止),直到獲得可執(zhí)行圖為止。轉到圖37b,在一個實施例中按以下順序中所采取的以下步驟來應用圖轉換:(1)插入文件適配器(步驟3750);(2)替換文件文件到文件鏈接(步驟3752);(3)標識完結的文件頂點(步驟3754);(4)標識不可運行的處理頂點(步驟3756);(5)標識可運行的處理頂點(步驟3758);(6)將剩余的啟用頂點設置為不可運行(步驟3760);(7)插入更多滿足條件的文件適配器(步驟3762);(8)選擇通信方法(步驟3764);以及(9)插入通信適配器(步驟3766)?,F(xiàn)在將更詳細地描述該實施例的步驟。(1)插入文件適配器。轉到圖38a,為了插入文件適配器,對圖中的所有鏈接進行以下步驟(步驟3800)。如果鏈接的源端口具有需要使用文件的數(shù)據(jù)訪問方法(步驟3802)、且目的地不是同一節(jié)點上的文件(步驟3804),則插入源文件適配器(步驟3806)。如果鏈接的目的地端口具有需要使用文件的數(shù)據(jù)訪問方法(步驟3808)、且源不是同一節(jié)點上的文件(步驟3810),則插入目的地文件適配器(步驟3812)。如果鏈接的目的地是處于禁用狀態(tài)的處理頂點(步驟3814)、且源不是處于啟用狀態(tài)的處理頂點(步驟3816),則插入目的地文件適配器(步驟3812)。(2)替換文件到文件鏈接。轉到圖38b,為了替換文件到文件鏈接,對圖中的所有鏈接進行以下步驟(步驟3820)。如果源和目的地都是文件頂點(步驟3822),則插入源通信適配器(步驟3824)。(另外,如果源和目的地在不同的節(jié)點,則也插入目的地通信適配器;未示出)。(3)標識完結的文件頂點。轉到圖38c,為了標識完結的文件頂點,對圖中的所有文件頂點進行以下步驟(步驟3830)。如果所有上游頂點是處于完成狀態(tài)的處理頂點(步驟3832),則將其狀態(tài)設置為完結(步驟3834)。(4)標識不可運行的處理頂點。轉到圖5d,為了標識不可運行的處理頂點,對圖中的所有連接進行以下步驟(步驟3840)。按照如下方式進行“不可運行性”測試(步驟3842):如果鏈接的源是未完結的文件頂點、并且其目的地是處于啟用狀態(tài)的處理頂點,則將該處理頂點的狀態(tài)設置為不可運行(步驟3844);如果源是處于啟用以外的任何狀態(tài)的處理頂點、并且目的地是處于啟用狀態(tài)的處理頂點,則將目的地處理頂點標記為不可運行(步驟3844)。重復該測試,直到沒有更多的頂點可被標記為不可運行為止。(5)標識可運行的處理頂點。轉到圖5e,為了標識可運行的處理頂點,對圖中的所有處理頂點進行以下步驟(步驟3850)。按照如下方式進行“可運行性”測試(步驟3852):如果頂點處于啟用狀態(tài)、并且所有上游頂點是完結的文件頂點或可運行的處理頂點,則將頂點的狀態(tài)設置為可運行(步驟3854)。重復該測試,直到沒有更多的頂點可被標記為可運行為止。(6)將剩余的啟用頂點設置為不可運行。轉到圖5f,為了將剩余的啟用頂點設置為不可運行,對圖中的所有處理頂點進行以下步驟(步驟3860)。如果頂點處于啟用狀態(tài)(步驟3862),則將其狀態(tài)設置為不可運行(步驟3864)。(7)插入更多的文件適配器。轉到圖5g,為了插入更多的文件適配器,對圖中的所有鏈接進行以下步驟(步驟3870)。如果鏈接的源是可運行處理頂點(步驟3872)、且目的地是不可運行處理頂點(步驟3874),則插入源文件適配器(步驟3876)。(8)選擇通信方法。轉到圖5h,為了選擇通信方法,對圖中的所有鏈接進行以下步驟(步驟3880)。該步驟僅適用于在任一端處連接到可運行處理、并且不綁定到通信方法的鏈接。如果鏈接的源(目的地)是文件頂點(步驟3881)、并且其目的地(源)是同一節(jié)點上的處理頂點,則將該鏈接的通信方法設置為文件(步驟3882)。否則,選擇可用通信方法其中之一,使得滿足該方法的所有約束(步驟3883-3885)。為了提高速度,可以按共享內存、命名管道和tcp/ip的順序考慮通信方法。選擇滿足以上闡述的約束的第一方法(步驟3886)。在參考基板中,使用以下規(guī)則:首先,在鏈接連接到接受soc連接的端口的情況下,如果源和目的地在同一節(jié)點上,則鏈接將使用共享內存,或者如果它們在不同節(jié)點上,則鏈接將使用tcp/ip。否則,如果源和目的地在同一節(jié)點上,則將使用namedpipe方法。在所有其它情況下,沒有一種通信方法滿足要求,并且系統(tǒng)將恢復到(以下)通信適配器。(9)插入通信適配器。如果在選擇通信方法的前一步驟中沒有選擇一個通信方法、并且嘗試了所有通信方法(步驟3883),則通過插入源通信適配器并嘗試為適配器的兩個鏈接選擇通信方法來繼續(xù)(步驟3887)。如果失敗(步驟3888),則嘗試用目的地通信適配器來代替新插入的源通信適配器(步驟3889)。如果失敗(步驟3890),則插入源和目的地通信適配器兩者、并為所得到的雙適配器的三個鏈接選擇通信方法(步驟3891)。在參考基板中,只有在源和目的地位于不同的節(jié)點上、并且鏈接連接到不接受soc連接方法的文件頂點或處理頂點的情況下,才需要通信適配器。在這種情況下,可以按照如下方式選擇適配器:·如果源是文件頂點,則插入源通信適配器。源通信適配器中的兩個鏈接將依次使用文件和tcp/ip通信方法?!と绻词遣唤邮躶oc通信方法的端口,則插入源通信適配器。源通信適配器中的兩個鏈接將依次使用tcp/ip和文件通信方法?!と绻康牡厥俏募旤c,則插入目的地通信適配器。適配器中的兩個鏈接將依次使用tcp/ip和文件通信方法?!と绻康牡厥遣唤邮躶oc通信方法的端口,則插入目的地通信適配器。適配器中的兩個鏈接將依次使用tcp/ip和namedpipe通信方法。階段c:啟動數(shù)據(jù)鏈接轉到圖39,數(shù)據(jù)鏈接在未啟動狀態(tài)下創(chuàng)建并且必須啟動。為了啟動鏈接,掃描這些鏈接(步驟3900)以找到未啟動的(步驟3902)、綁定到通信方法(步驟3904)并且具有可運行源或目的地(步驟3906)的鏈接。對于所有這樣的鏈接,生成各種通信方法可以使用的標識符(步驟3908)。對于上述的擴展基板,按照如下方式創(chuàng)建標識符。所有鏈接具有兩個標識符:流對象標識符和通信信道/文件標識符。流對象標識符由soc機構使用,并且與鏈接的名稱相同。信道/文件標識符用于標識鏈接所采用的文件、命名管道、共享內存區(qū)域、或tcp/ip連接。另外,在處理頂點需要namedpipe或文件通信方法的情況下,信道/文件標識符將是可用的,使得處理頂點在啟動時(見下文)將能夠使用unix文件系統(tǒng)連接到信道/文件。在生成標識符之后,呼叫基板來創(chuàng)建信道或流對象(步驟3910)。如果通信方法是namedpipe,則還呼叫基板來創(chuàng)建命名管道。階段d:創(chuàng)建鏈接文件擴展基板在每個節(jié)點上保持有一個列舉了在該節(jié)點上具有源或目的地的鏈接的“鏈接文件”。程序可以在運行時查閱該鏈接文件以確定這些程序必須訪問哪些鏈接。使用soc接口的程序通常要這樣做。因此,在擴展基板的情況下,系統(tǒng)必須創(chuàng)建鏈接文件。按照如下方式進行:對于計算中涉及的每個節(jié)點,驅動3500標識被分配給該節(jié)點的可運行處理頂點,并且針對鏈接到這種頂點每個鏈接、在鏈接文件中累積并存儲以下信息:·頂點的標識符;·鏈接所連接的端口的名稱;·通信信道的標識符;以及·用于傳輸數(shù)據(jù)的文件或命名管道的標識符(如果適用的話)。階段e:啟動處理轉到圖40,通過針對處于可運行狀態(tài)的所有處理頂點進行以下步驟來啟動處理(步驟4000)。首先,使用頂點的程序模板來生成調用信息(步驟4002)。該信息包括:·要調用的程序的名稱;·命令行參數(shù)(命令行參數(shù)可以包含通信信道的標識符以及與連接到頂點的鏈接相關聯(lián)的文件);·可選地,各種環(huán)境變量的值;以及·可選地,程序的預期“退出代碼”??梢园凑找韵轮辽賰煞N方式之一來生成調用信息:驅動3500可以將這樣的信息預先存儲在程序模板中;或者驅動3500可以包含用于動態(tài)計算這樣的信息的例程,并且可以將這些例程的地址存儲在程序模板中。接著,向環(huán)境變量集添加頂點的標識符以及該頂點的節(jié)點的鏈接文件的標識符(步驟4004)。然后,在所指示出的節(jié)點上運行的代理創(chuàng)建“程序調用處理”(步驟4006)。如果程序的模板要求輸入或輸出端口綁定到unix文件描述符,則向程序調用處理提供與該輸入或輸出端口相關聯(lián)的文件名稱、命名管道、或tcp/ip流標識符,并且將使用所指示出的文件描述符來打開該文件或命名管道。程序調用處理設置所需的環(huán)境變量,并使用所指示出的命令行參數(shù)來運行所指示出的程序(步驟4008)。階段f:等待一旦啟動了所有處理,系統(tǒng)將優(yōu)選地使用與啟動這些處理所使用的代理相同的代理來監(jiān)視它們的執(zhí)行。定期地,系統(tǒng)(代理)將通知處理已經退出。當這種情況發(fā)生時,系統(tǒng)(代理)將判斷處理是“正常地”還是“異常地”退出。在unix的情況下,這是經由終止代碼完成的。終止代碼可以表示程序由于程序錯誤、算術異常、無效的存儲器訪問等而中斷。這樣的情況總是被解釋為“異常終止”??蛇x地,程序可能以受控的方式退出,返回“退出代碼”(退出代碼包括終止代碼的子集)。按照慣例,退出代碼為0表示程序正常終止,而所有其它代碼表示異常終止。如上所述,程序模板可以改變其解釋,例如聲明所有退出代碼都被解釋為“正?!苯K止。一旦系統(tǒng)判斷為處理已經正常終止,該系統(tǒng)就可以可選地進入“調試”例程,以允許用戶診斷異常終止的原因。一旦調試完結(或跳過),系統(tǒng)將發(fā)起中斷過程,例如,殺死所有仍在運行的處理、刪除部分寫入的文件等。然后驅動程序將退出。如果系統(tǒng)判斷為處理正常終止,則其將會注意到此事實,并等待更多處理終止。在所有處理都已經正常終止的情況下,系統(tǒng)進入清理階段i。階段i:清理在所有可運行處理的執(zhí)行完成之后,驅動3500進行以下步驟。首先,刪除每個節(jié)點的鏈接文件。其次,掃描處于啟動狀態(tài)的所有鏈接。如果連接到鏈接的所有處理頂點都處于完成狀態(tài),則將使用基板來破壞與該鏈接相關聯(lián)的任何通信信道。對于擴展基板,通過獲得鏈接的流對象標識符并且命令基板破壞所指示的流對象來完成該步驟。在通信方法是namedpipe的情況下,這也將導致命名管道被刪除。另外,如果文件適配器頂點是完結的,并且該頂點下游的所有處理都是已完成,則其文件將被刪除。插入適配器已經提到了代替鏈接插入適配器的幾種情況。適配器是數(shù)據(jù)鏈接、或者文件或處理頂點(適配器頂點)、以及為使用一系列通信方法來合成通信鏈接而插入的另一數(shù)據(jù)鏈接。適配器頂點是處理的適配器被稱為“通信適配器”。適配器頂點是文件的適配器被稱為“文件適配器”。一般來說,在需要通信方法的組合(例如,命名管道加上tcp/ip連接)來滿足鏈接的源和目的地所施加的約束的情況下,添加通信適配器。在鏈接的源和目的地不同時運行(例如,源是可運行的,但是目的地是不可運行的或禁用的)、或者鏈接的源或目的地僅可以連接到文件的情況下,添加文件適配器。在通信適配器的情況下,適配器頂點指定將輸入復制到輸出、并且可以連接到任何一種通信信道的程序。適配器鏈接可以隨后綁定到受制于步驟3883-3885“選擇通信方法”中所描述的約束的任何通信方法。適配器頂點簡單地將數(shù)據(jù)從其輸入復制到其輸出。適配器鏈接可以具有受制于源和目的地約束的任何便利的通信方法。轉到圖41,為了插入源適配器(步驟4100),創(chuàng)建新的適配器頂點(步驟4102)和新的適配器鏈接(步驟4104)。在源通信適配器的情況下,適配器頂點是具有以下特性的處理頂點:·程序模板指定復制程序,即,將所有輸入數(shù)據(jù)復制到其輸出的復制程序?!こ绦蚰0逯付軌蜻B接到任何通信方法的輸入和輸出端口描述符?!⑿碌捻旤c標記為適配器頂點。·使用原始源頂點的工作目錄和工作節(jié)點,作為適配器頂點的工作目錄和節(jié)點。在源文件適配器的情況下,適配器頂點是具有以下特性的文件頂點:·文件位于源程序所使用的節(jié)點上。·文件位于源程序的工作目錄中。將文件標記為“適配器”,使得在目的地處理使用了文件的情況下,可以刪除該文件。新的適配器鏈接(步驟4104)具有以下特性:·適配器鏈接的源頂點和原始鏈接的源頂點相同,并且適配器鏈接的源端口名稱和原始鏈接的源端口名稱相同。·適配器鏈接的目的地頂點是適配器頂點,并且適配器鏈接的目的地端口名稱是輸入?!⑦m配器鏈接的通信方法設置為插入源適配器的過程所指定的值(該適配器鏈接通常將是未綁定的)。最后,原始數(shù)據(jù)鏈接的源將被設置為新的適配器頂點(步驟4106),并且源端口名稱將被設置為輸出。用于插入目的地適配器頂點的過程是對稱的,“源”和“目的地”以及“輸入”和“輸出”分別互換。圖49a和49b示出在頂點v1的端口p1和頂點v2的端口p2之間代替鏈接l而插入通信適配器4200。在圖42b中,鏈接l已經由包括第一鏈接4202、頂點904和第二鏈接4206的源適配器4200代替。如果適配器4200是文件適配器,則頂點4204是主機h1上的目錄d1中的文件的文件頂點,其中,目錄d1和主機h1是頂點v1的目錄和主機。如果適配器4200是通信適配器,則頂點4204是運行復制程序的處理頂點。第二鏈接4202是原始鏈接l,其源頂點被設置為適配器頂點4204并且其源端口名稱被設置為輸出。第一鏈接4202的源端口名稱被設置為原始鏈接l的原始源端口名稱p1,并且其目的地頂點是新添加的頂點4204的輸入端口。如果新的適配器4200是目的地適配器,則頂點4204將使用目的地頂點v2的主機h2和目錄d2而不是源頂點v1的主機h1和目錄d1。輸入和執(zhí)行圖的示例現(xiàn)在我們將本發(fā)明視為適用于圖34所述的薪資程序。首先,在創(chuàng)建應用之前,用戶將為系統(tǒng)提供所有必需程序的模板,特別是排序程序、數(shù)據(jù)檢查程序以及薪資程序的模板。然后用戶將應用表示為圖,如上所述。圖43中示出了所得到的圖,其具有運行在所示節(jié)點0、1和2上的頂點4300-4370(省略各個鏈接的端口名稱,但是與圖34b相比,這些端口名稱應當是顯而易見的)。處理該圖的第一步驟是準備好圖以供執(zhí)行。首先,在執(zhí)行步驟3750時,我們查閱排序程序4310的模板,并觀察到該模板需要文件作為輸入。因此,步驟3750插入目的地文件適配器4402(圖44)。我們接下來執(zhí)行步驟3752,并且注意到我們有從節(jié)點2上的更新文件4300到節(jié)點1上的臨時文件4302的鏈接。因此,源和目的地通信適配器(復制4304、復制4306)兩者將被插入到該鏈接中。接下來,在步驟3754中,我們標識完結的文件頂點(更新4300和舊的主文件4350)。一旦完成該步驟,在步驟3756中,我們查找由于在上游有未完結文件而不可運行的處理頂點。排序程序4310被發(fā)現(xiàn)滿足該基準。在步驟3758中,我們標識由于在上游僅有可運行的處理頂點和/或完結的文件而可運行的處理頂點。兩個復制程序4304、4306(即,步驟3752中所插入的通信適配器)滿足該基準,并且被標記為可運行。將所有剩余的節(jié)點標記為不可運行。最后,選擇針對連接到可運行處理頂點的這些鏈接的通信方法。針對連接到文件的這些鏈選擇文件方法,并且針對兩個復制程序4304、4306(位于不同的節(jié)點上)之間的鏈接選擇tcp/ip。這使我們面臨著圖46所示的情況(未標記為可運行/完結的頂點是可運行的/未完結的;標記有通信方法的鏈接是未綁定的)?,F(xiàn)在,圖是可執(zhí)行的。將創(chuàng)建鏈接文件(未示出),然后將啟動所指示的鏈接,并且將啟動可運行的處理頂點。在所有的處理都已經退出的情況下,系統(tǒng)將會通過不啟動所指示的鏈接并且將處理頂點的狀態(tài)從“不可運行”改變?yōu)椤巴瓿伞眮磉M行“清理”。這導致圖47所示的情況。系統(tǒng)現(xiàn)在判斷為不是所有處理都已完成,因此該系統(tǒng)開始新一輪的執(zhí)行。首先,系統(tǒng)像之前一樣地準備圖。其最先指出臨時文件4302是完結的。接下來,其判斷為不存在不可運行的處理頂點。最后,其判斷為實際上,所有的處理頂點都是可運行的。這導致圖48所示的情況。我們現(xiàn)在可以選擇通信方法(步驟3764)。首先,將連接到臨時文件4302、不良記錄4330、和工資4360的鏈接設置為文件,因為這些鏈接連接文件和可運行處理頂點,并且不會跨越節(jié)點邊界。其次,將連接到檢查4320的剩余鏈接設置為namedpipe,因為檢查節(jié)點4320需要命名管道,并且這些鏈接不會跨越節(jié)點邊界。這使我們了解oldmaster4350、newmaster4370和處理4340之間的連接,其中,該oldmaster4350、newmaster4370和處理4340將文件和不同節(jié)點上所運行的處理連接在一起。這兩種情況都需要通信適配器,該通信適配器在步驟3766作為復制4342和復制4344而插入。這兩個適配器都運行在節(jié)點1上。一旦選擇了通信方法(對于連接到文件的鏈接,通信方法為文件,而對于跨越節(jié)點邊界的鏈接,通信方法為tcp/ip),我們就有圖49所示的圖。再次準備好圖以供執(zhí)行。系統(tǒng)將會創(chuàng)建鏈接文件、啟動鏈接、處理、等待并清理。此時,所有處理頂點都“完成”,因此圖的執(zhí)行終止。程序實現(xiàn)本發(fā)明可以在硬件、軟件或者兩者的組合中實現(xiàn)。然而,優(yōu)選地,本發(fā)明在可編程計算機上所執(zhí)行的計算機程序中實現(xiàn),其中,該可編程計算機各自包括處理器、數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入裝置以及至少一個輸出裝置。將程序代碼應用至輸入數(shù)據(jù),以進行這里描述的功能并生成輸出信息。以已知的方式將輸出信息應用至一個或多個輸入裝置。每個程序優(yōu)選地以高級過程編程語言或面向對象編程語言來實現(xiàn),以與計算機系統(tǒng)進行通信。然而,如果需要,這些程序可以以匯編或機器語言來實現(xiàn)。在任何情況下,語言可以是編譯語言或解釋語言。優(yōu)選將每一個這種計算機程序存儲在通用或專用可編程計算機可讀取的存儲介質或裝置(例如,rom或者磁性或磁性軟盤)上或者下載至該存儲介質或裝置,以在利用計算機讀取存儲介質或裝置以進行這里所述的過程的情況下配置計算機并使該計算機進行工作。本發(fā)明的系統(tǒng)還可被視為作為配置有計算機程序的計算機可讀存儲介質來實現(xiàn),其中如此配置成的介質使計算機以特定且預定義的方式進行工作,以進行這里所述的功能。已經描述了本發(fā)明的許多實施例。然而,應當理解,可以在不偏離本發(fā)明的精神和范圍的情況下作出各種修改。因此,應當理解,本發(fā)明不受特定的圖示實施例限制,而僅受所附權利要求書的范圍限制。上述的影響分析方法可以使用執(zhí)行合適軟件的計算系統(tǒng)來實現(xiàn)。例如,該軟件可以包括在一個或多個編程或可編程計算系統(tǒng)(可以具有諸如分布式、客戶端/服務器或網格式等的各種架構)上執(zhí)行的一個或多個計算機程序中的過程,其中該一個或多個編程或可編程計算系統(tǒng)各自包括至少一個處理器、至少一個數(shù)據(jù)存儲系統(tǒng)(包括易失性和/或非易失性存儲器和/或存儲元件)、至少一個用戶接口(用于使用至少一個輸入裝置或端口來接收輸入,并且用于使用至少一個輸出裝置或端口來提供輸出)。該軟件可以包括例如提供與數(shù)據(jù)流圖的設計、配置和執(zhí)行相關的服務的較大程序的一個或多個模塊??梢詫⒊绦虻哪K(例如,數(shù)據(jù)流圖的元素)實現(xiàn)為數(shù)據(jù)結構或符合數(shù)據(jù)存儲庫中所存儲的數(shù)據(jù)模型的其它有組織數(shù)據(jù)。可以將軟件設置在諸如(利用通用或專用計算系統(tǒng)或裝置可讀取的)cd-rom或其它計算機可讀介質等的有形、非暫時性介質上、或者經由網絡的通信介質(例如,以編碼在傳播信號中的形式)傳遞至執(zhí)行該軟件的計算系統(tǒng)的有形、非暫時性介質??梢栽趯S糜嬎銠C上、或者使用諸如協(xié)處理器或現(xiàn)場可編程門陣列(fpga)或專用特定用途集成電路(asic)等的專用硬件來進行一些處理或所有處理??梢砸岳貌煌挠嬎阍磉M行軟件所指定的計算的不同部分的分布式方式來實現(xiàn)該處理。優(yōu)選將每一個這種計算機程序存儲在通用或專用可編程計算機可訪問的存儲裝置的計算機可讀存儲介質(例如,固態(tài)存儲器或介質、或者磁性或光學介質)上或者下載至該存儲介質,以在利用計算機讀取存儲裝置介質以進行這里所述的處理的情況下配置計算機并使該計算機進行工作。本發(fā)明的系統(tǒng)還可被視為作為配置有計算機程序的有形、非暫時性介質來實現(xiàn),其中如此配置成的介質使計算機以特定且預定義的方式進行工作,以進行這里所述的處理步驟中的一個或多個。已經描述了本發(fā)明的許多實施例。然而,應當理解,前述描述旨在示出而不是限制本發(fā)明的范圍,該范圍由以下權利要求書的范圍限定。因此,其它實施例也在所附權利要求書的范圍內。例如,可以在不偏離本發(fā)明的范圍的情況下作出各種修改。另外,上述步驟中的一些可以是與順序無關的,因此可以按照與所描述的順序不同的順序執(zhí)行。當前第1頁12