我在这里遇到了一个问题,看起来很简单,但是因为我对 Sparal 查询不太熟悉,所以我找不到解决方案。
让我解释一下我的问题。我想在 HTML 表中显示 SPARQL 查询的结果。我已经创建了我的查询并且它已成功执行,但我不知道如何在网页上将结果显示为 HTML 表格。
例如,我希望一个单元格包含一个名称,另一个单元格显示有关具有该名称的人的所有信息或描述……这个名称取自我的本体。我想知道这是否可能。如果是,我该怎么做?
Jena 默认不提供将查询结果输出为 HTML 的方法。但是,可以让它生成 XML。你需要一个ResultSetFormatter
. 这是一个例子:
Dataset ds = TDBFactory.createDataset(dbDirectory.getAbsolutePath());
Model model = ds.getDefaultModel();
String query = "SELECT * WHERE {?subject ?predicate ?object .}";
execution = QueryExecutionFactory.create(query, model.getUnionGraph());
ResultSet results = execution.execSelect();
resultString = ResultSetFormatter.asXMLString(results);
(为清楚起见省略了异常捕获)
您将以这种方式获得的 XML 将具有非常简单的形式。这是我上面使用的查询的示例:
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="subject"/>
<variable name="predicate"/>
<variable name="object"/>
</head>
<results>
<result>
<binding name="subject">
<uri>http://blahblahblah</uri>
</binding>
<binding name="predicate">
<uri>http://foobar</uri>
</binding>
<binding name="object">
<uri>http://fizzbuzz</uri>
</binding>
</result>
<result>
<binding name="subject">
<uri>http://yadayada</uri>
</binding>
<binding name="predicate">
<uri>http://example</uri>
</binding>
<binding name="object">
<literal>This is a literal, expect them to pop up here and there too</literal>
</binding>
</result>
<!-- and the results continue like this -->
</results>
</sparql>
从这里到 HTML 表是应用 XSL 转换的问题。使用 XPath 或 XML 解析器读取数据并将其传递给 JSP 也很容易。
另一种选择是使用ResultSetFormatter
来返回 aModel
并使用Jena 提供的迭代器来构造一个表。