我正在尝试使用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();
}
}
}
答案 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