gpt4 book ai didi

java - 执行查询后如何在 SPARQL 中打印检索到的语句

转载 作者:行者123 更新时间:2023-11-30 04:04:44 25 4
gpt4 key购买 nike

我对 Java Sesame 和 SPARQL 还很陌生。我已将语句添加到 Sesame 存储库中,现在正在尝试检索一些语句并简单地打印它们。据我了解,我需要解析查询才能打印检索到的语句。下面的代码显示了我到目前为止所达到的目标:

String queryString = "SELECT ?subject ?object WHERE { ?subject  <http://example.org/is> ?object . } LIMIT 1";
...
SPARQLParser parser = new SPARQLParser();
ParsedQuery query = parser.parseQuery(queryString, null);

StatementPatternCollector collector = new StatementPatternCollector();
query.getTupleExpr().visit(collector);

List<StatementPattern> patterns = collector.getStatementPatterns();
// To print the first statement only for example.
System.out.println(patterns.get(0));

这是输出:

StatementPattern
Var (name=name)
Var (name=-const-1, value=http://example.org/is, anonymous)
Var (name=object)

根据输出,它没有显示主语和宾语。我的问题是:如何打印如上所示的查询结果。此代码是否是解析查询以便稍后打印语句的正确方法?非常感谢您的帮助。

最佳答案

您可以通过评估查询而不是解析查询来获取查询结果。您的代码所做的是检查查询的代数模型并从该代数中检索模式。这种方法不会给您查询结果。

在 Sesame 中评估查询比这简单得多:

 // open a connection to the Sesame repository containing your statements
RepositoryConnection conn = repository.getConnection();
try {
// create a prepared query object from your query string
TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

// evaluate the query on the repository
TupleQueryResult result = query.evaluate();

// iterate over the results and do something with each result
while (result.hasNext()) {
BindingSet s = result.next();
Value subject = s.getValue("subject");
Value object = s.getValue("object");

System.out.println("value of ?subject: " + subject);
System.out.println("value of ?object: " + object);
}
} finally {
conn.close();
}

正如 Joshua 指出的,您的查询检索变量绑定(bind)(针对 SELECT 子句中提到的变量),而不是 RDF 语句。当然,您可以从 Java 中的这些变量绑定(bind)重新创建 RDF 语句,但如果您确实想要完整的语句而不仅仅是主语和客体,那么改用 SPARQL CONSTRUCT 查询而不是 SELECT 查询可能会更容易。

有关如何评估不同类型的查询并在 Sesame 中使用结果的更多信息,请参阅 Sesame user documentation (特别是第 6.5 节)和 API Javadoc .

关于java - 执行查询后如何在 SPARQL 中打印检索到的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com