访问请移步至 https://www.qingdujun.com/ ,这里有能“击穿”平行宇宙的乱序并行字节流…
在阅读《实践篇(四):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
)。配置的主要解析过程为,
s
e
r
v
i
c
e
>
d
a
t
a
s
e
t
>
d
e
f
a
u
l
t
G
r
a
p
h
>
i
n
f
M
o
d
e
l
>
{
j
a
:
r
e
a
s
o
n
e
r
>
r
u
l
e
s
.
t
t
l
j
a
:
b
a
s
e
M
o
d
e
l
>
t
d
b
service>dataset>defaultGraph>infModel> \begin{cases} ja:reasoner & > rules.ttl\\ ja:baseModel & > tdb \end{cases}
service>dataset>defaultGraph>infModel>{ja:reasonerja:baseModel>rules.ttl>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
更多阅读
[1] d2rq-0.8.1工具构建RDF模型
[2] 关于jena-fuseki SPARQL query版本问题的解决方案
附录
我注意到:原来作者在本体Ontology.ttl
中定义了Comedian类。并且,在InfModel中加载了它——ontology.ttl
。但是,这些操作是否必要?值得商榷。我在官网上没见到这样的写法。
定义的Comedian类:
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