(西北工業大學 管理學院, 西安 710072)
摘 要:
設計一種融入異步傳輸技術的本體系統開發思路。該方法立足于語義檢索引擎和本體存儲的設計,提出將Ajax應用到本體系統中實現異步傳輸模式的構想;描述一種語義檢索引擎的實現結構和轉換方法;探討一種借鑒文件系統與RDB優點的復合式本體存儲方案,并給出兩者間的映射關系。
關鍵詞:Ajax; 語義檢索; 本體存儲; 本體—關系數據映射
中圖分類號:TP311 文獻標志碼:A
文章編號:1001-3695(2009)02-0641-04
Framework of asynchronous ontology system
CHEN Yao-qing, XUE Jian-wu, CUI Xuan
(College of Management, Northwestern Polytechnical University, Xi’an 710072, China)
Abstract:Outlined a framework for developing semantic system by employing asynchronous communication technology. Based on the main parts as utilization semantic retrie-val, ontology storage and Onto-RDB mapping, this framework included a resolutionof asynchronous communication by applying Ajax to cope with retrieval kernel, described a framework of semantic retrie-val along with an operationalprocedure, and presented a composite solution of ontology storage refers to both file system and relational database by building a relative map between them.
Key words:Ajax; semantic retrieval; ontology storage; Onto-RDB mapping
基于本體理論的智能系統被認為是一種能有效實現語義檢索的方案。本文介紹一種異步本體系統實現框架,立足于本體系統的必要模塊設計,引入Ajax技術來處理客戶端與服務器的異步交互,旨在探索一種異步本體系統結構。
1 本體系統與Ajax綜述
1. 1 本體系統
基于本體論的信息處理系統是基于知識和語義上的匹配,在查準率和查全率上有更好的保證[1]。該系統在構建和開發過程中需要通過兩個必要過程來達到上述目標:
a)本體庫構建和維護。本文關注的主要問題是本體生成、存儲和維護,目的在于實現本體系統運行過程中本體的添加和管理維護,涉及OWL本體描述代碼生成、Onto-RDB映射和RDB(relational database)數據存儲等問題。
b)智能語義檢索。用戶對信息需求的認識通常是模糊的,需要設計一種方法來獲取、加工用戶的檢索請求,通過智能檢索引擎來查詢數據庫,并將檢索結果進行逆向語義處理返回至用戶界面。
目前,國外著名的本體系統有:WordNet,基于心理學和語言學規則的英文詞典,由Princeton University的George A.Miller教授負責開發研制;FrameNet,一個英語詞典工具,包含了詞典構建工具和在線的語義資源及語言技術應用軟件,由美國加州伯克利分校的International Computer Science Institute開發;Mikrokosmos,一種支持多語種的機器翻譯系統,由新墨西哥州立大學的計算研究實驗室開發[1]。除此之外,還有包括SENSUS、OntoSeek、Cyc和HowNet等幾個較知名的本體系統。然而國內,截止目前還沒有類似本體系統投入運行使用的報道。
1. 2 Ajax技術在本體智能系統中的應用
Ajax技術最早于2005年2月由Adaptive Path公司的Jesse James Garrett提出,狹義上可解釋為Asynchronous JavaScript+XML(異步JavaScript+XML)的縮寫[2]。目前,該技術在電子商務等網站業務中已充分證實其在用戶體驗和系統性能方面的優越性。Ajax最顯著的技術特點是采用異步傳輸技術實現頁面信息的無刷新更新。
目前,基于B/S模式的Web應用具備易部署、易更新等諸多優點,但隨著用戶需求的不斷提升,B/S模式出現三個無法回避的問題:處理完用戶請求之外須承擔視圖層處理任務,即繪制生成用于顯示結果集的用戶界面;除傳遞響應的結果集數據包外,需要將用戶界面的繪制信息傳遞給客戶端;很難達到桌面應用軟件(如MS Word)等的“胖客戶端”使用效果。上述B/S模式的三個不足可以由Ajax技術來彌補[3],這一點已經被國內外眾多Web應用實例證實。國外較著名的應用如Google Map、Amazon Diamond Retrieval;國內著名的如163郵件系統等。
在本體系統領域,包括國外已投入運行和國內概念原型系統研究,都很少有公開發表的文獻來系統闡述Ajax技術應用到本體系統中。根據Ajax技術對Web應用程序已證實的性能和功能上的改善,理論上同理可以將該技術引入到B/S模式的本體系統中,用于提升用戶體驗和系統性能。
2 Ajax本體系統模型
2. 1 異步本體系統設計要求
引入Ajax技術后的本體系統,在功能設計上有如下幾個要求:a)對本體存儲文件的可操作性,Ajax技術遵循W3C的XML數據傳輸規范,故對用XML編寫的RDF、OWL等文件理論上都有很好的操作性,該特點可應用到本體數據存儲的設計中;b)語義檢索引擎的Ajax接口設計,在用戶界面和檢索引擎之間Ajax需要完成請求參數的封裝與檢索結果的封裝,充當兩者的橋接作用;c)純文本(plain text)傳遞,在客戶端和服務器間傳遞的數據只包含請求參數或結果集數據;d)更豐富的用戶體驗。
基于上述設計目標,融入Ajax技術框架獲得異步傳輸的本體系統模型。
2. 2 系統模塊結構的劃分
該系統的頂層模塊可劃分為語義本體數據的維護和提取兩大部分,涉及的邏輯層包括Ajax視圖層、Ajax異步通信層、服務器端應用程序接口和本體數據存儲層(圖1)四個層次。其中異步通信層是本文研究的核心,語義檢索引擎和本體存儲也需要根據Ajax的技術作結構方面的輔助設計。
異步傳輸機制的解決方案采用的是客戶端與服務器端之間新增的異步通信層,通過該層融入Ajax技術可以有效地以異步模式實現前臺界面與后臺引擎間的交互;服務器端的語義檢索引擎和本體構建組件具備了平臺無關性,開發過程中可以任意選擇Java、.NET、Php或Ruby等中的一種;數據存儲方案采用的是文件系統和關系數據庫系統復合的映射模式。該模型主要關注系統核心的交互過程,本身具有普遍的平臺適應性,故暫不考慮相關的底層網絡通信和操作系統等因素。
3 Ajax本體系統實現方法
根據異步本體系統的要求設計的系統模型(圖1)定義了系統頂層模塊結構,在此基礎上結合異步傳輸和語義檢索引擎的設計思想,設計出的核心模塊實現方法綜合考慮了各部分的可操作化。
3. 1 語義檢索引擎設計
引入Ajax技術,檢索引擎的接口設計需要進行兩方面的調整:一方面,用來解析Ajax請求數據包的接口組件;另一方面,語義結果集封裝組件。核心推理功能基本不變,為便于運行邏輯闡述的完整性,故一個包含異步通信接口的語義檢索引擎有以下五個單元模塊:
a)Ajax請求參數解析。從檢索界面獲取的請求參數通過Ajax異步數據包傳遞,對象數據流的編碼形式(XML、JSON字符串格式等)要求檢索引擎通過相應的解碼器獲取請求對象的屬性參數。
b)查詢推理擴展。本體構建的過程中預定義相關的語義推理擴展規則,該處理單元利用語義擴展規則對語義查詢進行推理擴展,據此推出一組與用戶的檢索對象具有語義關聯的語義查詢條件。
c)查詢映射。以b)中獲得的語義查詢條件作為輸入條件的一個處理單元,將一組語義查詢條件映射成一組RDB的SQL語句,具體的映射規則(Onto-RDB映射規則)需要在本體構建過程中建立。
d)語義封裝。對查詢結果的加工處理單元,它將從RDB中查詢獲取的結果根據Onto-RDB映射規則進行逆向推理,解析得出一個基于本體詞匯的結果集返回。
e)Ajax數據包封裝。檢索引擎返回的結果集通常是一個資源迭代器(resIterator),該迭代器以resource類的實例對象存儲資源無法直接傳遞給Ajax回調函數,故要求一個相應的編碼器來封裝結果數據流。
根據上述模塊和Ajax相關技術規范,可以得出語義檢索引擎的一種實現模型(圖2)。
圖2中的過程解析如下:
以用戶提交的基于本體庫詞匯的語義查詢Qs作為查詢輸入條件,Ajax解碼器獲取并解析用戶查詢請求并調用查詢推理模塊,讀取本體庫中預先定義的語義推理擴展規則對Qs進行語義擴展處理:
f1(Qs)=(Q1s,Q2s,Q3s,…,Qns)
得出與Qs具有語義關聯的一組語義查詢條件Q1s,Q2s,Q3s,…,Qns;以此為輸入,“查詢映射”模塊讀取“Onto—RDB映射規則”獲得本體與數據庫的映射關系,據此進行查詢語句重寫處理。
f2(Q1s,Q2s,Q3s,…,Qns)=(Q1D,Q2D,Q3D,…,QnD)重寫得出一組SQL語句Q1D,Q2D,Q3D,…,QnD直接提交給數據連接池來查詢RDB,據此獲得一組查詢結果集R(Q1D), R(Q2D), R(Q3D),…,R(QnD)。該結果集語義可讀性較差,故需要調用語義封裝模塊來進行語義處理。該模塊讀取Onto-RDB映射規則,據此關系進行逆向處理來達到語義封裝的目的:
f-2(R(Q1D),R(Q2D),…,R(QnD))=
(R(Q1s),R(Q2s),…,R(Qns))
經過重寫封裝后獲得的結果集R(Q1s),R(Q2s),…,R(Qns)由Ajax編碼器組件進行XML規范的數據封裝,并返回至視圖層處理單元。
3. 2 本體存儲結構
Ajax技術遵循W3C的XML數據傳輸規范,故對用XML編寫的RDF、OWL等文件理論上都有很好的操作性[4]。故設計一種包含文件系統和RDB系統兩種存儲方式的復合式存儲結構,依據本體論面向對象(object-oriented)的設計思想對抽象模型與實例數據實現分離:修改變動較小的本體抽象模型以OWL文件存儲于文件系統中;操作較頻繁的實例數據采用RDB方案存儲于關系數據表中;以XML格式存儲本體模型與實例數據的映射關系。Ajax組件和服務器端技術分別用于操作文件系統和RDB數據。
本體存儲的核心是解決Ajax操作的本體模型與RDB數據表間的映射關系(Onto-RDB映射規則)。從概念上劃分,在同一領域下,(領域)本體與RDB分別描述了抽象知識(class)與實例數據(instance),因此兩者的對應關系是客觀存在的:
a)本體與RDB模式描述。
本文的實現方法考慮的是基于OWL DL(OWL description logics)描述語言的本體實現,其主要涉及類、類層次關系、公理、屬性和屬性公理信息[5],故一個完整的本體模型用下列關系式[6]來表示:
O=(C,P,HC,RC,RP)
其中:C表示類;P表示屬性;HC表示類層次關系;RC表示公理;Rp表示屬性公理。
RDB模式的組成包括了關系數據表、列、主鍵和外鍵,故用下列關系式來表示:
R=(T,CR,Pk,Fk)
其中:T表示數據表;CR表示列;Pk表示主鍵列;Fk表示外鍵列。
b)本體與RDB的映射關系。
設從R到O的映射函數關系為map();RDB中的表對應為實體(entity),映射為本體中的類,則有C=map(T)。據此推出映射關系如表1所示。
表1 RDB與本體的映射關系
RDB元素本體元素函數關系式映射表示
列(CR)成員屬性P=map(CR)propertyToColumn
主鍵(Pk)函數屬性P=map(Pk)functionalPropertyToPk
外鍵(Fk)對象屬性P=map(Fk)objectPropertyToFk
主從表間繼承關系父類與子類的公理Fk=map(RC)classSubClassToFk
基于上述映射關系得出本體數據存儲結構:Onto-RDB映射規則以XML格式存儲在文件系統;抽象本體模型以及相關語義推理擴展以OWL文件存儲;實例數據存儲于RDB數據表中。
3. 3 異步通信層
異步通信是一個實時過程,運行中只需要載入所需的數據量。Ajax異步通信技術在Web應用中的典型實現,如Google檢索的輸入提示、Gmail郵件系統的“黃褪”技術、Google Map等。
本文以智能輸入提示為例設計一種在本體系統中實現用戶輸入提示的功能,論證Ajax在本體系統中的可行性;以文獻語義檢索輸入提示功能為例,為簡化模型文獻本體僅選取標題、作者、關鍵詞三個屬性;設計目標定義為:輸入框獲取關鍵詞片段動態生成語義檢索提示。
設計實現過程如圖3所示:輸入框內輸入字符的變化觸發 onkeyup事件(如① 所示),該事件調用Ajax的getSemanticSuggestion (如 ②所示)方法獲取用戶輸入的檢索詞片斷,并向Web容器服務器端組件發送異步請求(如 ③ 所示),服務器端接口組件調用語義檢索引擎對本體數據進行查詢推理,并將檢索的結果集返回到Ajax應用(如 ⑤所示)顯示到輸入提示區。
過程③與⑤是異步通信的核心,視圖層的Ajax程序邏輯與服務器端組件進行異步交互,實時更新輸入提示框數據的變化。部分通用代碼在Ajax和Java的相關文獻都有刊載,故僅列舉核心實現。
1)客戶端代碼
檢索詞輸入界面 retrieve.jsp部分代碼
var responseDiv=document.getElementById(\"suggestion\");
//輸入事件觸發,見一般Ajax文獻通用代碼
function getSemanticSuggestion(){…}
//回調函數處理返回提示
function callback(){
if(request.readyState==4){
if(request.status==200){
clearItems();//清空輸入提示
//獲取服務器端返回的提示結果集
var dom=request.responseXML;
var items=dom.getElementsByTagName(\"item\");
var title=\"\";
var author=\"\";
var keywords=\"\";
//遍歷結果集寫入輸入提示區
for(var i=0;i var item=items[i]; title=item.getElementsByTagName(\"title\")[0] .firstChild.nodeValue; author=item.getElementsByTagName(\"author\")[0] .firstChild.nodeValue; keywords=item.getElementsByTagName(\"keywor ds\")[0]. firstChild.nodeValue; addRow(title,author,keywords); } } } } //生成一條輸入提示 function addRow(title,author,keywords){ reponseDiv.append(title+\"|\"+author+\"|\"+keywords+ \"〈br〉\"); } function clearItems(){ if(responseDiv.hasChildNodes()) responseDiv.removeChild(responseDiv.childNodes[0]); } …… 〈input type=text onkeyup=\"getSemanticSuggestion()\" id=\"keyword\"〉 〈div id=\"suggestion\"〉〈/div〉 2)服務器端代碼 接收Ajax請求的參數,語義檢索引擎不是本實驗的核心,故用HP公司的Jena組件庫來模擬實驗,不失一般性。處理Ajax請求的核心類Suggestion.java代碼如下: import com.hp.hpl.jena.rdf.model.*; public class Suggestion { //初始化模型 public getInfModel myModels=new getInfModel(); public InfModel model=myModels.getInfModel(); String title,author,keywords; public String getSugg(String fragment){ StringBuffer result_items=new StringBuffer(\"〈items〉\"); //給定關鍵詞輸入片段提取提示結果集 ResIterator items=this.search(fragment); //遍歷結果集,轉換成XML規范的字符串 while(items.hasNext() ){ Resource res=items.nextResource(); //獲取文獻數據的標題、作者和關鍵詞 title=this.getValue(res,\"title\"); author=this.getValue(res,\"author\"); keywords=this.getValue(res,\"keywords\"); //以XML Tag封裝數據 result_items.append(\"〈item〉\"); result_items.append(\"〈title〉\"); result_items.append(title); result_items.append(\"〈/title〉\"); result_items.append(\"〈author〉\"); result_items.append(author)); result_items.append(\"〈/author〉\"); result_items.append(\"〈keywords〉\"); result_items.append(keywords); result_items.append(\"〈/keywords〉\"); result_items.append(\"〈/item〉\"); } result_items.append(\"〈/items〉\"); return result_items.toString(); } public ResIterator search(String fragment) { ResIterator searchResult = 1; getInfModel myModels = new getInfModel(); //設置檢索屬性為‘標題’,同理可按作者、關鍵詞查找 Property searchProperty = model.getProperty(myModels.itemToProperty(\"title\")); String SearchValue = fragment; //給定屬性和屬性值獲取檢索結果集 searchResult = model.listSubjectsWithProperty(searchPropert, SearchValue); return searchResult; } //給定資源和屬性來獲取屬性值 public String getValue(Resource res, String item) { String result = 1; Property searchProperty = model.getProperty(myModels.itemToProperty(item)); for(StmtIterator SearchResult = model.listStatements(res, searchProperty, (RDFNode)1); SearchResult.hasNext();) result = SearchResult.nextStatement().getObject().toString(); return myModels.removeType(result); } } 從suggestion類中返回的結果集是一個按XML規范封裝的字符串,可以通過Servlet將該字符串以XML數據流格式返回給1)中的callback回調函數。 以上選取了Ajax異步機制在檢索接口的一種典型應用,同理,該設計模式可以應用到本體系統的其他功能應用。Ajax技術理論上可以滲透到本體系統的整個表現層,實現用戶操作的桌面化和性能的改善。 4 結束語 本文在目前本體系統研究領域的相關成果以及現有的國內外已投入運行或概念原型系統的基礎上,提出了一種融入異步傳輸技術的本體系統實現框架。該框架立足于本體系統的數據存儲和檢索引擎的設計,在此基礎上引入Ajax技術實現了本體系統視圖層與服務器端組件的異步通信模式。本體智能系統的實現方法沒有一種固定的模式,并且盡管Ajax技術在互聯網站的實際應用中充分證明其在性能和用戶體驗方面的改善,但在本體系統領域卻尚無類似的實證數據。本文描述的實現框架僅是對本體系統與Ajax技術融合應用的一種嘗試,更多實證數據尚待進一步探索。 參考文獻: [1]李景.本體理論及在農業文獻檢索系統中應用研究——以花卉學本體建模為例[D].北京:中國科學院,2004. [2]ASLESON R, SCHUTTA N T. Foundations of Ajax[M].US:Apress L P,2005:13-21. [3]CRANE D, PASCARELLO E. Ajax in action[M]. US:Manning Publications Co,2006:23-29. [4]MAHEMOFF M.Ajax frameworks[EB/OL].(2005)[2008-02-10].http://www.ajaxpatterns.org/AJAXFrameworks. [5]W3C. OWL Web ontology language guide recommendations[EB/OL].(2004-02-10)[2007-01-20].http://www.w3.org/TR/2004/REC-owl-guide. [6]文敦偉,樊小虎.一個基于語義模塊的交互式本體匹配框架[J].計算機工程與應用,2007,43(29):1-2.