提供基本的接口和实现类,可在其余代码中直接调用java
/** * 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); } }
/** * @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); } }