D2R server關(guān)聯(lián)數(shù)據(jù)發(fā)布_第1頁(yè)
D2R server關(guān)聯(lián)數(shù)據(jù)發(fā)布_第2頁(yè)
D2R server關(guān)聯(lián)數(shù)據(jù)發(fā)布_第3頁(yè)
D2R server關(guān)聯(lián)數(shù)據(jù)發(fā)布_第4頁(yè)
D2R server關(guān)聯(lián)數(shù)據(jù)發(fā)布_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、如何利用 D2R 發(fā)布 Linked data簡(jiǎn)介: Linked data 作為 semantic Web 的一個(gè)子話題,近年來(lái)逐漸得到學(xué)術(shù)界以及工業(yè)界的廣泛重視。Linked data 這個(gè)詞表示了一系列在 Web 上發(fā)布和關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù)的最佳實(shí)踐。在用 Linked Data 構(gòu)建的數(shù)據(jù) Web 上,我們可以自由地從一片數(shù)據(jù)跳轉(zhuǎn)到其它數(shù)據(jù),比之現(xiàn)在的文檔 Web(從一個(gè)文檔跳轉(zhuǎn)到其他文檔),數(shù)據(jù) Web 提供的關(guān)聯(lián)不但更加豐富,而且具有語(yǔ)義。本文著重介紹目前比較流行的一種發(fā)布 Linked data 的工具 D2R 的使用方法,并以 Academic 領(lǐng)域的數(shù)據(jù)為例,展示怎么使

2、用 D2R 工具構(gòu)建 Linked data,并提供簡(jiǎn)單的瀏覽功能。本文希望給需要開(kāi)發(fā)基于 Linked data 應(yīng)用程序的程序員提供有價(jià)值的參考。前言Linked data 最早是在 2007 年 5 月,由 Chris Bizer and Richard Cyganiak 向 W3C SWEO 提交的一個(gè)項(xiàng)目申請(qǐng) Linked Open Data Project 中提出來(lái)的。Linked data 提出的目的是構(gòu)建一張計(jì)算機(jī)能理解的語(yǔ)義數(shù)據(jù)網(wǎng)絡(luò),而不僅僅是人能讀懂的文檔網(wǎng)絡(luò),以便于在此之上構(gòu)建更智能的應(yīng)用。Linked Open Data Project 的宗旨在于號(hào)召人們將現(xiàn)有數(shù)據(jù)發(fā)布

3、成 Linked data,并將不同數(shù)據(jù)源互聯(lián)起來(lái)。在過(guò)去的三年中,越來(lái)越多的數(shù)據(jù)提供者和 Web 應(yīng)用開(kāi)發(fā)者將他們各自的數(shù)據(jù)發(fā)布到 Web 上,并且與其它數(shù)據(jù)源關(guān)聯(lián)在一起,形成一個(gè)巨大的數(shù)據(jù) Web。截止 2009 年 7 月,已發(fā)布的 Linked data 規(guī)模為 6.726.000.000 個(gè) RDF 三元組以及 148.948.000 個(gè) RDF 關(guān)聯(lián)關(guān)系,相比 2007 年 5 月的 500 million RDF 三元組以及 120,000 RDF 關(guān)聯(lián)關(guān)系,增漲非常迅速。 其數(shù)據(jù)領(lǐng)域涉及 Geographic Data,Life Sciences,Publications,Us

4、er Generate Content,Media 等等。不僅僅是 Public Web,隨著企業(yè) 2.0 的到來(lái),企業(yè)內(nèi)部也迫切需要越來(lái)越多的數(shù)據(jù)與 Web 上的數(shù)據(jù)關(guān)聯(lián),從而構(gòu)建更好的應(yīng)用與服務(wù)。而現(xiàn)有的數(shù)據(jù),尤其是企業(yè)內(nèi)部的數(shù)據(jù),大多數(shù)存在于關(guān)系型數(shù)據(jù)庫(kù)中,因此,本文挑選了一個(gè)目前應(yīng)用較為廣泛的工具 D2R,介紹如何使用它將關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)發(fā)布成 Linked Data。什么是 Linked data簡(jiǎn)單來(lái)講,Linked data 即為一系列利用 Web 在不同數(shù)據(jù)源之間創(chuàng)建語(yǔ)義關(guān)聯(lián)的最佳實(shí)踐方法。這里的不同數(shù)據(jù)源,可以來(lái)自一個(gè)組織內(nèi)部的不同系統(tǒng),也可以來(lái)自不同組織的不同系統(tǒng),它們的

