您的位置:首页 > 其它

知识图谱构建5——Jena 和 Fuseki安装与SPARQL查询

2019-03-18 22:00 2983 查看

Jena 和 Fuseki安装与SPARQL查询

简介

Apache Jena是一个开源的Java语义网框架(open source Semantic Web Framework for Java),用于构建语义网和链接数据应用。
架构图如下:

TDB:用于存储RDF的组件
Jena提供了RDFS、OWL和通用规则推理机
Fuseki:Jena提供的SPARQL服务器,也就是SPARQL endpoint

安装

下载地址如下:
http://jena.apache.org/download/index.cgi
http://central.maven.org/maven2/org/apache/jena/apache-jena-fuseki/3.8.0/

下载安装包解压到自己电脑目录下,进行环境配置即可:

  • 环境配置

    path的路径上增加:
%JENA_HOME%\bat;%JENA_HOME%\bin

基本使用

  • 将RDF数据转换以TDB的方式存储
tdbloader.bat --loc="F:\AZtools\apache-jena-3.10.0\tdb" "F:\AZtools\d2rq-0.8.1\kg_movie.nt"

注意:“–loc”指定tdb存储的位置;第二个参数是由Mysql数据转换得到的RDF数据。

  • 指定位置已经有了文件夹

  • tdb文件中已生成数据

  • 通过Fuseki进行开启服务
    进入fuseki目录,执行“fuseki-server.bat”,然后退出。程序会为我们在当前目录自动创建“run”文件夹。

    将我们的本体文件“kg_movie_ontology.owl”移动到“run”文件夹下的“databases”文件夹中,并将“owl”后缀名改为“ttl”。

    在“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_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> ;

#本体文件的路径
ja:content [ja:externalContent <file:///F:/AZtools/apache-jena-fuseki-3.8.0/run/databases/kg_movie_ontology.ttl> ] ;

#启用OWL推理机
ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] .

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

<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "F:/AZtools/apache-jena-3.10.0/tdb" ;
.
  • 再次执行“fuseki-server.bat”
    出现错误:
[2019-03-18 20:13:18] Server     INFO  Apache Jena Fuseki 3.8.0
[2019-03-18 20:13:18] Config     INFO  FUSEKI_HOME=F:\AZtools\apache-jena-fuseki-3.8.0\.
[2019-03-18 20:13:18] Config     INFO  FUSEKI_BASE=F:\AZtools\apache-jena-fuseki-3.8.0\run
[2019-03-18 20:13:18] Config     INFO  Shiro file: file://F:\AZtools\apache-jena-fuseki-3.8.0\run\shiro.ini
[2019-03-18 20:13:19] Config     INFO  Configuration file: F:\AZtools\apache-jena-fuseki-3.8.0\run\config.ttl
[2019-03-18 20:13:19] riot       WARN  [line: 5, col: 9 ] Bad IRI: <F:\AZtools\apache-jena-fuseki-3.8.0\run\config.ttl#> Code: 4/UNWISE_CHARACTER in PATH: The character matches no grammar rules of URIs/IRIs. These characters are permitted in RDF URI References, XML system identifiers, and XML Schema anyURIs.
[2019-03-18 20:13:19] Config     INFO  Load configuration: file:///F:/AZtools/apache-jena-fuseki-3.8.0/run/configuration/fuseki_conf.ttl
[2019-03-18 20:13:19] Server     ERROR Exception in initialization: Failed reading assembler description: java.nio.charset.MalformedInputException: Input length = 1
[2019-03-18 20:13:19] WebAppContext WARN  Failed startup of context o.e.j.w.WebAppContext@2289aca5{/,file:///F:/AZtools/apache-jena-fuseki-3.8.0/webapp/,UNAVAILABLE}
org.apache.jena.sparql.ARQException: Failed reading assembler description: java.nio.charset.MalformedInputException: Input length = 1

  • 解决方案
    找了一圈、尝试了好久也没有解决。。。。。
    暂时先放在这了。。。。。。。。。

  • 问题解决不了,可是还要往下走啊,只有手动来了:
    删除文件tdb,以及run文件
    执行“fuseki-server.bat”,如下

    在浏览器输入http://localhost:3030 ,结果如下:

  • 创建数据库

  • 上传数据

  • 选择RDF数据

  • 点击查询数据,以及显示的结果如下:

(补充)更正上面出现错误的方法

参考:https://www.jianshu.com/p/80de773c5f23
突然发现不需要更改owl本体文件,以及添加配置文件信息就可以进行创建数据库查询了,具体如下(很简单):

  • 将元组数据导入到TDB数据库中
    进入jena的目录下F:\AZtools\apache-jena-3.10.0运行命令:
tdbloader.bat --loc="F:\AZtools\apache-jena-3.10.0\tdb" "F:\AZtools\d2rq-0.8.1\kg_movie.nt"


结果:该tdb文件夹下已有数据

  • 运行fuseki服务器
    进入fuseki目录下,运行命令:
fuseki-server --loc=F:\AZtools\apache-jena-3.10.0\tdb /kg_movie

–loc的参数是上一步TDB数据库的路径
kg_movie是显示的数据库名

结果:fuseki目录下生成run文件

在浏览器输入http://localhost:3030
显示了数据库名kg_movie:

进行查询:

也可以得到如下效果:

参考:
[1]https://zhuanlan.zhihu.com/p/42773071
[2]https://zhuanlan.zhihu.com/p/33224431
[3]https://zhuanlan.zhihu.com/p/56449967

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: