是否可以使用 Jena ARQ API 以编程方式向 SPARQL 查询添加 OPTIONAL 子句? 我想以编程方式接受此查询:
select ?concept ?p ?o where {?s ?p ?o . } limit 10
对此:
SELECT ?concept ?p ?o ?test WHERE
{
?s ?p ?o
OPTIONAL { ?concept <http://www.test.com/test> ?test }
}
LIMIT 10
通过 ARQ,添加附加结果变量 ?test
非常简单:
Query q = QueryFactory.create(query)
query.addResultVar(var);
但是根据我在 API 文档中发现的内容以及通过网络进行的搜索,不可能添加 OPTIONAL 子句。我需要使用不同的库吗?
最佳答案
是的,你可以。请参阅this introduction to the topic在 apache jena 网站上。
您的起点是获取 query pattern :
Element pattern = q.getQueryPattern();
如果我没记错的话,那将是一个ElementGroup
。在其中添加可选:
((ElementGroup) pattern).addElement(new ElementOptional(...));
...
位将是 ElementTriplesBlock ,这非常简单。
然而,不优雅。一般来说,我建议使用访问者和代数表示,但这种直接路线应该可行。
关于sparql - 使用 Jena ARQ 将 OPTIONAL 子句添加到 SPARQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594304/