在JSP视图中访问RDF模型的最佳方法是什么?

时间:2014-02-14 15:09:19

标签: java spring rdf jena sesame

我正在编写一个Java Web应用程序,它从URI中获取RDF数据并将它们存储在Jena Model对象中。目前这些模型包含普通的三元组,一些空白节点,没有推论。 (这里已经描述了1)。使用芝麻也是一种选择。

数据收集后,应用程序按指定顺序显示一些收集的信息。有必要在模型上使用谓词和过滤器指定主题和过滤器来构建过滤器。谓词(因为我们将从几个来源收集数据);在每种情况下,都会显示object-literal或URI。

从JSP-View一般访问模型内​​容的最佳方法是什么(不为每个函数编写自定义标记)?

JSP-View 将如下所示:

<%@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的Sesame-Variant:

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);
    }

1 个答案:

答案 0 :(得分:0)

除了可以通过为bean方法调用提供参数来实现某些功能(参见How to call parameterized method from JSP using JSTL/EL),我担心你不得不创建自定义标签,或者需要重新考虑访问策略

例如,您可以在servlet端提取相关数据,而不是将整个RDF Model放入响应中,只需将要显示的相关属性放在视图响应中即可。 ,作为单独的bean属性。