崔玲玲,周桂鑫
(濰坊學院,山東 濰坊 261061)
基于本體語義映射的MDA模型轉換方法*
崔玲玲,周桂鑫
(濰坊學院,山東 濰坊 261061)
模型轉換是MDA的一項關鍵技術,模型轉換的正確性問題是MDA研究的核心問題。模型轉換的正確性包括語法正確性、語義正確性等,而目前國內外存在的大多數模型轉換方法都是在語法層次進行的,缺乏語義正確性的驗證,針對該問題,本文提出了基于本體語義映射機制的模型轉換方法,給出了一系列的轉換規則,以UML模型到C語言模型的映射為例,進一步討論了不同抽象層次模型之間映射關系的建立過程以及所應遵循的基本原則。本方法用本體實現語義層的模型轉換,提高了模型自動變換的效率,還為驗證模型之間映射規則的可行性和正確性提供了依據。
模型驅動體系結構;模型轉換;本體語義映射;轉換規則
模型驅動體系結構(model driven architecture,MDA)是國際標準組織OMG于2001年提出的一種基于模型的軟件開發框架性標準。它的關鍵之處是模型在軟件開發過程中扮演了非常重要的角色,在MDA中,軟件開發過程是由對軟件系統的建模行為驅動的。MDA的核心思想是抽象出與實現技術無關、完整描述業務功能的平臺無關模型(Platform Independent Model,PIM),針對不同實現技術制定多個變換規則,然后通過這些變換規則及輔助工具將PIM變換成與具體實現技術相關的平臺相關模型(Platform Special Model,PSM),最后在一定程度上將PSM自動轉換成代碼[1]。
目前國內外對MDA中模型變換的研究很多,主要的轉換方法有以下幾種[2]:
(1)直接轉換方法
這種方法提供一個內部模型表示加上一些操控模型的API,程序員使用可以訪問和操作模型的API對源模型進行轉換,從而得到目標模型的方法。
(2)目標結構驅動的方法
這類方法包括兩個階段,首先建立目標模型的層次結構,然后設置屬性和引用。整個框架決定進度安排和應用策略,用戶主要提供轉換規則。
(3)關系方法
是一種利用關系代數在源模型級別進行模型轉換定義的方法。基本思想是采用一種模式將源模型中的元素到目標模型元素之間的一個映射表達為一個“關系對”,將“模型轉換”表達為一個二元關系或者一組二元關系。利用關系代數中的“關系”來表達模型轉換的定義,利用關系代數中的性質來表達模型轉換中的約束。
(4)基于圖轉換的方法
采用圖轉換的理論,在類似UML模型的圖上操作,類、對象等建模元素映射為一個圖頂點,它們之間的關系映射為邊。
目前大多數的模型轉換方法還是在語法層上進行的,這樣就使得模型在轉換過程中缺乏語義保障。本文提出的模型變換方法采用本體來描述語義層上的模型,則計算機可以通過本體理解模型的含義,整個模型轉換過程就有了語義保障。
本體論(Ontology)的概念最早起源于哲學領域,它在哲學中的定義為“對世界上客觀存在物的系統描述,即存在論”,是對客觀存在的一種系統的解釋或說明,關心的是客觀現實的抽象本質[3]。人工智能等學科將本體的概念從哲學領域中借用過來,并賦予了一些新的含義。目前被大部分人公認的定義是美國Stanford大學的知識系統實驗室的學者 Tom Gruber在1993年提出的“本體是概念模型的明確的規范說明”。其形式化定義為:

這里,C代表概念集合,即抽取出來用來描述事物對象的集合;I表示概念的實例,代表元素,從語義上講實例表示的就是對象;R為定義在概念集合上的關系的集合;F為定義在概念集合上的函數的集合;A表示公理集合,用于約束概念、關系和函數的一階邏輯謂詞集合[4]。
本體映射就是給定兩個本體A和B,對于A中的每一個實體,設法在B中找到與其有相同或相近語義的實體,這些實體包括本體中的類、屬性以及類的實例[6]。本體映射是解決不同本體間知識共享和重用的方法,目的是找出不同本體中實體之間的語義關聯,并且將其形式化地表達出來。
Ehrig給出了一個形式化的本體映射函數[7]:

