2016-11-26 88 views
0

我想在scala中构建一个sparql查询。我有使用apache arq库的问题,这是Java的意思。依赖关系似乎没有问题,但是Intellij无法解析ParameterizedSparqlString构造函数并生成QueryEngineHTTP构造函数。我正在运行jdk 1.8。有任何想法吗?感谢!Scala Sparql与Apache Jena的查询

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) 
     } 
     }) 
    }) 
    }) 
+0

哪个耶拿版?你使用Maven吗?如果是这样,请显示Maven依赖项。最后,你真的得到一个编译器错误吗? – AKSW

回答

3

(注释不复杂的文字工作,所以这个答案)

你并不需要一个ParameterizedSparqlString如果你正在做串建设自己。创建一个查询字符串,解析它,然后调用.toString有点复杂。您可以使用QueryFactory,然后使用QueryExecutionFactory

需要注意的是,在

val sparqlQuery = "" + "SELECT ?s { \n ?s rdfs:label" + namedEntity.surfaceForm + " . \n }" namedEntity.surfaceForm必须在SPARQL语法,e.g字符串需要“”周围,否则你会得到SPARQL解析错误。

1

@Becher,per @ AKSW的问题,我们需要知道你是如何解决依赖关系的。 IntelliJ为你提供了一些选择 - 我用常见的SBT(通过IvyIDEA插件)使用SBT。但是,你可以直接使用Maven,或者只是将jar添加到库中。

这是一个非常有帮助的网页,无论如何https://mvnrepository.com/artifact/org.apache.jena/jena-arq/3.1.1