【知识图谱】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源代码了)。

### Apache Jena Fuseki 的安装教程 #### 准备工作 在 Windows 环境下安装 Apache Jena Fuseki 需要先确认系统已安装 Java 运行环境 (JRE 或 JDK),因为 Fuseki 是基于 Java 开发的工具。可以通过命令 `java -version` 来验证是否已经安装了合适的 Java 版本。 --- #### 下载 Apache Jena Fuseki 访问官方下载页面 https://jena.apache.org/download/index.cgi 并找到最新的稳定版 Fuseki 压缩包进行下载[^3]。通常文件名类似于 `apache-jena-fuseki-<version>.zip`,其中 `<version>` 表示当前版本号。 --- #### 解压压缩包 将下载好的 ZIP 文件解压到目标目录。例如,可以选择路径 `C:\Program Files\Apache-Jena-Fuseki` 或其他适合的位置。解压完成后会看到如下结构: ```plaintext . ├── bin/ │ ├── fuseki-server.bat # 启动脚本(Windows) │ └── ... ├── lib/ # 存放依赖库 └── README.txt # 使用说明文档 ``` --- #### 设置环境变量 为了方便调用,建议设置系统的 PATH 变量以包含 Fuseki 执行文件所在的路径。具体操作步骤为: 1. 将 `bin` 目录所在位置加入到系统的 PATH 中。 2. 测试是否成功通过打开 CMD 输入以下命令来启动服务: ```bash fuseki-server --help ``` 如果显示帮助信息,则表示配置无误[^4]。 --- #### 初始化并运行服务器 执行以下批处理文件即可快速启动默认的服务端口 3030 上监听请求: ```batch cd C:\path_to_fuseki_directory\bin .\fuseki-server ``` 此时应该能看到控制台打印日志表明服务正在正常运作中[^1]。 对于更复杂的场景比如加载已有数据集或者自定义命名空间等需求,可以利用额外参数指定相应的 TDB 数据存储地址或者其他选项。例如创建一个新的 dataset 名称为 mydata 能够这样实现: ```batch .\fuseki-server --mem /mydata ``` 上述指令会在内存模式下建立名为 `/mydata` 的 SPARQL 查询接口[^2]。 --- #### 访问 Web 控制面板 一旦 Fuseki 成功部署完毕之后,默认情况下可通过浏览器输入 URL 地址 http://localhost:3030/ 查看图形化管理界面,在这里能够完成诸如上传 RDF 文档、查询语句测试等一系列功能。 ---
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值