前言:最近在使用jena开发知识图谱,总结一下最近的使用过程。
文末有 apache-jena-3.6.0,Apache-jen.a-fuseki-3.6.0以及d2rq-0.8.1tar
文件。因为高版本的需要相应的java版本,对我其他软件不友好,所以以3.6版本为例子:
jena在windows中配置以及使用戳这里,优质博文
一:java环境变量设置。
二:配置jena
1. 下载看文末
2. 将两个文件房子合适位置,我是跟项目文件放在一起方便操作
解压:tar -zxvf apache-jena-3.6.0.tar.gz
解压:tar -zxvf apache-jena-fuseki-3.6.0.tar.gz
3. 配置环境变量。我是在 ~/.bash_profile
中进行环境变量设置
code: vim ~/.bash_profie
文末添加:
export JENA_HOME=/root/yhz/jena/apache-jena-3.6.0
export PATH=$JENA_HOME/bin:$PATH
注: 这里的路径根据自己实际情况来制定。
激活:`source ~/.bash_profile`
查看:sparql,如果出现No query string or query file,证明配置成功。
三:使用jena和jena-fuseki
1. 数据准备
我用的是mysql,数据的话这里就不展示了,可以参考windows连接,这里面的数据过程与这个差不多一样。
2. 使用D2RQ进行数据转换
首先进入目录,运行命令,生成默认mapping文件
generate-mapping -u root -p "****" -o D:\AI_Work_Demo\kg_demo_test\kg_demo_movie_mapping.ttl jdbc:mysql:///kg_demo_movie
这里的输出位置可以随意指定。
注意:-o
这里输出路径位置根据实际情况
3. 对生成的默认mapping
文件进行参数修改,特别是文件位置
这里注意的是,文件生成的位置为 指定的位置。
vim kg_demo_movie_mapping.ttl
进行更改
这里修改规则其实,跟RDFs的语法类似,将类与属性都要写上。
4. 使用下面的命令将我们的数据转换为RDF
./dump-rdf -o /root/yhz/kg_demo_test/kg_demo_movie.nt ./kg_demo_movie_mapping.ttl
注意实验:这一步的地址有点问题。
5. 与计算机进行交互,有两种方式
两种方式都要从这一步开始。
进入d2rq
目录,使用下面命令启动 D2R Server
d2r-server /root/yhz/kg_demo_testkg_demo_movie_mapping.ttl
这一步主要目的是生成相应的tdb数据
两种方式:
方式一: 浏览器中查询。
1. 进入浏览器操作
默认端口是2020,在浏览器输入“http://服务器地址:2020/”
方式二: 通过脚本进行 (以知乎大佬的代码为例子)
from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://服务器地址:2020/sparql")
sparql.setQuery("""
PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?n WHERE {
?s rdf:type :Person.
?s :personName '巩俐'.
?s :hasActedIn ?o.
?o :movieTitle ?n.
?o :movieRating ?r.
FILTER (?r >= 7)
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
print(result["n"]["value"])
四:从这里说明一下:使用jena上面的两种交互方式可以跳过直接从这一步开始,我从头一步一步操作主要是为了验证环境,了解流程。
6. 使用Apache Jena 推理
创建一个文件夹(根据需要命名,这里创建了一个tdb文件夹),进入‘Apache-Jena-3.6’文件夹里bat文件夹,使用 tdbloaser
首先:将之前我们得到的RDF数据以TDB的方式存储。为下面的启动fuseki-server
做准备
使用下面命令:(这里巨坑与windows有去别,很容易踩坑)
tdbloader --loc="/root/yhz/kg_demo_test/jena_linux/tdb" "/root/yhz/kg_demo_test/kg_demo_movie.nt"
“--loc”
指定tdb
存储的位置,即刚才我们创建的文件夹;
第二个参数是由Mysql数据转换得到的RDF数据。
7. 进入“apache-jena-fuseki-X.X.X”文件夹**,运行“./fuseki-server --config=ConfigFile
”,然后退出
程序会在当前目录自动创建run
文件。
8. 将我们的本体文件“ontology.owl
”移动到“run
”文件夹下的“databases
”文件夹中,并将“owl
”后缀名改为“ttl
”(这里的相关文件都可以在windows方式中知乎大佬项目中下载的到,或者自己编写)
9. 在“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_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> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
#本体文件的路径 TODO: 路径自定
ja:content [ja:externalContent <file:root/yhz/jena/apache-jena-fuseki-3.5.0/run/databases/ontology.ttl> ] ;
#启用OWL推理机
ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] .
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbDataset> ;
.
# TODO 路径
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "/root/yhz/jena/tdb" ;
10. 再次运行
./fuseki-server
注意:多次运行的时候会出现报错这个时候可以先删除 tdb 文件中的所有文件
进入tdb文件夹操作命令如下: rm -f *
11. web 交互网址:
浏览器访问“http://服务器地址:3030/
”
脚本进行交互:
PREFIX : <http://www.kgdemo.com#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT * WHERE {
?x :movieTitle '功夫'.
?x ?p ?o.
}
12. 进行问答交流
到Jena_sparql_endpoint.py
修改endpoint_url="http://服务器地址:3030/kg_demo_movie/query"
运行 query_main.py
文件,
这里的url进行修改。
链接:https://pan.baidu.com/s/1By5q8246b2Z4IALCX9uq8g
提取码:w68r
–来自百度网盘超级会员V5的分享