2014-05-02 36 views
1

我正在尝试使用Sesame API查询本体。通常的查询方式是不可能的,因为它提供了UnsupportedQueryLanguageException。没有工厂可用于查询语言SPARQL。如何在Android中使用SPARQL在芝麻openrdf中查询?

最终我与查询:

SPARQLParser parser=new SPARQLParser(); 
ParsedQuery query=parser.parseQuery(queryString,null); 

StatementPatternCollector collector=new StatementPatternCollector(); 
query.getTupleExpr().visit(collector); 

List<StatementPattern> patterns=collector.getStatementPatterns(); 

当我显示的结果,它不包含任何陈述;我如何显示这些语句?

+0

你到目前为止尝试过什么?没有上下文的代码,你不清楚你在问什么。 “通常的查询方式”:这是什么? –

+0

出于兴趣:你是怎么想出这个代码的?我想问的原因是我记得其他人做类似的事情,所以我想知道是否有网上的教程,错误地推荐这种方法来查询... –

+0

正如Joshua在他的回答中所说:这段代码不执行查询,它只是分析一个查询字符串。这完全是错误的方法。您面临的问题是类路径配置之一,而不是编程问题,您应该专注于解决这个问题。 –

回答

2

如果你得到一个UnsupportedQueryLanguageException你可能没有正确设置你的类路径。芝麻通过JDK ServiceLoader加载东西,所以你可能会丢失一个包含SPARQL东西的jar文件。

就你的代码片段而言,这不会执行SPARQL查询。这是分析查询的代数,并收集查询中包含的任何BGP。我不认为这就是你的意图。

仔细检查您的类路径,确保您已包含相应的芝麻罐并重新尝试查询芝麻库的正常方式。

+1

鉴于异常中的具体错误消息,我会说OP缺少'sesame-queryparser-sparql- .jar'或'sesame-queryparser-api- .jar',至少。一些常规建议:使用依赖管理工具导入您的Sesame库,如Maven或Ivy。 –

+0

是的,我在线获得了此代码。我说的常用方法是以TupleQuery tuplequery = con.prepareTupleQuery(QueryLanguage.SPARQL,queryString)这样的简单方法; TupleQueryResult结果= tuplequery.evaluate()。 – user3556249

+0

我正在做一个Android应用程序。如果你还记得我问加载文件的类似问题。通过编写TurtleParser parser = new TurtleParser(),然后在代码中使用这个解析器解决了这个问题。之后,我遇到了Query的问题,我想可能会以类似的方式解决它。 – user3556249