知识图谱实践篇(三):D2RQ SPARQL endpoint与两种交互方式
這次我們介紹利用D2RQ開啟SPARQL endpoint服務和兩種交互方式:在瀏覽器中進行查詢或者編寫python腳本進行交互。跳過之前實踐篇練習的讀者,需要做的準備有:導入數據到Mysql,下載mapping文件(項目地址)。
?
一、SPARQL endpoint
前一篇介紹SPARQL的文章中提到,SPARQL endpoint是SPARQL協議的一部分,用于處理客戶端的請求,可以類比web server提供用戶瀏覽網頁的服務。通過endpoint,我們可以把數據發布在網上,供用戶查詢。
D2RQ,是以虛擬RDF的方式來訪問關系數據庫中的數據,即我們不需要顯式地把數據轉為RDF形式。通過默認,或者自己定義的mapping文件,我們可以用查詢RDF數據的方式來查詢關系數據庫中的數據。換個說法,D2RQ把SPARQL查詢,按照mapping文件,翻譯成SQL語句完成最終的查詢,然后把結果返回給用戶。下面是D2R Server的架構圖:
?
進入d2rq目錄,使用下面的命令啟動D2R Server:
d2r-server.bat kg_demo_movie_mapping.ttl“kg_demo_movie_mapping.ttl”是我們定義的mapping文件。其他參數和配置請參考官方文檔。默認端口是2020,在瀏覽器輸入“http://localhost:2020/”,可以看到如下界面:
紅色方框1是我們定義的類別,點擊某個類別,我們可以看到其對應的所有實例(默認顯示50個,可以在mapping文件中修改服務器配置)。選中某個實例,可以看到其包含的所有屬性,如下圖:
點擊紅色方框2中的鏈接,進入endpoint,如下圖:
?
二、瀏覽器中查詢
輸入框默認的SPARQL查詢是獲取所有的RDF三元組,“LIMIT”關鍵詞指定返回結果數量的上限。點擊下圖紅框中的“Go!”,執行查詢:
讀者可以自行嘗試上篇文章中的例子:
“周星馳出演了哪些電影?”
?
“英雄這部電影有哪些演員參演?”
?
“鞏俐參演的評分大于7的電影有哪些?”
?
讀者也可以通過命令行的方式進行查詢,具體方法請參考官方的文檔。
?
三、編寫Python腳本進行交互
構建基于知識圖譜的應用,我們希望將SPARQL查詢集成在代碼當中,對其進行包裝便于后續開發。這里介紹一個Python第三方庫:SPARQLWrapper。如其名,這是一個Python下的包裝器,可以讓我們十分方便地和endpoint進行交互。下面是通過SPARQLWrapper,向D2RQ endpoint發送查詢“鞏俐參演的評分大于7的電影有哪些”,得到結果的代碼。
from SPARQLWrapper import SPARQLWrapper, JSONsparql = SPARQLWrapper("http://localhost:2020/sparql") sparql.setQuery("""PREFIX : <http://www.kgdemo.com#>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>SELECT ?n WHERE {?s rdf:type :Person.?s :personName '鞏俐'.?s :hasActedIn ?o.?o :movieTitle ?n.?o :movieRating ?r.FILTER (?r >= 7)} """) sparql.setReturnFormat(JSON) results = sparql.query().convert()for result in results["results"]["bindings"]:print(result["n"]["value"])?
運行結果:
2046 Memoirs of a Geisha 荊軻刺秦王 大紅燈籠高高掛 霸王別姬 活著 唐伯虎點秋香 秋菊打官司 菊豆 Hong gao liang 畫魂 風月 Piao Liang Ma Ma The Hand初始化Wrapper需要的參數是endpoint對外提供服務的鏈接,D2RQ默認的鏈接是“http://localhost:2020/sparql”。
?
總結
這篇文章簡單地介紹了如何利用D2RQ開啟SPARQL endpoint服務和兩種進行交互的方式。D2RQ是以虛擬RDF圖的方式來訪問關系數據庫,在訪問頻率不高,數據變動頻繁的場景下,這種方式比較合適。對于訪問頻率比較高的場景(比如KBQA),將數據轉為RDF再提供服務更為合適。接下來的實踐篇我們將介紹如何利用Apache Jena,創建基于顯式RDF數據的SPARQL endpoint;并展示,在加入推理機后,對數據進行本體推理我們可以得到額外的信息。
https://zhuanlan.zhihu.com/p/32880610
總結
以上是生活随笔為你收集整理的知识图谱实践篇(三):D2RQ SPARQL endpoint与两种交互方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 空指针和野指针
- 下一篇: 知识图谱实践篇(四):Apache je