2

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

4

1 回答 1

2

是的你可以。请参阅apache jena 网站上的主题介绍。

您的出发点是获取查询模式

Element pattern = q.getQueryPattern();

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

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

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

然而,不优雅。一般来说,我建议使用访问者和代数表示,但这种直接路线应该可行。

于 2013-07-11T13:47:15.303 回答