我在Java中使用了以下代码,它使用了Virtuoso Jena提供程序API . 我想使用别名进行查询 . 我试过括号,但没有任何效果 . 如果我直接在 endpoints 中放置相同的查询,它就可以工作 .
query = "select ?a AS ?count where {?a <uri> ?b.} limit 10";
VirtGraph set = new VirtGraph (url, "user", "pass");
Query sparql = QueryFactory.create(query);
VirtuosoQueryExecution vqe = VirtuosoQueryExecutionFactory.create(sparql, set);
vqe.execSelect();
我收到这个错误:
com.hp.hpl.jena.query.QueryParseException:
Lexical error at line 1, column 13. Encountered: " " (32), after : "AS"
at com.hp.hpl.jena.sparql.lang.ParserSPARQL.perform(ParserSPARQL.java:99)
别名的SPARQL语法是:(?var AS?alias)
我应该在查询中使用什么语法使其与别名一起使用?
谢谢 .
2 回答
我看到你也在OpenLink Software Support Forums上问了这个......(ObDisclaimer:我为OpenLink Software工作 . )
我也在那里发布了这个答案 .
您遇到的错误来自Jena解析器,而不是来自Virtuoso和Virtuoso Jena Provider .
首先要纠正查询以使用正确的SPARQL语法 . Virtuoso比Jena更宽容,但最好符合规范 -
然后你可能想稍微改变你的查询,因为我不认为你从上面看到的结果是你正在寻找的 -
如果错误仍然存在,我将检查所有相关组件的版本 - Jena,Virtuoso Jena Provider,Virtuoso JDBC Driver,Virtuoso .
然后,假设所有组件都是最新的,并且鉴于查询正在直接针对Virtuoso,您可能想要bypass the Jena parser as described in our documentation,并且可能报告针对Jena的错误 .
SPARQL语法是
(expr AS ?var)
,包括( )
.