5、內(nèi)容,存儲(chǔ)地點(diǎn)以及存儲(chǔ)方式都可以完全不同,但它們很可能存在著關(guān)聯(lián),例如:Amazon 上圖書(shū)可能與 MySpace 上的人之間可能存在關(guān)聯(lián),因?yàn)閳D書(shū)的作者有可能在 Myspace 上注冊(cè)賬號(hào)。總之,Linked data 最大的特點(diǎn)便是將不同的數(shù)據(jù)關(guān)聯(lián)起來(lái)。Linked data 包含一些基本原則:資源。在發(fā)布一個(gè)領(lǐng)域的數(shù)據(jù)之前,我們需要確定要發(fā)布的資源是什么。任何事物,只要你認(rèn)為是有意義的,有被引用必要的,都可以稱(chēng)之為資源。資源標(biāo)識(shí)。任何一個(gè)資源都用一個(gè) HTTP URI(Uniform Resource Identifiers)來(lái)標(biāo)識(shí)。之所有要用 HTTP URI 來(lái)標(biāo)識(shí),是希望數(shù)據(jù)能夠通

6、過(guò) HTTP 協(xié)議訪問(wèn),真正實(shí)現(xiàn)基于 Web 的訪問(wèn)與互聯(lián)。資源描述。資源可以有多種描述,例如 HTML,XML,RDF 以及 JPEG。文檔 Web 的文檔主要通過(guò) HTML 格式來(lái)表示,數(shù)據(jù) Web 的數(shù)據(jù)主要通過(guò) RDF格式(Resource Description Framework)來(lái)表示。RDF 將一個(gè)資源描述成一組三元組(主語(yǔ),謂語(yǔ),賓語(yǔ))。例如:王老師 教授 英語(yǔ)課(主語(yǔ)) (謂語(yǔ)) (賓語(yǔ))主語(yǔ)用來(lái)表示需要描述的資源,謂語(yǔ)用來(lái)表示主語(yǔ)的某個(gè)屬性(例如:姓名,出生日期)或者某個(gè)關(guān)系(例如,雇傭,認(rèn)識(shí),教授等),賓語(yǔ)表示了屬性的值或者關(guān)系的值。主語(yǔ),謂語(yǔ)都需要要用 HT

7、TP URI 來(lái)表示。賓語(yǔ)可以用 HTTP URI 標(biāo)識(shí)另一個(gè)資源,也可以是字符串表示的文本。我們可以把主語(yǔ)看作是類(lèi)資源,而將謂語(yǔ)看作是類(lèi)資源的屬性資源,賓語(yǔ)或者是類(lèi)資源或者是文字型資源。根據(jù)賓語(yǔ)的種類(lèi),可以將三元組分為兩類(lèi):文字型三元組以及非文字型三元組,第二種可以看作是類(lèi)資源之間的關(guān)聯(lián)。什么是 D2RLinked data 的優(yōu)點(diǎn)雖然很突出,但要想發(fā)揮其作用,其前提是數(shù)據(jù)必須滿足 Linked data 的基本原則。然而實(shí)際上上大量已存在的數(shù)據(jù)并不滿足這些原則,于是 Linked data 的推動(dòng)者們便開(kāi)發(fā)了一系列實(shí)用的工具,來(lái)幫助完成傳統(tǒng)數(shù)據(jù)向 Linked data 的轉(zhuǎn)換。D2R 便

8、是其中一個(gè)非常流行的工具。它的作用是一個(gè)將關(guān)系型數(shù)據(jù)庫(kù)發(fā)布為 Linked data。D2R 主要包括 D2R Server, D2RQ Engine 以及 D2RQ Mapping 語(yǔ)言。D2R Server 是一個(gè) HTTP Server,它的主要功能提供對(duì) RDF 數(shù)據(jù)的查詢(xún)?cè)L問(wèn)接口,以供上層的 RDF 瀏覽器、SPARQL 查詢(xún)客戶端以及傳統(tǒng)的 HTML 瀏覽器調(diào)用。D2RQ Engine 的主要功能是使用一個(gè)可定制的 D2RQ Mapping 文件將關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)換成 RDF 格式。D2RQ engine 并沒(méi)有將關(guān)系型數(shù)據(jù)庫(kù)發(fā)布成真實(shí)的 RDF 數(shù)據(jù),而是使用 D2RQ Ma

9、pping 文件將其映射成虛擬的 RDF 格式。該文件的作用是在訪問(wèn)關(guān)系型數(shù)據(jù)時(shí)將 RDF 數(shù)據(jù)的查詢(xún)語(yǔ)言 SPARQL 轉(zhuǎn)換為 RDB 數(shù)據(jù)的查詢(xún)語(yǔ)言 SQL,并將 SQL 查詢(xún)結(jié)果轉(zhuǎn)換為 RDF 三元組或者 SPARQL 查詢(xún)結(jié)果。D2RQ Engine 是建立在 Jena(Jena 是一個(gè)創(chuàng)建 Semantic Web 應(yīng)用的 Java 平臺(tái),它提供了基于 RDF,SPARQL 等的編程環(huán)境)的接口之上。D2RQ Mapping 語(yǔ)言的主要功能是定義將關(guān)系型數(shù)據(jù)轉(zhuǎn)換成 RDF 格式的 Mapping 規(guī)則。圖 1 呈現(xiàn)了 D2R 的主體架構(gòu):圖 1. D2R 的主體構(gòu)架如何使用

10、 D2R環(huán)境準(zhǔn)備在使用 D2R 之前,先要進(jìn)行準(zhǔn)備工作,即對(duì) D2R 的環(huán)境進(jìn)行下載和安裝:下載 D2R的環(huán)境下載與你目前使用的數(shù)據(jù)庫(kù)版本相匹配的驅(qū)動(dòng),將其 jar 文件放在 D2R Server 的 lib 目錄下面。D2R 目前已經(jīng)詳細(xì)測(cè)試過(guò) Oracle, MySQL, PostgreSQL, Microsoft SQL Server。其它數(shù)據(jù)庫(kù)沒(méi)有測(cè)試,但筆者嘗試過(guò) IBM DB2,發(fā)現(xiàn)同樣是支持的。使用 D2R 可以對(duì)關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行兩種方案的轉(zhuǎn)化與訪問(wèn)。第一種方案是將關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)轉(zhuǎn)換為虛擬的 RDF 數(shù)據(jù)進(jìn)行訪問(wèn),分為兩個(gè)步驟,第一步是生成 Mapping 文件,第二步

11、是使用 Mapping 文件對(duì)關(guān)系型數(shù)據(jù)進(jìn)行轉(zhuǎn)換與訪問(wèn)。我們可以通過(guò) D2R server 訪問(wèn)關(guān)系型數(shù)據(jù),或者通過(guò)在自己的 Java application 中調(diào)用 Jena/Seasame 的 API 去訪問(wèn)數(shù)據(jù)。第二種方案是直接將關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)包裝成真實(shí)的 RDF 文件,以供一些可以訪問(wèn) RDF Store 的接口訪問(wèn)。由于一般來(lái)講,數(shù)據(jù)庫(kù)的數(shù)據(jù)規(guī)模都比較大,且內(nèi)容經(jīng)常發(fā)生變化,轉(zhuǎn)換為虛擬的 RDF 數(shù)據(jù)空間復(fù)雜度會(huì)更低,更新內(nèi)容更加容易,因此第一種方案的應(yīng)用更加廣泛。我們?cè)谶@里只介紹第一種方案,并分下述兩個(gè)步驟進(jìn)行介紹。生成 Mappping fileD2R 提供了生成 Mappi

12、ng 文件的執(zhí)行腳本。我們需要在命令行中進(jìn)入您所下載的 D2R 所在的路徑,執(zhí)行下面的命令:generate-Mapping -u username -p password -d driverclass -o outfile.n3 -b base uri jdbcURL參數(shù)意義如下:jdbcURLJDBC 鏈接數(shù)據(jù)庫(kù)的 URL MySQL: jdbc:mysql:/servername/databasename PostgreSQL: jdbc:postgresql:/servername/databasename Oracle: jdbc:oracle:thin:servername:152

13、1:databasename Microsoft SQL Server: jdbc:sqlserver:/servername;databaseName=databasename (包含分號(hào),使用時(shí)需要用引號(hào)引起來(lái)) DB2:jdbc:db2:/ servername:50000/ databasename-u username數(shù)據(jù)庫(kù)用戶登錄名-p password數(shù)據(jù)庫(kù)用戶登錄密碼-d driverclass數(shù)據(jù)庫(kù)驅(qū)動(dòng)類(lèi)名 MySQL: com.mysql.jdbc.Driver PostgreSQL: org.postgresql.Driver Oracle: oracle.jdbc.Or

14、acleDriver Microsoft SQL Server: com.microsoft.sqlserver.jdbc.SQLServerDriver DB2:com.ibm.db2.jcc.DB2Driver -o outfile.n3Mapping file 的輸出文件,以 n3 為后綴-b base uriBase uri 作為詞匯的命名空間,默認(rèn)為 http:/localhost:2020/ 詞匯的前綴按照 http:/ baseURI /vocab/resource/ 模式生成。base uri 需要與 server 的

