我正在尝试在Scala中构建SPARQL查询。我使用用于Java的Apache ARQ库有问题。依赖项似乎都很好,但是Intellij无法解析参数化的SparqlString构造器,并导致了QueryEngineHTTP构造函数。我正在运行JDK 1.8。有任何想法吗?感谢!
val sparqlentities = namedEntitiesByDocument
.mapPartitions(iter => {
val sparqlEndpoint = "localhost:1643";
iter.map( t => {
t._1, t._2.map(namedEntity => {
val sparqlQuery = "" + "SELECT ?s { n ?s rdfs:label" + namedEntity.surfaceForm + " . n }"
val query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ)
// val querySolutionMap = new QuerySolutionMap()
val parameterizedSparqlString = new ParameterizedSparqlString(query.toString(), new QuerySolutionMap())
val httpQuery = new QueryEngineHTTP(sparqlEndpoint,parameterizedSparqlString.asQuery())
val results = httpQuery.execSelect()
while (results.hasNext()) {
val solution = results.next()
val fin_result = solution.get("s").asLiteral().getLexicalForm()
(namedEntity.surfaceForm, fin_result)
}
})
})
})
(评论对复杂文本不起作用,因此答案)
如果您要构建字符串,则不需要ParameterizedSparqlString
。创建一个查询字符串,对其进行解析,然后调用.toString
有点令人费解。您可以使用QueryFactory
,然后使用QueryExecutionFactory
。
请注意,在
val sparqlQuery = "" + "SELECT ?s { n ?s rdfs:label" + namedEntity.surfaceForm + " . n }"
namedEntity.surfaceForm
必须在SPARQL语法中,例如围绕它的字符串需求,否则您将在Sparql中获得解析错误。
@becher,per @aksw的问题,我们需要知道您如何尝试解决依赖关系。Intellij为您提供了一些选择 - 我使用SBT,我认为这很常见,在Ivy(通过Ivyidea插件)中。
在任何情况下,这都是一个非常有用的页面