我正在编写一个Java Web应用程序,该应用程序从URI获取RDF数据并将其存储在Jena Model对象中。目前,模型包含普通三元组,一些空白节点,没有推理。(这里已经描述了 1)。使用芝麻也是一种选择。
数据收集后,应用程序将按指定顺序显示一些收集的信息。有必要仅使用谓词和指定主语和谓词的过滤器在模型上构建过滤器(因为我们将从多个来源收集数据);在每种情况下,都会显示对象文本或 URI。
从 JSP-View 通用访问模型内容的最佳方法是什么(无需为每个函数编写自定义标记)?
JSP视图将如下所示:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head></head>
<body>
<img src="${modelBean.model.depictionPred}"/>
Name: <c:out value="${modelBean.model.namePred}"/><br/>
Life dates: <c:out value="${modelBean.model.birthPred}"/>-<c:out value="${modelBean.model.deathPred}"/><br/>
Links: <a href="${modelBean.model.linkPred}">Linktext</a><br/>
...
</body>
</html>
Jena-Servlet 收集数据:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ModelBean modelBean = new ModelBean();
Model model = ModelFactory.createDefaultModel();
model.read("http://dbpedia.org/resource/Ludwig_van_Beethoven");
modelBean.setModel(model);
request.setAttribute("modelBean", modelBean);
RequestDispatcher rd = request.getRequestDispatcher("/view.jsp");
rd.forward(request, response);
}
Servlet的芝麻变体:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ModelBean modelBean = new ModelBean();
URL url = new URL("http://dbpedia.org/resource/Ludwig_van_Beethoven");
URLConnection conn = url.openConnection();
conn.addRequestProperty("Accept", RDFFormat.TURTLE.getDefaultMIMEType());
InputStream is = conn.getInputStream();
try {
Model model = Rio.parse(is, url.toString(), RDFFormat.forMIMEType(conn.getContentType()));
} catch (RDFParseException ex) {
Logger.getLogger(ModelViewTester.class.getName()).log(Level.SEVERE, null, ex);
}
finally {
is.close();
}
modelBean.setModel(model);
request.setAttribute("modelBean", modelBean);
RequestDispatcher rd = request.getRequestDispatcher("/view.jsp");
rd.forward(request, response);
}
除了通过为调用 bean 方法提供参数可以实现某些事情之外(请参阅如何使用 JSTL/EL 从 JSP 调用参数化方法),恐怕您必须创建自定义标记,或者需要重新考虑您的访问策略。
例如,与其将整个RDF Model
放入响应中,不如在servlet端提取相关数据,并将要显示在视图响应中的相关属性作为单独的bean属性。