是否可以使用Jena ARQ API以编程方式将OPTIONAL子句添加到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文档中发现并在网上拖网的情况来看,无法添加OPTIONAL子句。我需要使用不同的库吗?
答案 0 :(得分:2)
是的,你可以。请参阅apache jena网站上的this introduction to the topic。
您的出发点是query pattern:
Element pattern = q.getQueryPattern();
如果我没记错的话,那将是ElementGroup
。在那里添加可选项:
((ElementGroup) pattern).addElement(new ElementOptional(...));
...
位将是ElementTriplesBlock,这非常简单。
不雅。一般来说,我建议使用访问者和代数表示,但这条直接路线应该有用。