Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FedX查询远程SPARQL端点_Java_Rdf_Sparql - Fatal编程技术网

Java 使用FedX查询远程SPARQL端点

Java 使用FedX查询远程SPARQL端点,java,rdf,sparql,Java,Rdf,Sparql,我正在尝试使用FedX创建远程联盟。下面是我的代码。第一个三重模式在“语义web狗粮”SPARQL端点上运行时给出结果,而第二个三重模式在DBPedia SPARQL端点上运行。有人能解释一下代码的错误吗?我尝试了这个查询,得到了一个406错误。我连接到互联网没有任何代理 package Query; import java.net.Authenticator; import java.net.PasswordAuthentication; import org.openrdf.query.

我正在尝试使用FedX创建远程联盟。下面是我的代码。第一个三重模式在“语义web狗粮”SPARQL端点上运行时给出结果,而第二个三重模式在DBPedia SPARQL端点上运行。有人能解释一下代码的错误吗?我尝试了这个查询,得到了一个406错误。我连接到互联网没有任何代理

package Query;

import java.net.Authenticator;
import java.net.PasswordAuthentication;

import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;

import com.fluidops.fedx.Config;
import com.fluidops.fedx.FedXFactory;
import com.fluidops.fedx.FederationManager;

import java.util.Arrays;

public class QueryFedX {

    public static void main(String[] args) {

        try
        {
            Config.initialize();
            Repository repo = FedXFactory.initializeSparqlFederation(Arrays.asList(
                    "http://dbpedia.org/sparql",
                    "http://data.semanticweb.org/sparql"
                    ));
            String q = "SELECT ?y ?z WHERE { <http://data.semanticweb.org/organization/university-of-oxford> <http://www.w3.org/2000/01/rdf-schema#label> ?z . ?y <http://www.wikidata.org/entity/P373> ?z .}";
            TupleQuery query = repo.getConnection().prepareTupleQuery(QueryLanguage.SPARQL, q);
            TupleQueryResult res = query.evaluate();

            while (res.hasNext()) {
                System.out.println(res.next());
            }

            FederationManager.getInstance().shutDown();
            System.out.println("Done.");
            System.exit(0);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}
包查询;
导入java.net.Authenticator;
导入java.net.PasswordAuthentication;
导入org.openrdf.query.QueryLanguage;
导入org.openrdf.query.TupleQuery;
导入org.openrdf.query.TupleQueryResult;
导入org.openrdf.repository.repository;
导入com.fluidops.fedx.Config;
导入com.fluidops.fedx.fedx工厂;
导入com.fluidops.fedx.FederationManager;
导入java.util.array;
公共类QueryFedX{
公共静态void main(字符串[]args){
尝试
{
Config.initialize();
Repository repo=FedXFactory.initializeSparqlFederation(Arrays.asList(
"http://dbpedia.org/sparql",
"http://data.semanticweb.org/sparql"
));
String q=“选择?y?z,其中{?z.?y?z.}”;
TupleQuery query=repo.getConnection().PreparetTupleQuery(QueryLanguage.SPARQL,q);
TupleQueryResult res=query.evaluate();
while(res.hasNext()){
System.out.println(res.next());
}
FederationManager.getInstance().shutDown();
System.out.println(“完成”);
系统出口(0);
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}

看起来您遇到了我们在[1]和[2]中讨论过的相同问题:最近,公共DBpedia端点更改了权限,不再允许SPARQL ASK查询。由于FedX依赖SPARQL ASK查询进行源选择,因此您会看到HTTP错误

在FedX 3.1中,我们已经解决了这个问题(参见[2]),并且可以选择使用SELECT查询来确定源。您是否已经在使用FedX 3.1?请查看捆绑文档和参考线程以了解详细信息。另外,请让我们知道这是否解决了问题

参考资料

[1]


[2]

HTTP 406表示其中一个端点无法提供客户端要求的语法格式。您是否尝试过找出导致错误的端点,例如,在FedX联盟中仅使用一个端点运行此代码?此外,快速查看您的个人资料后,您似乎问了很多问题,但从未费心接受任何对您有帮助的答案。你可能想补救一下。嗨,Jeen,非常抱歉不能提供帮助。我以后会纠正的。我尝试使用两个端点,在两个端点上,查询“select?x where{x?y?z.}”给了我结果,但当我尝试在两个端点上运行它时,给了我406错误。我无法从远程端点理解这种行为?当您分别使用每个端点进行测试时,您是否使用了相同的代码(即,您是否创建了一个只有一个成员要测试的FedX联盟)?更一般地说:我也不太清楚发生了什么,也找不到任何关于FedX的在线文档或代码示例。考虑到这一点,也许你最好直接联系开发人员,而不是通过SO询问-我认为这是非常具体的产品。如果你决定联系开发人员,他们会提供答案,你能回到这里分享这个答案吗,这样其他有类似问题的人也能从中受益?