RDF4J SPARQL 查询 JSON
RDF4J SPARQL query to JSON
我正在尝试将数据从 SPARQL 端点移动到 JSON对象。使用 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-results+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);
这会导致 运行 时间错误,因为这些类型无法互相转换。
我不知道如何从这里开始。非常感谢任何帮助或建议。谢谢
this fails because "Server responded with an unsupported file format: application/sparql-results+json"
在 RDF4J 中,SPARQL SELECT 查询是 tuple queries, so named because each result is a set of bindings, which are tuples of the form (name, value). In contrast, CONSTRUCT (and DESCRIBE) queries are graph queries,之所以这样称呼是因为它们的结果是一个图,即 collection 个 RDF 语句。
此外,不需要像您在此处所做的那样为响应格式设置额外的 headers(极少数情况除外),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 Query Results JSON format 写入查询结果(在此示例中为标准输出)。如果您有一个 non-standard 格式,您当然也可以创建自己的 TupleQueryResultHandler
实现。
有关处理结果的各种方式(包括迭代、流式处理、添加到列表或直接发送到结果处理程序)的更多详细信息,请参阅 RDF4J API 上的 the documentation on querying a repository. As an aside, the javadoc也非常广泛,所以如果您的 Java 编辑环境支持显示它,我建议您使用它。
我正在尝试将数据从 SPARQL 端点移动到 JSON对象。使用 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-results+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);
这会导致 运行 时间错误,因为这些类型无法互相转换。
我不知道如何从这里开始。非常感谢任何帮助或建议。谢谢
this fails because "Server responded with an unsupported file format: application/sparql-results+json"
在 RDF4J 中,SPARQL SELECT 查询是 tuple queries, so named because each result is a set of bindings, which are tuples of the form (name, value). In contrast, CONSTRUCT (and DESCRIBE) queries are graph queries,之所以这样称呼是因为它们的结果是一个图,即 collection 个 RDF 语句。
此外,不需要像您在此处所做的那样为响应格式设置额外的 headers(极少数情况除外),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 Query Results JSON format 写入查询结果(在此示例中为标准输出)。如果您有一个 non-standard 格式,您当然也可以创建自己的 TupleQueryResultHandler
实现。
有关处理结果的各种方式(包括迭代、流式处理、添加到列表或直接发送到结果处理程序)的更多详细信息,请参阅 RDF4J API 上的 the documentation on querying a repository. As an aside, the javadoc也非常广泛,所以如果您的 Java 编辑环境支持显示它,我建议您使用它。