3

我正在使用 servlet 来操作本体。我得到了我的 SPARQL 查询的结果,我想在 JSP(Servlet)中显示(打印)结果。

以下代码段可用于在控制台中打印结果。

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

我不做耶拿,但基本上你想迭代com.hp.hpl.jena.query.ResultSet并将信息映射到你自己的模型类的List<RowObject>位置RowObject,它代表你想在 HTML 表中显示的单行。映射后,将其List<RowObject>放入请求范围内,并将请求转发给一个 JSP。

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

此代码段将转到您的 Servlet,或者您也可以使用单独的 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 回答