"-6ren"> "-我目前正致力于创建 Fuseki 三重存储浏览器的项目。我需要可视化 TripleStore 中的所有数据并使应用程序可浏览。唯一的问题是 QuerySolution 遗漏了三元组中的“”。 如果我使-6ren">
gpt4 book ai didi

java - 查询解决方案,保留 "< >"

转载 作者:行者123 更新时间:2023-12-01 21:58:42 29 4
gpt4 key购买 nike

我目前正致力于创建 Fuseki 三重存储浏览器的项目。我需要可视化 TripleStore 中的所有数据并使应用程序可浏览。唯一的问题是 QuerySolution 遗漏了三元组中的“< >”。

如果我使用 ResultSetFormatter.asText(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 中的数据,它就会删除这些符号,以便数据看起来像这样:

-------------------------------------------------------------------------------------------------------------------------------
| 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

您需要做的是在呈现表格单元格时调用该代码:当前表格正在使用 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));
}
}

关于java - 查询解决方案,保留 "< >",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33995263/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com