,, ,
生物醫(yī)學(xué)領(lǐng)域和關(guān)聯(lián)數(shù)據(jù)的發(fā)展推動(dòng)了一大批可以查詢的結(jié)構(gòu)化生物醫(yī)學(xué)本體數(shù)據(jù)的出現(xiàn)。如生物通路本體[1]包括生物化學(xué)反應(yīng)、復(fù)雜裝配、運(yùn)輸和催化事件,涉及到蛋白質(zhì)、DNA、RNA、小分子和復(fù)合物的物理相互作用。這些生物醫(yī)學(xué)本體數(shù)據(jù)中的數(shù)據(jù)類型多樣、規(guī)模龐大。雖然很多情況下,生物醫(yī)學(xué)研究者通過Cytoscape[2]可視化軟件把生物本體可視化出來,但這些可視化的結(jié)果是通過一定的算法歸類成的節(jié)點(diǎn),其中每一個(gè)節(jié)點(diǎn)代表一個(gè)知識(shí)分類。如Mouse genome database(MGD)這個(gè)老鼠基因組的數(shù)據(jù)源共有8 206 813個(gè)三元組,但在可視化的結(jié)果中,只表示為59個(gè)節(jié)點(diǎn),184條關(guān)聯(lián)弧。而當(dāng)需要對(duì)某個(gè)數(shù)據(jù)源中的節(jié)點(diǎn)進(jìn)行詳細(xì)研究或?qū)δ硞€(gè)數(shù)據(jù)源進(jìn)行重新組織,對(duì)關(guān)系數(shù)據(jù)進(jìn)行檢索和解析RDF數(shù)據(jù)時(shí),就需要用到查詢語言和數(shù)據(jù)獲取協(xié)議 (Simple Protocol and RDF Query Language,SPARQL)[3-4]語句查詢來實(shí)現(xiàn)。
對(duì)于普通的生物醫(yī)學(xué)研究人員來說,要熟練地運(yùn)用SPARQL語法并構(gòu)建能滿足自己需求的查詢語句是一件很困難的事情。這將會(huì)使生物醫(yī)學(xué)本體數(shù)據(jù)源不能得到充分的利用,很多節(jié)點(diǎn)內(nèi)所包含的數(shù)據(jù)實(shí)體與數(shù)據(jù)關(guān)聯(lián)并不能被生物醫(yī)學(xué)人員發(fā)現(xiàn)和利用;同時(shí)由于SPARQL語法問題與數(shù)據(jù)源數(shù)據(jù)的復(fù)雜性也會(huì)提高生物醫(yī)學(xué)研究人員使用的門檻,因此需要一種工具輔助生物醫(yī)學(xué)研究人員完成對(duì)生物醫(yī)學(xué)本體數(shù)據(jù)的查詢、檢索、解析與重新組織。此背景下,筆者利用參數(shù)化設(shè)計(jì)的思想研發(fā)了一個(gè)Cytoscape參數(shù)化SPARQL查詢系統(tǒng),該系統(tǒng)可以編寫SPARQL查詢語句通過SPARQL端點(diǎn)進(jìn)行可視化查詢,也可以導(dǎo)入?yún)?shù)化模板,然后在可視化結(jié)果中選擇可視化的生物本體通路數(shù)據(jù)節(jié)點(diǎn),選擇相應(yīng)的查詢參數(shù),系統(tǒng)便會(huì)自動(dòng)生成SPARQL查詢語句,并把查詢結(jié)果可視化。
對(duì)于普通用戶來說,要熟悉地掌握SPARQL語法,并在自己的機(jī)器上構(gòu)建出能滿足自己查詢需求的SPARQL查詢語句,非常困難,于是一些研究者就研究出一些半自動(dòng)化的SPARQL構(gòu)建器[5]輔助用戶實(shí)現(xiàn)SPARQL查詢。其中,Querymed是一個(gè)典型的基于Web表單的查詢構(gòu)建器,它是Seneviratne等設(shè)計(jì)出來,以便醫(yī)生和生物學(xué)家集成生物學(xué)和生物醫(yī)學(xué)數(shù)據(jù)源的數(shù)據(jù)庫并能從中抽取具體的知識(shí);Viziquer是一個(gè)基于可視化圖形的SPARQL查詢構(gòu)建器;Barzdins等[6]提出了一種圖形化查詢語言(Graphical Query Language,GQL),它要求用戶通過提供的系統(tǒng)工具在畫布上描繪出能表達(dá)三元組模式或圖模式的圖形,然后系統(tǒng)才會(huì)將圖形轉(zhuǎn)換為SPARQL查詢;VQB是一個(gè)基于窗口組件的SPARQL查詢構(gòu)建器,但它包含在Konduit工具中,用于對(duì)Nepomuk-KDE中的RDF數(shù)據(jù)建立SPARQL查詢,無法對(duì)其他的RDF數(shù)據(jù)構(gòu)建SPARQL查詢。
參數(shù)化查詢(Parameterized Query 或 Parameterized Statement)是指在設(shè)計(jì)與數(shù)據(jù)庫鏈接并訪問數(shù)據(jù)時(shí),在需要填入數(shù)值或數(shù)據(jù)的地方,使用參數(shù) (Parameter) 給值。參數(shù)化查詢這在SQL中應(yīng)用廣泛,SQL的參數(shù)化查詢已被視為能最有效預(yù)防SQL注入攻擊[7](SQL Injection) 的攻擊手法的防御方式[8]。Apache Jena中就把參數(shù)化查詢的技術(shù)應(yīng)用到了SPARQL中。在Apache Jena 中;用戶需要用用代碼來對(duì)SPARQL的查詢模板進(jìn)行描述,如用戶需要使用ParameterizedSparqlString這個(gè)類定義一個(gè)SPARQL模板;在Apache Jena中,用戶編寫好模板后,通過對(duì)參數(shù)注入不同的值而得到不同的SPARQL查詢語句,生成SPARQL參數(shù)化查詢代碼不容易查詢SPARQL查詢語句的字符串錯(cuò)誤與混亂的問題,能實(shí)現(xiàn)遠(yuǎn)程的SPARQL參數(shù)化查詢,有效地防御SPARQL注入式攻擊??偟膩碚f,參數(shù)化查詢的好處在于:當(dāng)頻繁使用改動(dòng)不大的查詢語句時(shí),能有效提高數(shù)據(jù)引擎的執(zhí)行效力,避免出現(xiàn)查詢語句語法的錯(cuò)誤,用戶可以避免重復(fù)編寫繁雜的查詢語句,有效防止注入式攻擊。
為了方便SPARQL模塊的共享與交流,筆者提出基于SPARQL模板包的發(fā)布共享機(jī)制。SPARQL模板包是一個(gè)由某個(gè)人或者某組織發(fā)布到網(wǎng)上的一個(gè)共享包,該共享包記錄著它自己特有的元數(shù)據(jù)和查詢參數(shù)。SPARQL模板包的RDF元數(shù)據(jù)定義見圖1。
查詢參數(shù)是指SPARQL查詢條件的模板,而且它的這些元數(shù)據(jù)和參數(shù)是用RDF資源框架[9]描述的(如它的名字和它發(fā)布的時(shí)間點(diǎn))。SPARQL模板包是利用RDF資源描述框架技術(shù),用一個(gè)名為“query.rdf”的文件表示的。當(dāng)SPARQL模板包導(dǎo)入成功時(shí),它將存儲(chǔ)在用戶的電腦中。用戶可以利用RDF描述規(guī)范為基礎(chǔ)編寫一個(gè)生物醫(yī)學(xué)本體數(shù)據(jù)常用的參數(shù)化查詢SPARQL模板包,滿足自己所需要的參數(shù)化查詢,進(jìn)行更深層次的研究。
如圖2所示,該SPARQL模板包例子使用標(biāo)簽:
圖1 SPARQL模板包的RDF元數(shù)據(jù)定義
圖2 SPARQL模板包示例
筆者研發(fā)的Cytoscape插件包括2個(gè)軟件模塊。一是Context Synchronizer,它是SPARQL模板包的管理工具和用戶界面(包括導(dǎo)入、檢測(cè)和更新SPARQL模板包等功能),并以Cytoscape Panel面板插件形式嵌入Cytoscape中;二是Context Menu,它是SPARQL模板應(yīng)用啟動(dòng)的工具模塊(根據(jù)Cytoscape不同類型的實(shí)體,如節(jié)點(diǎn)、邊等提供Tooltip顯示和SPARQL查詢功能),以Cytoscape右鍵菜單插件形式嵌入。
Cytoscape插件可以讓用戶直接導(dǎo)入包含SPARQL查詢語句的參數(shù)模板的模板包,只要用戶提供SPARQL模板包的URL,便能快捷地導(dǎo)入SPARQL模板包,SPARQL模板包管理界面如圖3所示。
圖3 SPARQL模板包管理界面
用戶只要打開Context Synchronizer Pane 的UI界面,點(diǎn)擊“Add”按鈕,在彈出的對(duì)話框中輸入SPARQL模板包的URL,點(diǎn)擊“確定”即可。以我們發(fā)布的“yigang”模板包為例,點(diǎn)擊“Add”,輸入“yigang”的URL:“https://vsdlc3.googlecode.com/svn/trunk/vsdl3c/app/binary/semscape/yigang.tar.gz”點(diǎn)擊“確定”,插件就會(huì)自動(dòng)把“? yigang”這個(gè)SPARQL模板包自動(dòng)下載到用戶的電腦中“%user_home%/semscape/context/%context_name%的目錄中”,并且插件會(huì)自動(dòng)讀取“yigang”模板包中的“query.rdf”文件。當(dāng)導(dǎo)入成功時(shí),用戶可以點(diǎn)擊“Check”按鈕,插件就會(huì)自動(dòng)地比較本地目錄中“?node_pao…Hit_01”,SPARQL模板包中“query.rdf”中的“hasTime”時(shí)間值與當(dāng)前網(wǎng)絡(luò)URL中的“?node_pao…Hit_01”,SPARQL模板包中”query.rdf”中的“hasTime”時(shí)間值。當(dāng)本地目錄中“query.rdf”中的“hasTime”時(shí)間值與當(dāng)前網(wǎng)絡(luò)URL中的“query.rdf”中“hasTime”時(shí)間值一樣時(shí),它就會(huì)顯示綠色的標(biāo)簽“Updated”,如上圖X中的“test”SPARQL模板包,后面顯示的綠色標(biāo)簽“Updated”說明這個(gè)模板包是最新的,不需要更新。當(dāng)當(dāng)前網(wǎng)絡(luò)中“query.rdf”中的“hasTime”時(shí)間值比本地中“query.rdf”中的“hasTime”時(shí)間值要晚時(shí),插件就會(huì)在模板后面顯示黃色的標(biāo)簽“<- Require Update”,如圖3中的“yigang”SPARQL模板包。
當(dāng)用戶成功地通過筆者系統(tǒng)導(dǎo)入了模板包后,系統(tǒng)就會(huì)自動(dòng)識(shí)別模板包中的信息,這時(shí)用戶就可以使用導(dǎo)入的參數(shù)模板。用戶只需要點(diǎn)擊Cytoscape的節(jié)點(diǎn)或邊緣,系統(tǒng)就會(huì)自動(dòng)獲取選中的Cytoscape節(jié)點(diǎn)或邊緣信息,如選中實(shí)體的URI、RDF類型或其他屬性。當(dāng)系統(tǒng)獲取到相應(yīng)的信息后,就會(huì)自動(dòng)地把信息與參數(shù)化模板中的配置信息作對(duì)比,并把合適的參數(shù)化查詢以菜單的形式顯示出來,這時(shí)用戶只需要選擇菜單欄中的參數(shù)化選項(xiàng),系統(tǒng)就會(huì)自動(dòng)構(gòu)建SPARQL查詢語句,并把可視化結(jié)果顯示出來。
圖4 參數(shù)化查詢 “pao:Hit”本體知識(shí)示例
如圖4所示,我們選中一個(gè)名為“scai:DBA000289_7_50_58”的一個(gè)節(jié)點(diǎn),它代表一種嗎啡的具體實(shí)例,這時(shí)系統(tǒng)就會(huì)自動(dòng)地獲取該節(jié)點(diǎn)的信息。其中該節(jié)點(diǎn)的RDF類型為“pao:Hit”,系統(tǒng)就會(huì)自動(dòng)把適合RDF類型為“pao:Hit”的參數(shù)化查詢模板顯示出來。如圖4中可以看到,系統(tǒng)直接把適合RDF類型為“pao:Hit”的“?node_pao…Hit_01”參數(shù)化選項(xiàng)顯示在菜單欄中,只要用戶點(diǎn)擊選擇,系統(tǒng)就會(huì)把名為“scai:DBA000289_7_50_58”的節(jié)點(diǎn)的URI“http://www.scai.fraunhofer.de/DBA000289_7_50_58”替換掉名為“?node_pao…Hit_01”的參數(shù)化模板中的“!!!node_uri!!!”,生成新的SPARQL查詢語句,并把可視化結(jié)果顯示出來。
其中參數(shù)化查詢選項(xiàng)是一個(gè)用來查詢RDF類型為“pao:Hit”的Cytoscape節(jié)點(diǎn)的一個(gè)參數(shù)化模板,其作用在于查詢嗎啡實(shí)體節(jié)點(diǎn)“scai:DBA000289_7_50_58”在文章標(biāo)題為“Maturation of the adrenal medulla--IV.”(即是研究嗎啡對(duì)腎上腺髓質(zhì)成熟期的影響的一篇文章)之間的關(guān)聯(lián)。通過該參數(shù)查詢,可以有效地查詢到文章標(biāo)題為“Maturation of the adrenal medulla--IV.”中關(guān)于嗎啡節(jié)點(diǎn)“scai:DBA000289_7_50_58”的內(nèi)容關(guān)聯(lián),通過其中的內(nèi)容可以發(fā)現(xiàn)嗎啡實(shí)例節(jié)點(diǎn)“scai:DBA000289_7_50_58”對(duì)腎上腺髓質(zhì)的成熟期的影響。這樣用戶就可以直接使用參數(shù)化查詢發(fā)現(xiàn)嗎啡節(jié)點(diǎn)與文章標(biāo)題為“Maturation of the adrenal medulla--IV.”之間的關(guān)聯(lián),用戶不需要手動(dòng)構(gòu)建查詢語句、不需要掌握SPARQL語法、不需要編寫繁瑣的SPARQL查詢語句,只要導(dǎo)入了參數(shù)化模板包,就可以通過鼠標(biāo)點(diǎn)擊選擇“參數(shù)化查詢選項(xiàng)”直接實(shí)現(xiàn)SPARQL查詢,這是一個(gè)更快捷方便的SPARQL查詢工具。
此插件將提交到Cytoscape官方網(wǎng)站的插件庫中,以供全球用戶(特別是生物醫(yī)學(xué)研究人員)下載和免費(fèi)使用。在程序源代碼開源的基礎(chǔ)之上進(jìn)一步吸納Cytoscape用戶和開發(fā)者的反饋意見,并在程序功能、用戶界面和系統(tǒng)性能上進(jìn)行了改進(jìn)。另外,將創(chuàng)建和共享一系列常用的SPARQL模板包,并且在生物醫(yī)學(xué)領(lǐng)域的高校和研究所進(jìn)行推廣,對(duì)有興趣參與共享SPARQL模板包的機(jī)構(gòu)或人員提供培訓(xùn)和指導(dǎo)。