專利名稱:圖形xml編程系統(tǒng)和引擎的制作方法
圖形XML編程系統(tǒng)和引擎相關(guān)申請本申請要求2004年10月1日提交的美國臨時申請No.60/615172 的優(yōu)先權(quán)。
背景技術(shù):
國家標準和技術(shù)協(xié)會("MST")在2002年發(fā)布一份報告,指出 軟件錯誤每年消耗美國經(jīng)濟595億美元。隨著"環(huán)球網(wǎng)業(yè)務(wù)(Web Service)",亦即接收XML消息、對其進行處理和返回XML消息的 軟件,也可以稱為(活動業(yè)務(wù)、實體業(yè)務(wù)、處理業(yè)務(wù)、企業(yè)業(yè)務(wù)等) 迅速變?yōu)閷嶋H的標準軟件組件模型,并將由成千上萬建立,這項開 銷的一個急劇上漲的部分將涉及環(huán)球網(wǎng)業(yè)務(wù)和XML處理軟件。該 NIST研究發(fā)現(xiàn),這項開銷的三分之一以上可以通過改善測試,能夠 較早地和更有效地識別和去除缺陷而加以消除。但是,要能夠做到 這一點,就要求一個全新的方法,使用不同的編程技術(shù)和語言。環(huán) 球網(wǎng)業(yè)務(wù)的大規(guī)模開展要求一種在開發(fā)時就保證環(huán)球網(wǎng)業(yè)務(wù)正確性 并能夠?qū)δ切I(yè)務(wù)的改變進行自動化管理的技術(shù)。今天,應(yīng)用程序開發(fā)用的開發(fā)范式是面向?qū)ο蟮模皇菫榻?這種無數(shù)稱為環(huán)球網(wǎng)業(yè)務(wù)的在結(jié)構(gòu)上定義為XML實體的小應(yīng)用程序 而設(shè)計來的。目前該產(chǎn)業(yè)將其面向?qū)ο蟮恼Z言應(yīng)用于環(huán)球網(wǎng)業(yè)務(wù)。 這是不相匹配的。諸如Java或.NET C弁等語言是面向?qū)ο蟮摹ο蟀瑪?shù)據(jù)和方 法。該對象的行為作為方法編碼在該對象內(nèi)。在一個對象內(nèi)表達的 約束水平,就數(shù)據(jù)而言是簡單的,但就方法而言卻可能是極其復(fù)雜 的。在某種程度上,這是因為Java和.NET a是滿足一般需要的一般語言,而不是針對所有需要的。MS VS [Microsoft Visual Studio]和Eclipse 兩個都提供 "Intellisense"或"類似于Intellisense"的特征,來幫助開發(fā)者用面 向?qū)ο蟮恼Z言進行工作。例如,若開發(fā)者鍵入"custlnfo.",而且若 custlnfo是一個Customerlnfo類型的對象,則這兩個環(huán)境都顯示彈出 式菜單,列出Customerlnfo類的字段和方法。這種類型查閱是基于 靜態(tài)類型,而最后只不過是一個字典查閱算法而已。MS VS和Eclipse (利用相關(guān)的編譯器,例如,Javac )還提供開 發(fā)者從這樣的工作室(studio)預(yù)計的最小檢查(語法分析錯誤,報 警,...)。這種檢查可以在編譯時或背景下完成,視所使用的產(chǎn)品和機 器速度而定。但是,MS VS和Eclipse沒有能力驗證一個程序在邏輯上有效、 它遵循各種約束以及它不會有運行時錯誤。其結(jié)果是, 一個程序的 質(zhì)量完全取決于人的因素,這意味著程序在很大程度上是不可靠的。 例如,開發(fā)者不得不檢查空引用、沒有利用的變量、輸入?yún)?shù)的正 確性及其他致命錯誤。對于所有這些方面和許多其他方面,該程序 的質(zhì)量有賴于該開發(fā)者的質(zhì)量和經(jīng)驗,而且失察是極其頻繁發(fā)生的。 換句話說,采用基于對象的語言,在設(shè)計時無法知道一個程序?qū)⒉?會產(chǎn)生不受控制的例外和/或由于運行時錯誤而崩潰。因而,采用面向?qū)ο蟮恼Z言時必須解決以下問題-在編寫代碼的同時編寫測試代碼(極端編程)。-遵循良好的QA過程,以測試該程序。-有效地使用調(diào)試工具。-使用良好的技術(shù)和用戶服務(wù)來對付在QA階段過程中沒有檢測 出來的問題。作為示例性例子,考察一個環(huán)球網(wǎng)業(yè)務(wù)的開發(fā),它處理遵循IFX 1.4.0規(guī)格(BallnqRq消息)的賬戶平衡查詢請求,并返回一個賬戶 平4紆查詢響應(yīng)(BallnqRs )。該BallnqRq和BallnqRs是基于XML的消息并在形式上在IFX 1.4.0 XML Schema中定義。該Schema的片賴二 如下<xsd:elenient name="BannqRq" types'BalInqRq一Type, </xsd:dement><xsd:complexType narae^BallnqRq—Type"> <xsd:sequence> <xsd:doment ref-wRqUID7> <xsd:dement ro&B'TvfcgRqHdr" minOccurs-"0"^> <xsd:element ref="Asyn9&qUID" minOccurs-"0',/> <xsd:dement ref="Custlir minOccurs-"0"/> <xsd:choice> <xsd:element r^f-"DepAcctId7> 《sd:ele咖nt ret="Ca^dAcctId7> <xsd:eiement ref-"LoanAcctW7> </xsd:choice> <xsd:dement rrf-HIncExtB^r minOccurs="0"/> <xsd:dement jref-"DdivwyMethod" minOccurs="07i> </xsd: sequence </xsd:comple、Type>這意味著,任何BaJI叫Rq消息都將以BalInqRq標簽開始,它將 包含-強制性的RqUED元素, -任選的MsgRqHdr元素(2個可能的案例), -任選的AsyncRqUDD元素(2個可能的案例), -任選的Custld元素(2個可能的案例),-然后是DepAcctld元素或CardAcctld元素或LoanAcctld,但不同時是任何兩個(3個可能的案例),-和然后是^f壬選的IncExtBal元素(2個可能的案例), 國和最后是4壬選的DeliveryMethod元素(2個可能的案例)。 給定該接口的定義,而且甚至不涉及元素出現(xiàn)時特定的值,或不表示像CardAcctld這樣的元素本身可能包^^任選的元素、選擇等的定義,在理論上我們就已經(jīng)要求2x2x2x3x2x2=96個測試案例來覆蓋不同的可能性。這是一個有效的BallnqRq的一個示例<3BalInqRq>,UID>f81(H7dec-lWO-a7<55-OOaOc9Iedbfc</RqUID> <MsgRqHdr><NetwarkTniMo;>^NctworkOwnen>ATM</NetworkOwner><BankId>10255000017</Bankrd;> <iP08tAddr><Addrl>93 Dalma Drive</Addrl><City>Mountain View</City> 〈StafeProv5-CAoC/StateProy》 <PostalCode>94041</PostalCode> <Country>US</Country></PostAddr> </NetworkTrnInfo> <MsgAuthCode><MacValue>1234</MacValue> </MsgAuthCode> </MsgRqHdr> <Car^AfictId> <CardMagData><dVtagt>at2>;123456102132547692=0212</MagDat2> </CardMagData> <AcctType>Dt A</AcctType> </CardAcctId> </BaIlhqRq>采用這一個示例,測試其中有MsgRqHdr、 CardAcctId,但是沒 有AsyncRqUID、 Custld、 IncExtBal或DeliveryMethod的案例。在理 論上,開發(fā)者會需要95個以上的測試案例。另外,因為環(huán)球網(wǎng)業(yè)務(wù)不只是由輸入的XML Schema片段定義 的,而且是由輸出XML Schema片段定義的,所以還必須測試所得 到的任何XML輸出是否遵循輸出XML Schema片段。當測試案例產(chǎn)生運行時錯誤或產(chǎn)生不遵循該XML Schema的 XML輸出時,該程序都必須修改。任何這樣的修改都可能造成新的 問題。之所以采用這種費時的方法,主要的原因是像Java, C或C弁等 這樣的語言不能夠在編譯時根據(jù)符合該XML Schema規(guī)才各的類型系 統(tǒng)完成靜態(tài)類型檢查。例如,在一個處理上面的XML Schema示例 的XML實例的Java程序中,盡管CardAcctId和LoanAcctld是互斥 標記,但在技術(shù)上無法防止開發(fā)者做出諸如試圖拷貝CardAcctId的 內(nèi)容等4昔誤,盡管LoanAcctld已經(jīng)測試正確。因此,需要這樣一種系統(tǒng)和方法它們用來防止開發(fā)者犯這樣的 錯誤、檢測改變該程序時造成的錯誤和保證整個程序的正確性,而 又不依賴基于案例的廣泛測試。正如將要看出的,本發(fā)明以一種優(yōu) 雅的方式啟動這樣的一個系統(tǒng)和方法。發(fā)明內(nèi)容這些挑戰(zhàn)可以用這里描述的方法和系統(tǒng)加以避免。這些方法和系 統(tǒng)是面向文檔的,而不是面向?qū)ο蟮?。面向文檔的環(huán)球網(wǎng)業(yè)務(wù)是指其方法是隱含地假定的并且不是在該 XML Schema中表達的環(huán)球網(wǎng)業(yè)務(wù)。例如,諸如IFX、 ACORD或OTA 等產(chǎn)業(yè)標準Schema的目的是用一組通過典型請求/響應(yīng)交換而交換的 豐富的約束來表達復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。面向文檔的環(huán)球網(wǎng)業(yè)務(wù)與RPC風格的環(huán)^求網(wǎng)業(yè)務(wù)形成對照,在 后一種情況下XML僅僅用來表達方法和它們的參數(shù), 一般利用映射 到存在于所使用的語言(例如Java或C# )中的數(shù)據(jù)類型的簡單的XML 類型。正如今天,Java或0#用的開發(fā)環(huán)境提供諸如Microsoft XSD.EXE 等允許開發(fā)者從來自XML Schema的一個或多個類建立XML Schema 的工具。這些工具用在RPC-風格的環(huán)球網(wǎng)業(yè)務(wù)還行,用在面向文檔 的環(huán)球網(wǎng)業(yè)務(wù)就不幸地失敗了 ,因為在該XML Schema中表達的大 部分約束在XML片斷和對象之間來回轉(zhuǎn)換的過程中在翻譯中丟失 了。通過采用面向文檔的環(huán)球網(wǎng)業(yè)務(wù)方法,XML的作用要翻轉(zhuǎn)過來 (和XML使用的基于PRC的方法對比),而且最后變成它原來設(shè)想 的作用。不是僅僅利用XML作為兩個面向?qū)ο蟮淖鳛榄h(huán)J^網(wǎng)業(yè)務(wù)交 換(RPC)的 一部分的端點之間的數(shù)據(jù)參數(shù)傳輸,這里描述的系統(tǒng)和方 法由基于過程的語言構(gòu)成,它在XML Schema上執(zhí)行,而且受制于 這些Schema中所表達的所有約束。因而該XML Schema變成環(huán)3求網(wǎng)業(yè)務(wù)交換的中央智能。該中央智能是由這里描述的系統(tǒng)和方法表達 和強制實行的。采用這里描述的方法和系統(tǒng),設(shè)計環(huán)球網(wǎng)業(yè)務(wù)的過程就根本不同了。首先,正如前面指出的,該語言受限于項目所用的Schema。例 如,若一個序列元素可以包含0至5個元素,這里描述的方法和系 統(tǒng)將自動地強制實施該約束。利用Java或.NET C#,開發(fā)者必須明確 地編寫代碼來強制實施和檢查該數(shù)據(jù)的這樣一個特性。其次,諸如Java和.NET C^等一般語言內(nèi)的類型檢查是動態(tài)的, 而不是靜態(tài)的。采用諸如Java或C弁等語言,要保證所產(chǎn)生的XML 消息對于XML Schema內(nèi)定義的XML類型是正確的,唯一的途徑是 使用一個驗證分析器。驗證分析器是一個程序,它采取XML文檔和 XML Schema作為輸入。 一旦一個樣本XML文檔可用,馬全證分斗斤器 便只可以在運行時纟皮調(diào)用。這種僅在運行時才進行的類型4全查稱為 動態(tài)類型檢查。這里描述的系統(tǒng)和方法在設(shè)計時完成靜態(tài)類型檢查, 保證該XML數(shù)據(jù),不論輸入還是輸出,都與該環(huán)球網(wǎng)業(yè)務(wù)^f吏用的XML Schema片段所表達的約束一致,而不論在輸入的接收和輸出的發(fā)送 之間所執(zhí)行的操作的數(shù)目和類型。盡管對于Java或。#的類(對象) 確實也有靜態(tài)類型檢查可用,但是它對XML類型(XML Schema片 段)是不可用的。采用這里描述的系統(tǒng)和方法,開發(fā)者隱含地受到 限制,要尊重Schema中表達的約束并與之一致。采用Java、 C存或其 它一般的語言時,開發(fā)者不得不明確地編寫定制代碼,以便達到同 一結(jié)果。因此,這里描述的系統(tǒng)和方法提供不僅100%保證環(huán)球網(wǎng)業(yè) 務(wù)就輸入和輸出而言沒有接口錯誤,而且大大加速環(huán)球網(wǎng)業(yè)務(wù)根據(jù) 復(fù)雜XML Schema的建立。第三,與其中可能性的范圍"無窮"的一般語言相反,這里描述 的系統(tǒng)和方法提供一種專用語言和環(huán)境,它允許自動探測一個程序 所有的執(zhí)行路徑。用這樣的方法10-類型是推算出來,而不是聲明的。-類型層次結(jié)構(gòu)(子分類)是基于該類型的描述,而不是它的名字。換句話說,我們知道,類型<a〉<b>String
</b></a>是 〈aXb〉String[l]々bx/^的子類型,不是因為它具有相同的名字,而 是因為第 一個是第二個的子案例。利用數(shù)學集合,我們會說,String[O.. 1 ] 的任何實例都是String[l]的子集(因為空集和String[l]集合都包括在 該String[l]集合中)。-類型是作為約束集合,而不是作為名字定義的。這樣便有可能 捕捉與給定變量可以保存的值的類型有關(guān)的許多更多的信息。-類型是指XML類型,而不是對象類型(類)。因而,采用這里描述的系統(tǒng)和方法,開發(fā)者在設(shè)計時便知道,她 或他的程序在運行時不會失效或崩潰,因為該工作室(這里描述的 系統(tǒng)和方法的GUI應(yīng)用程序部分)在設(shè)計過程中就已經(jīng)進行了完整 的執(zhí)行路徑分析,并幫助開發(fā)者在設(shè)計時修正錯誤。大部分設(shè)計镅-誤甚至在環(huán)球網(wǎng)業(yè)務(wù)首次運行以前就已經(jīng)排除了 。
圖1是一個流程圖,舉例說明XML處理程序的可視描繪和編輯, 它提供XML類型推理以避免編程錯誤,以便檢測錯誤,并按照它們 預(yù)期的XML輸出類型來驗證程序。圖2舉例說明XML處理程序在一個給定的執(zhí)行點上XML類型 推理用的流程圖;圖3舉例說明根據(jù)XML類型推理檢測XML處理程序中的指令 配置錯誤用的流程圖;圖4舉例說明XML類型作為標識節(jié)點樹的描繪;圖5舉例說明XML子分類算法用的流程圖;圖6舉例說明基于XML確認的處理程序用的流程圖;圖7舉例說明本發(fā)明的系統(tǒng)和方法的輸出消息;而圖8舉例說明元數(shù)據(jù)檢查器的輸出。
具體實施方式
本發(fā)明廣泛利用可從諸如環(huán)球網(wǎng)業(yè)務(wù)等處理程序的接口定義獲得 的元數(shù)據(jù),在開發(fā)處理邏輯的同時防止和檢測許多錯誤。它還無i侖 何時無論由于何種原因(內(nèi)部邏輯、在該環(huán)球網(wǎng)業(yè)務(wù)使用的任何數(shù) 據(jù)源或在支持該環(huán)多求網(wǎng)業(yè)務(wù)的Schema中的改變)在該環(huán)J求網(wǎng)業(yè)^ft 出任何修改,而使改變管理自動化。這里描述的系統(tǒng)和方法在開發(fā) 時通過在每一個執(zhí)行路徑上和在該處理邏輯的每一個執(zhí)行點上,動 態(tài)地計算所消耗和產(chǎn)生消息的元數(shù)據(jù)來做到這一 點。相應(yīng)地,系統(tǒng)和方法是為建立和保持可視XML編程環(huán)境而設(shè)置 的,其中該程序的XML處理邏輯是自動地計算和用圖解方式可^見化 的,而且其中實時針對該程序中的每一個執(zhí)行點計算在運行時處理 的XML實例的元數(shù)據(jù),以便提供引導編程、錯誤防止、錯誤檢測和 程序確認。該系統(tǒng)和方法使所配置的系統(tǒng)能夠通過動態(tài),執(zhí)行路徑分 析來降低消息處理應(yīng)用的開發(fā)和維護成本。這里描述的方法和系統(tǒng)是面向文檔的。Schema包含包括非常豐 富的約束集合的數(shù)據(jù)結(jié)構(gòu)(與對象相比)。基于我們的發(fā)明的環(huán)球網(wǎng) 業(yè)務(wù)的行為駐留在基于過程語言的其將方法和系統(tǒng)放置在Schema上 的語言中。因此,該語言受Schema約束,相比之下,Java和.NET C# 語言幾乎不受約束而,而在環(huán)球網(wǎng)業(yè)務(wù)的句法和語義確認方面根本 就沒有約束。采用這里描述的方法和系統(tǒng),設(shè)計環(huán)球網(wǎng)業(yè)務(wù)的過程就#>本不同 了。首先,正如前面指出的,該語言受項目所用的Schema約束。例 如,若一個序列元素可以包含0至5個元素,則這里描述的方法和 系統(tǒng)自動地強制實施該約束。采用Java或.NET C弁時開發(fā)者必須明確 地編寫代碼進行約束并檢查該特征。其次,正如這里描述的,類型 檢查是動態(tài)的,而不是靜態(tài)的。釆用諸如Java或C/^等語言,要保證所產(chǎn)生的XML消息對于XML Schema內(nèi)定義的XML類型是正確的,唯一的途徑是使用驗證分析 器。驗證分析器是一個程序,它以XML文檔和XML Schema作為輸 入。 一旦樣本XML文檔可用,驗證分析器便只可以在運行時被調(diào)用。 這種類型的僅在運行時才進行的類型檢查稱為動態(tài)類型4全查。這里 描述的系統(tǒng)和方法在設(shè)計時完成動態(tài)類型檢查,保證該XML數(shù)據(jù), 不論輸入還是輸出,都與該環(huán)球網(wǎng)業(yè)務(wù)所使用的XML Schema片段 所表達的約束一致,而不論在輸入的接收和輸出的發(fā)送之間將執(zhí)行 的操作的數(shù)目和類型。當然,采用Java或C/Z對于類(對象)也有靜 態(tài)類型檢查可用,但不是針對XML類型(XML Schema片段)。采 用這里描述的系統(tǒng)和方法,開發(fā)者隱含地受到約束,要尊重該Schema 中所表達的限制,并與之一致。采用Java, C弁或其它一般的語言, 開發(fā)者不得不明確地編寫定制代碼,以便達到同一結(jié)果。因此,這 里描述的系統(tǒng)和方法不僅提供一個100%的保證,就輸入和輸出而言 該環(huán)球網(wǎng)業(yè)務(wù)沒有接口錯誤,而且大大加屯基于復(fù)雜的XML Schema 的環(huán)球網(wǎng)業(yè)務(wù)的建立。第三,與其中可能性的范圍固有地是無限的一般的語言相反,這 里描述的方法和系統(tǒng)已經(jīng)設(shè)計 一 種專用語言和環(huán)境,它允許自動才笨 測一個程序的所有執(zhí)行路徑。正如這里描述的-類型是推算出來的,而不是聲明的。-類型層次結(jié)構(gòu)(子分類)是基于該類型的描述,而不是它的名 字。換句話說,我們知道,類型〈aXb〉String
〈/bx/a〉是 〈aXb〉String[l]々bx/a^々子類型,不是因為它們具有同一名字,而 是因為第一個是該第二個的子案例。利用數(shù)學集合,我們會說, String[O..l]的任何實例都是String[l]的子集(因為空集和String[l]集 合兩個都包括在String[l]集合中)。-類型是作為約束集合而不是作為名字定義的。這樣便可能捕捉有關(guān)給定變量可以保持的值的類型的許多更多信息。-類型是指XML類型,而不是對象類型(類)。因而,采用這里描述的系統(tǒng)和方法,開發(fā)者在設(shè)計時^f更知道,她 或他的程序在運行時不會失效或崩潰,因為該工作室(這里描述的 系統(tǒng)和方法的GUI應(yīng)用程序部分)在設(shè)計過程中就已經(jīng)進行了完整 的執(zhí)行路徑分析,并幫助開發(fā)者在設(shè)計時修正錯誤。甚至在該環(huán)球 網(wǎng)業(yè)務(wù)首次運行以前,大部分設(shè)計錯誤就已經(jīng)排除了。在操作上,該輸入和輸出的元數(shù)據(jù)是用 一個標準化的語言定義 的。該系統(tǒng)能夠在開發(fā)過程中進行動態(tài)的執(zhí)行路徑分析,幫助開發(fā) 者知道該開發(fā)中的程序的實時表現(xiàn)。在開發(fā)過程中,該系統(tǒng)計算場 景處理邏輯的每一個執(zhí)行路徑上更新的輸入和輸出元數(shù)椐,并防止 用戶產(chǎn)生錯誤。在每一個階段,從操作開始,在輸入以及輸出上分 析該元數(shù)據(jù)的狀態(tài)。例如,該系統(tǒng)可以防止開發(fā)者試圖操作或拷貝 一個在特定的執(zhí)行 路徑上運行時不可用的元素。本發(fā)明提供一個舉例說明該輸出元數(shù) 據(jù)的用戶界面。若被高亮度顯示,則該給定的執(zhí)行路徑和執(zhí)行點可 以被認為是存在的。這在防止錯誤上是特別有用的,其中用戶能夠 針對每一個執(zhí)行路徑準確地使輸入和輸出的構(gòu)造狀態(tài)可一見化,并確 定是否滿足預(yù)定的約束。該操作向開發(fā)者提供一個能引導編程、錯 誤防止、錯誤檢測和程序確認的系統(tǒng)。圖1是一個流程圖,舉例說明一個XML處理程序的可-見描繪和 編輯,它提供XML類型推理,以便按照它們的預(yù)期XML輸出類型, 來避免編程錯誤、來檢測錯誤和驗證程序。該過程在"開始,,101處 以"操作l" 103開始,進到"操作2" 105處的判定點,持續(xù)到"操 作3" 107,在"結(jié)束"109處結(jié)束處理。圖2舉例說明XML處理程序的一個給定4丸行點上進行XML類 型推理用的流程圖。該過程在"開始"201處開始,第一步驟是在該 XML處理程序的可視描繪中選擇一個執(zhí)行點203、 205。這是通過在兩個指令之間的點上選擇一條指令完成的。確定由一條指令清單構(gòu)成的執(zhí)行路徑。該執(zhí)行路徑在該XML處理程序的可視描繪中是高亮 度顯示的207。在下兩個框中,把該程序的輸入的XML類型傳送到與該執(zhí)刊-,各 徑中的第一條指令相聯(lián)系的類型推理子程序209,而與笫一操作相關(guān) 的類型推理子程序根據(jù)指令的配置計算所得的XML類型211。若所 選定的執(zhí)行點已經(jīng)達到213,則顯示215算出的XML類型,而且該 程序結(jié)束217。否則,把先前計算的XML類型傳送到該4丸行路徑中 的下一條指令,而與下一條指令相聯(lián)系的類型推理子程序219計算 所得的XML類型221。若因為該操作所要求的XML類型在該輸入 XML 223中不存在而計算失敗,則確定225 —個錯誤。否則,控制 退回227。若所選定的執(zhí)行點尚未達到,則把XML類型傳送到下一條指令, 并且該類型推理子程序計算所得的XML類型。圖3舉例說明一個流程圖,用以根據(jù)XML類型推理,;檢測XML 處理程序中指令配置的錯誤。該流程圖舉例說明用戶修改源程序301 的情況,識別受修改影響的執(zhí)行路徑303,并推算出所得的XML類 型305。若全部執(zhí)行點均已處理307,而且沒有錯誤309,則程序退 出311。否則,繼續(xù)執(zhí)行,直到確定321該計算點為止。若有計算錯 誤323,則高亮度顯示出現(xiàn)錯誤的指令,顯示計算錯誤325,而且程 序退出327。圖4舉例說明XML類型作為標識的節(jié)點樹的XML類型描繪, 例如,根元素401、子元素411和413,由基本類型發(fā)生約束、枚舉 及其他類型的信息而限定。表示子元素413還產(chǎn)生子元素421、 423 和425。圖5舉例說明XML子分類算法用的流程圖。如圖5所示,該過 程以XML類型的描繪1和XML類型描繪2開始501,其中代表類型 1和2的節(jié)點樹中的第一節(jié)點纟皮選定503。該節(jié)點測試兼容性505,而若不兼容,則程序退出511。若該節(jié)點是兼容的,而且所有節(jié)點均 已處理509,則該程序結(jié)束513。若尚未處理全部節(jié)點,則處理513 下一個節(jié)點,并測試該節(jié)點的兼容性515??刂品祷兀浴礁祷刂猎?節(jié)點是否最后的節(jié)點的判定519。圖6舉例說明基于XML確認的處理程序用的流程圖。處理以用 戶觸發(fā)確認601開始,識別603該XML處理程序中的所有可能的3各 徑。針對第一執(zhí)行路徑605推算所得的XML類型。若推算出來的XML類型不是預(yù)期的XML類型607的一個子類 型,則識別和顯示609產(chǎn)生出錯消息的XML類型的部分。否則,沒 有確認錯誤,而且所有執(zhí)行路徑均已處理611,該程序^皮認為沒有確 認錯誤613。若尚未處理611所有執(zhí)行路徑,則針對下一個執(zhí)行點推算所得的 XML類型615。若該推算出來的XML類型是該預(yù)期的XML類型617 的一個子類型,則對下一個節(jié)點進行類型檢查。否則,檢測并顯示619 產(chǎn)生該子分類錯誤的XML類型部分。本發(fā)明的另 一個實施例提供計算機編程系統(tǒng),它包括編程語言和 它的作為圖形流程圖的交互式可視描繪。與該程序特定執(zhí)行路徑和 點對應(yīng)的圖形邊緣可以按可4見方式選定來加入新的處理節(jié)點,或在 給定路徑的給定點上顯示該程序變量的元數(shù)據(jù)。該系統(tǒng)包括一個元 數(shù)據(jù)計算模塊,配置成在給定該語言程序、該程序的輸入和輸出的 元數(shù)據(jù)和該程序中執(zhí)行路徑和點時,計算在程序的任何給定點和路 徑上可用的和/或預(yù)期的變量的元數(shù)據(jù),從而啟用引導開發(fā)。該系統(tǒng) 還包括一組配置面板,用以處理節(jié)點的每一個可能的類型。該面才反 利用算出的元數(shù)據(jù)和它在其中增加節(jié)點的執(zhí)行點處的可視描繪,以 便啟動該處理節(jié)點的指向和點擊配置,并防止用戶把不存在的或其 類型與處理節(jié)點的參數(shù)類型不兼容的變量選擇為處理節(jié)點的參數(shù), 從而防止錯誤。該系統(tǒng)還包括處理節(jié)點配置錯誤可視通知模塊。操作時,若處理節(jié)點的配置是或變得不正確,該才莫塊使處理節(jié)點能夠立即以可^L方 式高亮度顯示。這可能是因為它的參數(shù)使用不存在的變量,或者在 給定的執(zhí)行路徑上沒有要求的類型,因而,在該程序設(shè)計時啟動錯-誤檢測。該系統(tǒng)還包括一個程序確認模塊,它探測所有的執(zhí)行路徑, 針對每一個可能的執(zhí)行路徑計算所得的元數(shù)據(jù),并驗證它是否與程—序的輸出的元數(shù)據(jù)一致,若非如此,則通過一個發(fā)現(xiàn)錯誤的執(zhí)行J各 徑和點清單來通知用戶,因而,啟動整個程序的確認并加速問題查 找。XML的優(yōu)點之一是它使標準化的語言能夠用于元數(shù)據(jù)XML Schema。大部分XML數(shù)據(jù)交換規(guī)格在該語言(甚至WSDL,環(huán)3求 網(wǎng)業(yè)務(wù)接口描述語言也是基于該語言)中是或?qū)⑹强捎玫摹T谝粋€按照本發(fā)明的系統(tǒng)配置中,開發(fā)任何XML處理邏輯以前 的第 一 步驟是要定義該程序輸入的元數(shù)據(jù)和該輸出的元數(shù)據(jù),在才支 術(shù)專門術(shù)語中稱為場景。輸入和輸出的定義是通過以可^見方式/人以 前裝入的XML Schema或WSDL中選擇一個節(jié)點來完成的。在我們 的示例中,我們裝入IFX1.4.0 XML Schema和用指向與點擊接口配 置我們的處理場景所消耗的輸入消息和所產(chǎn)生的輸出消息,如圖7 所示。完成配置之后,該系統(tǒng)產(chǎn)生如圖8所示的描繪,表示一個元數(shù)才居 才企查器(Metadata Inspector)的描繪。首先,這無疑是一個比以前顯示的原XML Schema可讀得多的 版本。我們實際上取得甚至更多的信息我們現(xiàn)在知道,元素RqUID 是UU1D類型,CardAcctld實際上是一個復(fù)雜的元素,可能包含Acctld 或CardMagData元素等。我們可以發(fā)現(xiàn)的是,該場景具有一個起點、 一個終點、 一個執(zhí)行 路徑和在該執(zhí)行路徑上的一個執(zhí)行點。該執(zhí)行路徑實際上是深藍色 的,意味著它已經(jīng)^C用戶選定,而我們已經(jīng)顯示的輸入元數(shù)據(jù)實際 上是該特定的執(zhí)行路徑和點上輸入的元數(shù)據(jù)的狀態(tài)。我們還可以考察該特定的執(zhí)行路徑中輸出的元數(shù)據(jù)的狀態(tài)該元數(shù)據(jù)可著以對比顏色或色調(diào)。這表明,這是所產(chǎn)生的消息的 預(yù)期的元數(shù)據(jù),然而在該輸入的情況下,它是所收到的消息的實際 的元數(shù)據(jù)。在一個按照本發(fā)明配置的系統(tǒng)中,XML處理程序,亦稱"場景,,, 是通過向 一個執(zhí)行點加入處理操作而設(shè)計的。通過實施例和例證,我們準備向我們的場景加入3個簡單的才喿 作,并看到在不同的執(zhí)行路徑上在元數(shù)據(jù)上造成的后果*在該輸出中建立BalInqRs元素的操作。*測試該MsgRqHdr元素是否存在于該BalInqRq請求消息的才喿作,若是如此,則把MsgRqHdr的內(nèi)容拷貝到輸出。 *根據(jù)Acctld(Card, Dep或Loan)的什么類型用在該MsgRqHdr中進行切換的操作。 這樣的一個場景中,我們可以看到,我們現(xiàn)在有六個執(zhí)行路徑(兩 個帶有存在/不存在開關(guān)和三個處于該Id/CardAcctld/LoanAcctld開關(guān) 中)和八個執(zhí)行點。對于每一個執(zhí)行點,都有可能使該元數(shù)據(jù)可4見 化。按照本發(fā)明,用三個可以配置的不同顏色來區(qū)分未被選擇的執(zhí)行 路徑(例如,淺灰色)、被選定的執(zhí)行路徑(例如,藍色)和該執(zhí)行 路徑內(nèi)的執(zhí)行點(例如,深藍色)??丛摷^,我們可以看到,我們還已經(jīng)選定主要的執(zhí)行路徑,但 是在該路徑內(nèi),我們已經(jīng)選定觀看在該輸出中建立該BalInqRs元素 的"建立BalInqRq"操作之后元數(shù)據(jù)的狀態(tài)。圖6表示此操作之后 輸出的元數(shù)據(jù)的狀態(tài)我們可以看到,在該輸出元數(shù)據(jù)中,該BalInqRs元素已經(jīng)改變 顏色,這意味著,對于這個給定的執(zhí)行路徑和執(zhí)行點,用戶可以i人 為它在"那里"。這是特別有用的,因為用戶能夠準確地對該輸出構(gòu) 造中他所處的每一個執(zhí)行路徑進行可視化,并看到該約束是否得到滿足。在幫助用戶避免錯誤方面,這是強有力的。 防止錯誤若我們選擇"MsgRqHdr是否存在"操作的"存在"分支,則我 們可以看到,該MsgRqHdr元素的實際基數(shù)已經(jīng)從[O..l](亦即,存 在或不存在)變?yōu)閇l](存在)。若我們選擇"MsgRqHdr是否存在" 操作的"不存在"分支,則我們看到,我們在該輸入元數(shù)據(jù)中再無 法看到MsgRqHdr元素。好了 ,這可能是預(yù)期的,因為我們只宣稱 它不存在。通過在該場景處理邏輯的每一個執(zhí)行路徑上和點上計算更新后的 輸入和輸出元數(shù)據(jù),本發(fā)明防止用戶產(chǎn)生諸如嘗試操作或拷貝 一 個 運行時在一個特定的執(zhí)行路徑上將是不可用的元素的錯誤。類似地,我們可以看到,在"開關(guān)"操作的每一個分支上,選擇 圖標已經(jīng)消失,而只有相關(guān)的Acctld類型可用按照本發(fā)明,諸如,例如,拷貝、移動、數(shù)學表達及其他操作等 的配置,是利用在增加該操作的執(zhí)行點上所算出的元數(shù)據(jù)配置的。例如,若用戶想要在一個特定的執(zhí)行點上加上一個拷貝操作,4也 首先要右點擊該執(zhí)行點,然后選擇要加上的操作(例如拷貝操作)。然后配置面板彈出。所有配置面板都是專用于該操作功能的,但 是它們?nèi)祭盟愠龅闹赶蚝忘c擊配置用的元數(shù)據(jù)。例如,對于 拷貝操作,用戶可以在該操作配置面板(見下圖)的"原點"標簽 下面選擇拷貝什么,并在配置面板的"目的地,,標簽下面選擇4巴它 拷貝到哪里去,只需指向和點擊即可。這使用戶基本上不可能由于搞錯而選擇運行時不在"那里"的元 素。在這種情況下,用戶不能夠拷貝CartAcctId或LoanAcctId)。這 是一個減少潛錯誤的風險和相關(guān)的所要求測試的強有力的途徑。這 里是一個我們要在該CardAcctld分支上加上一個操作的配置面凈反的 示例,正如你可以看到的,不可能用類似于運行時可能不在那里的 CardAcctld或DepAcctld的元素來配置該"原點,,(亦即,拷貝什么)。通過自動化錯誤檢測進行改變管理在它的整個開發(fā)環(huán)境中實時計算的元數(shù)據(jù)的許多其它優(yōu)點之一是,在對XML處理邏輯、環(huán)球網(wǎng)業(yè)務(wù)定義或所訪問的資源的定義作 出改變時檢測錯誤的能力??疾煳覀兏淖兾覀兊氖纠龍鼍皝碇С至硪粋€IFX版本的示例場 景,例如IFX1.3.0 XML Schema的情況。我們可能迅速地改變場景 的配置來使用IFX 1.3.0提供的、而不是IFX 1.4.0提供的BallnqRq/Rs 定義。我們實施改變之后我們得到以下幾點圖8表示,該"若MsgRqHdr"操作以對比顏色高亮度顯示,指 示對Schema的新版本的升級使該操作無效。原因是,在該IFX 1.3.0 XML Schema中該MsgRqHdr元素不存在,但是在該場景中的操作之 一利用它,其結(jié)果是,這新的上下文中操作沒有適當配置。本發(fā)明 能夠自動地檢測配置錯誤,并利用另一個顏色、例如紅色對它們進 行高亮度顯示。按照本發(fā)明,所配置的系統(tǒng)能夠識別哪些操作利用 這個元素并例如用紅色高亮度顯示它。若我們考察"若MsgRqHdr 存在"操作的配置,我們得到以下出錯消息然后我們能夠采取必要的動作(在這種情況下,抑制該"若 MsgRqHdr存在,,操作),修改我們的場景來支持該IFX 1.3.0 IFX Schema。抑制來自一個場景的操作,就像選擇它們并在該計算才幾的 鍵盤上按下"刪除"按鈕那么簡單。若我們已經(jīng)直接用一個像Java、 。#或C的技術(shù)來實現(xiàn)我們的場 景,這會花費長得多的時間來識別哪些部分的代碼將受到該輸入和 輸出接口的改變所影響。 業(yè)務(wù)確認業(yè)務(wù)確認超出元數(shù)據(jù)的實時計算的范圍。它在每一個可能的扭j亍 路徑上探測所得的元數(shù)據(jù),以便檢查它是否遵循該輸出的約束。在形式上, 一個XML處理程序的輸入,諸如環(huán)-求網(wǎng)業(yè)務(wù),可以 看作是有效的一組實例XML文檔(輸入元數(shù)據(jù))。輸出(輸出元數(shù)據(jù))也一樣。業(yè)務(wù)確認由下面構(gòu)成 1 )探測該程序的每一個單個分支,2) 計算每一個分支所產(chǎn)生的一組有效的XML文檔(針對該分 支算出的元數(shù)據(jù)),和3) 驗證它["它"=XML文檔組]是否"包括"(在集合理論的意 義上)在該輸出中的預(yù)期的XML文檔的集合中。若它包括在該輸出的元數(shù)據(jù)中,則該XML處理程序^皮認為是有 效的,因為對于每一個符合該輸入元數(shù)據(jù)的XML實例,都保證產(chǎn)生 一個符合輸出元數(shù)據(jù)的XML輸出。該業(yè)務(wù)確認并非實時功能性,因 為它要求數(shù)量較大的計算能力。它是由用戶從該系統(tǒng)中的菜單項目 調(diào)用的。當業(yè)務(wù)/XML處理程序無效時,該系統(tǒng)列出(見下圖)所有 檢測出來的錯誤。由此用戶能夠選擇該清單中的一個錯誤,而該系統(tǒng)將自動用藍色 高亮度顯示該執(zhí)行路徑,其即為該問題的源,并用紅色高亮度顯示 該操作,有的話,其即為該問題的源。在廣泛使用從XML Schema衍生的元數(shù)據(jù)以便在設(shè)計時直4妄防 止和檢測XML處理程序中的錯誤的系統(tǒng)和方法的實施例中,已經(jīng)對 本發(fā)明進行了描述。該獨特的特征能夠在開發(fā)時而不是在測試時識 別問題,并減少所要求的測試案例數(shù)量。最后,這急劇降低開發(fā)和 維護消息處理應(yīng)用程序的成本。應(yīng)該明白,這些實施例只是示例而 已,而且本專業(yè)的技術(shù)人員將會認可,給出上述公開,其它的實施 例和明顯的改善是可能的,而且本發(fā)明的范圍是由后附的權(quán)利要求 書及其等效物定義的。
權(quán)利要求
1. 一種用于約束驅(qū)動建立程序的計算機編程系統(tǒng),包括編程語言及其作為圖形流程圖的交互式可視描繪,其中處理節(jié)點之間的鏈接對應(yīng)于該程序的特定執(zhí)行點,并能夠以可視方式加以選擇,以便加入新的處理節(jié)點,或在給定路徑的給定點上立即顯示在該點和路徑上可用和/或預(yù)期已知的有關(guān)該數(shù)據(jù)或亦稱作元數(shù)據(jù)的信息;元數(shù)據(jù)計算引擎,配置成在給定該語言給的程序、該程序的輸入和輸出的元數(shù)據(jù)和該程序中的執(zhí)行路徑和點時計算該程序中任何給定點和路徑上操作和/或預(yù)期的數(shù)據(jù)的元數(shù)據(jù);方法和裝置,它采用在選定的執(zhí)行點上可用和預(yù)期的數(shù)據(jù)的元數(shù)據(jù)作為輸入,并根據(jù)它們的輸入和輸出的元數(shù)據(jù)建議一個處理節(jié)點的清單,當已知時,便啟動約束驅(qū)動的開發(fā),亦稱作引導開發(fā);和處理節(jié)點的每一個可能的類型用的一組配置面板,它利用所操作和/或預(yù)期的數(shù)據(jù)算出的元數(shù)據(jù)和它在該加入所述處理節(jié)點的執(zhí)行點處的可視描繪,以便啟動處理節(jié)點的指向和點擊配置,并防止用戶把其已知約束不滿足所述處理模式的一個或多個參數(shù)的約束的數(shù)據(jù)來選擇作為所述處理節(jié)點的參數(shù),因而,進一步啟動約束驅(qū)動的開發(fā),亦稱引導開發(fā);和處理節(jié)點配置錯誤可視通知方法,其中若處理節(jié)點的配置是或變得不正確,則該處理節(jié)點立即以可視方式高亮度顯示,因為該處理節(jié)點使用的數(shù)據(jù)的更新后算出的約束不再與處理節(jié)點的約束兼容,因而,啟動在設(shè)計程序時的錯誤檢測,亦稱用于改變管理的實時錯誤檢測;和程序確認引擎,它探測所有的執(zhí)行路徑,為每一個可能的執(zhí)行路徑計算所得的約束,并驗證它們是否與程序的輸出約束一致,若非如此,則通過列出算出的約束不匹配輸出約束的執(zhí)行路徑和點通知用戶,因而,啟動總體程序確認和加速問題查找;和
2. 按照權(quán)利要求l的系統(tǒng),其中所述處理程序是網(wǎng)絡(luò)業(yè)務(wù)程序。
3. 按照權(quán)利要求1的系統(tǒng),其中所述處理程序是互聯(lián)網(wǎng)業(yè)務(wù)程序。
4. 按照權(quán)利要求1的系統(tǒng),其中所迷程序的輸入或輸出約束由 形式語法、即描述形式語言的抽象結(jié)構(gòu)所定義。
5. 按照權(quán)利要求4的系統(tǒng),其中所述形式語法是由XML Schema 或Schema定義的,而且所述元數(shù)據(jù)計算引擎被稱作XML Schema 處理引擎。
6. 按照權(quán)利要求5的系統(tǒng),其中所述XML語法是利用下列XML i吾法-洽言之一定義的1) W3C XML Schema語言,2) 文檔類型定義(DTD)語言,3) Relax NG Schema語言4) Schematron或ISO SchematronA7.按照權(quán)利要求4的系統(tǒng),其中所述形式語法是利用對象管理 組的^l妄口定義語言(IDL)定義的。
7. 按照權(quán)利要求4的系統(tǒng),其中所述形式語法是由ontology語 言定義的。
8. 按照權(quán)利要求7的系統(tǒng),其中所述ontology語言是W3C Web Ontology語言(OWL)。
9. 按照權(quán)利要求7的系統(tǒng),其中所述XML Schema處理引擎是 在所述平臺引擎上實現(xiàn)的。
10. 按照權(quán)利要求7的系統(tǒng),其中所述XML Schema處理引擎《吏 用現(xiàn)存的平臺業(yè)務(wù)。
11. 按照權(quán)利要求7的系統(tǒng),其中所述XML Schema處理引擎本 來就處理XML分類信息。
12.按照權(quán)利要求7的系統(tǒng),其中所述XML Schema處理引擎完成改變管理。
全文摘要
提供一種系統(tǒng)和方法,用以用圖解方式運行和構(gòu)造XML處理程序、在程序開發(fā)時引導用戶、在設(shè)計程序時防止和檢測開發(fā)錯誤、保證程序是有效的。該系統(tǒng)包括一個圖形XML編程系統(tǒng),其中以圖形方式構(gòu)建和描繪XML處理程序,提供引導編程、防止和檢測錯誤和分析改變的影響和對改變進行管理的可視程序中每一個選定執(zhí)行點用的實時元數(shù)據(jù)計算和可視化方法,和自動化的執(zhí)行路徑探測方法,它啟動總體的程序確認和錯誤識別。
文檔編號G06F11/00GK101263459SQ200580040766
公開日2008年9月10日 申請日期2005年9月30日 優(yōu)先權(quán)日2004年10月1日
發(fā)明者G·P·勒布勒, M·D·馬丁 申請人:迪堡公司