2016-11-26 39 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