我之前使用的是 FUSEKI,现在改为 OpenRDF/Sesame。
一切正常,我只有一个问题。 在一种方法中,我需要取回模型中存储库的完整数据库。该方法如下所示:
private static Model getRepositoryModel() throws ResourceRepositoryException{
String queryString = "DESCRIBE * WHERE {?r ?s ?p}";
Model currentModel = QueryExecuter.executeSparqlDescribeQuery(queryString);
return currentModel; }
public static Model executeSparqlDescribeQuery(String queryString) throws ResourceRepositoryException {
Model resultModel = null;
try{
QueryExecution qe = QueryExecutionFactory.sparqlService(SESAME_SERVICE_QUERY, queryString);
resultModel = qe.execDescribe();
} catch(QueryExceptionHTTP | QueryParseException e){
throw new ResourceRepositoryException(e.getMessage());
}
correctNsPrefixes(resultModel);
return resultModel;}
但我实际上并没有拿回模型。但在 SPARQL 中,如果调用此方法,则必须返回一个。它还与 FUSEKI 合作。
最佳答案
从您的评论中,我了解到您正在使用 Jena 来查询远程 Sesame 服务器(之前不清楚您在做什么,我最初以为您已经将自己的客户端代码切换为使用 Sesame)但发布了错误/旧代码)。虽然这是一个有点不传统的设置(大多数使用 Sesame Server 的人也使用 Sesame API 来实际查询/访问它),但这当然应该是可能的。
但是,显然,您正在使用类似这样的内容作为 Sesame SPARQL 端点 URL:
http://localhost:8080/openrdf-workbench/repositories/test
(假设您的存储库名为“test”)。
这不是正确使用的 URL。它应该是:
http://localhost:8080/openrdf-sesame/repositories/test
注意区别:不是“openrdf-workbench”,而是“openrdf-sesame”。
工作台是 Sesame Server 的客户端 UI,它不旨在用作 SPARQL 端点本身。事实上,如果您将它用于 SELECT 查询,它显然可以工作,但这只是一个不幸的副作用。它不打算这样使用。
关于java - OpenRDF/Sesame 不提供模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28174615/