15、 uri 相一致。例如 : 現(xiàn)在我準(zhǔn)備一個(gè)關(guān)于 Academic 的數(shù)據(jù)庫(kù),其中包括 1)從 hompage 上抽取的有關(guān)研究者的信息:homepagePeople;2)從 wikipedia 上抽取的有關(guān)研究者的信息:wikipediaPeople;3)從 ACM 頁(yè)面上抽取的有關(guān)論文與作者的信息:Paper, Author, Paper2Author。數(shù)據(jù)庫(kù)相關(guān)的 schema 如清單 1 所示:清單 1. Academic 數(shù)據(jù)庫(kù) Schema CREATE TABLE homepagePeople ( peopleID INTEGER NOT NULL GENERATED ALWAYS

16、 AS IDENTITY, name varchar(100) NOT NULL, email varchar(100), organization varchar(100), homepage varchar(100), phone varchar(100), position varchar(100), PRIMARY KEY (peopleID) ); CREATE TABLE wikiPeople ( peopleID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, name varchar(100) NOT NULL, email var

17、char(100), title varchar(100), employer varchar(100), education varchar(100), occupation varchar(100), PRIMARY KEY (peopleID) ); CREATE TABLE paper ( paperID INTEGER NOT NULL, title varchar(200) NOT NULL, publishYear varchar(200), conference varchar(200), PRIMARY KEY (paperID) ); CREATE TABLE author

18、 ( authorID INTEGER NOT NULL , name varchar(200) NOT NULL, email varchar(200), organization varchar(200), PRIMARY KEY (authorID) ); CREATE TABLE paper2author ( paperID INTEGER NOT NULL , authorID INTEGER NOT NULL , PRIMARY KEY (authorID, paperID), FOREIGN KEY (paperID) REFERENCES paper(paperID) ON D

19、ELETE CASCADE, FOREIGN KEY (authorID) REFERENCES author(authorID) ON DELETE CASCADE ); 執(zhí)行下面命令便可以根據(jù) Academic 的 Schema 生成一個(gè) Mapping 文件存儲(chǔ)在 Academic.n3 中 : generate-Mapping -o Academic.n3 -d com.ibm.db2.jcc.DB2Driver -u test -p test jdbc:db2:/localhost:5

20、0000/Academic 默認(rèn)的 Mapping 文件非常簡(jiǎn)單,我們需要的一些數(shù)據(jù)關(guān)聯(lián)可能沒(méi)有提供。之后會(huì)著重介紹一些利用 Mapping 語(yǔ)言自定制 Mapping 文件的實(shí)踐方法。使用 Mapping 文件對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)化與訪問(wèn)生成 Mapping 文件后,我們便希望通過(guò) Mapping 文件對(duì)關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行轉(zhuǎn)換和訪問(wèn),這里有兩種方式,一種是通過(guò) D2R Server 自動(dòng)調(diào)用 D2RQ Engine 對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換訪問(wèn),另一種在自己的 Java application 中通過(guò) Jena/Seasame 的 API 去使用 D2RQ Engine。使用 D2R server 默認(rèn)的

21、數(shù)據(jù)處理和訪問(wèn)方式瀏覽 Linked data。該方法很簡(jiǎn)單,不需要自己寫(xiě)代碼,只需要在命令行下面進(jìn)入 D2R 所在文件路徑,執(zhí)行下面的命令啟動(dòng) D2R Server:d2r-server Academic.n3其中 Academic.n3 即為上一節(jié)中生成 Mapping 文件。然后在 Web 瀏覽器中訪問(wèn) http:/localhost:2020, 便可以默認(rèn)的 HTML 瀏覽器、DF 瀏覽器以及 SPARQL 查詢(xún)端對(duì)我們的數(shù)據(jù)進(jìn)行訪問(wèn):圖 2. D2R Server 運(yùn)行的入口頁(yè)面從圖 2 中可以看出,雖然我們的 schema 一共有五個(gè),但是 D2R Server 在顯示時(shí)僅生成了四

22、種類(lèi)資源:HomepagePeople,wikiPeople, paper,以及 author(圖 2 第一行),而是將 paper2author 看作是類(lèi)資源 author 與 Paper 之間的關(guān)系。其概念模型如下所示:圖 3. Academic 數(shù)據(jù)概念模型點(diǎn)擊圖 2 第一行的 Author,呈現(xiàn)出 5 個(gè)作者,如圖 4 所示:圖 4. 點(diǎn)擊 Author 的 HTML 顯示結(jié)果點(diǎn)擊 Author#2,得到 Author#2 的詳細(xì)屬性與關(guān)系。如圖 5 所示:圖 5. 訪問(wèn)類(lèi)資源 Author 中標(biāo)號(hào)為 2 的作者 HTML 顯示結(jié)果注意在這里,Paper2Atuhor 被映射成了 Au

23、thor 的一個(gè)關(guān)系屬性,點(diǎn)擊該關(guān)系關(guān)聯(lián)的資源“<http:/localhost:2020/resource/ZJ.PAPER/1>”,得到 Paper#1 的詳細(xì)屬性與關(guān)系,如圖 6 所示:圖 6. 訪問(wèn)類(lèi)資源 Paper 中標(biāo)號(hào)為 1 的論文 HTML 顯示結(jié)果注意在瀏覽 Paper 的詳細(xì)信息時(shí),也可以通過(guò)反屬性 (is vocab:Paper2Author of) 跳轉(zhuǎn)到相關(guān) Author 的詳細(xì)信息。點(diǎn)擊圖 2 中的類(lèi)資源 HomepagePeople,再點(diǎn)擊 1 號(hào)資源,呈現(xiàn)出 James A. Hendler 的 homepage 詳細(xì)信息,如圖 7 所示:圖 7.

