配置Fuseki服务器管理知识图谱三元组
By 龙前尘
实验环境:Win8、apache-jena-fuseki-3.5.0
转载请注明地址:
http://blog.csdn.net/svenhuayuncheng/article/details/78829035
笔者按
当前阶段,无论在工业界还是学术界,知识图谱都是一个火热的话题。关于知识图谱的各种研究与应用,更是大量出现。存储与管理知识图谱,既是基础,也是关键。本文旨在探讨如何启动Fuseki服务,进行知识图谱三元组的存储和管理。在此抛砖引玉,交流经验,欢迎大家探讨。
Apache Jena Fuseki是一个SPARQL服务,其可以作为操作系统服务、Java网络应用(WAR包调用)或独立服务器等不同形式被用户使用。Fuseki通过Apache Shiro保证安全性,并且提供了一个用户接口用以服务监控和管理。
Fuseki是基于SPARQL 1.1版本的协议,以及SPARQL图存储协议,进行查询和修改操作。Fuseki是与TDB高度集成的服务,不仅集成了Jena文本查询和Jena空间查询,还提供了一个稳健的业务持久化存储层。对于其他RDF查询和存储系统来说,Fuseki可被用来提供协议引擎1。
2.1 前置工作
Fuseki目前为Fuseki2版本,之前的Fuseki1版本已不再更新。Fuseki2需要配置JAVA 8,在使用之前,需要先确认并配置相关环境,把JAVA 8配置好。
2.2 软件下载
在Jena官网下载apache-jena-fuseki-3.5.0.zip,解压。
2.3 服务启动
这里有两种方法启动Fuseki服务。
命令行直接输入运行参数
在apache-jena-fuseki-3.5.0文件夹下,用命令行输入命令,启动Fuseki服务:
java -jar fuseki-server.jar --update --loc G:\apache-jena-fuseki-3.5.0\run\databases\DB /ds
其中,“–update”表示允许修改;“–loc”后面的参数,表示存放Fuseki数据的文件夹路径; “/ds”表示Fuseki服务的名字,这里设置为”ds”,且Fuseki服务默认使用3030端口访问,之后可以通过http://localhost:3030/ds访问Fuseki服务和相关资源2。
Fuseki默认端口是3030,可以通过“fuseki-server –port= PORT_NUMBER”修改所使用的端口,如:
java -jar fuseki-server.jar --port=3031 --update --loc G:\apache-jena-fuseki-3.5.0\run\databases\DB /ds
配置文件中修改运行参数
一般在初次启动Fuseki服务后(可用前一种命令行的方式运行),apache-jena-fuseki-3.5.0\run\configuration文件夹中会生成.ttl配置文件,可以对这个文件进行修改,来配置服务。
将configuration中所有无用的.ttl配置文件全部删除,只保留一个config.ttl文件,并对其修改参数,修改后文件如下:
# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0
@prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
## ---------------------------------------------------------------
## Updatable in-memory dataset.
<#service1> rdf:type fuseki:Service ;
# URI of the dataset -- http://host:port/ds
fuseki:name "ds" ; # http://host:port/ds
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:serviceQuery "query" ; # SPARQL query service (alt name)
fuseki:serviceUpdate "update" ; # SPARQL update service
fuseki:serviceUpload "upload" ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore "data" ; # SPARQL Graph store protocol (read and write)
fuseki:serviceReadGraphStore "get" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#dataset> ; # Dataset infromation
.
## In-memory, initially empty.
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "G:/apache-jena-fuseki-3.5.0/run/databases/DB" ; # <----- THIS LINE -->
# Query timeout on this dataset (1s, 1000 milliseconds)
ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "1000" ] ;
# Make the default graph be the union of all named graphs.
## tdb:unionDefaultGraph true ;
其中,fuseki:name
表示Fuseki服务的名字,这里设置为”ds”,且Fuseki服务默认使用3030端口访问,之后可以通过http://localhost:3030/ds
访问Fuseki服务和相关资源。
此外,需要在文件最后添加dataset的信息。tdb:location
表示存放Fuseki数据的文件夹路径。
设置好config.ttl文件后,在apache-jena-fuseki-3.5.0文件夹下,用命令行输入:fuseki-server.bat
,可启动Fuseki服务。
这种方法,优点在于启动方便,不用在命令行输入那么多参数;缺点就是config.ttl文件需要慎重管理,一旦信息被修改,那么启动服务可能会出错。
无论用哪种方法运行后,会在fuseki-3.5.0的databases中生成一个DB文件夹。该文件夹就是Fuseki储存和管理的数据库件所在。
Fuseki有一个好处,是可以结合TDB一起使用。可以先将rdf三元组持久化到TDB中,再用Fuseki服务来处理TDB数据。对TDB数据陌生的同学,可以先阅读笔者的文章:使用Jena-TDB存储RDF本体、知识图谱文件。
这里,可以将TDB中的数据库文件,全部复制到当前DB文件夹下覆盖,这样就可以使用Fuseki管理TDB数据。而原始TDB数据文件不会被Fuseki服务修改,可留作备份用。
2.4 Fuseki服务界面
访问地址:http://localhost:3030
,可以看到以下界面。
其中可以看到自建的ds数据源,并能够通过GUI进行SPARQL查询、更新等。
2.5 Fuseki测试
2.5.1 添加三元组操作
点击query,进入ds数据源的query界面,如下图。
在SPARQL ENDPOINT
一栏,填入:
http://localhost:3030/ds/update
,表示要更新数据。
输入以下sparql命令,可以添加记录。
PREFIX rdf: .w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: .w3.org/2000/01/rdf-schema#>
PREFIX ex: .org/>
PREFIX zoo: .org/zoo/>
PREFIX owl: .w3.org/2002/07/owl#>
INSERT DATA {
ex:dog1 rdf:type ex:animal .
ex:cat1 rdf:type ex:cat .
ex:cat rdfs:subClassOf ex:animal .
zoo:host rdfs:range ex:animal .
ex:zoo1 zoo:host ex:cat2 .
ex:cat3 owl:sameAs ex:cat2 .
}
运行后,添加成功。
2.5.2 查询三元组操作
在SPARQL ENDPOINT
一栏,填入:
http://localhost:3030/ds/sparql
,表示要查询数据。
输入以下sparql命令,可以进行查询。
PREFIX rdf: .w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: .w3.org/2000/01/rdf-schema#>
PREFIX ex: .org/>
SELECT * WHERE {
?sub a ex:animal
}
LIMIT 10
该查询表示找到所有类别为animal的实体。
也可以输入以下查询命令,即查找所有三元组,上限为25条:
SELECT ?subject ?predicate ?object
WHERE {
?subject ?predicate ?object
}
LIMIT 25
2.5.3 修改三元组操作
在SPARQL ENDPOINT
一栏,填入:
http://localhost:3030/ds/update
,表示要更新数据。
输入以下sparql命令,可以修改记录。
PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA
{ <http://example/book3> dc:title "A new book" ;
dc:creator "A.N.Other" .
};
DELETE DATA
{ <http://example/book3> dc:title "A new book". };
INSERT DATA
{ <http://example/book3> dc:title "Fundamentals of Compiler Design". }
即先删除某个三元组,再添加新的三元组,从而完成三元组的修改。
由图可见,book3的书名A new book
已经被改为Fundamentals of Compiler Design
。
以上,为使用Fuseki服务管理知识图谱三元组的一些经验。此外,由于TDB文件为RDF三元组的持久化文件, 故结合使用Fuseki与TDB,可以方便地检索和管理知识图谱,为基于知识图谱衍生的各种应用,提供一个可靠而安全的基础。