2013-03-07 66 views
1

我有以下SPARQL查询:的Java的Apache耶拿SPARQL查询返回的词汇错误

SELECT ?b ?c WHERE { 
ont:http\:\/\/test.com\/test\#com.test.test.test.2.3.4 ?b ?c} 

它返回成功返回OpenRDF工作台2.6.5正确的结果。然而,在我的Java时,我用下面的代码

private static ResultSet getQueryResults(String stringQuery, String service) { 
    Query query = QueryFactory.create(stringQuery); 
    QueryExecution qexec = QueryExecutionFactory.sparqlService(
      service, query); 
    ResultSet results = qexec.execSelect(); 
    //ResultSetFormatter.out(System.out, results, query); 
    return results; 
} 

public static ResultSet getDetails(String ID) { 
    //we define our sparql query 
    String sanatizedID = "ont:" + sanitizeString(ID); 
    String stringQuery = " SELECT ?b ?c WHERE" + 
      " { " + sanatizedID + 
      //"{?a"+ 
      " ?b" + 
      " ?c}"; 
    System.out.println(stringQuery); 
    //we define our service 
    String service = "http://test.test.com:8181/test-sesame/repositories/test"; 

    //We write the results of our query into a results set 
    ResultSet results = getQueryResults(stringQuery, service); 
    return results; 
} 

private static String sanitizeString(String s) { 
    s = s.replace("/", "\\/"); 
    s = s.replace("#", "\\#"); 
    s = s.replace(":", "\\:"); 
    s = s.replace("\"", "\\\""); 

    return s; 
} 

我得到线查询查询以下错误

Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Lexical error at line 1, column 871. Encountered: ":" (58), after : "\\" 

= QueryFactory.create(运行查询其使用耶拿2.6.4 stringQuery);

我试图改变耶拿版本,并没有运气,也无法理解为什么查询是OpenRDF工作台2.6.5和无效在我的Java查询(我认为这可能会做它自己的sanatization):/

帮助将非常感激!

+0

这可以使用< >标志完成。该查询应该如下所示: SELECT?b?c WHERE {http://support.microsoft.com/kb/CHS/WEB/Search? – user1829257 2013-03-07 13:57:51

回答

0

"ont:" + sanitizeString(ID);

您需要ont:前缀声明中查询,或者使用完整形式和<...>

0

正在使用的版本,支持SPARQL 1.1规范的稍旧版本的芝麻,你的前缀名称实际上不是有效的:

ont:http\:\/\/test.com\/test\#com.test.test.test.2.3.4 

有了它,现在允许将SPARQL规范的最新版本直接以前缀名称使用附加的:字符,并且不需要使用\来避免此问题。因此,为了使与耶拿这个查询工作,你只需要之前删除\你的第二个:

我不知道在哪里芝麻是其与最新SPARQL 1.1规范对齐,但如果你试图在最近的这个查询芝麻版本,你可能会看到与Jena一致的行为。