簡體   English   中英

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)

別名的SPARQL語法是:(?var AS?alias)

我應該在查詢中使用什么語法使其與別名一起使用?

謝謝。

SPARQL語法是(expr AS ?var)包括( )

query = "select (?a AS ?count) where {?a <a> ?b.} limit 10";      

我看到你也在OpenLink軟件支持論壇上問過這個問題......(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 Driver,Virtuoso。

然后,假設所有組件都是最新的,並且鑒於查詢正在直接針對Virtuoso,您可能希望繞過Jena解析器,如我們的文檔中所述 ,並可能報告針對Jena的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM