2016-11-26 5 views
0

私はscalarでsparqlクエリを作成しようとしています。私はJava用のapache arqライブラリを使用している問題があります。依存関係はすべて問題ないようですが、IntellijはParameterizedSparqlStringコンストラクターを解決してQueryEngineHTTPコンストラクターを生成できません。私はjdk 1.8を実行しています。何か案は?感謝!!Scala Apache Jenaを使用したSparqlクエリ

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

どのJenaバージョンですか? Mavenを使用していますか?もしそうなら、Mavenの依存関係を表示してください。そして最後に、あなたは実際にコンパイラエラーを取得しますか? – AKSW

答えて

3

(コメントは複雑なテキスト、したがって、この答えには対応していません)

あなた自身を構築する文字列を行っている場合は、ParameterizedSparqlStringは必要ありません。クエリ文字列を作成し、それを解析してから.toStringを呼び出すと、少し複雑です。 QueryFactory、次にQueryExecutionFactoryを使用できます。

val sparqlQuery = "" + "SELECT ?s { \n ?s rdfs:label" + namedEntity.surfaceForm + " . \n }" namedEntity.surfaceFormはSPARQL構文でなければならないこと、例えば文字列は、そうでなければ、SPARQLでパースエラーが表示されますが、その周りに「」必要があります。

1

@Becher、@ AKSWの質問ごとに、依存関係をどのように解決しようとしているのかを知る必要があります。 IntelliJにはいくつかのオプションがあります - Ivy(IvyIDEAプラグインを使用)を使ってSBTを使用していますが、Mavenを直接使用することも、ライブラリにjarファイルを追加することもできます。

これはどんな場合でも非常に便利なページですhttps://mvnrepository.com/artifact/org.apache.jena/jena-arq/3.1.1

関連する問題