【知识图谱】06推理功能(使用Jena+Fuseki)

目录

1、准备工作

2、实现推理

2.1、生成nt文件

2.2、生成TDB数据

2.3、初始化Fuseki环境

2.4、配置FUSEKI文件

2.5、FUSEKI推理机


1、准备工作

jena和fuseki下载链接:

JENA-3.17: http://jena.apache.org/download/index.cgi

FUSEKI-3.16:https://repo1.maven.org/maven2/org/apache/jena/apache-jena-fuseki/3.16.0/

下载文件如下图:

FUSEKI下载这个版本:

当然,你也可以选择你喜欢的版本:https://repo1.maven.org/maven2/org/apache/jena/apache-jena-fuseki/

解压到任意位置,然后配置环境变量:

先建立JENA_HOME变量和FUSEKI_HOME:

再增加环境变量:

环境配置完成。

2、实现推理

2.1、生成nt文件

04节谈到过生成ttl格式的mapping关系文件,现在要利用生成的ttl文件,进一步生成NT(N-TRIPLE)格式的RDF文件,进入到d2rq的目录下,使用如下命令:

dump-rdf.bat -o kg_movie.nt kg_movie_map.ttl

在同级目录下,kg_movie.nt就是我们生成的目标文件。

2.2、生成TDB数据

apeach jena使用TDB存储数据,因此我们需要生成TDB数据文件,首先在任意位置建立tdb文件夹,我这里演示建立在jena文件夹中,位置如下:

使用如下命令生成tdb数据文件:

tdbloader.bat --loc="C:\env\apache-jena-3.17.0\tdb" "C:\Program Files\d2rq-0.8.1\kg_movie.nt"

其中,tdbloader.bat位于apache-jena文件夹下的bat目录下,配置过环境后可以在任意位置使用命令,--loc参数表示建立的TDB数据库的位置,后面的参数表示为生成的nt文件的路径。

成功后如下图:

tdb目录下出现了对应生成的数据:

2.3、初始化Fuseki环境

这里解释一下为什么不用fuseki-3.17.0版本,我反复搞了一天,在自带的web端中无法显示内容,确认不是配置问题,因此放弃3.17.0版本,无法确定还有什么新问题,毕竟第一步就给折了,总之,先改用3.16.0.

进入之前解压的Fuseki目录下,运行其中的fuseki-server.bat脚本文件进行初始化配置,如下图:

成功后如下图:

此时目录新生成了个run文件夹,表示环境初始化成功:

2.4、配置FUSEKI文件

本系列03节中,曾经有使用过Protege生成过OWL实体文件,这里就要用到了,将其拷贝到生成的上一步生成的run/dabases/目录下,并将后缀从.owl改为.ttl,如下图:

(忽略图中的3.17哈,实际上后来我用的是3.16版本)

改完如下图:

在 run/configuration/目录下,新建一文件,命名{随意 }.ttl,例如我命名为:kg_movie_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_movie" ;
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> rdf:type ja:InfModel ;
ja:baseModel <#baseModel> ;
#ja:reasoner [
#			 #ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
#		     ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
#		     ja:rulesFrom <file:///C:/env/apache-jena-fuseki-3.16.0/run/databases/rules.ttl> ;
#] ;
.
<#baseModel> rdf:type ja:UnionModel;
ja:subModel <#ontology>;
ja:rootModel <#tdbGraph>;
.

<#ontology> rdf:type ja:MemoryModel;
ja:content [ja:externalContent <file:///C:/env/apache-jena-fuseki-3.16.0/run/databases/kg_movie.ttl> ] ;
.

<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbdataset> ;
.

<#tdbdataset> rdf:type tdb:DatasetTDB ;
tdb:location "C:/env/apache-jena-3.17.0/tdb" ;
ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "1000" ] ;
.

具体配置修改内容见下图:

其中:

1、修改成项目数据库名称;

2、配置推理机,其中rules.ttl是我们建立的自定义规则推理机,如果不想用就用#号注释即可,这里先注释掉,待会再用推理机。

3、ontology文件的路径;

4、jena文件夹中建立的tdb文件夹的路径。

完成,再次启动fuseki-server.bat,ok如下图:

在web端打开localhost:3030:

