QuerySolution,保留“<>”
QuerySolution, keep the "< >"
我目前正忙于创建 Fuseki 三重商店浏览器的项目。我需要可视化 TripleStore 中的所有数据并使应用程序可浏览。唯一的问题是 QuerySolution 遗漏了三元组中的“< >”。
如果我使用 ResultSetFormatter.asText(ResultSet)
它 returns 这个:
-------------------------------------------------------------------------------------------------------------------------------------
| subject | predicate | object |
=====================================================================================================================================
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq> |
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1> | <urn:animals:lion> |
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2> | <urn:animals:tarantula> |
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_3> | <urn:animals:hippopotamus> |
-------------------------------------------------------------------------------------------------------------------------------------
请注意,某些数据包含 smaller/greater 而不是符号“<”和“>”。一旦我尝试从 ResultSet 解析数据,它就会删除这些符号,因此数据如下所示:
-------------------------------------------------------------------------------------------------------------------------------
| subject | predicate | object |
===============================================================================================================================
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#type | http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq |
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#_1 | urn:animals:lion |
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#_2 | urn:animals:tarantula |
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#_3 | urn:animals:hippopotamus |
如您所见,数据不包含“<”和“>”符号。
这是我从 ResultSet 中解析数据的方式:
while (rs.hasNext()) {
// Moves onto the next result
QuerySolution sol = rs.next();
// Return the value of the named variable in this binding.
// A return of null indicates that the variable is not present in
// this solution
RDFNode object = sol.get("object");
RDFNode predicate = sol.get("predicate");
RDFNode subject = sol.get("subject");
// Fill the table with the data
DefaultTableModel modelTable = (DefaultTableModel) this.getModel();
modelTable.addRow(new Object[] { subject, predicate, object });
}
这个问题比较难解释,有没有办法在解析数据后保留“<>”符号?
格式化程序使用“<>”来指示该值是 URI 而不是字符串:因此 "http://example.com/"
是文字文本值,而 <http://example.com/>
是 URI。
你也可以自己做同样的事情:
RDFNode node; // subject, predicate, or object
if (node.isURIResource()) {
return "<" + node.asResource().getURI() + ">";
} else {
...
}
但是用起来更方便FmtUtils:
String nodeAsString = FmtUtils.stringForRDFNode(subject); // or predicate, or object
您需要做的是在呈现 table 单元格时调用该代码:当前 table 正在使用 Object::toString()
.
概括地说,需要的步骤是:
modelTable.setDefaultRenderer(RDFNode.class, new MyRDFNodeRenderer());
然后查看 http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer 如何创建简单的渲染器。请注意 value
将是 RDFNode
:
static class MyRDFNodeRenderer extends DefaultTableCellRenderer {
public MyRDFNodeRenderer() { super(); }
public void setValue(Object value) {
setText((value == null) ? "" : FmtUtils.stringForRDFNode((RDFNode) value));
}
}
我目前正忙于创建 Fuseki 三重商店浏览器的项目。我需要可视化 TripleStore 中的所有数据并使应用程序可浏览。唯一的问题是 QuerySolution 遗漏了三元组中的“< >”。
如果我使用 ResultSetFormatter.asText(ResultSet)
它 returns 这个:
-------------------------------------------------------------------------------------------------------------------------------------
| subject | predicate | object |
=====================================================================================================================================
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq> |
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1> | <urn:animals:lion> |
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2> | <urn:animals:tarantula> |
| <urn:animals:data> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_3> | <urn:animals:hippopotamus> |
-------------------------------------------------------------------------------------------------------------------------------------
请注意,某些数据包含 smaller/greater 而不是符号“<”和“>”。一旦我尝试从 ResultSet 解析数据,它就会删除这些符号,因此数据如下所示:
-------------------------------------------------------------------------------------------------------------------------------
| subject | predicate | object |
===============================================================================================================================
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#type | http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq |
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#_1 | urn:animals:lion |
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#_2 | urn:animals:tarantula |
| urn:animals:data | http://www.w3.org/1999/02/22-rdf-syntax-ns#_3 | urn:animals:hippopotamus |
如您所见,数据不包含“<”和“>”符号。
这是我从 ResultSet 中解析数据的方式:
while (rs.hasNext()) {
// Moves onto the next result
QuerySolution sol = rs.next();
// Return the value of the named variable in this binding.
// A return of null indicates that the variable is not present in
// this solution
RDFNode object = sol.get("object");
RDFNode predicate = sol.get("predicate");
RDFNode subject = sol.get("subject");
// Fill the table with the data
DefaultTableModel modelTable = (DefaultTableModel) this.getModel();
modelTable.addRow(new Object[] { subject, predicate, object });
}
这个问题比较难解释,有没有办法在解析数据后保留“<>”符号?
格式化程序使用“<>”来指示该值是 URI 而不是字符串:因此 "http://example.com/"
是文字文本值,而 <http://example.com/>
是 URI。
你也可以自己做同样的事情:
RDFNode node; // subject, predicate, or object
if (node.isURIResource()) {
return "<" + node.asResource().getURI() + ">";
} else {
...
}
但是用起来更方便FmtUtils:
String nodeAsString = FmtUtils.stringForRDFNode(subject); // or predicate, or object
您需要做的是在呈现 table 单元格时调用该代码:当前 table 正在使用 Object::toString()
.
概括地说,需要的步骤是:
modelTable.setDefaultRenderer(RDFNode.class, new MyRDFNodeRenderer());
然后查看 http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer 如何创建简单的渲染器。请注意 value
将是 RDFNode
:
static class MyRDFNodeRenderer extends DefaultTableCellRenderer {
public MyRDFNodeRenderer() { super(); }
public void setValue(Object value) {
setText((value == null) ? "" : FmtUtils.stringForRDFNode((RDFNode) value));
}
}