在另一个查询中将sparql查询用作构建块
我可以将SPARQL查询写入一个句子中的concat单词,并将单个三元组中的单词添加到一个句子中:在另一个查询中将sparql查询用作构建块,sparql,fuseki,Sparql,Fuseki,我可以将SPARQL查询写入一个句子中的concat单词,并将单个三元组中的单词添加到一个句子中: SELECT ?sent (sample (?sf1) as ?sf11) (group_concat(?wf) as ?sf2) WHERE { ?sent a nlp:Sentence . {select * { ?w rdfs:partOf ?sent . ?w a nlp:Token . ?w nlp:wordForm ?wf .
SELECT ?sent (sample (?sf1) as ?sf11) (group_concat(?wf) as ?sf2)
WHERE
{ ?sent a nlp:Sentence .
{select *
{ ?w rdfs:partOf ?sent .
?w a nlp:Token .
?w nlp:wordForm ?wf .
} order by ?w
}
} group by ?sent
limit 20
但我找不到在另一个查询中使用此select语句的方法,在该查询中,我找到了句子?sent
,并希望插入此select语句:
select *
where
{ ?tok a wn:Locomote.
?tok nlp:lemma3 ?lem .
?tok rdfs:partOf ?sent .
?sent a nlp:Sentence .
?werk ^rdfs:partOf ?sent .
{SELECT ?sent (group_concat(?wf) as ?sf2)
WHERE
{ ?sent a nlp:Sentence .
{select *
{ ?w rdfs:partOf ?sent .
?w a nlp:Token .
?w nlp:wordForm ?wf .
} order by ?w
}
} group by ?sent
}
}
结果不是在第一部分中找到的句子,但在嵌套查询中似乎是?sent
,不受外部查询的限制。
我不知道如何正确地筑巢。
谢谢你的帮助 Jena中的自定义聚合示例:
package org.stackoverflow.jena.customaggregate;
导入com.google.common.base.Joiner;
导入org.apache.jena.atlas.logging.LogCtl;
导入org.apache.jena.graph.graph;
导入org.apache.jena.query.*;
导入org.apache.jena.rdf.model.ModelFactory;
导入org.apache.jena.sparql.engine.binding.binding;
导入org.apache.jena.sparql.expr.expr;
导入org.apache.jena.sparql.expr.ExprEvalException;
导入org.apache.jena.sparql.expr.ExprList;
导入org.apache.jena.sparql.expr.NodeValue;
导入org.apache.jena.sparql.expr.aggregate.acculator;
导入org.apache.jena.sparql.expr.aggregate.累加器工厂;
导入org.apache.jena.sparql.expr.aggregate.AggCustom;
导入org.apache.jena.sparql.expr.aggregate.AggregateRegistry;
导入org.apache.jena.sparql.function.FunctionEnv;
导入org.apache.jena.sparql.graph.NodeConst;
导入org.apache.jena.sparql.sse.sse;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共类AggGroupConcatSorted{
静止的{
LogCtl.setCmdLogging();
}
静态累加器工厂累加器工厂=(agg,不同)->新AccGroupConcatSorted(agg);
静态类AccGroupConcatSorted实现累加器{
私人agg;
private List nodestrist=new ArrayList();
AccGroupConcatSorted(agg自定义agg){
this.agg=agg;
}
@凌驾
公共无效累积(绑定绑定、FunctionEnv FunctionEnv){
ExprList ExprList=agg.getExprList();
for(Expr Expr:exprList){
试一试{
NodeValue nv=expr.eval(绑定,函数环境);
//评估成功,将字符串添加到列表
添加(nv.asString());
}捕获(ExprEvalException-ex){
}
}
}
@凌驾
公共节点值getValue(){
//排序表
Collections.sort(nodestrolist);
//返回单个节点,它实际上是列表元素的串联字符串
返回NodeValue.makeString(Joiner.on(“”).join(nodestrist));
}
}
公共静态void main(字符串[]args){
//按排序顺序连接节点值的示例聚合
字符串aggUri=”http://example.org/group_concat_sorted" ;
//注册自定义聚合-返回无行未绑定
AggregateRegistry.register(aggUri、累加器工厂、NodeConst.nodeMinusOne);
//样本数据
图g=SSE.parseGraph(“(:s:p\'b\”)(:s:p\'bc\”(:s:p\'abc\”));
String qs=“SELECT((?o)AS?x){s?p?o}”;
//查询执行
Query q=QueryFactory.create(qs);
try(QueryExecution qexec=QueryExecutionFactory.create(q,ModelFactory.createModelForGraph(g))){
ResultSet rs=qexec.execSelect();
结果格式输出(rs);
}
}
}
Jena中的自定义聚合示例:
package org.stackoverflow.jena.customaggregate;
导入com.google.common.base.Joiner;
导入org.apache.jena.atlas.logging.LogCtl;
导入org.apache.jena.graph.graph;
导入org.apache.jena.query.*;
导入org.apache.jena.rdf.model.ModelFactory;
导入org.apache.jena.sparql.engine.binding.binding;
导入org.apache.jena.sparql.expr.expr;
导入org.apache.jena.sparql.expr.ExprEvalException;
导入org.apache.jena.sparql.expr.ExprList;
导入org.apache.jena.sparql.expr.NodeValue;
导入org.apache.jena.sparql.expr.aggregate.acculator;
导入org.apache.jena.sparql.expr.aggregate.累加器工厂;
导入org.apache.jena.sparql.expr.aggregate.AggCustom;
导入org.apache.jena.sparql.expr.aggregate.AggregateRegistry;
导入org.apache.jena.sparql.function.FunctionEnv;
导入org.apache.jena.sparql.graph.NodeConst;
导入org.apache.jena.sparql.sse.sse;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共类AggGroupConcatSorted{
静止的{
LogCtl.setCmdLogging();
}
静态累加器工厂累加器工厂=(agg,不同)->新AccGroupConcatSorted(agg);
静态类AccGroupConcatSorted实现累加器{
私人agg;
private List nodestrist=new ArrayList();
AccGroupConcatSorted(agg自定义agg){
this.agg=agg;
}
@凌驾
公共无效累积(绑定绑定、FunctionEnv FunctionEnv){
ExprList ExprList=agg.getExprList();
for(Expr Expr:exprList){
试一试{
NodeValue nv=expr.eval(绑定,函数环境);
//评估成功,将字符串添加到列表
添加(nv.asString());
}捕获(ExprEvalException-ex){
}
}
}
@凌驾
公共节点值getValue(){
//排序表
Collections.sort(nodestrolist);
//返回单个节点,它实际上是列表元素的串联字符串
返回NodeValue.makeString(Joiner.on(“”).join(nodestrist));
}
}
公共静态void main(字符串[]args){
//按排序顺序连接节点值的示例聚合
字符串aggUri=”http://example.org/group_concat_sorted" ;
//登记册