我正在尝试将数据从SPARQL端点移动到JSONObject。使用RDF4J。
RDF4J文档没有直接解决这个问题(一些关于使用端点的信息,更少关于转换为JSON的信息,在这两种情况下没有遇到任何问题)。
我有:
SPARQLRepository repo = new SPARQLRepository(<My Endpoint>);
Map<String, String> headers = new HashMap<String, String>();
headers.put("Accept", "SPARQL/JSON");
repo.setAdditionalHttpHeaders(headers);
try (RepositoryConnection conn = repo.getConnection())
{
String queryString = "SELECT * WHERE {GRAPH <urn:x-evn-master:mwadata> {?s ?p ?o}}";
GraphQuery query = conn.prepareGraphQuery(queryString);
debug("Mark 2");
try (GraphQueryResult result = query.evaluate())这是因为“服务器响应了不受支持的文件格式:application/sparql+json”
我认为SPARQLGraphQuery应该取代GraphQuery,但是RepositoryConnection没有相关的准备语句。
如果我交换
try (RepositoryConnection conn = repo.getConnection())使用
try (SPARQLConnection conn = (SPARQLConnection)repo.getConnection())我遇到了SPARQLConnection不生成SPARQLGraphQuery的问题。我能得到的最接近的是:
SPARQLGraphQuery query = (SPARQLGraphQuery)conn.prepareQuery(QueryLanguage.SPARQL, queryString);这会产生运行时错误,因为这些类型不能相互转换。
我不知道怎么从这里开始。任何帮助或建议都很感激。谢谢
发布于 2020-09-11 05:49:24
这是因为“服务器响应了不受支持的文件格式:application/sparql+json”
在RDF4J中,SPARQL SELECT查询是元组查询,因为每个结果都是一组绑定,这些绑定是表单的元组(名称、值)。相反,构造(和描述)查询是图查询,因为它们的结果是一个图,即RDF语句的集合。
此外,没有必要像您在这里所做的那样为响应格式设置额外的头(在罕见的情况下除外),RDF4J客户端将根据已注册的解析器集自动为您处理这一问题。
因此,简而言之,将代码简化如下:
SPARQLRepository repo = new SPARQLRepository(<My Endpoint>);
try (RepositoryConnection conn = repo.getConnection()) {
String queryString = "SELECT * WHERE {GRAPH <urn:x-evn-master:mwadata> {?s ?p ?o}}";
TupleQuery query = conn.prepareTupleQuery(queryString);
debug("Mark 2");
try (TupleQueryResult result = query.evaluate()) {
...
}
}如果要以JSON格式编写查询结果,可以使用TupleQueryResultHandler (例如,SPARQLResultsJSONWriter ),如下所示:
SPARQLRepository repo = new SPARQLRepository(<My Endpoint>);
try (RepositoryConnection conn = repo.getConnection()) {
String queryString = "SELECT * WHERE {GRAPH <urn:x-evn-master:mwadata> {?s ?p ?o}}";
TupleQuery query = conn.prepareTupleQuery(queryString);
query.evaluate(new SPARQLResultsJSONWriter(System.out));
}这将使用SPARQL查询结果JSON格式编写查询结果(在本例中为标准输出)。如果考虑到非标准格式,当然也可以创建自己的TupleQueryResultHandler实现。
有关处理结果的各种方法(包括迭代、流、添加到列表或直接发送到结果处理程序)的更多细节,请参见查询存储库的文档。顺便说一下,Java上的javadoc也相当广泛,所以如果您的RDF4J编辑环境支持显示它,我建议您使用它。
https://stackoverflow.com/questions/63841000
复制相似问题