使用Jena执行SPARQL的Select和Ask查询
使用Jena执行SPARQL的Select和ask查询
提供基本的接口和实现类,可在其他代码中直接调用
Select查询
接口
/**
* The interface Select dao.
* 本体模型数据操作 :Sparql的Select查询
*
* @author houzhiwei
* @date 2016年4月18日 下午5:16:26
*/
public interface SelectDao {
/**
* 执行select查询 同一个resultset只能被使用一次
*
* @param sparqlStr the sparql string
* @param model the model
* @return Json格式结果 string
*/
String execSelectJSON(String sparqlStr, Model model);
/**
* 执行select查询
*
* @param sparqlStr the sparql string
* @param model the model
* @return result set
* @author houzhiwei at 2016年4月28日下午9:42:48
*/
ResultSet execSelect(String sparqlStr, Model model);
/**
* 执行select查询
*
* @param sparqlStr the sparql string
* @param ds the ds
* @return result set
* @author houzhiwei at 2016年4月28日下午9:42:48
*/
ResultSet execSelect(String sparqlStr, Dataset ds);
/**
* 获取查询语句中查询变量(subject等)
*
* @param query the query
* @return string [ ]
* @author houzhiwei at 2016年1月15日上午11:43:51
*/
String[] getQueryVars(Query query);
/**
* 内部类。为本接口的实现类提供公共代码
*
* @author houzhiwei
*/
class BaseSelect {
/**
* Exec select json string.
*
* @param sparqlStr the sparql string
* @param model the model
* @return the string
*/
public String execSelectJSON(String sparqlStr, Model model)
{
try {
ResultSet results = execSelect(sparqlStr, model);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ResultSetFormatter.outputAsJSON(bout, results);//将结果输出为Json格式
return new String(bout.toByteArray(), "UTF-8");// 输出为Json字符串
} catch (Exception e) {
e.printStackTrace();
return e.getLocalizedMessage() + "\n 查询失败! 请检查SPARQL!";
}
}
/**
* Exec select result set.
*
* @param sparqlStr the sparql string
* @param model the model
* @return the result set
*/
public ResultSet execSelect(String sparqlStr, Model model)
{
Query query = QueryFactory.create(sparqlStr);
QueryExecution queryExec = QueryExecutionFactory.create(query, model);
ResultSet results = queryExec.execSelect();
return results;
}
/**
* Exec select result set.
*
* @param sparqlStr the sparql string
* @param ds the Dataset
* @return the result set
*/
public ResultSet execSelect(String sparqlStr, Dataset ds)
{
Query query = QueryFactory.create(sparqlStr);
QueryExecution queryExec = QueryExecutionFactory.create(query, ds);
ResultSet results = queryExec.execSelect();
return results;
}
/**
* Get query vars.
* 获取查询变量,若sparql中使用了 ?subject, 则有变量 subject
*
* @param query the query
* @return the string [ ]
*/
public String[] getQueryVars(Query query)
{
List<Var> vars = query.getProjectVars();
String[] varArr = new String[vars.size()];
for (int i = 0, len = vars.size(); i < len; i++) {
varArr[i] = vars.get(i).getVarName();
}
return varArr;
}
}
}
实现类
/**
* @author Houzw
* @Description: 执行SPARQL的Select查询
*/
@Service
public class SelectDaoImpl implements SelectDao
{
@Override
public String execSelectJSON(String sparqlStr, Model model)
{
return new BaseSelect().execSelectJSON(sparqlStr, model);
}
@Override
public ResultSet execSelect(String sparqlStr, Model model)
{
return new BaseSelect().execSelect(sparqlStr, model);
}
@Override
public ResultSet execSelect(String sparqlStr, Dataset ds)
{
return new BaseSelect().execSelect(sparqlStr, ds);
}
@Override
public String[] getQueryVars(Query query)
{
return new BaseSelect().getQueryVars(query);
}
}
Ask查询
接口
/**
* @author Houzw
* @Description 利用SPARQL的ASK操作查询数据
* @date 2016年4月18日 下午4:57:16
*/
public interface AskDao {
/**
* 执行ASK查询
*
* @param sparqlStr
* @param model
* @return T/F
* @Houzw at 2016年4月18日下午5:03:54
*/
boolean execAsk(String sparqlStr, Model model);
/**
* 执行ASK查询
*
* @param sparqlStr
* @param ds
* @return T/F
* @Houzw at 2016年4月18日下午5:03:54
*/
boolean execAsk(String sparqlStr, Dataset ds);
/**
* 执行ASK查询
*
* @param sub_uri
* @param prop_uri
* @param obj_uri
* @param model
* @return T/F
* @Houzw at 2016年3月30日下午3:22:02
*/
boolean execAsk(String sub_uri, String prop_uri, String obj_uri, Model model);
/**
* 实例是否存在
*
* @param uri
* @param model
* @return T/F
* @Houzw at 2016年4月1日下午10:18:23
*/
boolean isIndividual(String uri, Model model);
}
实现类
@Service
public class AskDaoImpl implements AskDao {
@Override
public boolean execAsk(String sparqlStr, Model model)
{
Query query = QueryFactory.create(sparqlStr);
QueryExecution queryExec = QueryExecutionFactory.create(query, model);
return queryExec.execAsk();
}
@Override
public boolean execAsk(String sparqlStr, Dataset ds)
{
Query query = QueryFactory.create(sparqlStr);
QueryExecution queryExec = QueryExecutionFactory.create(query, ds);
return queryExec.execAsk();
}
@Override
public boolean execAsk(String sub_uri, String prop_uri, String obj_uri, Model model)
{
StringBuilder s = new StringBuilder("ASK { ");
if (StringUtils.isBlank(sub_uri))
s.append("?s ");
else
s.append("<" + sub_uri + "> ");
if (StringUtils.isBlank(prop_uri))
s.append("?p ");
else
s.append("<" + prop_uri + "> ");
if (StringUtils.isBlank(obj_uri))
s.append("?o");
else
s.append("<" + obj_uri + "> ");
s.append(" }");
Query query = QueryFactory.create(s.toString());
QueryExecution queryExec = QueryExecutionFactory.create(query, model);
return queryExec.execAsk();
}
@Override
public boolean isIndividual(String uri, Model model)
{
return execAsk(uri, RDF.type.getURI(), OWL2.NamedIndividual.getURI(), model);
}
}
使用Jena执行SPARQL的Select和Ask查询的更多相关文章
- 搭建Jena Fuseki并执行SPARQL查询
1. 下载Jena Fuseki:http://jena.apache.org/download/index.cgi 2. 运行服务 windows解压后双击fuseki-server.bat lin ...
- Jena搭建SPARQL查询RDF数据
1 Jena搭建SPARQL查询RDF数据 1.1 Jena概要 · SPARQL是W3C的RDF数据工作组设计的一种查询语言和协议,用于RDF数据的查询.经过类似于JDK安装时候的配置,可以在命令行 ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?
原文链接:当执行一条 select 语句时,MySQL 到底做了啥? 也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务. 就算重启成功了, ...
- mysql数据库从删库到跑路之select单表查询
一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...
- select支持多查询,获取分页count
在我们使用mybatis 时,当我们根据分页去查询数据集时,需要传入的参数有page(页码)和size(每页的条数),而我们期望获取到的数据有,小于或等于size的list数据集,同时我们还需要得到一 ...
- SELECT使用子查询
SELECT使用子查询 SELECT使用子查询,该子查询会执行多次, 次数是由记录数量决定.效率比较低,不推荐使用. //查询部门编号,工资大于等于2000的人数, //工资小于2000的人 ...
- Mybatis中@select注解联合查询
前言 在项目中经常会使用到一些简单的联合查询获取对应的数据信息,我们常规都是会根据对应的mapper接口写对应的mapper.xml的来通过对应的业务方法来调用获取,针对这一点本人感觉有点繁琐,就对@ ...
- python使用rdflib创建rdf,在jena fuseki上执行SPARQL查询
建立并启动jena fuseki服务 参考:https://www.cnblogs.com/bincoding/p/11223372.html 使用rdflib创建rdf文件 import rdfli ...
随机推荐
- cookie 知识点
cookie失效是由浏览器实现的,根据时间来控制,服务器端并不做cookie是否失效的验证. 某个cookie失效了浏览器发送请求时便不会带上它,服务器端自然就没有这个cookie了,所以对于服务器来 ...
- Android 禁止系统进入深度休眠
在Linux系统中,wake_lock是一直锁机制,只要有驱动占用这个锁,系统就不会进入深度休眠. 获取此锁的方法有两种: 1.在adb中通过指令获取wake_lock,系统就不会进入深度休眠 ech ...
- web中显示中文名称的图片,可以这样配置filter
com.cy.filter.UrlFilter: package com.cy.filter; import java.io.IOException; import java.net.URLDecod ...
- springMVC学习(6)-包装pojo类型、数组、list、Map类型参数绑定
一.包装类型pojo参数绑定: 需求:商品查询controller方法中实现商品查询条件传入. 实现方法: 1)在形参中 添加HttpServletRequest request参数,通过reques ...
- 接口测试3-3Excel格式
java操作Excel,需要第三方库poi #xml <dependency> <groupId>org.apache.poi</groupId> <arti ...
- javascript讲解
1. js介绍 js的全称 javascript 由布兰登 艾奇发明的 javascript和java是有区别的 javascript是一门前台语言,而Java 是后台语言 前台语言运行在客户 ...
- Ubuntu 11.10 H3C iNode 客户端安装
下载客户端,放到桌面 双击打开,点击解压缩 Ctrl+Alt+T打开终端,依次输入以下代码并回车 代码: cd 桌面sudo cp iNodeClient /usr -Rcd /usr/iNodeCl ...
- h3c端口汇聚的几种情况-S5500-S5048
S5500和S5048E聚合的几种情况,分享下:1.S5048E用手工的话,S5500用静态方式2.S5048E用静态的话,S5500用动态方式3.S5048E和S5048E聚合的话,用相同方式即可. ...
- file_get_contents是打工文件或URL获取内容的方法,比其稳定的还有curl_get_contents
相信使用过file_get_contents函数的朋友都知道,当获取的$url访问不了时,会导致页面漫长的等待,甚至还能导致PHP进程占用CPU达100%,因此这个函数就诞生了 分享一个实际在用的函数 ...
- CRM 2016 级联过滤 类比省市县
以下以省市为例: function preFilterLookup() { //要进行过滤的lookup按钮加入addPresearch事件 Xrm.Page.getControl("shi ...