Java 生成增量SPARQL查询

Java 生成增量SPARQL查询,java,sparql,dbpedia,Java,Sparql,Dbpedia,有没有办法以动态方式生成SPARQL查询? 我想做的是这样的事情: 如果我有一个DBpedia资源r1和另一个DBpedia资源r2, 这个问题 SELECT * WHERE { <r1> ?pre <r2> } SELECT * WHERE { <r1> ?pre1 ?obj1 . ?obj1 ?pre2 <r2> } 选择*WHERE{?pre} 将返回两个资源之间的谓词 这个问题呢 SELECT * WHERE { <r1>

有没有办法以动态方式生成SPARQL查询? 我想做的是这样的事情: 如果我有一个DBpedia资源r1和另一个DBpedia资源r2, 这个问题

SELECT * WHERE { <r1> ?pre <r2> }
SELECT * WHERE { <r1> ?pre1 ?obj1 . ?obj1 ?pre2 <r2> }
选择*WHERE{?pre}
将返回两个资源之间的谓词 这个问题呢

SELECT * WHERE { <r1> ?pre <r2> }
SELECT * WHERE { <r1> ?pre1 ?obj1 . ?obj1 ?pre2 <r2> }
选择*WHERE{?pre1?obj1。?obj1?pre2}
将返回这两个资源之间的所有谓词和对象(分两步) 等等
我正在尝试以这样一种方式构建此查询:它将自动增加两个资源之间的对象和谓词的数量(例如,在4个步骤中)?

我知道如何解决此问题。。 以下是我的解决方案:

private String completeQuery(String coreQuery){
String completeQuery = "";
completeQuery += "SELECT * WHERE {"+ "\n";
completeQuery += coreQuery + "\n";
completeQuery =completeQuery + "}" + "\n" +"limit 5" ;
return completeQuery;}
public String link(String object1, String object2, int distance){
if(distance == 1){
    String Quer = "<http://dbpedia.org/resource/"+object1+">" + " ?pre1 " +"<http://dbpedia.org/resource/"+object2+">";
    return completeQuery(Quer);
} 
else {
    String query = "<http://dbpedia.org/resource/"+object1+">" + " ?pre1 ?obj1 " + ".\n";
    for(int i = 1; i < distance-1; i++){
        query += "?obj" + i + " ?pre" + (i+1) + " ?obj" + (i+1) + ".\n" ;

    }
    query  += "?obj" + (distance-1) + " ?pre" + distance + " " + "<http://dbpedia.org/resource/"+object2+">";
    return completeQuery(query);
}}
private String completeQuery(String coreQuery){
字符串completeQuery=“”;
completeQuery+=“选择*其中{”+“\n”;
completeQuery+=coreQuery+“\n”;
completeQuery=completeQuery+“}”+“\n”+“限制5”;
返回completeQuery;}
公共字符串链接(字符串对象1、字符串对象2、整数距离){
如果(距离==1){
字符串query=“”+”?pre1“+”;
返回completeQuery(query);
} 
否则{
字符串查询=“+”?pre1?obj1“+”\n”;
对于(int i=1;i
是否需要多个查询?或者您想要一个查询来封装给定深度的模式?还是怎样不太清楚您想要得到什么。如果我编写5个SPARQL查询来检索任意两个资源之间最多5个关系。。这将是一个耗时的过程。我在想这样的事情:如果两个资源有一个方向关系,返回它,否则,如果两个资源之间有一个中间对象,返回中间对象及其谓词以及两个资源。。。好吧,你需要一个查询,可以说,它返回最短路径。SPARQL属性路径在这里是一个很好的候选,除了它们不提供用于提取中间节点或在路径中使用变量的机制之外。我认为您可能需要使用union或optional,并手动写出不同的选项。是否有可能忽略谓词?这可能会使问题变得更容易。另一个问题:你是否预计r1和r2之间会有不同长度的路径?如果只有路径,那么无论长度如何,都可以很容易地得到它。中间节点和谓词在我的工作中都非常重要。当我搜索的时候,我发现了一些似乎和我要找的一样的东西,除了我认为是用动作脚本写的,所以我真的不太清楚如果这个答案对你有效,你应该这样做。