亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

生成關(guān)于模型的約束表達(dá)式的方法以及約束語(yǔ)言編輯器的制作方法

文檔序號(hào):6458252閱讀:357來(lái)源:國(guó)知局
專利名稱:生成關(guān)于模型的約束表達(dá)式的方法以及約束語(yǔ)言編輯器的制作方法
技術(shù)領(lǐng)域
本發(fā)明 一般地涉及計(jì)算機(jī)建模及相應(yīng)的約束語(yǔ)言的領(lǐng)域,并且具體而 言涉及一種用于生成關(guān)于模型的約束表達(dá)式的方法以及約束語(yǔ)言編輯器。
背景技術(shù)
計(jì)算機(jī)建模,特別是軟件建模主要是指在軟件工程領(lǐng)域(諸如,統(tǒng)一
建模語(yǔ)言UML、 Eclipse建??蚣蹺MF)中的對(duì)象建模,它從較高的層次 來(lái)描述應(yīng)用程序,進(jìn)而可以部分或全部地生成該應(yīng)用的實(shí)現(xiàn)代碼。絕大多 數(shù)模型是由許多方框箭頭圖和一些附隨的文本所組成,這樣的模型所傳達(dá) 的信息是不夠完整的,非正式的和不夠精確的,甚至有些時(shí)候自相矛盾。 模型中的許多缺陷都是由于所使用的圖形表達(dá)能力有限而造成的。僅僅通 過(guò)圖形有時(shí)無(wú)法表達(dá)一些條件陳述,而該陳述本應(yīng)該是一個(gè)完整的規(guī)約的 一部分。例如,假定對(duì)航班與乘客的關(guān)系進(jìn)行UML建模,則航班與乘客 之間的關(guān)聯(lián)可以表示一次航班的乘客是確定的一組人,這個(gè)一對(duì)多的關(guān)聯(lián) 是多重關(guān)系,這意味著乘客的數(shù)目是無(wú)限的。但是實(shí)際上,乘客的數(shù)目不 可能超過(guò)執(zhí)行這個(gè)航班的飛機(jī)上座位的數(shù)目。然而,在UML圖上無(wú)法表 達(dá)這個(gè)約束。這時(shí),需要向其中添加約束語(yǔ)言,諸如OCL(對(duì)象約束語(yǔ)言, Object Constraint Language ) 、 Schematron等。
以O(shè)CL為例,在OCL規(guī)范中提到,UML圖(例如類圖)通常不夠 精細(xì),無(wú)法提供與規(guī)范有關(guān)的所有相關(guān)部分。這其中就需要描述模型中關(guān) 于對(duì)象的附加約束。這些約束常常用自然語(yǔ)言描述。而實(shí)踐表明,這樣做 經(jīng)常造成歧義。為了寫(xiě)出無(wú)歧義的約束,已經(jīng)開(kāi)發(fā)出幾種所謂的"形式語(yǔ) 言,,。傳統(tǒng)的形式語(yǔ)言的缺點(diǎn)是,僅適用于有相當(dāng)數(shù)學(xué)背景的人員,而普
7通的商務(wù)或系統(tǒng)建模者則難以使用。OCL即為填補(bǔ)這一空白而開(kāi)發(fā)。它是 一種保留了易讀易寫(xiě)特點(diǎn)的形式語(yǔ)言。OCL通過(guò)提供表達(dá)式來(lái)支持UML,難。
使用諸如OCL的基于數(shù)學(xué)的、精確的語(yǔ)言寫(xiě)的表達(dá)式為圖形表達(dá)的 系統(tǒng)模型提供了許多額外的利處,例如,這種表達(dá)式不會(huì)被不同的角色(諸 如分析員和程序員)理解為不同的意思。它們是明確的,并且使得模型更 為精確和詳細(xì)。這些表達(dá)式也可以被自動(dòng)化工具所檢查,以保證它們是正 確的,并且與模型中的其它元素一致,使得代碼生成變得更加有效。然而, 單純使用表達(dá)式這種方式描述的模型常常是難于理解的。例如,盡管源代 碼可以被認(rèn)為是軟件最終的模型,但是大多數(shù)人在第一次和系統(tǒng)打交道的 時(shí)候更希望看到一個(gè)圖形化的模型,線框箭頭圖的好處在于,其含義可以 很容易理解。對(duì)于軟件開(kāi)發(fā)者來(lái)說(shuō),結(jié)合使用UML和OCL使得兩方面相 得益彰。大量的不同的圖形和OCL表達(dá)式可以被結(jié)合起來(lái)表示模型。注 意,對(duì)于一個(gè)完整的模型,圖形和OCL表達(dá)式都是不可缺少的。沒(méi)有OCL 表達(dá)式,模型可能會(huì)不夠完善;沒(méi)有UML圖,OCL表達(dá)式可能引用不存 在的元素模型一一因?yàn)镺CL中沒(méi)有一種機(jī)制來(lái)表示類和關(guān)聯(lián)。因此,只 有結(jié)合圖形和約束,才能完整地表達(dá)一個(gè)模型。
Jos Warmer, Anneke Kleppe在其著作"Object Constraint Language, Getting Your Models Ready for MDA, Second Edition"中詳細(xì)介紹了 OCL 的4個(gè)特性。
1. OCL是查詢(Query)語(yǔ)言也是約束(Constraint)語(yǔ)言。
一個(gè)約束就是對(duì)一個(gè)(或部分的)面向?qū)ο竽P突蛘呦到y(tǒng)的一個(gè)或多 個(gè)值的限制。UML類圖中的所有值都可以被約束,而表達(dá)這些約束的方法 就是OCL。
在UML2標(biāo)準(zhǔn)中,OCL不僅用來(lái)寫(xiě)約束,還能夠用來(lái)對(duì)UML圖中 的任何元素寫(xiě)表達(dá)式。每個(gè)OCL表達(dá)式都能指出系統(tǒng)中的一個(gè)值或者對(duì) 象。因?yàn)镺CL表達(dá)式能夠求出一個(gè)系統(tǒng)中的任何值或者值的集合,因此
、、/



語(yǔ)


達(dá)

