提供基本的接口和實現類,可在其餘代碼中直接調用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); } }