2

親愛なる友人私は私のプロジェクトで名人と一緒にRDFデータベースモデルでイエナフレームワークを使用しています。私のイエナバージョンはjena-core2.7.2とjena-arq-2.9.2です

これが私にエラーを与えている私のコードです

public JsonArray getCountryAutoSuggestData()
{
    JsonArray countryArray = new JsonArray();
    Model model = DataModel.getModel();
    String mystr = " PREFIX plcontologyurl:<http://www.plcontology.com/#> "
            + " PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
            + "select ?cn"
            + " where "
            + " { "
            + " ?d plcontologyurl:Country_Name ?cn . "
            + "}";
    Query query = QueryFactory.create(mystr);
    QueryExecution qe = QueryExecutionFactory.create(query, model);
    QuerySolutionMap qMap = new QuerySolutionMap();
    qe.setInitialBinding(qMap);
    ResultSet rs = qe.execSelect();
    while(rs.hasNext())
    {
        qMap = (QuerySolutionMap)rs.next();
        countryArray.add(new JsonPrimitive(qMap.getLiteral("cn").getString()));
    }
    return countryArray;
}

エラーはjava.lang.InstantiationErrorです:com.hp.hpl.jena.sparql.engine.binding.BindingMap at line while(rs.hasNext())

問題を探してみたところ、関連するディスカッションが1つ見つかりました

現在、com.hp.hpl.jena.sparql.engine.binding.BindingMapは、このバージョンでは単純なクラスではなく、インターフェイスになっていると言われています。

そのような場合は、現在のバージョンでsparqlクエリを実行する方法。私が共有したコードに基づいた例を挙げてください。前もって感謝します。

4

1 に答える 1

4

クラスパスにはさまざまなバージョンがあります。

リンク先の情報は正しいです-BindingMapがインターフェースになったため、java.lang.InstantiationErrorが表示された場合は、呼び出し元のコードが以前のバージョンのARQからのものであることを意味します。

クラスパスにJenaコードのコピーが複数ないこと、およびJVMの承認されたディレクトリにコピーがないことを確認してください。

于 2012-08-20T11:26:43.317 に答える