摘 要: 介紹一種結(jié)合刻面分類描述和本體語義的類庫管理和檢索方法,,通過刻面分類描述機(jī)制和本體的語義擴(kuò)展與推理能力,,有效地對(duì)類進(jìn)行存儲(chǔ)和管理,方便用戶快捷準(zhǔn)確地從類庫中尋找適合自己需要的類,,從而更好地達(dá)到軟件復(fù)用的目的,。
關(guān)鍵詞: 類庫;軟件復(fù)用,;刻面分類;本體
軟件復(fù)用是提高軟件生產(chǎn)力和質(zhì)量的一種重要技術(shù),,已被視為是解決軟件危機(jī),、提高軟件生產(chǎn)率和質(zhì)量的現(xiàn)實(shí)可行途徑。目前研究最多的是基于軟構(gòu)件的復(fù)用,,或稱之為基于構(gòu)件的軟件工程(CBSE),。而要實(shí)現(xiàn)CBSE,,其最根本的問題是要有可用的軟構(gòu)件。完整的構(gòu)件庫是實(shí)現(xiàn)CBSE的關(guān)鍵,,但各個(gè)開發(fā)者或開發(fā)機(jī)構(gòu)要?jiǎng)?chuàng)建各自的,、絕對(duì)完整的構(gòu)件庫是不可能的,或在經(jīng)濟(jì)上與時(shí)間上是不可行的,。
面向?qū)ο蠓椒ú粌H為軟件復(fù)用的實(shí)現(xiàn)提供了內(nèi)在的結(jié)構(gòu)性支持,,也通過類庫的類而直接支持代碼復(fù)用。當(dāng)前,,許多面向?qū)ο箝_發(fā)工具都建立了自己的類庫,,類庫所起的作用越來越重要。類庫已成為一種現(xiàn)成的,、寶貴的可復(fù)用的軟件資產(chǎn),。
但是,類和軟構(gòu)件是有區(qū)別的,,類庫也不是一般的軟構(gòu)件庫,。目前大部分的類庫管理系統(tǒng)都存在一些問題,如只能通過瀏覽導(dǎo)航的方式查找類,,這限制了程序開發(fā)員快速,、準(zhǔn)確、高效地檢索出所需的類,。
本文介紹一個(gè)結(jié)合刻面分類描述和本體語義的類庫管理和檢索方法,,通過刻面分類描述機(jī)制和本體的語義擴(kuò)展及推理能力,有效地對(duì)類進(jìn)行存儲(chǔ)和管理,,方便用戶快捷準(zhǔn)確地從類庫中尋找適合自己需要的類,,從而更好地達(dá)到軟件復(fù)用的目的。主要內(nèi)容有:給出一個(gè)合適的刻面模型對(duì)類進(jìn)行不同維度的描述,;XML在刻面分類描述中的應(yīng)用,;在刻面分類的基礎(chǔ)上建立本體庫,用來表示類的整個(gè)分類體系,,以及基于刻面分類和本體的檢索方法,。
目前國(guó)內(nèi)外對(duì)類庫的改進(jìn)研究有:呂楓華等人提出的基于類相似性比較的類庫檢索方法,著重討論了比較類相似程度的近似度量方法,,及其在類庫檢索中的應(yīng)用,,并且給出了一個(gè)行之有效的基于規(guī)則的類庫檢索工具[1]。葉青青等人提出的基于語義與句法的Java類庫檢索方法,,使得開發(fā)者可以使用自然語言描述待開發(fā)軟件的功能語義,,提高可復(fù)用類庫查詢的精度[2]。徐正權(quán)等人提出的新的Softstore軟件庫系統(tǒng)模型[3],,其主要思想是利用相對(duì)比較成熟的Internet以及數(shù)據(jù)庫管理技術(shù),,對(duì)軟件資源進(jìn)行有效管理,。
1 類庫的刻面分類與描述
類的整體說明信息包括類的語義信息和類的關(guān)系信息。類的語義信息包括類名,、屬性,、服務(wù)、所屬類型,、所屬開發(fā)階段等信息,。類的關(guān)系信息包括類與其他類的關(guān)系信息。
在類庫中,,每個(gè)元素都是一個(gè)類,,這些類由屬性和作用于屬性之上的操作構(gòu)成。屬性可以分為靜態(tài)屬性和動(dòng)態(tài)屬性,。靜態(tài)屬性屬于所有對(duì)象的全體,,意味著不存在該類的對(duì)象,靜態(tài)屬性也是存在的,;動(dòng)態(tài)屬性隨著對(duì)象的存在而存在,,隨對(duì)象的改變而改變。操作也可以分為靜態(tài)操作和動(dòng)態(tài)操作,。兩者不同之處在于靜態(tài)操作可以不存在操作的主體,,而動(dòng)態(tài)操作必須要有操作的主體,即發(fā)起者,。
類與其他類之間具有幾種不同的關(guān)系[4],。
(1)繼承關(guān)系。在繼承關(guān)系中子類自動(dòng)繼承父類的屬性和方法,,子類依賴父類而存在,,如果單獨(dú)復(fù)用子類,而忽略了其父類,,必然會(huì)導(dǎo)致信息的不完整,,而出現(xiàn)復(fù)用錯(cuò)誤。所以,,作為依賴方的子類入庫時(shí),,需要同時(shí)保存父類的信息以及它們之間的繼承關(guān)系。
(2)聚合關(guān)系,。當(dāng)整體和部分的關(guān)系緊密時(shí),,整體不能缺少部分,所以作為依賴方的整體入庫時(shí),,需要同時(shí)保存部分類的信息和它們之間的聚合關(guān)系,。
(3)實(shí)例連接關(guān)系。一般通過對(duì)象的屬性來表示一個(gè)對(duì)象與另一個(gè)對(duì)象之間的依賴關(guān)系。一般來說,,該關(guān)系并不影響對(duì)象作為獨(dú)立存在的類入庫。
(4)消息連接,。即所謂的類與類之間的合作關(guān)系,。消息連接具有很強(qiáng)的依賴性。一方要通過調(diào)用另一方的服務(wù)來實(shí)現(xiàn)本身所提供的服務(wù),,如果缺少對(duì)方的支持,,則本身無法完成相應(yīng)的服務(wù)。因此作為依賴方的調(diào)用類入庫時(shí),,需要同時(shí)保存被調(diào)用類的復(fù)用信息以及它們之間的合作關(guān)系,。
通過以上幾種關(guān)系的分析可知,依賴性在各個(gè)關(guān)系中普遍存在,。如果一個(gè)類不能單獨(dú)存在,,必須依賴其他類存在并得以保持其完整性,則需要將被依賴類和依賴類以及它們之間的關(guān)系同時(shí)入庫保存,。
本系統(tǒng)用刻面分類表示類本身的信息,,類與其他類之間的關(guān)系則通過本體描述。
根據(jù)刻面分類描述的精簡(jiǎn),、一致性,、全面性、刻面正交性,、易于理解的原則,,選擇以下刻面和子刻面:
類的基本信息:類的ID、名稱,、版本,,類的入庫時(shí)間等。
類的功能:操作,、操作對(duì)象,、操作描述等。
類的應(yīng)用環(huán)境:開發(fā)語言,、硬件環(huán)境,、操作平臺(tái)、數(shù)據(jù)庫平臺(tái)等,。
類的應(yīng)用領(lǐng)域:類的具體應(yīng)用范疇,。
類的刻面分類與術(shù)語示例如表1所示。
用類的刻面信息建立類庫的刻面模型,,使用XML語言進(jìn)行描述,,同時(shí)在類入庫的時(shí)候,根據(jù)用戶所提交的信息,,自動(dòng)生成XML文檔,。例如DBconnect類的刻面信息:
<?xml?version?=“1.0”?encoding?=“GB2312”?standalone=“yes”??>
<?XML-stylesheet?type=“text/xsl”?href=“yxfqust.xsl”??>
<!-- class faceted information-->
<?xml version=“1.0”?>
<Class>
<!-- basic information -->
<BasicInfo>
<ID>001</ID>
<Name>DBConnect</Name>
<Version>1.0</Version>
<Provider>sun</Provider>
<EnrollTime>2000-01-01</EnrollTime>
</BasicInfo>
<!-- application platform -->
<ApplicationPlatform>
<DL>Java</DL>
<Database>mysql,,sqlserver</Database>
<system>windows,linux</system>
</ApplicationPlatform>
<!-- application domain -->
<ApplicationDomain>information system</ApplicationDomain>
<!-- operation information -->
<OperationInfo>
<Operation>connect to database </Operation>
<OperationOn>database</OperationOn>
<OperationDesc>connect to database in different ways</OperationDesc>
</OperationInfo>
</Class>
從具體問題的需求出發(fā),,XML具有如下的突出優(yōu)點(diǎn)[5]:
(1)可讀性,。用XML描述對(duì)于任何用戶或是計(jì)算機(jī)程序來說,都容易閱讀和處理,。
(2)XML的自描述性使得客戶端在收到數(shù)據(jù)的同時(shí)也能理解數(shù)據(jù)的邏輯結(jié)構(gòu)和含義,,從而能直接對(duì)這些自描述的XML文件中的數(shù)據(jù)進(jìn)行操作,增強(qiáng)了檢索的語義和作用,。
(3)表示的獨(dú)立性和內(nèi)容的獨(dú)立性帶來的靈活性,。內(nèi)容與表示的分離,支持用戶界面?zhèn)€性化,。表示和操作的分離,,支持不同數(shù)據(jù)源的無縫連接。
(4)強(qiáng)大的表達(dá)能力,。無論是何種數(shù)據(jù)源,,新的、老的,,是否異構(gòu),,XML都可以用統(tǒng)一的模式進(jìn)行描述和訪問。
(5)可擴(kuò)展性,。XML可以在不破壞現(xiàn)有結(jié)構(gòu)和系統(tǒng)的情況下增加新的數(shù)據(jù)字段,,不影響新老客戶端的使用。
XML的這些特點(diǎn)可以為使用者在需要訪問不同的源類庫時(shí)提供標(biāo)準(zhǔn)的統(tǒng)一接口,。
檢索采用XML樹的索引技術(shù)和模型匹配檢索算法[6-8],。
一個(gè)刻面描述可以展開成為一棵刻面描述樹,而XML文檔的數(shù)據(jù)結(jié)構(gòu)就是樹狀結(jié)構(gòu),。對(duì)一個(gè)刻面描述方案,,可以將其中的刻面和子刻面分別映射為樹中對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié)點(diǎn),對(duì)采用某個(gè)刻面描述方案描述的類,,可以將其對(duì)應(yīng)的刻面描述術(shù)語映射為對(duì)應(yīng)的葉子節(jié)點(diǎn),。
對(duì)于類的查詢也可以相應(yīng)地表示為一棵查詢樹,即將查詢中出現(xiàn)的刻面名和子刻面名轉(zhuǎn)化為對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié)點(diǎn),,將查詢刻面的術(shù)語值轉(zhuǎn)化為葉子節(jié)點(diǎn),,并且用一個(gè)虛擬的根節(jié)點(diǎn)將它們組合成為一棵查詢樹。因此,,對(duì)于類的檢索就轉(zhuǎn)化為查詢樹與庫中類的刻面描述樹之間的匹配,。
用戶在客戶端輸入查詢條件后,由服務(wù)層中的元數(shù)據(jù)服務(wù)組件負(fù)責(zé)根據(jù)用戶查詢條件生成X-Query查詢語句,并進(jìn)行同義詞與近義詞處理,。然后將生成的X-Query查詢語句通過數(shù)據(jù)訪問接口的查詢解釋器分解查詢請(qǐng)求,,按照數(shù)據(jù)映射提供的存儲(chǔ)規(guī)則與對(duì)象合成器交互,使用XML數(shù)據(jù)的無序樹匹配的松弛匹配技術(shù)進(jìn)行檢索,。
2 建立本體表示類庫中類的依賴性關(guān)系
前面的分析指出類庫中的類普遍存在依賴性關(guān)系,,這些依賴性關(guān)系具有很強(qiáng)的語義信息,例如繼承,、某些類不能單獨(dú)存在必須依賴其他類而存在才得以保持其完整性等。這里引入本體的主要目的為:(1)利用本體描述類之間的關(guān)系,;(2)通過本體擴(kuò)展類庫的刻面分類描述體系,,利用本體具有的良好的概念層次結(jié)構(gòu)和對(duì)邏輯推理的支持,實(shí)現(xiàn)基于語義上的匹配檢索,,從而提高查全率和查準(zhǔn)率,。
本體不僅可以描述類與類之間的各種關(guān)系及刻面術(shù)語之間的同義詞和上下文關(guān)系,還可以描述刻面術(shù)語之間所具有的其他各種關(guān)系,,從而盡量從語義上來建立類信息的全面描述,。
(1)概念類。概念類表示特定領(lǐng)域中的一組或一類實(shí)體,,每個(gè)概念的不同特點(diǎn)可以由不同的屬性描述,。如工作描述、功能,、行為,。語義上講,它表示的是對(duì)象的集合,。
(2)公理是表示某一個(gè)特定領(lǐng)域內(nèi)的一些永真式,,用來描述和解釋元素及其元素之間的關(guān)聯(lián)和約束問題。
(3)關(guān)系代表概念類之間的關(guān)系,,形式上定義為n維的笛卡爾乘積的子集,。基本關(guān)系是類的層次關(guān)系,,即所謂的繼承關(guān)系,。除此之外,還有連接關(guān)系,,連接關(guān)系表示除了上下位關(guān)系之外的其他關(guān)系,。具體關(guān)系如表2所示。
(4)實(shí)例代表元素,。從語義上可以理解為對(duì)象,。
本體的表示采用基于Web的本體描述語言O(shè)WL。OWL能夠用于清晰地表達(dá)詞匯表中詞匯以及詞匯之間的本體關(guān)系。用戶需要借助本體查詢語言來對(duì)本體進(jìn)行利用,。本體查詢語言作為應(yīng)用程序使用本體的一個(gè)接口,。
本體的開發(fā)使用由HP實(shí)驗(yàn)室研究開發(fā)的基于Java的開放源代碼Jena。選擇Jena的理由是:它為解析RDF,、RDFS,、OWL和SPARQL提供了一個(gè)編程環(huán)境和一個(gè)基于規(guī)則的推理引擎;Jena允許將數(shù)據(jù)保存到硬盤或OWL文件或關(guān)系數(shù)據(jù)庫中,;Jena的推理機(jī)制支持在創(chuàng)建模型的時(shí)候?qū)⑼评頇C(jī)與模型相關(guān)聯(lián),,能實(shí)現(xiàn)基于規(guī)則的推理。
對(duì)OWL處理而言,,語義邏輯的處理才是推理機(jī)制的實(shí)現(xiàn),。Jena提供的OWL支持包括:方便地訪問標(biāo)準(zhǔn)OWL的類和屬性;支持多種版本的OWL規(guī)范,;在基本的查詢中通過subClassOf這樣的關(guān)系來實(shí)現(xiàn)類的層級(jí)訪問和使用,。
對(duì)于類庫檢索,本體庫中關(guān)系的重要意義在于支持語義推理和擴(kuò)展查詢,,以提高查全率和查準(zhǔn)率,。要進(jìn)行基于本體的類庫檢索,首先應(yīng)該建立一個(gè)本體庫,,針對(duì)類庫進(jìn)行分析和抽取概念:類庫,、類、類的基本信息,、類的刻面信息,、類的接口信息、刻面,、術(shù)語等,。同時(shí)分析概念與概念之間的關(guān)系。
用OWL語言來描述類庫本體可在描述邏輯的基礎(chǔ)上建立概念分類層次,,然后定義概念類的屬性和創(chuàng)建類的實(shí)例,。
首先確定本體所包含的概念和概念的層次,如類庫中出現(xiàn)的概念包括以下幾個(gè)實(shí)體:Library,、Class,、Facet、Terms等,。
可以用OWL語言定義如下:
(1)OWL的概念通過owl:Class定義,。
<owl: Class rdf:ID=”Library”>
<rdfs: label>類庫</rdfs:label>
</owl: Class>
(2)概念之間的繼承關(guān)系可以用<rdfs:subClassOf>表示。如功能刻面是刻面的一個(gè)子概念:
<owl: Class rdf: ID=”OperationFacet”>
<rdfs: label>功能刻面</rdfs:label>
<rdfs: subClassOf rdf resource=”#Facet”>
</owl: Class>
(3)定義概念的屬性,。屬性是一個(gè)二元的關(guān)系,。OWL定義了兩種屬性,,即owl:Datatype Property和owl:Object Property。前者是概念的成員和數(shù)據(jù)類型,,后者是不同概念之間的關(guān)系,。如定義一個(gè)DatatyperProperty屬性的className:
<owl: DatatypeProperty rdf: ID=“className”>
<rdfs: domain rdf: resource=“Class”>
<rdfs: range rdf: resource=“&xsd;string”>
</owl: DatatypeProperty>
下面定義一個(gè)ObjectProperty屬性的containClass:
<owl: ObjectProperty rdf: ID=”containClass”>
<rdfs: domain rdf resouce=“#Library”/>
<rdfs: range rdf:resource=“#Class”>
</owl: ObjectProperty>
(4)傳遞性TransitiveProperty
對(duì)稱性SymmetricProperty,、自反性Inverseof,、等價(jià)傳遞性InverseFunctionalProperty。
(5)定義類與類之間的等價(jià)關(guān)系
<owl:InverseFunctionalProperty rdf:ID=”equals”>
<owl:inverseOf rdf:resoure=”#equals”/>
<rdfs:domain rdf:resource=”#class1”>
<rdfs:range rdf:resoure=”#class2”/>
<rdf type rdf:resource=http://www.w3.org/2002/07/owl#TransitiveProperty/>
<rdf type rdf:resource=”http://www.w3.org/2002/07/owl#ObjectProperty”/>
<rdf type rdf:resource=”http://www.w3.org/2002/07/owl#SymmetricProperty”/>
<rdf type rdf:resource=”http://www.w3.org/2002/07/owl#FunctionalProperty”/>
Owl可以用來定義和表示類與類,、類與屬性之間豐富的語義關(guān)系,。在面向?qū)ο笾蓄惻c類之間的關(guān)系是確定的,如繼承,、依賴,、聚合等。
本體庫的建立是相當(dāng)麻煩的,,如果能夠在軟件設(shè)計(jì)過程中抽取本體,則以后本體的建立會(huì)節(jié)省不少的時(shí)間,。目前,,將面向?qū)ο蟮乃枷肱c本體建模的思想相結(jié)合得到了一定的研究,這些研究成果對(duì)領(lǐng)域本體的構(gòu)建有一定的推進(jìn)作用,。例如參考文獻(xiàn)[9]給出的一種從UML類圖到OWL映射方法,。
3 加入本體后的類庫檢索
在進(jìn)行檢索時(shí),首先利用本體知識(shí)對(duì)檢索條件進(jìn)行預(yù)處理,,對(duì)檢索條件進(jìn)行加強(qiáng)與擴(kuò)展,,然后檢索引擎用處理后的條件進(jìn)行檢索,將得到更符合用戶需求的返回結(jié)果,。利用本體含有的語義信息檢索出語義上匹配的類,。
基于本體描述的類庫,可以分作三層:最底層為數(shù)據(jù)服務(wù)層,,存放刻面描述完畢的類實(shí)體,,實(shí)現(xiàn)對(duì)類的存儲(chǔ),包括本體庫和XML數(shù)據(jù)庫等,;中間層為功能應(yīng)用層,,包括本體的推理檢索模塊,數(shù)據(jù)訪問等功能,,主要采用組件開發(fā)技術(shù)來完成功能,;最外層是表示層,負(fù)責(zé)與用戶的交互及為用戶顯示界面和提供一個(gè)可視化的瀏覽接口,。如圖1所示,。
實(shí)現(xiàn)采用MVC架構(gòu)的Struts,。
本體的查詢模塊通過Jena提供的推理機(jī)接口,利用同義,、上下位和語義關(guān)系,,或者第三方推理機(jī)推理出隱含的語義,從而使得查詢得以擴(kuò)展,。利用Owl本體概念的描述邏輯進(jìn)行相關(guān)和相近概念的推理運(yùn)算,。
(1)用戶通過查詢界面輸入查詢條件。
(2)生成初始查詢,,如分詞,、關(guān)鍵詞匹配。
(3)查詢擴(kuò)展,。對(duì)初始查詢進(jìn)行語義擴(kuò)展,,然后把擴(kuò)展后的術(shù)語集通過查詢界面顯示給用戶。本體擴(kuò)展包括以下幾種類型:同義擴(kuò)展,、層次擴(kuò)展,、屬性擴(kuò)展、公理擴(kuò)展和規(guī)則擴(kuò)展,。返回的術(shù)語集包括術(shù)語之間的關(guān)系以及相應(yīng)的解釋,。
(4)細(xì)化:用戶根據(jù)返回的術(shù)語集進(jìn)一步明確自己的需求。
(5)執(zhí)行查詢和返回查詢結(jié)果,,同時(shí)考慮將檢索結(jié)果按照查詢匹配度進(jìn)行排序,。
4 實(shí)驗(yàn)評(píng)測(cè)
環(huán)境和工具:Tomcat服務(wù)器,Eclipse開發(fā)平臺(tái),,Protégé,,sql server2000數(shù)據(jù)庫,Jena推理機(jī),,Java類庫中的資源,。
類庫常規(guī)關(guān)鍵詞檢索方法與本系統(tǒng)檢索方法的效率對(duì)比,如表3所示,。
類作為面向?qū)ο笤O(shè)計(jì)中的重要元素,,為軟件復(fù)用的實(shí)現(xiàn)提供了良好的條件。為了改進(jìn)現(xiàn)有的類庫檢索不方便,、效率低等問題,,本系統(tǒng)在刻面描述的基礎(chǔ)上,結(jié)合本體語義檢索的思想,,較好地解決了傳統(tǒng)的類庫檢索方法無法真正理解用戶的檢索意圖,,以及查全率和查準(zhǔn)率相對(duì)差的缺點(diǎn),用戶可方便快捷地從類庫中尋找適合自己需要的類,,從而更好地達(dá)到軟件復(fù)用的目的,。下一步工作將是實(shí)現(xiàn)類庫中的類的刻面自動(dòng)分類和本體信息提取,。
參考文獻(xiàn)
[1] 呂楓華,王和珍,,費(fèi)翔林.類相似性的比較及其在類庫檢索中的應(yīng)用[J].軟件學(xué)報(bào),,1997,8(4):278-282.
[2] 葉青青,,江水.基于語義與句法的Java類庫檢索方法與系統(tǒng)[J].計(jì)算機(jī)工程,,2004,30(23).
[3] 徐正權(quán).類庫系統(tǒng)研究及其與軟件庫的融合[J].計(jì)算機(jī)與數(shù)字工程,,2007,,38(6):67-69.
[4] 張文娟.面向?qū)ο筌浖_發(fā)工具集中類庫和模型庫的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2002,,28(3).
[5] 余金山.基于XML,,Tamino和CORBA的軟構(gòu)件管理與檢索技術(shù)[J].華僑大學(xué)學(xué)報(bào),2008,,29(4):518-521.
[6] MICHIELS P. MIHAILA G A. SIMEON J. Put a tree pattern in your algebra[C]. IEEE 23rd International Conference on Data Engineering,, 2007. ICDE 2007. IEEE 2007: 246-255.
[7] 徐如志,錢樂秋,,程建平,,等.基于XML的軟件構(gòu)件查詢匹配算法研究[J].軟件學(xué)報(bào),2003,,14(7).
[8] 張海龍,彭鑫.基于刻面與本體的資源描述與檢索系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,,2007,,24(9).
[9] 劉振中,劉勇.基于UML類圖的OWL本體映射方法[J].計(jì)算機(jī)工程,,2009,,35(13):40-45.