8它具有了和SQL同樣的能力。
2.0CL是基于數(shù)學(xué)的,但沒(méi)有使用數(shù)學(xué)符號(hào)。
OCL的基礎(chǔ)是數(shù)學(xué)中的集合論和謂詞邏輯,并且它有一個(gè)形式化的數(shù) 學(xué)語(yǔ)義,但是它并沒(méi)有使用某種數(shù)學(xué)符號(hào)。因?yàn)殡m然數(shù)學(xué)符號(hào)能夠清晰地、 無(wú)歧義地表達(dá)事物,但是只有極少的專家可以看懂。所以數(shù)學(xué)符號(hào)并不適 用于一種廣泛應(yīng)用的標(biāo)準(zhǔn)語(yǔ)言。
自然語(yǔ)言是最易懂的,但是它是含混不清晰的,且無(wú)法被計(jì)算機(jī)自動(dòng) 處理。OCL取了自然語(yǔ)言和數(shù)學(xué)符號(hào)的折衷方案,使用普通的ASCII字 符來(lái)表達(dá)數(shù)學(xué)中同樣的概念。如果你不喜歡當(dāng)前的OCL表達(dá)方法,OCL 規(guī)范還允許你定義自己的OCL符號(hào)集。這點(diǎn)是可以理解的,因?yàn)镺CL有 一個(gè)清晰的數(shù)學(xué)語(yǔ)義。
3. 強(qiáng)類型的語(yǔ)言
OCL是一種類型語(yǔ)言,任何表達(dá)式的值都是屬于一個(gè)類型的。這個(gè)類 型可以是預(yù)定義的標(biāo)準(zhǔn)類型例如Boolean或者Integer,也可以是UML圖 中的元素例如對(duì)象。也可以是這些元素組成的集合,例如對(duì)象的集合、包、 有序集合等等。
4. 宣言式(declarative)的語(yǔ)言
與宣言式語(yǔ)言相對(duì)應(yīng)的是過(guò)程式(procedural)的語(yǔ)言。過(guò)程式語(yǔ)言 (諸如Java)是一類編程語(yǔ)言,描述了動(dòng)作執(zhí)行的步驟。而在宣言式語(yǔ)言 中,表達(dá)式僅僅描述了應(yīng)該去做"什么",而不是應(yīng)該"怎樣"去做。為 了保證這一點(diǎn),OCL的表達(dá)式是沒(méi)有副作用的,也就是說(shuō),計(jì)算一個(gè)OCL 表達(dá)式的值不會(huì)對(duì)系統(tǒng)的狀態(tài)產(chǎn)生任何改變。
OCL是用于描述應(yīng)用于UML模型的規(guī)則的宣言式語(yǔ)言,因此UML 中的表達(dá)式被提升到了純建模的領(lǐng)域,而不必理會(huì)實(shí)現(xiàn)的細(xì)節(jié)和實(shí)現(xiàn)的語(yǔ) 言。表達(dá)式在高的抽象層次上規(guī)定了系統(tǒng)的值,從而保留了 100%的精確。
OCL也是一種用于基于圖形的模型的導(dǎo)航(navigation)語(yǔ)言。但是 對(duì)于約束的文字表達(dá)式則是復(fù)雜的。約束表達(dá)式為文本形式,用戶必須了 解其語(yǔ)法結(jié)構(gòu)才能寫(xiě)出,而這些約束語(yǔ)言往往用戶不是4艮熟悉,寫(xiě)表達(dá)式可能要花費(fèi)很多精力,且質(zhì)量不高。但現(xiàn)有的OCL編輯器對(duì)于表達(dá)式生 成僅具有有限的支持,其中不存在用于復(fù)雜元模型的導(dǎo)航表達(dá)式編輯,而 且表達(dá)式設(shè)計(jì)者除了元模型之外還必須面對(duì)OCL語(yǔ)法,所述"導(dǎo)航,,將 在下文中詳細(xì)描述。
典型的OCL編輯器主要關(guān)注約束語(yǔ)法,導(dǎo)致用戶體驗(yàn)比較差。用戶 需要面對(duì)基于文本的約束編輯用戶界面。盡管編輯器可以幫助用戶部分地 自動(dòng)完成表達(dá)式,即,在現(xiàn)有的OCL編輯器中,只能在用戶選擇一個(gè)元 素后,提示該元素的屬性和方法,以及直接的關(guān)聯(lián)(Association)元素, 但用戶仍然需要知道OCL的語(yǔ)法才能寫(xiě)出表達(dá)式。
圖1示出了 SQL語(yǔ)句編輯器(RAD)的示例性示圖。其中,RAD提 供了模型層的視圖并解除了用戶進(jìn)行SQL語(yǔ)句編輯的負(fù)擔(dān)。即,用戶只需 要進(jìn)行模型編輯,而不用操心SQL語(yǔ)法。在用戶完成模型設(shè)計(jì)之后,SQL 語(yǔ)法將通過(guò)應(yīng)用自動(dòng)生成。而在現(xiàn)有技術(shù)中不存在針對(duì)UML/EMF自動(dòng)生 成OCL表達(dá)式的類似工具。
此外,盡管Schematron (可用于XQuery、 XPath、 XSLT )和OCL 可以提供類似的約束語(yǔ)義,但它們采用不同的語(yǔ)法,而現(xiàn)有技術(shù)中不存在 支持兩類語(yǔ)言編輯的統(tǒng)一工具。例如參見(jiàn)圖2,圖2示出了兩種不同的約 束語(yǔ)法共享相同的模型和約束語(yǔ)義的示例。圖2是關(guān)于導(dǎo)航的具體實(shí)例。 圖的上半部分是用于描述應(yīng)用程序部署情況的實(shí)例,設(shè)計(jì)者希望添加一個(gè) 約束,要求WAS 6.0 AppServer ( WAS是WebSphere應(yīng)用服務(wù)器的縮寫(xiě)) 的數(shù)據(jù)源DataSourceUnit所連接的數(shù)據(jù)庫(kù)的名字等于"tradedb"。即, 約束語(yǔ)義是數(shù)據(jù)源需要所連接的數(shù)據(jù)庫(kù)是tradeDB。該約束從數(shù)據(jù)源 DataSourceUnit出發(fā),首先需要導(dǎo)航到它所連接的數(shù)據(jù)庫(kù)(DB2 8.1 Database),然后需要導(dǎo)航到數(shù)據(jù)庫(kù)的名字,最后要求該名字等于 "tradedb"。導(dǎo)航過(guò)程在圖中由元素DB2Database/DB2 Database ( 201 ) 到元素DB2 Database (202),以及連接201和202的實(shí)線箭頭即為導(dǎo)航。 該語(yǔ)義可以被若干種不同的語(yǔ)法所實(shí)現(xiàn),例如OCL表達(dá)式和Schematron 表達(dá)式。圖的下半部分分別使用OCL和Schematron兩種約束語(yǔ)言表達(dá)了
10這個(gè)約束,表達(dá)式中關(guān)于導(dǎo)航的部分用黑色框標(biāo)出,其中,框210內(nèi)的OCL表達(dá)式和框220內(nèi)的Schematron表達(dá)式為導(dǎo)航所需的。由此可見(jiàn),在一個(gè)完整的約束表達(dá)式中,導(dǎo)航表達(dá)式占據(jù)了大部分篇幅。在寫(xiě)約束表達(dá)式時(shí),用戶需要在編輯器提供的整個(gè)元素列表中找到導(dǎo)航方法/關(guān)聯(lián),并且需要手動(dòng)進(jìn)行類型轉(zhuǎn)換。這需要很多步驟,因此導(dǎo)航幫助變得尤為重要。在現(xiàn)有編輯器中,并不提供針對(duì)導(dǎo)航的幫助,用戶需要逐個(gè)步驟地實(shí)現(xiàn)導(dǎo)航路徑。并且,某些有效的導(dǎo)航路徑可能無(wú)法被提供。因此,需要一種用于提取約束語(yǔ)義、提供導(dǎo)航幫助、并生成針對(duì)不同語(yǔ)法的不同約束代碼的新穎技術(shù)。

