Apache Jena 是一個免費開源的支持構建語義網路和數據鏈接應用的Java 框架,由惠普實驗室開發,支持內存和永久存儲。

簡介

Apache Jena是專門用於語義網本體操作的開源Java框架,其提供RDF和SPARQL API,來查詢、修改本體和進行本體推理,並且提供了TDB和Fuseki來存儲和管理三元組。

Fuseki是Jena提供的SPARQL伺服器,也就是SPARQL endpoint。其提供了四種運行模式:單機運行、作為系統的一個服務運行、作為web應用運行或者作為一個嵌入式伺服器運行。

Jena 及 Fuseki 的安裝

Jena 3.0.0後的版本需要 Java8,之後下載Jena 包和 Fuseki包:

wget http://mirrors.hust.edu.cn/apache/jena/binaries/apache-jena-3.10.0.tar.gz && tar -xvzf apache-jena-3.10.0.tar.gz;
wget http://mirrors.hust.edu.cn/apache/jena/binaries/apache-jena-fuseki-3.10.0.tar.gz && tar -xvzf apache-jena-fuseki-3.10.0.tar.gz;

即可完成安裝。

Jena 及 Fuseki 的使用

NTriples to TDB

TDB 是Jena用於存儲RDF的組件,是屬於存儲層面的技術。在單機情況下,它能夠提供非常高的RDF存儲性能。在下載完apache-jena後,進入 Jena 文件夾的 bin/,運行:

./tdbloader --loc="../tdb/" "path/to/NTriples"

將 NTriples 載入到TDB中。其中 --loc 指定 tdb的存儲位置。第二個參數是我們通過d2rq等工具生成的nt文件。

Fuseki 服務的開啟

進入 Fuseki 的文件夾,運行 fuseki-server 程序,會得到 run 文件夾。在 run 文件夾下的 configuration 內創建 名為 fuseki_conf.ttl 的文本文件,寫入如下內容:

@prefix : <http://base/#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .

:service1 a fuseki:Service ;
fuseki:dataset <#dataset> ;
fuseki:name "kg_demo_hudong" ;
fuseki:serviceQuery "query" , "sparql" ;
fuseki:serviceReadGraphStore "get" ;
fuseki:serviceReadWriteGraphStore "data" ;
fuseki:serviceUpdate "update" ;
fuseki:serviceUpload "upload" .

<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
.

<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
.
#
# #本體文件的路徑
# #ja:content [ja:externalContent </home/nlp/project/thirdpart/apache-jena-fuseki-3.7.0/run/databases/kg_movie_tultle.ttl> ] ;
#
# #啟用OWL推理機
# #ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>]
# .

<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbDataset> ;
.
# 指定 TDB 文件的位置
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "../apache-jena-3.7.0/tdb" ;
.

這裡我們沒有開啟推理機,如想開啟的話,需要提供本體文件。

再次運行 fuseki-server 開啟服務。出現如下界面則表示開啟成功:

可以看到默認埠為 3030,因此在瀏覽器打開 http://localhost:3030 即可看到如下界面:

簡單 SPARQL 查詢

進入頁面後,點擊query 按鈕,進入查詢頁面。在下面樣式的框中輸入查詢語句。

與Turtle類似,前面的三個 PREFIX 關鍵詞指明各種URL的縮寫,如 rdfs 表示 w3.org/2000/01/rdf-sche, 什麼都不加表示 http://www.kghudong.com#。其中 http://www.kghudong.com# 是要和你生成 nt文件時的那個 ttl 文件中的定義要對上,否則可能查詢不到東西。

下面就是查詢語句了,SELECT 關鍵詞表明了哪些變數是感興趣的。需要被匹配的圖模式出現在WHERE關鍵詞之後的括弧中。返回的查詢結果是一組被稱作綁定(binding)的映射,表示了哪些元素對應到一個給定的變數,返回結果表格的每一行是一個結果或一個綁定。

在查詢語句中,那些以 ? 開頭的被稱作變數。在上面的查詢語句中,我們引入了三個變數 ?subject、?predicate、?object。將這三個變數攜程三元組的形式就得到了一個圖模式(Graph Pattern):

?subject ?predicate ?object

三元組存儲庫(這裡就是Fuseki) 接收這個圖模式,並嘗試去找到能夠匹配這個模式的那些三元組的集合。

點擊查詢框右上方的三角形即可運行這個查詢語句,這裡我們得到如下的查詢結果:

SPARQL的全部基礎就是這個簡單的概念:嘗試去找到能夠匹配一個給定的圖模式的那些三元組的集合。SPARQL提供了更多的功能,用來指定更加複雜的模式並以不同的方式提供結果。但無論模式多麼複雜,運用的過程都是一樣的。


推薦閱讀:
相关文章