3

オントロジーを操作するためにサーブレットを使用しています。SPARQLクエリの結果を取得し、その結果をJSP(サーブレット)で表示(印刷)したいと思います。

次のコードセグメントを使用して、結果をコンソールに出力できます。

com.hp.hpl.jena.query.Query query = QueryFactory.create(queryStr);
QueryExecution qe = QueryExecutionFactory.create(query,model);
com.hp.hpl.jena.query.ResultSet rs = qe.execSelect();
ResultSetFormatter.out(System.out, rs);

何か案が?

4

2 に答える 2

2

私は Jena を行いませんが、基本的には、HTML テーブルに表示する単一の行を表す独自のモデル クラスであるwherecom.hp.hpl.jena.query.ResultSetに情報を反復処理してマップしたいと考えています。マッピング後、 をリクエスト スコープに入れ、リクエストを JSP に転送します。List<RowObject>RowObjectList<RowObject>

List<RowObject> results = getItSomeHow();
request.setAttribute("results", results); // Will be available as ${results} in JSP
request.getRequestDispatcher("page.jsp").forward(request, response);

次に、JSP でJSTL c:forEachを使用して を反復処理しList<RowObject>、HTML テーブルを出力します。

<table>
    <c:forEach items="${results}" var="rowObject">
        <tr>
            <td>${rowObject.someProperty}</td>
            <td>${rowObject.anotherProperty}</td>
            ...
        </tr>
    </c:forEach>
</table>

他の回答に基づいて更新List<RowObject>します。Jena の に基づいて を作成する方法は次のResultSetとおりです。

List<RowObject> results = new ArrayList<RowObject>();
while (rs.hasNext()) {
    RowObject result = new RowObject();
    QuerySolution binding = result.nextSolution();
    result.setInd(binding.get("ind"));
    result.setSomethingElse(binding.get("something_else"));
    // ...
    results.add(result);
}

そして、次のように表示します。

...
<td>${rowObject.ind}</td>
<td>${rowObject.somethingElse}</td>
...
于 2010-06-06T18:16:58.527 に答える
1

このコード セグメントはサーブレットに送られます。または、別の Java クラスを使用して実装することもできます。

com.hp.hpl.jena.query.Query query = QueryFactory.create(queryStr);
QueryExecution qe = QueryExecutionFactory.create(query,model);
com.hp.hpl.jena.query.ResultSet rs = qe.execSelect();

while(rs.hasNext()){

 QuerySolution binding = rs.nextSolution();                     
 System.out.println(binding.get("ind")); 
}

ノート:

「ind」は、SPARQLクエリのSELECT句で参照している変数です。

ありがとうございました!

于 2010-06-07T17:26:17.017 に答える