Java Virtuoso Jena提供程序查询别名语法
我在Java中有以下代码,它使用Virtuoso Jena提供者API。我想使用别名进行查询。我试着插入括号,但没用。如果我直接将同一个查询放在端点中,它就会工作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.
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