eclipse jena解析声明

时间:2015-02-12 14:03:30

标签: rdf jena

我正在尝试将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);
}

1 个答案:

答案 0 :(得分:1)

RDFNode对象可以是LiteralResource。您可以使用在Predicate上使用的相同isLiteral()方法来确定对象的类型,然后使用asLiteral()asResource()方法执行必要的转换

如果是Literal,请尝试literal.getValue().toString()返回其名称。资源当然会与主题一样处理。