發(fā)明內(nèi)容
為了克服現(xiàn)有技術(shù)中所存在的缺陷,并使得用戶能夠便利地通過(guò)導(dǎo)航幫助來(lái)生成關(guān)于模型的約束表達(dá)式,進(jìn)而解除用戶編寫(xiě)語(yǔ)言的負(fù)擔(dān)、提高用戶工作效率,而提出了本發(fā)明。
根據(jù)本發(fā)明的一個(gè)方面,提出了一種用于在約束語(yǔ)言編輯器中幫助生成針對(duì)導(dǎo)航的約束語(yǔ)言代碼的方法,其中所述約束語(yǔ)言編輯器用于根據(jù)所加載的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,所述導(dǎo)航是實(shí)現(xiàn)約束的路徑,包括模型/實(shí)例元素的序列,所述方法包括
解析所加栽的模型/實(shí)例;
通過(guò)所解析的4莫型/實(shí)例中的與導(dǎo)航有關(guān)的元素的類型,計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián);以及
通過(guò)所述關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
根據(jù)本發(fā)明的另一方面,提出了一種在約束語(yǔ)言編輯器中用于幫助生成針對(duì)導(dǎo)航的約束語(yǔ)言代碼的導(dǎo)航幫助器,其中所述約束語(yǔ)言編輯器用于根據(jù)所加載的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,所述導(dǎo)航是實(shí)現(xiàn)約束的路徑,包括模型/實(shí)例元素的序列,所述導(dǎo)航幫助器包括
模型解析器,用于解析所加栽的模型;實(shí)例解析器,用于解析所加載的實(shí)例;
關(guān)聯(lián)數(shù)據(jù)庫(kù),用于存儲(chǔ)與所述所加載的模型/實(shí)例中的關(guān)聯(lián)有關(guān)的數(shù)
據(jù);
導(dǎo)航路徑計(jì)算器,用于通過(guò)所解析的模型/實(shí)例中的與導(dǎo)航有關(guān)的元素的類型,計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián),并通過(guò)所述關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
根據(jù)本發(fā)明的又一方面,提出了 一種用于在約束語(yǔ)言編輯器中幫助生成約束語(yǔ)言代碼的方法,其中所述約束語(yǔ)言編輯器用于根據(jù)所加栽的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,所述方法包括
加載模型/實(shí)例;
加載約束模式,所述約束模式用于存儲(chǔ)與約束語(yǔ)義相關(guān)的參數(shù)和約束代碼模板;
根據(jù)所述約束模式中存儲(chǔ)的參數(shù)的類型,調(diào)用相應(yīng)的幫助器,以基于所述約束模式生成與所加載的模型/實(shí)例有關(guān)的具體約束參數(shù);以及
根據(jù)所生成的約束參數(shù)和所述約束模式中的約束代碼模板,生成約束代碼。
根據(jù)本發(fā)明的再一方面,提出了一種約束語(yǔ)言編輯器,用于根據(jù)所加載的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,所述約束語(yǔ)言編輯器包括
約束模式,用于存儲(chǔ)與約束語(yǔ)義相關(guān)的參數(shù)和約束代碼才莫板;幫助器,用于基于所述約束模式生成與所加載的模型/實(shí)例有關(guān)的具體約束參數(shù);以及
代碼生成器,根據(jù)所述幫助器生成的約束參數(shù)和所述約束模式中的約束代碼才莫板,生成約束代碼。
本發(fā)明所提出的用于生成關(guān)于模型的約束表達(dá)式的約束語(yǔ)言編輯器及其方法,能夠提取約束語(yǔ)義、向用戶提供導(dǎo)航幫助、并生成針對(duì)不同語(yǔ)法的不同約束代碼,從而用戶僅需關(guān)注模型設(shè)計(jì),而無(wú)需了解各種約束語(yǔ)言的語(yǔ)法,減少用戶手動(dòng)寫(xiě)導(dǎo)航表達(dá)式的負(fù)擔(dān),提高工作效率。
1

