Jena Fuseki 101
前言
正如其承诺的那样
Expose your triples as a SPARQL end-point accessible over HTTP. Fuseki provides REST-style interaction with your RDF data.
Fuseki提供了可通过HTTP访问SPARQL终端,那么它应该实现RDF存储、CRUD等事务性操作、同时兼容W3C SPARQL 1.1建议(http://www.w3.org/TR/2012/PR-sparql11-overview-20121108/)。
本文记录Fuseki的启动、如何导入数据、在Fuseki中执行SPARQL查询和更新,以及如何以编程方式实现Fuseki中SPARQL查询和更新。
内容
1 运行Fuseki
2 准备数据
3 执行SPARQL查询
4 执行SPARQL更新
5 编程方式实现SPARQL查询和更新
6 待考察问题
1 运行Fuseki
版本jena-fuseki-1.0.1
解压到目录${FUSEKI},在该目录下运行
java -jar fuseki-server.jar –config=config-tdb.ttl
运行输出:

2 准备数据
数据仍用Jena TDB API without Assembler(http://www.cnblogs.com/zhoujiagen/p/3647783.html)中的graph.owl
Fuseki Web管理界面登录(http://localhost:3030)

点击Control Panel进入Fuseki服务管理,
选择数据集/data,进入Fuseki Query界面:

选择文件(graph.owl)上传。
3 执行SPARQL查询
在SPARQL Qeury中输入查询语句
PREFIX rdf: -rdf-syntax-ns#>
PREFIX owl: /owl#>
PREFIX xsd: /XMLSchema#>
PREFIX rdfs: /rdf-schema#>
PREFIX graph: <http://www.nosql.com/graph#>
SELECT ?friend
WHERE { graph:Martin graph:friend ?friend }
点击Get Results,

4 执行SPARQL更新
在SPARQL Qeury中输入更新语句
PREFIX graph: <http://www.nosql.com/graph#>
INSERT DATA
{
graph:Martin graph:friend graph:ZhouJiaGen .
}
点击Perform update后,再次执行查询:

5 编程方式实现SPARQL查询和更新
下面以自说明的代码说明如何通过编程方式执行Fuseki中RDF数据的查询和更新
package arq;
import static util.Constants.NEWLINE;
import org.apache.jena.fuseki.http.UpdateRemote;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.update.UpdateFactory;
import com.hp.hpl.jena.update.UpdateRequest;
public class SPARQLUsingFuseki {
static final String PREFIX = "graph";
static final String NS = "http://www.nosql.com/graph#";
public static void main(String[] args) {
sparqlUpdate();
}
@SuppressWarnings("deprecation")
static void sparqlUpdate() {
String update = "";
StringBuilder sb = new StringBuilder();
sb.append("PREFIX graph: <http://www.nosql.com/graph#>").append(NEWLINE).append(" INSERT DATA").append(NEWLINE).append("{").append(NEWLINE)
.append("graph:Martin graph:friend graph:ZhouJiaGen2 .").append(NEWLINE).append("}");
update = sb.toString();
UpdateRequest request = UpdateFactory.create(update);
UpdateRemote.execute(request, "http://localhost:3030/data/update");
}
// / output:
// http://www.nosql.com/graph#Pramod
static void sparqlQuery() {
// 准备SPARQL查询
StringBuilder sb = new StringBuilder();
sb.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>").append(NEWLINE).append("PREFIX owl: <http://www.w3.org/2002/07/owl#>")
.append(NEWLINE).append("PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>").append(NEWLINE)
.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>").append(NEWLINE).append("PREFIX foaf: <http://xmlns.com/foaf/0.1/>")
.append(NEWLINE).append("PREFIX myfoaf: <http://blog.sina.com.cn/zhoujiagenontology/helloworld.owl#>").append(NEWLINE)
.append("PREFIX " + PREFIX + ": " + "<" + NS + ">").append(NEWLINE);
sb.append("SELECT ?friend WHERE { graph:Martin graph:friend ?friend }");
String service = "http://localhost:3030/data/query";// http://localhost:3030/<<dataset>>/query
String query = sb.toString();
QueryExecution queryExecution = QueryExecutionFactory.sparqlService(service, query);
sparqlHelp(queryExecution, "?friend");
}
static void sparqlHelp(QueryExecution queryExecution, String valueLabel) {
ResultSet rs = queryExecution.execSelect();
while (rs.hasNext()) {
QuerySolution qs = rs.nextSolution();
RDFNode name = qs.get(valueLabel);
if (name != null) {
System.out.println(name.toString());
} else {
System.out.println("Not found!");
}
}
queryExecution.close();
}
}
6 待考察问题
(1) 服务器和数据集的配置方法
(2) 如何将查询出的RDF数据与推理机结合
一种简单的思路是直接将推理后的结果存入Fuseki数据集,但这种方式无法区分断言数据和推理后数据;
另一种方法还是将Schema与数据分开,推理只对这部分查询出来的数据执行。
(3) SPARQL查询语言的语法和用例
Jena Fuseki 101的更多相关文章
- python使用rdflib创建rdf,在jena fuseki上执行SPARQL查询
建立并启动jena fuseki服务 参考:https://www.cnblogs.com/bincoding/p/11223372.html 使用rdflib创建rdf文件 import rdfli ...
- 搭建Jena Fuseki并执行SPARQL查询
1. 下载Jena Fuseki:http://jena.apache.org/download/index.cgi 2. 运行服务 windows解压后双击fuseki-server.bat lin ...
- Apache Jena Fuseki使用
下载Apache Jena Fuseki 先从apache官网下载fuseki压缩包.然后解压到目标文件夹. apache官网:http://jena.apache.org/download/ 这里我 ...
- Jena Fuseki 102
Version Fuseki v1 Fuseki v2 since Jena 2.13.0 Both v1 and v2 are active and maintained.[2015/06/29] ...
- Jena TDB 101 Java API without Assembler
Update on 2015/05/12 ongoing tutorials site on https://github.com/zhoujiagen/semanticWebTutorialUsin ...
- Jena Fuseki安装完成后不能添加数据库
问题描述:安装Jena成功后可以进入管理页面,无法通过界面选择和查询数据 解决方案: 进入 apache-jena-fuseki-3.12.0\run 修改 shiro.ini 配置文件 注释 /$/ ...
- Jena+fuseki
1.下载apache-jena-3.1.0.tar.gz,这个可以将ttl三元组文件或者xml文件加载 进入bin目录,执行./tdbloader2 --loc /path/for/database ...
- Outline of Apache Jena Notes
1 description 这篇是语义网应用框架Apache Jena学习记录的索引. 初始动机见Apache Jena - A Bootstrap 2 Content 内容组织基本上遵循Jena首页 ...
- Jena TDB 102
1 Introduction TDB is a RDF storage of Jena. official guarantees and limitations TDB support full ra ...
随机推荐
- 关于SQLite作业
--查询Student表中的所有记录的Sname.Ssex和Class列.SELECT sname,ssex,class from Student --查询教师所有的单位即不重复的Depart列.SE ...
- CentOS 6.5搭建PPTP VPN服务器
VPN是虚拟专用网络(Virtual Private Network)的缩写,VPN有多种分类方式,包括PPTP.L2TP.IPSec等,本文配置的VPN服务器是采用PPTP协议的,PPTP是在PPP ...
- C#编写最小化时隐藏为任务栏图标的 Window appllication.
1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小 ...
- 06-scanf函数
本文目录 变量的内存分析 scanf函数 回到顶部 一. 变量的内存分析 1. 字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. 1> 内存以“字节为单 ...
- android中的HttpURLConnection和HttpClient实现app与pc数据交互
自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和H ...
- Innodb引擎 compact模式下元组的磁盘存储结构
可变字符串长度:可变字符串长度: null vector 元组头(5个字节) 主键 trx id (6个字节) rollback pointer( 7个字节 ) 可变字符串 可变字符串 有了这个后 ...
- git: No refs in common and none specified; doing no
用gitolite新建项目,clone后首次push,可能会出现: $ git push No refs in common and none specified; doing nothing ...
- uva 1658(最小费用最大流)
题意:一个带权有向图,求起点到终点的两条路径权值之和最小,且两条路径没有公共点(除起点,终点): 分析:拆点法,将u拆成u和u',u-u'容量为1,费用为0,这样就能保证每个点只用一次,起点s-s'容 ...
- 使用Jsoup 抓取页面的数据
需要使用的是jsoup-1.7.3.jar包 如果需要看文档我下载请借一步到官网:http://jsoup.org/ 这里贴一下我用到的 Java工程的测试代码 package com.javen ...
- enmo_day_01
OCP : 三门,sql, 管理一,管理二 VUE 考试中心 OCM : 2天,5年经验 11g grid 12c cloud 个人技术博客 itpub, csdn, 51blog 自己买主机,域名, ...