我在Java中有以下代码,该代码使用Virtuoso Jena提供程序API。我想使用别名进行查询。我尝试放入括号,但没有任何效果。如果我将相同的查询直接放在端点中,它将起作用。



    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)


我应该在查询中使用哪种语法以使其与别名一起使用?

谢谢。

最佳答案

我看到您也在OpenLink Software Support Forums ...上问过这个问题(OBDisclaimer:我为OpenLink Software工作。)

我也在这里张贴了这个答案。

您遇到的错误来自Jena解析器,而不是来自Virtuoso或Virtuoso Jena Provider。

第一件事是更正查询以使用正确的SPARQL语法。 Virtuoso比耶拿(Jena)更宽容,但最好遵循规范-

SELECT  ( ?a AS ?count )
 WHERE  { ?a  a  ?b }
 LIMIT  10


然后,您可能需要稍微更改一下查询,因为我认为您不会从上面看到的结果是您想要的-

SELECT  ( COUNT(?a) AS ?count )
                       ?b
 WHERE  { ?a  a  ?b }
 LIMIT  10


如果错误仍然存​​在,我将检查所有相关组件的版本-Jena,Virtuoso Jena Provider,Virtuoso JDBC驱动程序,Virtuoso。

然后,假设所有组件都是最新的,并且假设查询直接针对Virtuoso,您可能要bypass the Jena parser as described in our documentation,并可能针对Jena报告一个错误。

关于java - Virtuoso Jena提供程序查询别名语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30076700/

10-12 17:51