Напечатайте набор результатов jena в html (servlet / jsp) - PullRequest
3 голосов
/ 06 июня 2010

Я использую сервлет для управления онтологией. Я получил результат моего запроса 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);

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 06 июня 2010

Я не выполняю Jena, но в основном вы хотели бы перебрать 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> на основе 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>
...
1 голос
/ 07 июня 2010

Этот сегмент кода идет к вашему сервлету, или вы можете реализовать это, используя отдельный класс 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.

Спасибо!

...