使用Jena ARQ将OPTIONAL子句添加到SPARQL查询

时间:2013-07-11 13:10:40

标签: sparql semantic-web jena

是否可以使用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子句。我需要使用不同的库吗?

1 个答案:

答案 0 :(得分:2)

是的,你可以。请参阅apache jena网站上的this introduction to the topic

您的出发点是query pattern

Element pattern = q.getQueryPattern();

如果我没记错的话,那将是ElementGroup。在那里添加可选项:

((ElementGroup) pattern).addElement(new ElementOptional(...));

...位将是ElementTriplesBlock,这非常简单。

然而,

不雅。一般来说,我建议使用访问者和代数表示,但这条直接路线应该有用。