Java Virtuoso Jena提供程序查询别名语法

Java Virtuoso Jena提供程序查询别名语法,java,alias,sparql,jena,virtuoso,Java,Alias,Sparql,Jena,Virtuoso,我在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.

我在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();
别名的SPARQL语法为:?var AS?alias

我应该在查询中使用什么语法来处理别名

谢谢。

SPARQL语法是expr AS?var,包括


我知道你也在网上问过这个。。。免责声明:我为你工作

我也在那里发布了这个答案

您遇到的错误来自Jena解析器,而不是Virtuoso或Virtuoso Jena提供者

第一件事是更正查询以使用正确的SPARQL语法。名家比耶娜更宽容,但最好符合规范-

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工作,那么您可能想要报告一个针对Jena的bug。

我认为{a?b.}应该是{a?b.},因为a是糖而不是URI。可能还值得注意的是。这里是可选的,正如结尾}所暗示的那样。感谢您的回复,我编辑了这篇文章,在SPARQL中,括号是可选的。我的意思是一个uri,但我更改了它,因为它可能与一个表示rdf:type的类型混淆。括号在SPARQL中不是可选的,即使在某些系统中也是如此。QueryFactory.create的特定调用是根据标准语法(默认语法选择)进行解析的。看见
SELECT  ( ?a AS ?count ) 
 WHERE  { ?a  a  ?b } 
 LIMIT  10
SELECT  ( COUNT(?a) AS ?count )
                       ?b 
 WHERE  { ?a  a  ?b } 
 LIMIT  10