Virtuoso Jena 提供程序查询别名语法
Virtuoso Jena provider query alias syntax
我在 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)
The SPARQL syntax for an alias is: (?var AS ?alias)
我应该在查询中使用什么语法才能使其与别名一起使用?
谢谢。
SPARQL 语法是 (expr AS ?var)
,包括 ( )
。
query = "select (?a AS ?count) where {?a <a> ?b.} limit 10";
我看到你也在 OpenLink Software Support Forums... (ObDisclaimer: I work for 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 Driver、Virtuoso。
然后,假设所有组件都是最新的,并且假设查询直接针对 Virtuoso,您可能想要 bypass the Jena parser as described in our documentation,并可能报告针对 Jena 的错误。
我在 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)
The SPARQL syntax for an alias is: (?var AS ?alias)
我应该在查询中使用什么语法才能使其与别名一起使用?
谢谢。
SPARQL 语法是 (expr AS ?var)
,包括 ( )
。
query = "select (?a AS ?count) where {?a <a> ?b.} limit 10";
我看到你也在 OpenLink Software Support Forums... (ObDisclaimer: I work for 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 Driver、Virtuoso。
然后,假设所有组件都是最新的,并且假设查询直接针对 Virtuoso,您可能想要 bypass the Jena parser as described in our documentation,并可能报告针对 Jena 的错误。