我正在尝试将RDF文件解析为语句,并将下拉列表中的值显示为主题对象和谓词。 Textfields将是localNames,而后面的值将相应地是URI或文字。对于主题和谓词,我认为我可以处理这个但是对于对象,RDFNode类没有getLocalName属性,这让我处于困境。任何帮助将受到高度赞赏
public void TestMethod() {
Map<String, Map<String, Object>> patternMap = new HashMap<String, Map<String, Object>>();
Map<String, Object> subjectMap = new HashMap<String, Object>();
Map<String, Object> predicateMap = new HashMap<String, Object>();
Map<String, Object> objectMap = new HashMap<String, Object>();
Model model = ModelFactory.createDefaultModel();
model.read("dbpedia.owl");
StmtIterator iter = model.listStatements();
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
subjectMap.put(stmt.getSubject().getLocalName(),stmt.getSubject().getURI() );
predicateMap.put(stmt.getPredicate().getLocalName(),(stmt.getPredicate().isLiteral() ? stmt.getPredicate().getLocalName() : stmt.getPredicate().getURI()));
objectMap.put(stmt.getObject().toString(), stmt.getObject().toString());
}
patternMap.put("Subjects", subjectMap);
patternMap.put("Predicates", predicateMap);
patternMap.put("Objects",objectMap);
}
答案 0 :(得分:1)
RDFNode
对象可以是Literal
或Resource
。您可以使用在Predicate上使用的相同isLiteral()
方法来确定对象的类型,然后使用asLiteral()
和asResource()
方法执行必要的转换
如果是Literal,请尝试literal.getValue().toString()
返回其名称。资源当然会与主题一样处理。