前言

正如其承诺的那样

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的更多相关文章

  1. python使用rdflib创建rdf,在jena fuseki上执行SPARQL查询

    建立并启动jena fuseki服务 参考:https://www.cnblogs.com/bincoding/p/11223372.html 使用rdflib创建rdf文件 import rdfli ...

  2. 搭建Jena Fuseki并执行SPARQL查询

    1. 下载Jena Fuseki:http://jena.apache.org/download/index.cgi 2. 运行服务 windows解压后双击fuseki-server.bat lin ...

  3. Apache Jena Fuseki使用

    下载Apache Jena Fuseki 先从apache官网下载fuseki压缩包.然后解压到目标文件夹. apache官网:http://jena.apache.org/download/ 这里我 ...

  4. Jena Fuseki 102

    Version Fuseki v1 Fuseki v2 since Jena 2.13.0 Both v1 and v2 are active and maintained.[2015/06/29] ...

  5. Jena TDB 101 Java API without Assembler

    Update on 2015/05/12 ongoing tutorials site on https://github.com/zhoujiagen/semanticWebTutorialUsin ...

  6. Jena Fuseki安装完成后不能添加数据库

    问题描述:安装Jena成功后可以进入管理页面,无法通过界面选择和查询数据 解决方案: 进入 apache-jena-fuseki-3.12.0\run 修改 shiro.ini 配置文件 注释 /$/ ...

  7. Jena+fuseki

    1.下载apache-jena-3.1.0.tar.gz,这个可以将ttl三元组文件或者xml文件加载 进入bin目录,执行./tdbloader2 --loc /path/for/database ...

  8. Outline of Apache Jena Notes

    1 description 这篇是语义网应用框架Apache Jena学习记录的索引. 初始动机见Apache Jena - A Bootstrap 2 Content 内容组织基本上遵循Jena首页 ...

  9. Jena TDB 102

    1 Introduction TDB is a RDF storage of Jena. official guarantees and limitations TDB support full ra ...

随机推荐

  1. Oracle的排序和限制条件(order by 和where)

    1.Order by 子句的使用 select column.... from .... order by ... 1) Order by子句在整个 select语句中的位置: 始终位于最后 2) o ...

  2. html5 drag and drop

    注:链接.图片默认是draggable的. mousemove在整个拖放的过程中不会被触发. dragStart设置: e.dataTransfer.effectAllowed = "mov ...

  3. 《BI项目笔记》增量ETL数据抽取的策略及方法

    增量抽取 增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据.在ETL使用过程中.增量抽取较全量抽取应用更广.如何捕获变化的数据是增量抽取的关键.对捕获方法一般有两点要求:准确性,能够将 ...

  4. iOS Question

    Q1: dyld: Library not loaded: @rpath/libswiftCore.dylib 1. 退出 Xcode2. 重启电脑3. 找到 这个 DerivedData 文件夹 删 ...

  5. UiAutomator环境搭建及详细操作

    一.环境搭建 1.1 必备条件 JDK SDK(API高于15) Eclipse(安装ADT插件) ANT(用于编译生成的jar) 安装JDK并添加环境变量 1.2 详细步骤 1.安装JDK并添加环境 ...

  6. cxf的soap风格+spirng4+maven 客户端

    上篇博客介绍了,cxf的soap风格的服务端,现在我们写客户端来调用 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...

  7. Python 去剑式

    Python 去剑式 种种变化,用以体演总诀.共有三百六十种变化. 用以破解普天下各门各派的剑法.「破剑式」虽只一式,但其中于天下各门各派剑法要义兼收并蓄:虽说「无招」却是以普天下剑法之招数为根基,因 ...

  8. cookie 路径问题

    Path – 路径.指定与cookie关联的WEB页.值可以是一个目录,或者是一个路径.如果http://www.zdnet.com/devhead /index.html 建立了一个cookie,那 ...

  9. 转: javascript实现全国城市三级联动菜单代码

    <html> <head> <title>js全国城市三级联动菜单代码_B5教程网</title> <meta http-equiv=" ...

  10. NSRunLoop概述和原理

    1.什么是NSRunLoop?我们会经常看到这样的代码: - (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNew ...