是否可以使用Jena ARQ API以编程方式向SPARQL查询添加可选子句?我想以编程方式接受这个查询:
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文档中找到的内容和网上搜索来看,添加一个可选的子句是不可能的。我需要使用不同的库吗?
发布于 2013-07-11 21:47:15
是的你可以。请参阅apache jena站点上的this introduction to the topic。
您的出发点是获得query pattern
Element pattern = q.getQueryPattern();如果我没记错的话,那将是一个ElementGroup。在这里添加可选的:
((ElementGroup) pattern).addElement(new ElementOptional(...));...位将是一个ElementTriplesBlock,这非常简单。
然而,这并不优雅。一般来说,我会推荐使用访问者和代数表示,但这种直接的方法应该是可行的。
https://stackoverflow.com/questions/17594304
复制相似问题