在另一个查询中将sparql查询用作构建块

在另一个查询中将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 .

我可以将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 . 
    }   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" ;
//登记册