输入我们需要查询的指令,记得引入依赖,这里务必引入kg_movie:

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

SELECT *
WHERE {
  ?x :actor_chName '周星驰'.
  ?x :hasActedIn ?o.
  ?o :movie_chName ?n.
}
LIMIT 100

效果如下图:

2.5、FUSEKI推理机

首先建立规则文件,进入xx目录下,这里创建名称为rules.ttl的文件:

编辑其内容:

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

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

这里建立了两个规则:

1、喜剧演员:一个演员参演过电影,电影又是喜剧类型,那么他就是喜剧演员,这里的Comedian是我们的推理类型。

2、取反规则:演员参演过,就一定有电影包含某个演员。 

编辑kg_movie_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_movie" ;
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> rdf:type ja:InfModel ;
ja:baseModel <#baseModel> ;
ja:reasoner [
			 #ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
		     ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
		     ja:rulesFrom <file:///C:/env/apache-jena-fuseki-3.16.0/run/databases/rules.ttl> ;
] ;
.
<#baseModel> rdf:type ja:UnionModel;
ja:subModel <#ontology>;
ja:rootModel <#tdbGraph>;
.

<#ontology> rdf:type ja:MemoryModel;
ja:content [ja:externalContent <file:///C:/env/apache-jena-fuseki-3.16.0/run/databases/kg_movie.ttl> ] ;
.

<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbdataset> ;
.

<#tdbdataset> rdf:type tdb:DatasetTDB ;
tdb:location "C:/env/apache-jena-3.17.0/tdb" ;
ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "1000" ] ;
.

其中,2位置是我们建立的规则文件路径,这里的#号全部删除了,保存文件。

重新运行 fuseki-server.bat,进入web输入推理查询:

查询hasActor如下:

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

SELECT *
WHERE {
  
  ?x :movie_chName '家有喜事'.
  ?x :hasActor ?o.
  ?o :actor_chName ?n.
}
LIMIT 100

效果:

查询喜剧演员:

键入:

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

SELECT *
WHERE {
  ?x rdf:type :Comedian.
  ?x :actor_chName ?n.

}
LIMIT 100

效果如下: 

完成(这一章还是花了点功夫的,配置那块各种出问题,就差去看fuseki源代码了)。

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
要安装 JenaFuseki,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了 Java Development Kit (JDK)。您可以在终端中运行 `java -version` 命令来检查 JDK 是否已经安装。 2. 接下来,前往 Apache Jena 的官方网站(https://jena.apache.org/)下载 Jena 的最新版本。解压下载的文件到您希望安装 Jena 的目录。 3. 配置 Jena 环境变量: - 在终端中打开 `.bashrc` 或 `.bash_profile` 文件(取决于您使用的操作系统和终端配置)。 - 添加以下行,将 `<path-to-jena>` 替换为您解压 Jena 的目录路径: ``` export JENA_HOME=<path-to-jena> export PATH=$JENA_HOME/bin:$PATH ``` 4. 保存并关闭文件。然后运行 `source` 命令以使环境变量生效: ``` source ~/.bashrc ``` 5. 确认 Jena 是否正确安装。在终端中运行 `riot --version` 命令,如果成功安装,则应该显示 Jena 的版本信息。 6. Fuseki 是基于 Jena 构建的一个 RDF 服务器。您可以从 Apache Jena 的官方网站(https://jena.apache.org/download/)下载 Fuseki 的最新版本。 7. 解压下载的 Fuseki 文件到您希望安装 Fuseki 的目录。 8. 配置 Fuseki 环境变量: - 在终端中打开 `.bashrc` 或 `.bash_profile` 文件。 - 添加以下行,将 `<path-to-fuseki>` 替换为您解压 Fuseki 的目录路径: ``` export FUSEKI_HOME=<path-to-fuseki> export PATH=$FUSEKI_HOME:$PATH ``` 9. 保存并关闭文件。然后运行 `source` 命令以使环境变量生效: ``` source ~/.bashrc ``` 10. 确认 Fuseki 是否正确安装。在终端中运行 `fuseki-server --version` 命令,如果成功安装,则应该显示 Fuseki 的版本信息。 现在,您已经成功安装了 JenaFuseki。您可以根据需要使用它们来处理和查询 RDF 数据。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值