配置Fuseki服务器管理知识图谱三元组

配置Fuseki服务器管理知识图谱三元组
By 龙前尘

实验环境:Win8、apache-jena-fuseki-3.5.0

转载请注明地址:
http://blog.csdn.net/svenhuayuncheng/article/details/78829035


笔者按
当前阶段,无论在工业界还是学术界,知识图谱都是一个火热的话题。关于知识图谱的各种研究与应用,更是大量出现。存储与管理知识图谱,既是基础,也是关键。本文旨在探讨如何启动Fuseki服务,进行知识图谱三元组的存储和管理。在此抛砖引玉,交流经验,欢迎大家探讨。

1. 何为Fuseki

Apache Jena Fuseki是一个SPARQL服务,其可以作为操作系统服务、Java网络应用(WAR包调用)或独立服务器等不同形式被用户使用。Fuseki通过Apache Shiro保证安全性,并且提供了一个用户接口用以服务监控和管理。

Fuseki是基于SPARQL 1.1版本的协议,以及SPARQL图存储协议,进行查询和修改操作。Fuseki是与TDB高度集成的服务,不仅集成了Jena文本查询和Jena空间查询,还提供了一个稳健的业务持久化存储层。对于其他RDF查询和存储系统来说,Fuseki可被用来提供协议引擎1

2. 实验过程

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,可以看到以下界面。
Fuseki主界面
其中可以看到自建的ds数据源,并能够通过GUI进行SPARQL查询、更新等。

2.5 Fuseki测试
2.5.1 添加三元组操作
点击query,进入ds数据源的query界面,如下图。
query界面

SPARQL ENDPOINT一栏,填入:
http://localhost:3030/ds/update,表示要更新数据。
输入以下sparql命令,可以添加记录。

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:   <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex:   <http://example.org/>
PREFIX zoo:   <http://example.org/zoo/>
PREFIX owl: <http://www.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: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex: <http://example.org/>
SELECT * WHERE {
  ?sub a ex:animal
}
LIMIT 10

该查询表示找到所有类别为animal的实体。

最终找到一个实体:
查询示例1

也可以输入以下查询命令,即查找所有三元组,上限为25条:

SELECT ?subject ?predicate ?object
WHERE {
  ?subject ?predicate ?object
}
LIMIT 25

结果如下:
查询示例2

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,可以方便地检索和管理知识图谱,为基于知识图谱衍生的各种应用,提供一个可靠而安全的基础。

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值