1。關於RDF、RDFS、OWL的理解

1) RDF:三元組(IRI在知識圖譜中唯一標識實體,literals是帶有資料型別的純文字)。

例如:“

http://www。

kg。com/person/1

” “kg:chineseName” “羅納爾多” 表示一個三元組,對應兩個IRI和一個literals。

2) 在此基礎之上考慮了語義和概念層面,就引出了RDFS,即提供schema層的描述來進行區分。

3) 之後發現RDFS引入schema層表達能力還是不足,vocab不足,進一步的引入OWL,新增額外的vocab,能夠進行推理。

關於RDF中某些寫法的解釋:

RDF定義了一種特殊的rdf:type特性表示兩個資源之間的類性關係。

一般rdf:type特性值的資源稱為類,表示屬於rdf:resource表示屬性,rdfs: range/domain經過OWL之後對映為ObjectProperty和DataProperty。

2。關於mysql相對RDF的理解

關於mysql的資料對映:

1) 表作為本體中的類Class

2) 表的列作為屬性Property

3) 表的行為作為例項或者資源

4) 表的單元格作為字面量

5) 如果單元格所在的列是外來鍵,那麼其值值IRI,或者說是實體或者醫院

3。如何將mysql的資料轉化為RDF

如何將mysql的資料對映到我們在protege中定義的本體上?

要注意到使用D2RQ的優勢在於:

1) 先將mysql中資料出自動轉化為預定義的mapping檔案,然後使用者在這個mapping檔案上進行修改,將資料對映到自己定義的本體上。

注意:當資料關係比較複雜的時候,直接在由D2RQ生成的mapping檔案上進行修改更加節省時間。

這裡使用D2RQ進行資料轉化:

generate-mapping -u root -p 8610912 -o kg_demo_movie_mapping。ttl jdbc:mysql://localhost/kg_demo_movie

直接編輯kg_demo_movie_mapping。ttl檔案,主要剔除掉關於主鍵id的map描述, 另外主要更改d2rq:class和d2rq:property,將其後面的值對應到自己定義的本體上。

接下來開始轉化為RDF: 透過使用如下命令將資料轉化為kg_demo_movie_mapping。ttl轉化為kg_demo_movie。nt的RDF檔案。

D:\kg\software\d2rq-0。8。1>dump-rdf。bat -o kg_demo_movie。nt kg_demo_movie_mapping。ttl

其中預設匯出RDF格式為: “TURTLE”, “RDF/XML”, “RDF/XML-ABBREV”, “N3”和“N-TRIPLE”, 其中“N-TRIPLE”是預設的輸出格式。

知識圖譜相關概念與實踐

現在已經有了三元組RDF,就需要開始進行檢索和查詢RDF資料,而SPARQL是專門為了訪問和查詢RDF設計的,是語義網的核心概念。

SPARQL(SPARQL Protocol and RDF Query Language),透過http協議在客戶端和SPARQL伺服器(SPARQLendpoint)之間進行傳輸和查詢。

對於d2rq,開啟web查詢功能:

d2r-server。bat kg_demo_movie_mapping。ttl

這裡不做過多關於d2rq的說明,只要注意到d2rq最主要的功能是將mysql對映到mapping上,透過修改,最終獲取RDF形式的資料,即重在資料格式或者內容的轉化,而關於另外的重頭戲關於儲存和查詢會接下來介紹JENA。

4。關於RDF資料的儲存和查詢

關於JENA,是一個開源的Java語義網框架(open source Semantic Web Framework for Java),用於構建語義網和連結資料應用。其架構如下:

知識圖譜相關概念與實踐

簡單解釋:

1) 底層也相當於是資料儲存或者資料來源,主要使用sql資料庫或者一種高速持久的三元組形式直接在磁碟上進行儲存。

2) 之上是推理層,內含內部已有的推理和外部定義的推理。

3) 繼續之上,提供各種方式的查詢。

首先配置JENA的環境變數:

知識圖譜相關概念與實踐

path路徑上增加如下:

%JENA_HOME%\bat;%JENA_HOME%\bin

繼續執行如下命令:

tdbloader。bat ——loc=“D:\kg\software\apache-jena-3。8。0\tdb” “D:\kg\software\d2rq-0。8。1\kg_demo_movie。nt”

——loc指定jena儲存RDF資料的目錄,第二個引數是mysql資料經過mapping然後再轉化為RDF資料

知識圖譜相關概念與實踐

同時tdb的目錄下產生了新的資料:

知識圖譜相關概念與實踐

接下來,開啟服務,透過Fuseki進行開啟。Fuseki是Jena提供的SPARQL伺服器,也就是SPARQL endpoint。

注意關於apache-jena-fuseki的版本問題: 若選擇版本apache-jena-fuseki-3。8。0,則後續在執行的過程中會報出如下錯誤:

知識圖譜相關概念與實踐

檢查之後是版本問題,重新下載低版本的,使用版本apache-jena-fuseki-3。5。0。

進入到

cd D:\kg\software\apache-jena-fuseki-3。5。0

執行

fuseki-server。bat

會自動建立並生成“run”資料夾,然後將本體檔案移動到run目錄下的databases資料夾,將字尾改為ttl。

注意,當在protege中儲存本體檔案時,需要儲存為Turtle Syntax,若儲存為其他型別的檔案,則後續執行的過程中會報錯。

知識圖譜相關概念與實踐

然後我們進入到apache-jena-fuseki-3。5。0\run\configuration目錄中,新建檔案fuseki_conf。ttl 再次執行

fuseki-server。bat

執行成功!

知識圖譜相關概念與實踐

登入http://localhost:3030/,頁面如下:

知識圖譜相關概念與實踐

為了能夠提供python查詢,找到SPARQL endpoint, 可以透過如下頁面找到: http://localhost:3030/kg_demo_movie/sparql http://localhost:3030/kg_demo_movie/query

知識圖譜相關概念與實踐

不過需要注意的是很容易導致java。lang。OutOfMemoryError: Java heap space的錯誤問題。 注意每次重啟需要刪除apache-jena-3。8。0\tdb下如下的檔案,否則報錯:

知識圖譜相關概念與實踐

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2018/8/23 12:45

# @Author :

# @File : jena_query。py

# @Software: PyCharm

from

SPARQLWrapper

import

SPARQLWrapper

JSON

sparql

=

SPARQLWrapper

“http://localhost:3030/kg_demo_movie/query”

sparql

setQuery

“”“

PREFIX :

PREFIX rdf:

SELECT * WHERE {

?x :movieTitle ‘功夫’。

?x ?p ?o。

}

”“”

sparql

setReturnFormat

JSON

results

=

sparql

query

()

convert

()

# print(results)

for

result

in

results

“results”

][

“bindings”

]:

# print(result[“n”][“value”])

print

result

“x”

][

“value”

],

result

“p”

][

“value”

],

result

“o”

][

“value”

])

列出部分結果如下:

file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#movie/9470 http://www。kgdemo。com#hasGenre file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#genre/35

file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#movie/9470 http://www。kgdemo。com#hasGenre file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#genre/28

file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#movie/9470 http://www。kgdemo。com#hasGenre file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#genre/80

file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#movie/9470 http://www。kgdemo。com#hasGenre file:///D:/kg/software/d2rq-0。8。1/kg_demo_movie。nt#genre/14

參考:

1。實踐篇(一):資料準備和本體建模

2。實踐篇(二):關係資料庫到RDF

3。RDF查詢語言SPARQL

4。實踐篇(三):D2RQ SPARQL endpoint與兩種互動方式

5。實踐篇(四):Apache jena SPARQL endpoint及推理

6。知識圖譜基礎之RDF,RDFS與OWL

7。資源描述框架RDF

8。SPARQL Endpoint interface to Python