Mar*_*eit 9 java string sparql
是否有一个库,它能够像CriteriaBuilderJPA 一样以编程方式构建SPARQL查询,或者像PreparedStatementfor SQL 一样构建查询?
类似(对于SQL):在Java中构建SQL字符串的最简洁方法
最近版本的Jena添加了一个StringBuilder样式API,用于构建查询/更新字符串并根据需要对它们进行参数化.
调用此类,这是ParameterizedSparqlString使用它创建查询的示例:
ParameterizedSparqlString queryStr = new ParameterizedSparqlString();
queryStr.setNSPrefix("sw", "http://skunkworks.example.com/redacted#");
queryStr.append("SELECT ?a ?b ?c ?d");
queryStr.append("{");
queryStr.append(" ?rawHit sw:key");
queryStr.appendNode(someKey);
queryStr.append(".");
queryStr.append(" ?rawHit sw:a ?a .");
queryStr.append(" ?rawHit sw:b ?b .");
queryStr.append(" ?rawHit sw:c ?c . ");
queryStr.append(" ?rawHit sw:d ?d .");
queryStr.append("} ORDER BY DESC(d)");
Query q = queryStr.asQuery();
Run Code Online (Sandbox Code Playgroud)
免责声明 - 我是为Jena贡献此功能的开发人员
请参阅参数化SPARQL查询的最佳方法是什么?有关在各种API中执行此操作的更多讨论.
您可以使用两种方法在Jena中以编程方式构建查询:语法或代数.在jena wiki中有一个介绍.
使用代数你可以做类似的事情:
Op op;
BasicPattern pat = new BasicPattern(); // Make a pattern
pat.add(pattern); // Add our pattern match
op = new OpBGP(pat); // Make a BGP from this pattern
op = OpFilter.filter(e, op); // Filter that pattern with our expression
op = new OpProject(op, Arrays.asList(Var.alloc("s"))); // Reduce to just ?s
Query q = OpAsQuery.asQuery(op); // Convert to a query
q.setQuerySelectType(); // Make is a select query
Run Code Online (Sandbox Code Playgroud)
(摘自维基页面)
它不是CriteriaBuilder(也不打算),但是有一些方法.当你想要OR时,你OpJoin而不是AND,OpUnion等等.根据我的经验,痛点是表达式:你可能想要从字符串中解析它们.
| 归档时间: |
|
| 查看次数: |
13004 次 |
| 最近记录: |