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

标签 sparql semantic-web jena

是否可以使用 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/

相关文章:

Maven:强制 Jersey 使用特定的 Artifact 版本

rdf - SPARQL 查询从 DBPedia 提取所有日期/时间数据

sql - SPARQL 中的字符串匹配?

semantic-web - 在 Protege 5 中向 objectProperty 添加多个域

python - 无法将第三方 Markdown 扩展集成到 django-wiki Markdown 中

SPARQL "ASK"查询以检查两个类之间是否存在对象属性(不是黑白个体)

sparql - 查询WikiData,p和wdt默认前缀的区别

sparql - 如何使用标签查询维基数据项目?

rdf - 计算节点之间的路径长度?

java - 将 System.out 返回到字符串