使用FedeX查询远程SPARQL端点

时间:2014-12-14 17:12:35

标签: java rdf sparql

我正在尝试使用FedX创建远程联合。以下是我的代码。第一个三重模式在"语义网络狗粮上运行时会产生结果。 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();
        }
    }

}

1 个答案:

答案 0 :(得分:1)

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

在FedX 3.1中,我们已经解决了这个问题(参见[2]),并可选择使用SELECT查询来确定源。你已经在使用FedX 3.1吗?有关详细信息,请查看捆绑的文档和引用的线程。另外,如果这样可以解决问题,请告诉我们。

参考

[1] https://groups.google.com/forum/#!topic/iwb-discussion/Fb6SwQRWdv4

[2] https://groups.google.com/forum/#!topic/iwb-discussion/aIHtzvNk4v0