李若宇,陳 磊
(淮南師范學(xué)院 計(jì)算機(jī)學(xué)院,安徽 淮南 232001)
隨著2020 年暴發(fā)的新冠肺炎疫情席卷全球,各種疾病知識(shí)已經(jīng)成為最有價(jià)值的信息之一,建立高質(zhì)量的疾病知識(shí)庫(kù),有助于推進(jìn)醫(yī)學(xué)現(xiàn)代化,推進(jìn)全民醫(yī)學(xué)知識(shí)科普。 現(xiàn)階段傳統(tǒng)主流數(shù)據(jù)庫(kù)以關(guān)系型數(shù)據(jù)庫(kù)為主,在存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)時(shí)具有成熟的技術(shù)和良好的性能,但疾病知識(shí)擁有著明顯的樹(shù)狀結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu)特征,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)難以做到高效的存儲(chǔ)。
資源描述框架(Resource Description Framework,RDF)是Web3.0 時(shí)代語(yǔ)義網(wǎng)技術(shù)中的一個(gè)概念,表達(dá)為一種基于圖的數(shù)據(jù)類(lèi)型,常作為知識(shí)圖譜的存儲(chǔ)介質(zhì)。 選用RDF 進(jìn)行疾病知識(shí)描述和倉(cāng)儲(chǔ)具有查詢效率高、擴(kuò)展性強(qiáng)、對(duì)非結(jié)構(gòu)化非關(guān)系型數(shù)據(jù)兼容性較好等特點(diǎn)。 國(guó)內(nèi)外基于RDF 技術(shù)開(kāi)發(fā)的知識(shí)庫(kù)有清華大學(xué)的Xlore、復(fù)旦大學(xué)的CN-Dbpedia、谷歌的Freebase 和維基的DBPedia。 Openlink 公司的Virtuoso 數(shù)據(jù)庫(kù)能夠?qū)崿F(xiàn)RDF 數(shù)據(jù)的倉(cāng)儲(chǔ),并使用SPARQL 語(yǔ)句進(jìn)行數(shù)據(jù)的檢索和操作[1-2]。
作為語(yǔ)義網(wǎng)中的核心技術(shù),使用RDF 構(gòu)建知識(shí)工程時(shí),知識(shí)本體被當(dāng)作資源表示為URI,不同資源間的聯(lián)系以主謂賓的形式進(jìn)行描述,形成知識(shí)圖譜。 構(gòu)成RDF 的數(shù)據(jù)類(lèi)型包括:(1)URI。 用于標(biāo)記資源,以網(wǎng)址的形式。 如在疾病知識(shí)中,知識(shí)本體“高血壓”被標(biāo)記為資源:
表1 RDF 原生數(shù)據(jù)形式
疾病知識(shí)具有明顯的醫(yī)學(xué)知識(shí)特征,有較規(guī)則的知識(shí)結(jié)構(gòu),例如大多數(shù)疾病都包含中英文名稱(chēng)、就診科室、多發(fā)群體、病癥分類(lèi)、常見(jiàn)癥狀、診斷方法、治療方法等共同屬性,因此根據(jù)屬性關(guān)系可以對(duì)疾病知識(shí)進(jìn)行有效組織。 對(duì)疾病知識(shí)進(jìn)行建模的步驟包括:(1)收集知識(shí)文檔。 可以從網(wǎng)絡(luò)百科、電子書(shū)籍等相對(duì)準(zhǔn)確的資料上收集資料,注意可以采用爬蟲(chóng)的方式,但是需要對(duì)知識(shí)的準(zhǔn)確性進(jìn)行人工驗(yàn)核。 (2)抽取主要屬性。根據(jù)對(duì)大多數(shù)疾病知識(shí)的研究,歸納通用疾病屬性,建立數(shù)據(jù)字典。
在圖1 中,唯一編號(hào)的ds125 表示知識(shí)本體“冠心病”,ds125 下包含有一級(jí)屬性中文名、英文名、多發(fā)人群、就診科室、癥狀、治療方法、檢查方法。 值得注意的是,雖然RDF 數(shù)據(jù)模型中的屬性名類(lèi)似于關(guān)系模型中的字段名,但這里的屬性名可自由搭配屬性值,如屬性“檢查方法”可以連接一個(gè)值,也可以連接若干個(gè)值。
圖1 知識(shí)本體“冠心病”的RDF 數(shù)據(jù)模型
完成知識(shí)內(nèi)容建模以后,需要將知識(shí)內(nèi)容轉(zhuǎn)化為RDF 描述,轉(zhuǎn)化工作包括拼接前綴、格式化等工作,產(chǎn)出的結(jié)果應(yīng)該是規(guī)范的RDF 三元組文檔。
值得注意的是,賓語(yǔ)除了字面量以外,還可能是資源類(lèi)型。 如“檢查方法”對(duì)應(yīng)的屬性值這里表示為資源而非字串字面量,一方面,因?yàn)榫唧w“檢查方法”更趨向于是一個(gè)術(shù)語(yǔ),符合被定義成為RDF 中的資源;另一方面,一種“檢查方法”可能被多種疾病共享,如“心電圖”可以是多種疾病的“檢查方法”,這時(shí)與將“心電圖”作為“檢查方法”的疾病資源便建立了聯(lián)系。 如圖2 所示,讓數(shù)據(jù)實(shí)體之間(ds125 和ds126)建立豐富的聯(lián)系,體現(xiàn)關(guān)聯(lián)數(shù)據(jù)語(yǔ)義網(wǎng)的核心理念。
圖2 通過(guò)同一種檢查方法連接起來(lái)的兩個(gè)疾病實(shí)體
RDF 數(shù)據(jù)具有明顯的“圖”結(jié)構(gòu),需要使用圖數(shù)據(jù)庫(kù)進(jìn)行組織和存儲(chǔ),單純的關(guān)系型數(shù)據(jù)庫(kù)并不便于存儲(chǔ)RDF 數(shù)據(jù)。 Openlink Virtuoso 數(shù)據(jù)庫(kù)支持以圖的形式存儲(chǔ)RDF 數(shù)據(jù),支持使用SPARQL 語(yǔ)句對(duì)RDF 數(shù)據(jù)進(jìn)行DML 和DQL 操作,兼容主流操作系統(tǒng),支持JDBC,ODBC,HTTP API 等主流數(shù)據(jù)訪問(wèn)接口和多種編程語(yǔ)言,在海量數(shù)據(jù)存儲(chǔ)和處理方面有著不錯(cuò)的表現(xiàn),同時(shí)還支持將關(guān)系數(shù)據(jù)轉(zhuǎn)換為RDF 數(shù)據(jù)的技術(shù)(RDB2RDF)。 除了Openlink Virtuoso 以外,MarkLogic,Jena,GraphDB 等數(shù)據(jù)庫(kù)在RDF 數(shù)據(jù)倉(cāng)儲(chǔ)方面都有著優(yōu)秀特性[5]。
知識(shí)倉(cāng)儲(chǔ)在這里主要指將組織好的RDF 數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫(kù),在將RDF 數(shù)據(jù)導(dǎo)入Virtuoso 數(shù)據(jù)庫(kù)時(shí),常常采用SPARQL-Update 語(yǔ)句的方式進(jìn)行。
(1)在Virtuoso 數(shù)據(jù)庫(kù)的namespace 定義命名空間和對(duì)應(yīng)的前綴,有助于減小輸入冗余。
@prefix knt:
@prefix kna:
此時(shí)知識(shí)本體可被表示為knt:ds125,屬性可以被表示為kna:屬性。
(2)SPARQL 語(yǔ)句支持RDF 縮寫(xiě)形式,下面是相同主語(yǔ)和相同主謂兩種情況下的縮寫(xiě)示例。 INSERT 語(yǔ)句同SQL 中,表示將數(shù)據(jù)插入數(shù)據(jù)庫(kù),
如圖3 所示,將寫(xiě)好的SPARQL 語(yǔ)句插入Database>Interactive SQL 頁(yè)面中的輸入框,即可完成SPARQLUpdate 語(yǔ)句執(zhí)行,RDF 數(shù)據(jù)插入成功以后,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)返回被更改的條目數(shù)量。
RDF 數(shù)據(jù)的查詢是通過(guò)SPARQL-Query 語(yǔ)句執(zhí)行的,可以對(duì)已經(jīng)構(gòu)建好的疾病知識(shí)內(nèi)容進(jìn)行檢索。 進(jìn)入Virtuoso 數(shù)據(jù)庫(kù),先后進(jìn)入Linked Data 標(biāo)簽和SPARQL 標(biāo)簽,即可執(zhí)行正確的SPARQL 語(yǔ)句。 如圖3所示的SPARQL 語(yǔ)句在單機(jī)Execute 按鈕后,可檢索按照上述規(guī)則構(gòu)建的“冠心病”的相關(guān)知識(shí)[6]。
圖3 對(duì)“冠心病”的知識(shí)進(jìn)行搜索
繼續(xù)使用SPARQL 語(yǔ)句:SELECT ? s ? o FROM
圖4 對(duì)庫(kù)中所有疾病名稱(chēng)進(jìn)行搜索
例如通過(guò)SPARQL 語(yǔ)句:SELECT COUNT(? s)FROM
文中以疾病知識(shí)的描述和倉(cāng)儲(chǔ)為研究對(duì)象,介紹了RDF 技術(shù)原理,針對(duì)疾病知識(shí)特點(diǎn)進(jìn)行分析和建模形成RDF 圖,隨后進(jìn)行RDF 描述形成有效的RDF 文檔,在Windows 平臺(tái)對(duì)Virtuoso 數(shù)據(jù)庫(kù)進(jìn)行部署,使用SPARQL 語(yǔ)言實(shí)現(xiàn)RDF 數(shù)據(jù)的導(dǎo)入和檢索,并簡(jiǎn)要介紹了一些RDF 數(shù)據(jù)庫(kù)管理操作,如圖管理、命名空間管理等。 未來(lái)還可以使用Virtuoso 數(shù)據(jù)庫(kù)的編程接口,實(shí)現(xiàn)疾病知識(shí)應(yīng)用的設(shè)計(jì)與開(kāi)發(fā)。