如果sim(e1,e2)>s,則 map(e1)→e2,其中e1和e2分別是兩個本體中的實體,sim(e1,e2)是這兩個實體之間的相似度,s是相似度闕值。
基于本體語義映射,可以把不同抽象層次模型之間的映射關系大致分為類型之間的映射、結構之間的映射以及它們之間約束關系的映射。
不同描述語言之間的類型映射可以分為簡單映射和擴展映射兩種。簡單映射是指在目標模型描述語言中直接存在和源模型描述語言中對應的類型,并且其語義一致。擴展映射是指在目標模型描述語言中不存在與源模型描述語言對應的類型,但可以通過特定的組合方式來模擬出這種數據類型[8]。
由于不同模型描述機制的差異,映射關系一般有1:1,1:n和m:n三種,另外m:n的映射關系可以用多個1:n和n:1的映射關系來組合表示,因此可以將結構映射分為直接映射、分解映射和組合映射等。
直接映射:即一對一的映射,把源模型一個結構直接映射為目標模型一個結構。
分解映射:即一對多的映射,把源模型一個結構映射為目標模型的多個結構的組合。
組合映射:即多對一的映射,把源模型的多個結構的組合映射為目標模型的一個結構。
模型之間的映射不僅要進行源模型到目標模型的類型映射和結構映射,同時要求目標模型的各組成模塊要保持它們在源模型中的語義特性約束關系。因此要依據各模塊的語義特性和模塊間的約束關系,把各個子目標模塊融合為一個整體的目標結構模型,從而得到源模型到目標模型的全部映射關系。
類圖(Class Diagram)是描述類、接口、協作以及它們之間關系的圖,用來顯示系統中各個類的靜態結構。一個類圖,根據系統中的類以及各個類之間的關系描述系統的靜態視圖。靜態視圖可以包括許多的類圖。靜態視圖用于為軟件系統進行結構建模,它構造系統的詞匯和關系,而結構模型的可視化就是通過類圖來實現的。
類圖包含以下幾個元素[9]:類、接口、依賴關系、泛化關系、實現關系以及關聯關系。
類是任何面向對象系統中最重要的構造塊。類是一種重要的分類器,用來描述結構和行為特性的機制,是對一組具有相同屬性、操作、關系和語義的對象描述。類的屬性是類的一個組成部分,它描述了類在軟件系統中代表的事物所具備的特性。屬性描述了正在建模的事物的一些特性,這些特性是所有對象所共有的。類的操作是對類的對象所能做的事務的抽象。它相當于一個服務的實現,該服務可以由類的任何對象請求以影響其行為。在C語言中沒有直接與其對應的類型或結構,可以利用C語言中的結構體和函數來模擬類的實現。實現代碼如下所示:

接口是一系列操作的集合,它指定了一個類所提供的服務。接口與類定義的差異在于接口只含有函數成員,而無數據成員,所以仍然可以使用C語言的結構體來實現接口機制。
類不是獨立存在的,大多數的類以某些關系彼此協作。在類的關系中,最常用的4種分別為:依賴(Dependency),表示類之間的使用關系;泛化(Generalization),表示類之間的一般和特殊的關系;關聯(Association),表示對象之間的結構關系;實現(Realization),是規格說明和其實現之間的關系。
有兩個元素,如果修改X的定義可能會導致對 Y的定義,則認為 Y依賴X。依賴關系可能由各種原因引起,如一個類向另一個類發送消息,或者一個類是另一個類的數據成員類型,或者一個類是另一個類的操作的參數類型等。例如,自行車Bicycle和打氣筒Pump,自行車通過打氣筒來充氣。圖1顯示了Bicycle類和Pump類的依賴關系。

圖1 Bicycle類和Pump類的依賴關系
在C語言中,將一個類作為另一個類中某個操作的函數的參數來實現兩個類的依賴關系。實現代碼如下所示:

泛化關系描述了一般事物與該事物中的特殊種類之間的關系,也就是父類與子類之間的關系。繼承關系是泛化關系的反關系,也就是說子類是從父類中繼承的,而父類則是子類的泛化。子類繼承父類的屬性和操作,除此之外通常子類還添加新的屬性和操作,或者修改了父類的某些操作。例如,老虎是動物的一種,既有動物的共性,又有老虎的特性,如圖2所示。

圖2 Animal類與 Tiger類,Dog類的泛化關系
在C語言中,由于結構體在內存中的布局與結構體的聲明順序一致,所以可以利用結構體類型來實現,此時只需在子類中將某一屬性值的類型定義為父類類型即可。實現代碼如下所示:

關聯關系,表示類與類之間的連接。它使一個類的可見屬性和方法被另一個類使用。例如公司和員工,一個公司對應一些特定的員工,一個員工對應一個特定的公司,如圖3所示。

在C語言中,可以在一個類的結構中定義指向另一個類的指針變量,以此來表示兩個類之間的關聯關系,若關系重數大于1,可以用指針數組或鏈表來實現。實現代碼如下所示:

在關聯關系中,有兩種比較特殊的關系:聚合和組合。
聚合關系是一種特殊的關聯關系,表示類間的關系是整體與部分的關系,一個類描述了一個較大的事物,它是由較小的事物組成的,這種關系就是聚合關系。例如:雁群由若干只大雁組成,如圖4所示。

聚合關系是整體與部分的關系,且部分可以離開整體而單獨存在。如車和輪胎是整體和部分的關系,輪胎離開車仍然可以存在。因此部分對象的存在不依賴于整體對象,定義一個指向部分對象的指針變量即可。實現代碼如下所示:

組合關系是另一種形式的聚合,整體有管理部分的特有職責并且它們有一致的生命期,例如,大雁和它的翅膀之間的關系,如果大雁不存在了,那么他的翅膀當然也就不存在了。如圖5所示。

在組合關系中由于整體和部分具有一致的生命期,所以部分對象的生成是通過整體對象來實現的,因此只需在結構體中定義一個屬性類型為部分類型的成員即可。這樣在生成整體對象的同時,也生成了部分對象。實現代碼如下所示:

聚合和組合的區別:聚合關系是“has-a”關系,組合關系是“contains-a”關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。
圖6為一個對冰球比賽描述的UML類圖,從圖中可以看出,一支冰球隊由一名中鋒、一名守門員、兩名邊鋒和兩名后衛組成。中鋒的任務是將冰球傳遞給邊鋒,邊鋒的射門技術通常比前鋒更好。后衛力圖阻止對方達到射門位置和射門。守門員是最后一道防線,阻擋對方的射門。每個隊員都手持一個曲棍,用來在冰上運球,目標是用曲棍將球射入對方的球門。冰球比賽通常在一個室內的冰球場上進行。場地長200英尺,寬100英尺。一場冰球比賽要進行60分鐘,這60分鐘被分成三次20分鐘的比賽。

圖6 冰球比賽UML類圖

圖7 C語言模型圖
根據轉換規則,分別對類、屬性、關聯關系、依賴關系等經過一系列的直接映射、分解映射、組合映射等可以得到如圖7所示的C語言模型圖。
通過向MDA軟件開發流程引入本體映射的方法,可以比較好的解決模型轉換的問題,特別是為轉換提供了語義保證,提高模型變換的準確率。但是本體的生成是一個比較繁瑣的過程,如果在軟件開發過程中完全依靠手工來生成本體,就失去了模型自動轉換的意義了。因此今后的任務將集中在UML到本體轉換的效率和精度方面,自動轉換工具也是今后研究的重要內容。
[1]KLeppe A.解析MDA[M].鮑志云,譯.北京:人民郵電出版社,2004.
[2]Czarnecki K,Helsen S.Classification of Model Transformation Approaches[C]//Processdings of the 2nd OOPSLA Workshop on Generative Techniques in the Context of the Model Driven Architecture.USA,2003.
[3]鄧志鴻,唐世渭,張銘,等.Ontology研究綜述[J].北京大學學報:自然科學版,2002,38(5):730-738.
[4]Gruber T R.A translation approach to portable Ontology specifications[J].Knowledge Acquisition,1993,5(2):34-43.
[5]Andreas Maier.Integration with ontologies[C].In:proceedings of WM 2003.Luzern,2003.
[6]Su X M.A text categorization perspective for ontology maping[R].Norway:Norwegian University of Science and Technology,2002:1-9.
[7]Ehrig M,Sure Y.Ontology mapping-an integrated approach[C]//Heraklion Greece:Proceedings of the European Semantic Web Symposium(ESWS),2004:76-91.
[8]侯金奎,王鋒,張睿.基于本體語義的模型映射研究[J].計算機科學,2008,35(5):119-122.
[9]吳建,鄭潮,汪杰.UML基礎與Rose建模案例[M].北京:人民郵電出版社,2008.
(責任編輯:肖恩忠)
TP311
A
1671-4288(2010)06-0044-05
2010-10-12
崔玲玲(1979-),女,山東昌樂人,濰坊學院計算機與通信工程學院講師,碩士。