jena fuseki 自定義推導規則(OWLFBRuleReasoner推理機)

在閱讀《實踐篇(四):Apache jena SPARQL endpoint及推理》 一文後, 發現最新版本 JENA FUSEKI (v3.8.0)自定義推導功能無法正常使用。

造成該問題,主要兩大緣由:

其一,推導規則(rules.ttl)需要用逗號隔開。

@prefix : <http://www.kgdemo.com#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

[ruleComedian: (?p :hasActedIn ?m), (?m :hasGenre ?g), (?g :genreName '喜劇') 
-> (?p rdf:type :Comedian)]
[ruleInverse: (?p :hasActedIn ?m) -> (?m :hasActor ?p)]

其二,配置問題。以下爲查閱官網後,重寫的配置文件(fuseki_conf.ttl)。配置的主要解析過程爲,

service>dataset>defaultGraph>infModel>{ja:reasoner>rules.ttlja:baseModel>tdb
@prefix tdb:   <http://jena.hpl.hp.com/2008/tdb#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .

<#service1> rdf:type fuseki:Service ;
    fuseki:name                       "kg_demo_movie" ;     
    fuseki:serviceQuery               "sparql", "query" ; 
    fuseki:serviceReadGraphStore      "get" ;
    fuseki:dataset                   <#dataset> ;
    .

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

<#modelInf> rdf:type ja:InfModel ;
    ja:reasoner [ ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ; 
                  ja:rulesFrom <file:///D:/AppsPath/apache-jena-fuseki-3.8.0/run/databases/rules.ttl> ] ;
    ja:baseModel <#g> ;
    .

<#g> rdf:type tdb:GraphTDB ;
    tdb:location "E:/data/tdb" ;
    tdb:unionDefaultGraph true ; 
    .

注意,對於一些簡單的推導的話,不需要自定義推導規則,直接使用OWLFBRuleReasoner即可。

ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] ;

最後,附上查詢SPARQL內容,訪問 http://localhost:3030 複製粘貼以下代碼,即可完成查詢。

PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?n WHERE {
?x rdf:type :Comedian.
?x :personName ?n.
}
limit 10


©qingdujun
2018-9-7 於 北京 海淀

更多閱讀
[1] d2rq-0.8.1工具構建RDF模型
[2] 關於jena-fuseki SPARQL query版本問題的解決方案


附錄

我注意到:原來作者在本體Ontology.ttl中定義了Comedian類。並且,在InfModel中加載了它——ontology.ttl。但是,其實這些操作都是不必要的。我在官網上也沒見到這樣的寫法。

ja:content [ja:externalContent <file:.../databases/ontology.ttl> ] ;
#################################################################
#    Classes
#################################################################
###  http://www.kgdemo.com#Comedian
:Comedian rdf:type owl:Class ;
          rdfs:subClassOf :Person .

我仔細分析了一下各種文件的生成過程,

Step 1: kg_demo_movie_mapping.ttl
下載D2RQ,進入其目錄,運行下面的命令生成默認的mapping文件:

generate-mapping -u root -o kg_demo_movie_mapping.ttl jdbc:mysql:///kg_demo_movie

Step 2: kg_demo_movie.nt
使用下面的命令將我們的數據轉爲RDF:

.\dump-rdf.bat -o kg_demo_movie.nt .\kg_demo_movie_mapping.ttl

Step 3: tdb
創建一個目錄(我這裏命名爲“tdb”)用於存放tdb數據。進入“apache-jena-X.X.X”文件夾的bat目錄,可以看到很多批處理文件,我們使用“tdbloader.bat”將之前我們的RDF數據以TDB的方式存儲。命令如下:

.\tdbloader.bat --loc="D:\apachejena\tdb" "D:\d2rq\kg_demo_movie.nt"

小結:大概可以看到,tdb是與kg_demo_movie_mapping.ttl有關。

References:
[1] https://jena.apache.org/documentation/fuseki2/fuseki-configuration.html
[2] https://gloucklegnou.github.io/MICA/TestInferences.html
[3] https://stackoverflow.com/questions/52204735/no-data-available-in-table-when-i-customize-the-rules-of-jena-fuseki
[4] https://jena.apache.org/documentation/tdb2/tdb2_fuseki.html
[5] https://blog.csdn.net/u011801161/article/details/79185464

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章