24、訪問(wèn)類(lèi)資源 HomepagePeople 中標(biāo)號(hào)為 1 的人 HTML 顯示結(jié)果點(diǎn)擊圖 2 中的類(lèi)資源 WikiPeople,再點(diǎn)擊 1 號(hào)資源,呈現(xiàn)出 James Hendler 的 wikipedia 詳細(xì)信息,如圖 8 所示:圖 8. 訪問(wèn)類(lèi)資源 WikiPeople 中標(biāo)號(hào)為 1 的人 HTML 顯示結(jié)果使用 Jena API 構(gòu)建自己的應(yīng)用如果需要在 RDF 數(shù)據(jù)層上構(gòu)建自己的應(yīng)用,開(kāi)發(fā)自己的客戶端展示方法,就要用到第二種方式,即直接在自己的 Java 工程中通過(guò) Jena/Seasame 的 API 去使用 D2RQ, 這里僅介紹 Jena 的使用方式,Seasame 的使用留給讀

25、者自己去實(shí)踐。首先需要在你的工程中引用 D2RQ 與 Jena 相關(guān)的 jar 包:將你下載的 D2R server 目錄下的 lib/d2rq-0.7.jar 加入你工程的 classpath;下載 ARQ2.8.1,將其 lib 目錄下的所有 jar 包加入你工程的 classpath。使用 Jena API 可以多種方式調(diào)用 D2RQ, 其中最簡(jiǎn)潔的方式為直接編寫(xiě) SPARQL 查詢(xún)語(yǔ)言,其余方式都需要調(diào)用 Jena 的封裝類(lèi),如 Resource,Property, RDFNode 等,需要讀者非常熟悉 Jena 的接口,并需要為自己的數(shù)據(jù)創(chuàng)建相應(yīng)的 Jena 類(lèi)對(duì)象,因此比

26、較麻煩。本文在此介紹最容易上手也是最靈活的訪問(wèn)方式,SPARQL 查詢(xún)。假定我們現(xiàn)在需要構(gòu)建一個(gè)應(yīng)用,展示所有作者的 name, email 和 paper,因此在 server 端需要提供一個(gè)查詢(xún)類(lèi),如清單 2 所示:清單 2. 使用 Jena API 的 SPARQL 查詢(xún) package test; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryFactory; import com.hp.h

27、pl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import de.fuberlin.wiwiss.d2rq.ModelD2RQ; public class AcademicTest public void queryBySPARQL() ModelD2RQ m = new ModelD2RQ("file:/D:/Academic.n3"); String SPARQLPrefix = "PREFIX vocab: http:/localhost:2020/vocab/res

28、ource/" String SPARQL = SPARQLPrefix + "SELECT ?name ?email ?paper WHERE " + " ?author vocab:Name ?name . " + " ?author vocab:Email ?email ." + " ?author vocab:Paper2Author ?paper . " ; Query query = QueryFactory.create(SPARQL); ResultSet rs = QueryExecut