在附帶的權(quán)利要求中闡明了被認(rèn)為是本發(fā)明新穎特性的特征。然而,通過(guò)參考以下結(jié)合附圖的說(shuō)明性實(shí)施例的詳細(xì)描述,將最好地理解本發(fā)明
本身以及其優(yōu)選使用模式、另外的目的和優(yōu)點(diǎn),在附圖中圖l示出了 SQL語(yǔ)句編輯器(RAD)的示例性示圖;圖2示出了兩種不同的約束語(yǔ)法共享相同的模型和約束語(yǔ)義的示例;圖3A-3C更清楚地闡述在不同情形中對(duì)導(dǎo)航的多種實(shí)現(xiàn);圖4是根據(jù)本發(fā)明實(shí)施例的約束語(yǔ)言編輯器的體系結(jié)構(gòu);圖5描述了才艮據(jù)本發(fā)明實(shí)施例的約束表達(dá)式生成的方法工作流的流程
圖6描述了根據(jù)本發(fā)明的約束語(yǔ)言編輯器的約束提取的實(shí)現(xiàn);圖7描述了根據(jù)本發(fā)明實(shí)施例的約束語(yǔ)言編輯器中的導(dǎo)航幫助器的體系結(jié)構(gòu);
圖8示出了根據(jù)本發(fā)明的導(dǎo)航幫助器在模型層的工作流;圖9示出了才艮據(jù)本發(fā)明的導(dǎo)航幫助器在實(shí)例層的工作流;以及圖IOA和IOB詳細(xì)示出了通過(guò)所選擇的類型計(jì)算可能的關(guān)聯(lián)的過(guò)程。需要注意,在全體附圖中,相同或相似的標(biāo)號(hào)指代的是相同或相似的單元或組件。
具體實(shí)施例方式
在下文中將結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例進(jìn)行描述。為了清楚和簡(jiǎn)明起見(jiàn),在說(shuō)明書(shū)中并未描述實(shí)際實(shí)現(xiàn)方式的所有特征。然而,應(yīng)該了
決定,以便實(shí)現(xiàn)開(kāi)發(fā)人員的具體目標(biāo),例如符合與系統(tǒng)及業(yè)務(wù)相關(guān)的那些限制條件,其中,這些限制條件會(huì)隨著實(shí)施方式的不同而改變。此外,還應(yīng)該了解,雖然開(kāi)發(fā)工作有可能是非常復(fù)雜和費(fèi)時(shí)的,但對(duì)得益于這個(gè)公開(kāi)內(nèi)容的本領(lǐng)域技術(shù)人員來(lái)說(shuō),這種開(kāi)發(fā)工作僅僅是例行的任務(wù)。
13此外,還需要說(shuō)明的一點(diǎn)是,為了避免因不必要的細(xì)節(jié)而混淆了本發(fā)明,在附圖中僅僅示出了與根據(jù)本發(fā)明的方案密切相關(guān)的裝置結(jié)構(gòu)和/或處理步驟,而省略了與本發(fā)明關(guān)系不大的其它細(xì)節(jié)。
為了更好地理解本發(fā)明,以O(shè)CL編輯器為例,首先要說(shuō)明為什么用戶無(wú)法在傳統(tǒng)的OCL編輯器的幫助下寫(xiě)出關(guān)于模型的約束。傳統(tǒng)的OCL編輯器可以生成具有OCL語(yǔ)法信息和模型/實(shí)例信息的部分表達(dá)式。其中,OCL語(yǔ)法信息包括:操作符,諸如+、 <、 >;集合操作,諸如->any()、->select();以及類型轉(zhuǎn)換,諸如oclAsType()。模型/實(shí)例信息包括對(duì)象的屬性、對(duì)象的操作、對(duì)象間的關(guān)聯(lián)、以及對(duì)象間的一般化(generalization )。傳統(tǒng)的OCL編輯器在沒(méi)有計(jì)算模型和實(shí)例信息的情況下無(wú)法為用戶生成完整和有效的表達(dá)式。尤其是在存在繼承(inheritance)的情形中,由于OCL編輯器無(wú)法找到對(duì)于孩子元素或父元素的導(dǎo)航,因此在不經(jīng)過(guò)計(jì)算的情況下OCL編輯器無(wú)法提供所有可能的導(dǎo)航路徑。并且OCL編輯器也無(wú)法幫助用戶生成復(fù)雜的導(dǎo)航表達(dá)式,從而用戶必須根據(jù)模型設(shè)計(jì)的要求利用他所了解的OCL語(yǔ)法知識(shí)手動(dòng)完成導(dǎo)航表達(dá)式。
從上述描述中可以看出,導(dǎo)航對(duì)于OCL編輯器來(lái)說(shuō)是重要的,也是困難的。其原因在于,在用戶寫(xiě)模型表達(dá)式時(shí),使用導(dǎo)航是很常見(jiàn)的,而導(dǎo)航是OCL表達(dá)式中最復(fù)雜的一部分。圖3列出了三種不同層次的導(dǎo)航。下面參考圖3A-3C可以更清楚地闡述在不同情形中對(duì)導(dǎo)航的多種實(shí)現(xiàn)。圖3A是一個(gè)關(guān)于應(yīng)用程序部署的模型,圖中包含了若干模型元素如DeployObject、 Unit等,以及元素之間的繼承、關(guān)聯(lián)等關(guān)系。可以看出,在這樣一個(gè)模型中,從一個(gè)元素到另一個(gè)元素可能有多種導(dǎo)航路徑,有些路徑包含多個(gè)關(guān)系,甚至有些路徑包含了不同種類的關(guān)系,形成比較復(fù)雜的導(dǎo)航。由于模型的復(fù)雜性, 一個(gè)導(dǎo)航可能需要經(jīng)過(guò)多個(gè)元素。例如,參見(jiàn)圖3A, 考慮下述導(dǎo)航Unit -> Requirement -> Dependency Link ->Capability-> Unit。顯而易見(jiàn),該導(dǎo)航的表達(dá)式將會(huì)是冗長(zhǎng)和復(fù)雜的。
圖3B描述了關(guān)聯(lián)關(guān)系之上的繼承,說(shuō)明由于面向?qū)ο蟮睦^承性,一個(gè)導(dǎo)航的終點(diǎn)的類型可能有多種選擇父類或子類。例如圖3B中包括了繼承與關(guān)聯(lián)的結(jié)合。如所示,"limixHosting (linux托管)"關(guān)系就是繼承了 "hosting (托管),,關(guān)系;WAS on Linux (Linux上的WAS)是從WAS Unit (WAS單元)繼承而來(lái)。在這種才莫型中,從一個(gè)元素出發(fā)的導(dǎo)航路徑就可能覆蓋多個(gè)層次,如從"WAS on Linux"出發(fā),選擇"hosting"和"IinuxHosting"就會(huì)到達(dá)不同層次的元素。因此,OCL編輯器應(yīng)該提供這樣的導(dǎo)航幫助器,其可以把不同層次的元素和屬性都找出來(lái),并且分類。當(dāng)以WAS on Linux作為導(dǎo)航的開(kāi)始元素時(shí),導(dǎo)航幫助器應(yīng)該能夠列出Linux與OS Unit兩個(gè)選擇,因?yàn)長(zhǎng)inux是從OS Unit ( OS單元)繼承而來(lái)。
圖3C描述了含有集合關(guān)系的模型,說(shuō)明了對(duì)于導(dǎo)航終點(diǎn)為元素集合的情況,其中根據(jù)不同的目的地,導(dǎo)航屬于不同的層次。"WAS群集"元素作為一個(gè)集合元素包含其他三個(gè)模型元素WAS V6單元(id: 0)、WASV6單元(id: 1)以及WASV5單元(id: 0),即,這三個(gè)模型元素是元素"WAS群集"的成員。因此,從"WAS群集"出發(fā)可以到達(dá)不同種類的元素。
圖3B和3C都給出了從一個(gè)元素出發(fā),到達(dá)不確定目標(biāo)的情況,在這種情況下,就需要導(dǎo)航幫助工具做出判斷或者給用戶適當(dāng)?shù)倪x擇和提示。因此導(dǎo)航不但需要找到集合的每一個(gè)元素,還需要找到它們的共同父類,因?yàn)閷?duì)于元素集合的約束往往是加在具有共同屬性的父類這一層次的。
由此可以看出,在對(duì)于諸如OCL的約束語(yǔ)言的表達(dá)式進(jìn)行編寫(xiě)時(shí),導(dǎo)航是常見(jiàn)的,也是十分復(fù)雜的。導(dǎo)航可以通過(guò)下述方式來(lái)實(shí)現(xiàn),所述方式包括在^=莫型和實(shí)例上定義的關(guān)聯(lián)、屬性、方法,由約束語(yǔ)言定義的集合操作,以及類型轉(zhuǎn)換代碼。導(dǎo)航代碼通常與其它操作符和操作數(shù)(模型元素和屬性)相結(jié)合。并且在實(shí)踐中,模型設(shè)計(jì)者往往對(duì)模型很熟悉,而
不熟悉約束語(yǔ)言的語(yǔ)法(例如集合操作、類型轉(zhuǎn)換),或者僅熟悉一種約束語(yǔ)言,而無(wú)法應(yīng)用其它的約束語(yǔ)言。因此,導(dǎo)航幫助對(duì)于用戶便利地寫(xiě)出所需的約束表達(dá)式是必要的,導(dǎo)航幫助應(yīng)該與語(yǔ)法幫助相集成以作為實(shí)用工具進(jìn)行提供,并且導(dǎo)航幫助是一種用于實(shí)現(xiàn)獨(dú)立于語(yǔ)言的表達(dá)式生成的不可缺少的功能。根據(jù)本發(fā)明的約束語(yǔ)言編輯器能夠向用戶提供導(dǎo)航幫助,從而減少用戶手動(dòng)編寫(xiě)導(dǎo)航表達(dá)式的負(fù)擔(dān),提高工作效率。
在闡述了導(dǎo)航幫助在約束語(yǔ)言編輯器中的重要性以及其復(fù)雜性之后,下文將詳細(xì)描述本發(fā)明將如何實(shí)現(xiàn)約束語(yǔ)言編輯器以及其中的導(dǎo)航幫助
器。在本發(fā)明中,使用"模式(pattern),,將約束語(yǔ)義從其所實(shí)現(xiàn)的約束語(yǔ)言中分離出來(lái),所述約束語(yǔ)義包括模型元素/屬性、導(dǎo)航(包括實(shí)例層導(dǎo)航和類型層導(dǎo)航)、操作符、用戶定義值(常數(shù))、以及集合操作。本發(fā)明可以基于模型和實(shí)例信息,幫助進(jìn)行導(dǎo)航檢測(cè)、分類和表達(dá)式生成。具體而言,本發(fā)明可以基于模型和實(shí)例信息檢測(cè)導(dǎo)航候選,使用關(guān)于導(dǎo)航
的模式信息來(lái)過(guò)濾所述導(dǎo)航候選(例如導(dǎo)航目的地必須屬于OS Unit類型,則其他類型的導(dǎo)航目的地被拋棄),根據(jù)模型/實(shí)例層、繼承層對(duì)導(dǎo)航
候選進(jìn)行分類,以及通過(guò)用戶選擇來(lái)決定導(dǎo)航路徑。本發(fā)明還可以使用約束代碼模板和代碼生成器來(lái)將所確定的約束語(yǔ)義轉(zhuǎn)換成不同語(yǔ)言的約束表達(dá)式,諸如OCL或Sche腸tron。
下面參見(jiàn)圖4,圖4是根據(jù)本發(fā)明實(shí)施例的約束語(yǔ)言編輯器的體系結(jié)構(gòu)。結(jié)合圖4,本領(lǐng)域技術(shù)人員可以更清楚地了解根據(jù)本發(fā)明的約束語(yǔ)言編輯器的工作原理。在圖4中,約束語(yǔ)言編輯器包括約束^^莫式420、幫助器430和代碼生成器440。約束模式420包括與約束語(yǔ)義相關(guān)的下述參數(shù)422:模型元素/屬性類型、導(dǎo)航類型(包括實(shí)例層導(dǎo)航子類型和類型層導(dǎo)航子類型)、操作符類型、用戶定義值(常數(shù))、以及集合(指代模型元素/屬性的集合)操作符。約束模式420還可以包括約束代碼模板424,其中存儲(chǔ)了約束代碼的模板。在用戶確定了必需的參數(shù)從而確定了約束語(yǔ)義之后,可以基于所述模板生成所需的約束語(yǔ)言代碼。約束語(yǔ)言編輯器將才莫型圖410加載進(jìn)來(lái),并將其中的模型及實(shí)例連同約束模式420的參數(shù)一同傳遞到幫助器430。
幫助器430包括元素/屬性幫助器431、導(dǎo)航幫助器432、操作符幫助器433、常數(shù)幫助器434以及集合幫助器435。上述五種幫助器分別用于幫助上述五種參數(shù)的生成,即,它們可以基于預(yù)定義的規(guī)則自動(dòng)選擇可用的
16相關(guān)參數(shù),并在存在多個(gè)可能的參數(shù)的時(shí)候例如以窗口方式列出所述參數(shù) 由用戶進(jìn)行選擇。上述五種幫助器并不一定同時(shí)需要。根據(jù)所定義的約束
可以確定所需要的參數(shù)。在通過(guò)幫助器430確定所需的參數(shù)并將其傳遞回 約束模式420之后,約束模式420將所生成的參數(shù)以及與約束語(yǔ)義相對(duì)應(yīng) 的約束代碼模板傳遞到代碼生成器440,從而生成約束表達(dá)式450。在此實(shí) 施例中,代碼生成器440包括OCL生成器,因此可以生成OCL語(yǔ)言的約 束表達(dá)式。本領(lǐng)域技術(shù)人員可以理解,代碼生成器440也可以支持其它語(yǔ) 言(諸如Schematron ),從而生成其它語(yǔ)言的約束表達(dá)式。注意,這里所 述的約束模式的類型為通用屬性約束類型,只包含一些基本的模式,如"等 于(equal)"、"包含(inRange ),,、"賦值(derive)"等,和應(yīng)用層 語(yǔ)義相關(guān)的模式不包括在本發(fā)明中。通過(guò)所述約束模式可以基于所選擇的 操作符進(jìn)行參數(shù)類型驗(yàn)證。
圖5描述了根據(jù)本發(fā)明實(shí)施例的用于生成約束表達(dá)式的方法工作流的 流程圖。所述方法在步驟505開(kāi)始,并繼續(xù)進(jìn)行到步驟510、 515和520。 其中,在步驟510,模型被加載;在步驟515,實(shí)例被加載;在步驟520, 模式被加栽。在步驟525,從所加栽的模式中獲得一個(gè)參數(shù)。接著所述方 法繼續(xù)進(jìn)行到步驟530,獲得幫助器列表。在步驟535,根據(jù)所獲得的參數(shù) 確定所需要的幫助器,其包括上述的五種幫助器之一元素/屬性幫助器、 導(dǎo)航幫助器、操作符幫助器、常數(shù)幫助器以及集合幫助器。接著在步驟540, 通過(guò)用戶選擇生成參數(shù)結(jié)果。所述方法繼續(xù)進(jìn)行到步驟545,確定所迷參 數(shù)是否是最后一個(gè)參數(shù)。如果否,則循環(huán)回到步驟525,從所加載的模式 中獲得下一個(gè)參數(shù)。
如果在步驟545確定所獲得的參數(shù)是最后一個(gè)參數(shù),則所述方法繼續(xù) 進(jìn)行到步驟550,其中約束表達(dá)式被生成。接著在步驟555,確定該約束中 是否存在導(dǎo)航。如果是,則所述方法繼續(xù)進(jìn)行到步驟560,其中通過(guò)導(dǎo)航 幫助器生成路徑表達(dá)式。之后所述方法繼續(xù)進(jìn)行到步驟565,所述方法結(jié) 束。如果該約束中不存在導(dǎo)航,則不再需要導(dǎo)航幫助器,所述方法直接結(jié) 束(步驟565 )。
17下面通過(guò)示例,結(jié)合圖6說(shuō)明根據(jù)本發(fā)明的約束語(yǔ)言編輯器的約束提 取的簡(jiǎn)要實(shí)現(xiàn)。圖6左邊是用于描述應(yīng)用程序部署情況的實(shí)例圖。假定約 束可被描述為DB2Inst.Username必須等于與DB2Inst相關(guān)的 User.Userld。從中可以看出,該約束中的關(guān)鍵參數(shù)涉及模型元素/屬性、 導(dǎo)航以及操作符。具體而言,框610示出了 DB2Inst的用戶名,即,元素 DB2InstUsername;框620中示出了與DB2Inst相關(guān)的User.Userld。 二 者是約束中的模型元素/屬性參數(shù)。實(shí)線箭頭630表示從元素DB2Inst到元 素db2admin的導(dǎo)航,其是約束中的導(dǎo)航參數(shù)。實(shí)線箭頭640表示從 Username到Userld的賦值(derive)關(guān)系,其是約束中的操作符參數(shù)。 由此,在根據(jù)本發(fā)明的約束語(yǔ)言編輯器中,示出了約束模式的用戶界面, 如框650所示???50示出了創(chuàng)建屬性約束的窗口圖,其中向用戶提示將 創(chuàng)建針對(duì)Username的新的屬性約束。在該窗口圖中,可以由用戶選擇兩 種屬性參數(shù)以及操作符參數(shù)。在用戶確定了這些參數(shù)之后,可以由約束語(yǔ) 言編輯器自動(dòng)計(jì)算導(dǎo)航路徑,并在存在多種可能的導(dǎo)航路徑的情況下由用 戶進(jìn)行最終的選擇。所述導(dǎo)航路徑計(jì)算過(guò)程將在下文中詳細(xì)描述。該界面 是直觀的和易于操作的,從而用戶只需要關(guān)注模型設(shè)計(jì),而無(wú)需知道具體 的約束語(yǔ)法。在確定了這些參數(shù)和導(dǎo)航路徑之后,即可通過(guò)約束代碼模板 和代碼生成器得到最終的約束表達(dá)式。
上文中已經(jīng)詳細(xì)描述了4艮據(jù)本發(fā)明的約束語(yǔ)言編輯器及其工作流,下 面將結(jié)合圖7詳細(xì)介紹所述約束語(yǔ)言編輯器中的導(dǎo)航幫助器的體系結(jié)構(gòu)和 工作原理。圖7是根據(jù)本發(fā)明實(shí)施例的導(dǎo)航幫助器的體系結(jié)構(gòu)。導(dǎo)航幫助 器包括模型解析器710、類繼承數(shù)據(jù)庫(kù)715、關(guān)聯(lián)數(shù)據(jù)庫(kù)720、關(guān)聯(lián)繼承數(shù) 據(jù)庫(kù)725、類類型轉(zhuǎn)換器730、導(dǎo)航路徑計(jì)算器735、實(shí)例解析器740以及 實(shí)例連接映射表745。在工作中,模型701可以被加載到模型解析器710, 接著模型解析器710對(duì)所加載的模型進(jìn)行解析,并根據(jù)所解析的模型確定 對(duì)類繼承數(shù)據(jù)庫(kù)715、關(guān)聯(lián)數(shù)據(jù)庫(kù)720以及關(guān)聯(lián)繼承數(shù)據(jù)庫(kù)725中的一個(gè) 進(jìn)行訪問(wèn),以便從上述三個(gè)數(shù)據(jù)庫(kù)中選擇相應(yīng)的數(shù)據(jù)庫(kù)以讀取可用的數(shù)據(jù) 列表。對(duì)于上述三個(gè)數(shù)據(jù)庫(kù)的讀取是基于所加載的模型的。例如,只有在模型圖中存在類繼承、關(guān)聯(lián)繼承的情況下才需要讀取相應(yīng)的類繼承數(shù)據(jù)庫(kù)
715和關(guān)聯(lián)繼承數(shù)據(jù)庫(kù)725。
在從關(guān)聯(lián)數(shù)據(jù)庫(kù)720和關(guān)聯(lián)繼承數(shù)據(jù)庫(kù)725中的一個(gè)讀取數(shù)據(jù)的情形 中,所讀取的關(guān)聯(lián)數(shù)據(jù)或關(guān)聯(lián)繼承數(shù)據(jù)接著被加載到導(dǎo)航路徑計(jì)算器735, 以計(jì)算出包括模型/實(shí)例元素的最終的導(dǎo)航路徑704,所迷導(dǎo)航路徑包括模 型/實(shí)例元素的序列。在從類繼承數(shù)據(jù)庫(kù)715讀取類數(shù)據(jù)的情形中,所讀取 的類數(shù)據(jù)接著通過(guò)類類型轉(zhuǎn)換器730進(jìn)行類型轉(zhuǎn)換,并纟支加載到導(dǎo)航路徑 計(jì)算器735,以計(jì)算出最終的導(dǎo)航路徑704。通過(guò)導(dǎo)航路徑計(jì)算器735,用 戶還可以對(duì)導(dǎo)航路徑計(jì)算器735輸入其它參數(shù)703,諸如導(dǎo)航開(kāi)始點(diǎn)、導(dǎo) 航結(jié)束點(diǎn)、導(dǎo)航最大步驟(即導(dǎo)航路徑所經(jīng)過(guò)的元素的步驟)等等,從而 使得導(dǎo)航路徑計(jì)算器735所生成的導(dǎo)航路徑更加精確,以符合用戶對(duì)模型 設(shè)計(jì)的要求。
而通過(guò)模型701建模而成的實(shí)例702可以被加載到實(shí)例解析器740。 接著,實(shí)例解析器740對(duì)所加載的實(shí)例進(jìn)行解析。所解析的實(shí)例可基于用 于顯示實(shí)例之間的關(guān)系的實(shí)例連接映射表745進(jìn)行計(jì)算以得到已連接的實(shí) 例,并將其加載到導(dǎo)航路徑計(jì)算器735,以計(jì)算出最終的導(dǎo)航路徑704,所 述導(dǎo)航路徑包括模型/實(shí)例元素的序列。
以下結(jié)合圖8示出了根據(jù)本發(fā)明的導(dǎo)航幫助器在模型層的工作流。所 述流程開(kāi)始于框805,從開(kāi)始元素進(jìn)行導(dǎo)航。接著所述流程進(jìn)行到步驟810, 判斷該元素是否是集合。如果是,則在步驟815通過(guò)該集合的實(shí)例獲得所 有的相應(yīng)類型。如上所述,導(dǎo)航不但需要找到集合的每一個(gè)元素,還需要 找到它們的共同父類,因?yàn)閷?duì)于元素集合的約束往往是加在具有共同屬性 的父類這一層次的。接著在步驟820計(jì)算出所述集合的父類型,并將所有 的類型相結(jié)合。接著在步驟825將所有的類型(包括所述父類型)作為候 選提供給用戶,并由用戶選擇其中之一。接著所述流程進(jìn)行到步驟830, 通過(guò)所選擇的類型計(jì)算可能的關(guān)聯(lián)。步驟830涉及的具體過(guò)程將在下文中 結(jié)合圖10A和10B進(jìn)行詳細(xì)描述。
如果在步驟810判斷所述元素不是集合,則所述流程直接進(jìn)行到步驟
19830。在步驟830完成對(duì)關(guān)聯(lián)的計(jì)算后,接著在步驟835獲得可能的已連接 類型,并將其提供給用戶。在步驟840,用戶選擇其中的一個(gè)類型。接著
在步驟845,確定用戶是否選擇導(dǎo)航的下一步驟。如果是,則導(dǎo)航仍未結(jié) 束,所述流程返回步驟810,繼續(xù)判斷下一步驟所涉及的元素是否是集合, 并重復(fù)上述流程。如果否,則所述導(dǎo)航?jīng)]有下一步驟,所述流程在步驟850 結(jié)束。
以下結(jié)合圖9示出了根據(jù)本發(fā)明的導(dǎo)航幫助器在實(shí)例層的工作流。在 實(shí)例層,導(dǎo)航幫助器需要從實(shí)例出發(fā)得到其類型,即,首先進(jìn)到模型層計(jì) 算可能到達(dá)的類型,然后再回到實(shí)例層找出屬于可達(dá)類型的實(shí)例。之所以 需要這樣做是因?yàn)?,可達(dá)實(shí)例在寫(xiě)約束的時(shí)候可能還沒(méi)有和當(dāng)前元素相連, 如果簡(jiǎn)單地查看和當(dāng)前元素連接的元素可能丟失一些可達(dá)元素。所述流程 開(kāi)始于框卯5,從開(kāi)始元素進(jìn)行導(dǎo)航。接著所述流程進(jìn)行到步驟910,判斷 該元素是否是集合。如果是,則在步驟915通過(guò)該集合的實(shí)例獲得所有的 相應(yīng)類型。并在步驟920計(jì)算出所述集合的父類型,并將所有的類型相結(jié) 合。以上步驟與圖8的相應(yīng)步驟類似。接著在步驟925將所有的類型(包 括所述父類型)以及實(shí)例作為候選提供給用戶,并由用戶進(jìn)行選擇。如果 用戶選擇了一個(gè)類型,則所述流程進(jìn)行到步驟930,通過(guò)所選擇的類型計(jì) 算可能的關(guān)聯(lián)。步驟930涉及的具體過(guò)程將在下文中進(jìn)行詳細(xì)描述。
如果在步驟910判斷所述元素不是集合,則所述流程直接進(jìn)行到步驟 930。在步驟930完成對(duì)關(guān)聯(lián)的計(jì)算后,接著在步驟935獲得可能的已連接 類型。在步驟940,根據(jù)可能的已連接類型計(jì)算實(shí)例層上的關(guān)系。接著在 步驟950將可能的已連接實(shí)例提供給用戶。在步驟955,用戶選擇其中的 一個(gè)實(shí)例。接著在步驟960,確定用戶是否選擇了導(dǎo)航的下一步驟。如果 是,則導(dǎo)航仍未結(jié)束,所述流程返回步驟910,繼續(xù)判斷下一步驟所涉及 的元素是否是集合,并重復(fù)上述流程。如果否,則所述導(dǎo)航?jīng)]有下一步驟, 所述流程在步驟965結(jié)束。
返回步驟925,如果用戶選擇的不是一個(gè)類型而是一個(gè)實(shí)例,則接著 在步驟945獲得該實(shí)例相應(yīng)的類型。接著所述流程直接進(jìn)行到步驟940,根據(jù)該類型計(jì)算實(shí)例層上的關(guān)系。
以上分別描述了導(dǎo)航幫助器在模型層和實(shí)例層的工作流程,通過(guò)所述 工作流程,可以基于用戶選擇來(lái)生成所需要的導(dǎo)航。下面將通過(guò)示例,結(jié)
合圖IOA和IOB詳細(xì)描述圖8和圖9中的步驟830和930:通過(guò)所選擇的 類型計(jì)算可能的關(guān)聯(lián)。在圖10A中示出的模型圖中尋找針對(duì)"F"的可能 的導(dǎo)航幫助。該模型圖通過(guò)該例子來(lái)描述如何找到針對(duì)F的可達(dá)元素。如 圖所示,所選中的元素為F, E和F相關(guān)聯(lián),B是F的父類,B和A、 C 相關(guān)聯(lián),A是D、 E的父類,C是G、 H的父類。在圖中,實(shí)線箭頭表示 關(guān)聯(lián),短劃線箭頭表示類繼承,而虛線箭頭表示關(guān)聯(lián)繼承。下面詳細(xì)描述 尋找導(dǎo)航幫助的具體步驟。
第一步,首先讀取從元素F出發(fā)的關(guān)聯(lián),參見(jiàn)F與E之間的實(shí)線箭頭, 結(jié)果得到元素E,作為可達(dá)元素的候選,如圖IOA右側(cè)與第一步相對(duì)應(yīng)的 框中所示。
第二步,讀取從元素F出發(fā)的類繼承,參見(jiàn)F與B之間的短劃線箭頭, 結(jié)果得到元素B。
第三步,讀取從元素B出發(fā)的關(guān)聯(lián),參見(jiàn)B與A和C之間的兩條實(shí) 線箭頭,結(jié)果得到元素A和C。
第四步,檢查元素C及其子元素G、 H是否存在與F的直接關(guān)聯(lián);在 本例中,這三個(gè)元素均不存在與F的直接關(guān)聯(lián),則將所述三個(gè)元素添加到 可達(dá)元素的候選中,如圖IOA右側(cè)與第四步相對(duì)應(yīng)的框中所示。
第五步,檢查元素A及其子元素D、 E是否存在與F的直接關(guān)聯(lián);在 本例中,由于元素E存在與F的直接關(guān)聯(lián),則將元素E的父親A添加到 候選中,如圖IOB右側(cè)與第五步相對(duì)應(yīng)的框中所示。除了E之外,元素A 的所有孩子(元素D)不能作為可達(dá)元素的候選,因?yàn)镋和F已經(jīng)有直接 關(guān)聯(lián)。
第六步,如果元素B還有父類的話,還需要繼續(xù)前進(jìn)到元素B的父類 (出于簡(jiǎn)明的目的未示出),針對(duì)B的父類繼續(xù)計(jì)算可達(dá)元素,并重復(fù)上 述過(guò)程。這一過(guò)程是不斷遞歸的。在此之后,即完成了通過(guò)所選擇的類型計(jì)算可能的關(guān)聯(lián)的過(guò)程。 以上詳細(xì)描述了根據(jù)本發(fā)明的約束語(yǔ)言編輯器和其中的導(dǎo)航編輯器以
及二者的工作流程。應(yīng)該注意,盡管某些實(shí)施例針對(duì)OCL約束語(yǔ)言進(jìn)行 了描述,但本領(lǐng)域技術(shù)人員可以預(yù)期,所述實(shí)施例及其技術(shù)方案均可以針 對(duì)Schematron或其它約束語(yǔ)言來(lái)實(shí)現(xiàn),而不會(huì)脫離本發(fā)明的精神和范圍。
如本領(lǐng)域普通技術(shù)人員可以了解的,本發(fā)明可以體現(xiàn)為方法、系統(tǒng)和/ 或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可以呈現(xiàn)為完全硬件實(shí)施形式、完全軟 件實(shí)施形式或者軟件和硬件組合實(shí)施形式。此外,本發(fā)明可以被呈現(xiàn)為在 機(jī)器可讀媒體上包括的計(jì)算機(jī)程序產(chǎn)品,機(jī)器可讀媒體上存儲(chǔ)了用于對(duì)計(jì) 算機(jī)系統(tǒng)進(jìn)行編程以執(zhí)行根據(jù)本發(fā)明的過(guò)程的機(jī)器可執(zhí)行程序指令。這里 所使用的術(shù)語(yǔ)"機(jī)器可讀媒體"包括向計(jì)算機(jī)系統(tǒng)提供用于執(zhí)行的指令的 任意媒體。這種媒體可以采用多種形式,包括但是不局限于非易失性々某 體、易失性媒體和傳輸媒體。非易失性媒體的常見(jiàn)形式例如包括軟盤(pán)、軟 磁盤(pán)、硬盤(pán)、磁帶或者任何其它》茲媒體、光盤(pán)ROM (CD-ROM)或者任 何其它光士某體、打孔卡或者任何其它帶有孔圖案的物理+某體、可編程ROM (PROM)、可擦寫(xiě)PROM (EPROM)、電EPROM (EEPROM)、閃 速存儲(chǔ)器、任何其它存儲(chǔ)芯片或者盒式磁帶(cartridge)、或者計(jì)算機(jī)系 統(tǒng)可以讀取并適合存儲(chǔ)指令的任何其它媒體。
此外,可以理解,方框圖和/或流程圖中的每個(gè)方框以及方框圖和流程 圖中的一些方框的組合可以用一些計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序 指令可以提供給一通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè)備的 處理器以產(chǎn)生一機(jī)器,使得這些指令通過(guò)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理設(shè) 備的處理器的執(zhí)行創(chuàng)建用于實(shí)現(xiàn)在方框圖和/或流程圖內(nèi)或者方框內(nèi)所指 定的功能的裝置。
盡管已經(jīng)參考優(yōu)選實(shí)施例具體地示出并描述了本發(fā)明,但其不是為了 以公開(kāi)的形式窮舉或限制本發(fā)明。對(duì)于本領(lǐng)域的普通技術(shù)人員,可以在形 式上和細(xì)節(jié)上進(jìn)行各種改變而不會(huì)背離本發(fā)明的精神和范圍。選擇并描迷 了實(shí)施例是為了最好地解釋本發(fā)明的原理和實(shí)際的應(yīng)用,以及為了使本領(lǐng)
22域的其它普通技術(shù)人員能夠理解對(duì)于各種實(shí)施例的本發(fā)明,所述實(shí)施例具 有適合于預(yù)期的具體使用的各種修改。
權(quán)利要求
1. 一種用于在約束語(yǔ)言編輯器中幫助生成針對(duì)導(dǎo)航的約束語(yǔ)言代碼的方法,其中所述約束語(yǔ)言編輯器用于根據(jù)所加載的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,所述導(dǎo)航是實(shí)現(xiàn)約束的路徑,包括模型/實(shí)例元素的序列,所述方法包括解析所加載的模型/實(shí)例;通過(guò)所解析的模型/實(shí)例中的與導(dǎo)航有關(guān)的元素的類型,計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián);以及通過(guò)所述關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
2. 根據(jù)權(quán)利要求l所述的方法,進(jìn)一步包括在所述所加載的模型中存在關(guān)聯(lián)繼承的情形中,計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián)繼承;計(jì)算與所述關(guān)聯(lián)繼承相關(guān)的元素有關(guān)的可能的關(guān)聯(lián);以及通過(guò)與所述元素有關(guān)的可能的關(guān)聯(lián)以及與所述關(guān)聯(lián)繼承相關(guān)的元素有 關(guān)的可能的關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
3. 根據(jù)權(quán)利要求l所述的方法,進(jìn)一步包括 在所述所加載的模型中存在類繼承的情形中,計(jì)算與所述元素有關(guān)的可能的類繼承;對(duì)類繼承相關(guān)數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換; 計(jì)算與所述類繼承相關(guān)的元素有關(guān)的可能的關(guān)聯(lián);以及 通過(guò)與所述元素有關(guān)的可能的關(guān)聯(lián)以及與所述類繼承相關(guān)的元素有關(guān)的可能的關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
4. 根據(jù)權(quán)利要求l所述的方法,進(jìn)一步包括 在所述所加載的模型中存在集合元素的情形中,通過(guò)該集合的實(shí)例獲得所有的相應(yīng)類型;找到所述實(shí)例的共同父類;將包括所述父類型的所有類型作為候選提供給用戶,并由用戶選擇其中之一;以及通過(guò)所述類型計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián)。
5. 根據(jù)權(quán)利要求l所述的方法,進(jìn)一步包括在所加載的是通過(guò)模型建模而成的實(shí)例的情形中,解析所加載的實(shí)例;通過(guò)所解析的實(shí)例中的與導(dǎo)航有關(guān)的元素的類型,計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián);計(jì)算與所解析的實(shí)例對(duì)應(yīng)的模型層次上的可能的類型;根據(jù)所述模型層次上的可能的類型計(jì)算屬于該類型的實(shí)例;以及 通過(guò)所述與所述元素有關(guān)的可能的關(guān)聯(lián)以及所述屬于所述模型層次上 的可能的類型的實(shí)例計(jì)算出可能的導(dǎo)航路徑。
6. —種在約束語(yǔ)言編輯器中用于幫助生成針對(duì)導(dǎo)航的約束語(yǔ)言代碼的 導(dǎo)航幫助器,其中所述約束語(yǔ)言編輯器用于根據(jù)所加栽的模型/實(shí)例和相關(guān) 約束,生成關(guān)于才莫型/實(shí)例的約束表達(dá)式,所述導(dǎo)航是實(shí)現(xiàn)約束的路徑,包 括模型/實(shí)例元素的序列,所述導(dǎo)航幫助器包括模型解析器,用于解析所加載的模型; 實(shí)例解析器,用于解析所加栽的實(shí)例;關(guān)聯(lián)數(shù)據(jù)庫(kù),用于存儲(chǔ)與所述所加載的模型/實(shí)例中的關(guān)聯(lián)有關(guān)的數(shù)椐;導(dǎo)航路徑計(jì)算器,用于通過(guò)所解析的^^莫型/實(shí)例中的與導(dǎo)航有關(guān)的元素 的類型,計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián),并通過(guò)所述關(guān)聯(lián)計(jì)算出可能 的導(dǎo)航路徑。
7. 根據(jù)權(quán)利要求6所述的導(dǎo)航幫助器,進(jìn)一步包括關(guān)聯(lián)繼承數(shù)據(jù)庫(kù),用于存儲(chǔ)與所迷所加載的模型中的關(guān)聯(lián)繼承有關(guān)的數(shù)據(jù),其中在所述所加載的模型中存在關(guān)聯(lián)繼承的情形中,所述導(dǎo)航路徑計(jì)算器進(jìn)一步用于 計(jì)算與所迷元素有關(guān)的可能的關(guān)聯(lián)繼承;計(jì)算與所述關(guān)聯(lián)繼承相關(guān)的元素有關(guān)的可能的關(guān)聯(lián);以及通過(guò)與所迷元素有關(guān)的可能的關(guān)聯(lián)以及與所述關(guān)聯(lián)繼承相關(guān)的元素有關(guān)的可能的關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
8. 根據(jù)權(quán)利要求6所述的導(dǎo)航幫助器,進(jìn)一步包括 類繼承數(shù)據(jù)庫(kù),用于存儲(chǔ)與所述所加載的模型中的類繼承有關(guān)的數(shù)據(jù);以及類類型轉(zhuǎn)換器,用于對(duì)于類數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換, 其中在所述所加載的模型中存在類繼承的情形中,所述導(dǎo)航路徑計(jì)算器進(jìn)一步用于計(jì)算與所述元素有關(guān)的可能的類繼承; 計(jì)算與所述類繼承沖目關(guān)的元素有關(guān)的可能的關(guān)聯(lián);以及 通過(guò)與所述元素有關(guān)的可能的關(guān)聯(lián)以及與所述類繼承相關(guān)的元素有關(guān)的可能的關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。
9. 根據(jù)權(quán)利要求6所述的導(dǎo)航幫助器,在所述所加載的模型中存在集 合元素的情形中,所述導(dǎo)航路徑計(jì)算器進(jìn)一步用于通過(guò)該集合的實(shí)例獲得所有的相應(yīng)類型; 找到所述實(shí)例的共同父類;將包括所述父類型的所有類型作為候選提供給用戶,并由用戶選擇其 中之一;以及通過(guò)所述類型計(jì)算與所述元素有關(guān)的可能的關(guān)聯(lián)。
10. 根據(jù)權(quán)利要求6所述的導(dǎo)航幫助器,進(jìn)一步包括 實(shí)例連接映射表,用于顯示實(shí)例之間的關(guān)系,其中在所加栽的是通過(guò)模型建模而成的實(shí)例的情形中,所述導(dǎo)航路徑 計(jì)算器進(jìn)一步用于通過(guò)所解析的實(shí)例中的與導(dǎo)航有關(guān)的元素的類型,計(jì)算與所述元素有 關(guān)的可能的關(guān)聯(lián);計(jì)算與所解析的實(shí)例對(duì)應(yīng)的模型層次上的可能的類型;根據(jù)所述模型層次上的可能的類型計(jì)算屬于該類型的實(shí)例;以及 通過(guò)所述與所述元素有關(guān)的可能的關(guān)聯(lián)以及所述屬于所述模型層次上 的可能的類型的實(shí)例計(jì)算出可能的導(dǎo)航路徑。
11. 一種用于在約束語(yǔ)言編輯器中幫助生成約束語(yǔ)言代碼的方法,其中所述約束語(yǔ)言編輯器用于根據(jù)所加栽的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,所述方法包括加栽才莫型/實(shí)例;加載約束模式,所述約束模式用于存儲(chǔ)與約束語(yǔ)義相關(guān)的參數(shù)和約束代碼模板;根據(jù)所述約束模式中存儲(chǔ)的參數(shù)的類型,調(diào)用相應(yīng)的幫助器,以基于所述約束模式生成與所加載的模型/實(shí)例有關(guān)的具體約束參數(shù);以及根據(jù)所生成的約束參數(shù)和所述約束4莫式中的約束代碼模板,生成約束 代碼。
12. 根據(jù)權(quán)利要求ll所述的方法,其中所述約束模式存儲(chǔ)包括下述參 數(shù)的組中的任一種參數(shù)模型元素/屬性類型、導(dǎo)航類型、操作符類型、用 戶定義值、以及集合操作符。
13. 根據(jù)權(quán)利要求ll所述的方法,其中所述幫助器包括下述幫助器的 組中的任一種幫助器元素/屬性幫助器、導(dǎo)航幫助器、操作符幫助器、常 數(shù)幫助器以及集合幫助器,其中每一種幫助器針對(duì)所述約束模式存儲(chǔ)的參 數(shù)中的一種進(jìn)行工作。
14. 根椐權(quán)利要求ll所述的方法,進(jìn)一步包括根據(jù)權(quán)利要求l-5中 任一項(xiàng)所述的用于在約束語(yǔ)言編輯器中幫助生成針對(duì)導(dǎo)航的約束語(yǔ)言代碼 的方法。
15. 根據(jù)權(quán)利要求ll所述的方法,所述生成約束代碼的步驟進(jìn)一步包 括如果所述約束代碼包括導(dǎo)航,其中所迷導(dǎo)航是實(shí)現(xiàn)約束的路徑,包括 模型/實(shí)例元素的序列,則調(diào)用所述導(dǎo)航幫助器生成導(dǎo)航路徑表達(dá)式。
16. —種約束語(yǔ)言編輯器,用于根據(jù)所加載的模型/實(shí)例和相關(guān)約束, 生成關(guān)于^^莫型/實(shí)例的約束表達(dá)式,所述約束語(yǔ)言編輯器包括約束模式,用于存儲(chǔ)與約束語(yǔ)義相關(guān)的參數(shù)和約束代碼模板; 幫助器,用于基于所述約束^^莫式生成與所加載的^^莫型/實(shí)例有關(guān)的具體 約束參數(shù);以及代碼生成器,根據(jù)所述幫助器生成的約束參數(shù)和所述約束模式中的約束代碼模板,生成約束代碼。
17. 根據(jù)權(quán)利要求16所述的約束語(yǔ)言編輯器,其中所述約束模式存儲(chǔ) 包括下述參數(shù)的組中的任一種參數(shù)模型元素/屬性類型、導(dǎo)航類型、操作 符類型、用戶定義值、以及集合操作符。
18. 根據(jù)權(quán)利要求16所述的約束語(yǔ)言編輯器,其中所述幫助器包括下 述幫助器的組中的任一種幫助器元素/屬性幫助器、導(dǎo)航幫助器、操作符 幫助器、常數(shù)幫助器以及集合幫助器,其中每一種幫助器針對(duì)所述約束模 式存儲(chǔ)的參數(shù)中的一種進(jìn)行工作。
19. 根據(jù)權(quán)利要求16所述的約束語(yǔ)言編輯器,其中所述導(dǎo)航幫助器為 根據(jù)權(quán)利要求6-10中任一項(xiàng)所述的導(dǎo)航幫助器。
20. 根據(jù)權(quán)利要求16所述的約束語(yǔ)言編輯器,其中,如果所述約束代 碼包括導(dǎo)航,其中所述導(dǎo)航是實(shí)現(xiàn)約束的路徑,包括模型/實(shí)例元素的序列, 則所述導(dǎo)航幫助器用于生成導(dǎo)航路徑表達(dá)式。
全文摘要
一種用于在約束語(yǔ)言編輯器中幫助生成針對(duì)導(dǎo)航的約束語(yǔ)言代碼的方法和導(dǎo)航幫助器,其中約束語(yǔ)言編輯器用于根據(jù)所加載的模型/實(shí)例和相關(guān)約束,生成關(guān)于模型/實(shí)例的約束表達(dá)式,導(dǎo)航是實(shí)現(xiàn)約束的路徑,包括模型/實(shí)例元素的序列,所述方法包括解析所加載的模型/實(shí)例;通過(guò)模型/實(shí)例中與導(dǎo)航有關(guān)的元素的類型,計(jì)算與元素有關(guān)的可能的關(guān)聯(lián);以及通過(guò)關(guān)聯(lián)計(jì)算出可能的導(dǎo)航路徑。一種用于在約束語(yǔ)言編輯器中幫助生成約束語(yǔ)言代碼的方法和約束語(yǔ)言編輯器,所述方法包括加載模型/實(shí)例;加載用于存儲(chǔ)參數(shù)和約束代碼模板的約束模式;根據(jù)約束模式中存儲(chǔ)的參數(shù)類型,調(diào)用相應(yīng)的幫助器,以基于模型/實(shí)例來(lái)幫助生成參數(shù);根據(jù)所生成的參數(shù)和約束代碼模板,生成約束代碼。
文檔編號(hào)G06F9/44GK101499003SQ200810008950
公開(kāi)日2009年8月5日 申請(qǐng)日期2008年1月31日 優(yōu)先權(quán)日2008年1月31日
發(fā)明者影 李, 毛佳音, 景 羅, 杰 邱 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1