29、ionFactory.create(query, m).execSelect(); while (rs.hasNext() QuerySolution row = rs.nextSolution(); System.out.println("name:"+row.get("name")+",email:"+row.get("email")+", paper:"+row.get("paper"); 從清單 2 可以看出,用 SPARQL 查詢(xún)數(shù)據(jù)的步驟如下:創(chuàng)建 D2RQ mo

30、del。該步驟需要注意的是,創(chuàng)建 model 時(shí)需要指定 Mapping 文件的路徑,路徑可以是絕對(duì)路徑,也可以是基于工程根目錄的相對(duì)路徑,路徑之前必須加上前綴“file:/”。執(zhí)行 SPARQL 語(yǔ)言。該 SPARQL 語(yǔ)句中 ?author 為主語(yǔ),vocab:Name,vocab:Email 以及 vocab:Paper2Author 為謂語(yǔ),查詢(xún)結(jié)果 ?name,?email 以及 ?paper 為賓語(yǔ)。注意 SPARQL 語(yǔ)句需要有命名空間的前綴說(shuō)明。如在清單程序的使用了 vocab:Name,則在前綴需要聲明 vocab: http:/localhost:2020/vocab/re

31、source/,并且該聲明必須與 Mapping 文件的前綴相一致。有關(guān) SPARQL 的詳細(xì)語(yǔ)法,在此不作詳細(xì)介紹,讀者可以參閱 W3C 關(guān)于 SPARQL的詳細(xì)說(shuō)明。在執(zhí)行 SPARQL 語(yǔ)句時(shí),需要指明要執(zhí)行的語(yǔ)句,以及所依附的 D2RQ model。處理查詢(xún)結(jié)果(e.g.,輸出到 console)。關(guān)于 ResultSet 的處理,jena 提供了一些類(lèi)似 SQL 的接口去獲取每個(gè)查詢(xún)結(jié)果項(xiàng)。程序清單 2 的執(zhí)行結(jié)果如下: name:Jie Bao, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/1

32、name:Li Ding, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/1 name:Deborah McGuinness, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/1 name:James Hendler, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/1 name:James Hendler, email:, paper:file

33、:/D:/Academic2.n3#ZJ.PAPER/3 name:James Hendler, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/2 name:Jennifer Golbeck, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/2 name:Jennifer Golbeck, email:, paper:file:/D:/Academic2.n3#ZJ.PAPER/3 注意,結(jié)果中 name 與 ema

34、il 的值都是一個(gè)文字型資源,而 paper 的值則是一個(gè)類(lèi)資源,用一個(gè)路徑表示(注意,筆者目前創(chuàng)建的是 Java 工程,因此可以用一個(gè)文件路徑來(lái)標(biāo)識(shí)一個(gè)資源,在 Web 工程中,可以曝露出 HTTP URI,例如圖 4 中用 http:/localhost:2020/resource/ZJ.paper/1 表示一篇 paper)。如何讀者希望查詢(xún)某一具體實(shí)例資源的屬性值,在寫(xiě) SPARQL 語(yǔ)句的時(shí)候注意需要將路徑用“<>”引起來(lái),例如:"SELECT ?title WHERE <file:/D:/Academic2.n3#ZJ.PAPER/1> vocab

35、:Title ?title "讀者可以基于 server 端提供的接口,構(gòu)建自己的 client 端對(duì)數(shù)據(jù)進(jìn)行展示,本文在此不作介紹。到此為止,我們便介紹了如何使用 D2R 將關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)換為虛擬的 RDF 數(shù)據(jù),并對(duì)其進(jìn)行訪問(wèn)查詢(xún)的最基本方法。接下來(lái)我們將介紹如何豐富自動(dòng)生成的 Mapping 文件,使得更多的數(shù)據(jù)能夠關(guān)聯(lián)在一起。回頁(yè)首定制自己的 Mapping 文件本節(jié)首先簡(jiǎn)單介紹 Mapping 語(yǔ)言的一些基本語(yǔ)法,然后介紹如何利用 Mapping 語(yǔ)言對(duì) Mapping 文件進(jìn)行定制。Mapping 語(yǔ)言的基本語(yǔ)法Mapping 語(yǔ)言中最重要的是兩個(gè)概念,一個(gè)是&#

36、160;d2rq:ClassMap,另一個(gè)是 d2rq:PropertyBridge。 d2rq:ClassMap 代表 OWL Ontology 或者 RDFS Schema 中的一個(gè)或一組相似的 Class,它一般映射到關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)表。其中包括幾個(gè)重要屬性:d2rq:Class:表示該 ClassMap 所對(duì)應(yīng) Class,其取值可以來(lái)自現(xiàn)有的 OWL Ontology 或者 RDFS Schema,也可以根據(jù)自己的數(shù)據(jù)特征定義新的 Class;d2rq:UriPattern: 描述了一個(gè) URI 模板,用來(lái)指導(dǎo)生成實(shí)例化資源的真實(shí) URI。一般用“ZJ.AUTHOR/ZJ

37、.AUTHOR.AUTHORID”來(lái)表示,“/”前面的部分為表名,后面“”之間的部分為表的列。d2rq:PropertyBridge 代表 OWL Ontology 或者 RDFS Schema 中 Class 的屬性,它一般映射到關(guān)系數(shù)據(jù)庫(kù)中某個(gè)表的一列。其中包括幾個(gè)重要屬性:d2rq:belongsToClassMap: 表示該 propertyBridge 所屬的 ClassMap;d2rq:property: 表示該 propertyBridge 所對(duì)應(yīng) property,其取值可以來(lái)自現(xiàn)有的 OWL Ontology 或者 RDFS Schema,也可以根據(jù)自己的數(shù)據(jù)特征定義新的 p

38、roperty;d2rq:column: 表示該 propertyBridge 關(guān)聯(lián)的某個(gè)具體表中的列。d2rq:refersToClassMap: 表示該 propertyBridge 引用的其它 ClassMap,它的取值不是該 propertyBridge 所屬 ClassMap 對(duì)應(yīng)表中的取值,而是從引用的 ClassMap 對(duì)應(yīng)表中取值。該屬性一般會(huì)跟隨幾個(gè) d2rq:join 來(lái)指明關(guān)聯(lián)的條件,d2rq:join 類(lèi)似 sql 語(yǔ)句中的 where 條件。定制 Mapping 文件Linked data 最重要的特點(diǎn)便是資源和資源之間是互聯(lián)的,從一個(gè)資源可以跳轉(zhuǎn)到其它許多資源。如圖

39、 4、5 中,從類(lèi)資源 Author 可以跳轉(zhuǎn)到類(lèi)資源 Paper,同樣從類(lèi)資源 Paper 也可以跳轉(zhuǎn)到類(lèi)資源 Author。這些關(guān)聯(lián)生成的前提是原始的數(shù)據(jù)中存在 Paper2Author 表,通過(guò)外鍵引用 Paper 表與 Author 表。有了主外鍵關(guān)系,D2R 便可以自動(dòng)為其創(chuàng)建 RDF 關(guān)聯(lián)。具體做法為,如果一個(gè)表 A 被表 B 外鍵引用,則為 A 對(duì)應(yīng)的 ClassMap 創(chuàng)建一個(gè) PropertyBridge,其 d2rq:belongsToClassMap 為 A 所對(duì)應(yīng)的 ClassMap,d2rq:refersToClassMap 為 B 所對(duì)應(yīng)的 ClassMap。 這樣

40、,在瀏覽 A 的實(shí)例資源時(shí),便可以通過(guò)該 PropertyBridge 跳轉(zhuǎn)到 B 的實(shí)例資源。如果一個(gè)表的所有列都通過(guò)外鍵引用其它數(shù)據(jù)表,則不會(huì)為該表生成對(duì)應(yīng)的 ClassMap,而是選取一個(gè)被引用的表,為其創(chuàng)建屬性,屬性取值來(lái)自其它被引用的表。例如本文所舉例子中的 Paper2Author:清單 3. 默認(rèn)的 Mapping 文件生成的 Paper2Author 屬性 # n:m table ZJ.PAPER2AUTHOR map:Paper2author a d2rq:PropertyBridge; d2rq:belongsToClassMap map:Author; d2rq:prop

41、erty vocab:Paper2Author; d2rq:refersToClassMap map:Paper; d2rq:join "ZJ.PAPER2AUTHOR.AUTHORID => ZJ.AUTHOR.AUTHORID" d2rq:join "ZJ.PAPER2AUTHOR.PAPERID => ZJ.PAPER.PAPERID" 實(shí)際情況中,很多數(shù)據(jù)之間雖然有聯(lián)系,但數(shù)據(jù)庫(kù)的創(chuàng)建者們并沒(méi)有為之建立主外鍵的關(guān)系。在這種情況下,我們就需要根據(jù)一定的領(lǐng)域常識(shí)或經(jīng)驗(yàn),手動(dòng)地修改 Mapping 文件,為之建立一些必要的關(guān)聯(lián)。例如,文中的

42、 Academic 數(shù)據(jù)集,數(shù)據(jù)表 HomepagePeople 中的數(shù)據(jù)是 從 hompage 上抽取的有關(guān)研究者的信息, 數(shù)據(jù)表 WikiPeople 中的數(shù)據(jù)時(shí)從 wikipedia 上抽取的有關(guān)研究者的信息,這兩張表并沒(méi)有主外鍵的關(guān)聯(lián)。但實(shí)際上,根據(jù)我們的常識(shí),這兩張表中的數(shù)據(jù)很有可能指代同一個(gè)人。因此,我們希望定義一定的規(guī)則,將 Homepage 這個(gè)類(lèi)資源與 WikiPeople 這個(gè)類(lèi)資源關(guān)聯(lián)起來(lái)。清單 4 給出了我們自定義的屬性 wikiInfor,該屬性屬于類(lèi)資源 HomepagePeople,引用類(lèi)資源 WikiPeople:清單 4. 自定義的屬性 wikiInfor m

43、ap:wikiInfor a d2rq:PropertyBridge; d2rq:belongsToClassMap map:HomepagePeople; d2rq:property vocab:WikiInformation; d2rq:refersToClassMap map:WikiPeople; d2rq:join "ZJ.HOMEPAGEPEOPLE.EMAIL => ZJ.WIKIPEOPLE.EMAIL" d2rq:join "ZJ.HOMEPAGEPEOPLE.ORGANIZATION => ZJ.WIKIPEOPLE.EMPLOYE

44、R" 清單 4 定義了 PropertyBridge:wikiInfor,其中 d2rq:belongsToClassMap 描述了 wikiInfor 所屬的 ClassMap 為 HomepagePeople;d2rq:property 描述了 wikiInfor 所對(duì)應(yīng)的 property 為 vocab:WikiInformation,這個(gè)值可以修改,或者引用現(xiàn)有的 Ontology/RDFS 中的詞匯,或者根據(jù)自己的數(shù)據(jù)靈活定義;d2rq:refersToClassMap 描述了 wikiInfor 所引用的 ClassMap 為 WikiPeople,表示 wikiInf

45、or 的取值來(lái)源于 WikiPeople 對(duì)應(yīng)的表,而不是 HomepagePeople 對(duì)應(yīng)的表;d2rq:join 描述了 wikiInfor 引用 WikiPeople 的條件,這里給出了兩個(gè)條件,即 HomepagePeople 與 WikiPeople 的 email 相同并且 HomepagePeople 的 organization 與 WikiPeople 的 employer 相同。在這兩個(gè)條件同時(shí)滿足的情況下,wikiInfor 才會(huì)生成具體的值,使得從一個(gè) HomepagePeople 的實(shí)例資源可以跳轉(zhuǎn)到他相應(yīng)的 WikiPeople,如圖 9 所示:圖 9. 用 D2

46、R Server 展示 wikiInfor 屬性相比圖 7 可以看出,類(lèi)資源 HomepagePeople 多了一條定制的關(guān)系屬性 wikiInfor。清單 5 列舉了一個(gè)更復(fù)雜的屬性 coauthor。該屬性連接了 HomepagePeople 與 Author。當(dāng)瀏覽 HomepagePeople 的實(shí)例資源時(shí),可以跳轉(zhuǎn)到與其共同發(fā)表過(guò)論文的作者。這個(gè)關(guān)系需要關(guān)聯(lián)三張表,HomepagePeople,Author 以及 Paper2Author。從 HompagePeople 到 Author 通過(guò) Email 以及 Organization 關(guān)聯(lián),從 Author 到 Paper2Aut

47、hor 通過(guò) AuthorID 關(guān)聯(lián)。注意在這些 join 條件中,Author 與 Paper2Author 分別出現(xiàn)了兩次,因此需要使用 d2rq:alias 聲明別名。此外,我們不希望 coauthor 列表中包括自己,因此需要使用 d2rq:condition 聲明一條不相等關(guān)系。清單 5. 自定義的屬性 coauthor map:coauthor a d2rq:PropertyBridge; d2rq:belongsToClassMap map:HomepagePeople; d2rq:property vocab:Coauthor; d2rq:refersToClassMap ma

48、p:Author; d2rq:join "ZJ.HOMEPAGEPEOPLE.EMAIL => ZJ.AUTHOR.EMAIL" d2rq:join "ZJ.HOMEPAGEPEOPLE.ORGANIZATION => ZJ.AUTHOR.ORGANIZATION" d2rq:join "ZJ.AUTHOR.AUTHORID => ZJ.PAPER2AUTHOR.AUTHORID" d2rq:join "ZJ.PAPER2AUTHOR.PAPERID => P2A2.PAPERID" d2r

49、q:join "P2A2.AUTHORID = A2.AUTHORID" d2rq:alias "ZJ.HOMEPAGEPEOPLE AS P2" d2rq:alias "ZJ.AUTHOR AS A2" d2rq:alias "ZJ.PAPER2AUTHOR AS P2A2" d2rq:condition "ZJ.AUTHOR.AUTHORID <> A2.AUTHORID" 從圖 10 可以看出,相比圖 9,類(lèi)資源 HomepagePeople 多了一條定制的關(guān)系屬性 coaut

50、hor。 圖 10. 用 D2R Server 展示 coauthor 屬性經(jīng)過(guò)上述兩條關(guān)系屬性的定制,圖 3 中默認(rèn)的概念模型擴(kuò)展為圖 11 中新的概念模型:圖 11. 擴(kuò)展的概念模型此外,讀者如果希望從自己的數(shù)據(jù)源鏈接到 Web 上其它數(shù)據(jù)源,必須創(chuàng)建它們的關(guān)系并將其額外存儲(chǔ)在一個(gè)真實(shí)的 RDF 數(shù)據(jù)庫(kù)中。訪問(wèn)的時(shí)候,一方面去查詢(xún) D2R 轉(zhuǎn)換的虛擬 RDF 數(shù)據(jù)庫(kù),同時(shí)要查詢(xún)這個(gè)真實(shí)的 RDF 數(shù)據(jù)庫(kù),使得所有的內(nèi)部與外部關(guān)系都被查詢(xún)出來(lái)。本文將不介紹如何創(chuàng)建這些關(guān)系,有興趣的讀者可以參看 Silk,它是一個(gè)在不同 Linked data 數(shù)據(jù)源之間發(fā)現(xiàn)關(guān)系的工具。結(jié)束語(yǔ)本文介紹了如何使用 D2R 工具將關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)發(fā)布為 Linked data,重點(diǎn)介紹了 D2R 的基本概念,使

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論