eclipse jena 解析语句
eclipse jena parsing statement
我正在尝试将 RDF 文件解析为语句,并在下拉列表中将值显示为主题对象和谓词。文本字段将是本地名称,而后面的值将是相应的 URI 或文字。对于主题和谓词,我认为我可以处理这个,但对于对象,RDFNode class 没有 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);
}
RDFNode
对象将是 Literal
或 Resource
。您可以使用您在 Predicate 上使用的相同 isLiteral()
方法来确定对象的类型,然后使用 asLiteral()
和 asResource()
方法执行必要的转换。
在文字的情况下,尝试 literal.getValue().toString()
到 return 它的名字。资源当然会像主题一样被处理。
我正在尝试将 RDF 文件解析为语句,并在下拉列表中将值显示为主题对象和谓词。文本字段将是本地名称,而后面的值将是相应的 URI 或文字。对于主题和谓词,我认为我可以处理这个,但对于对象,RDFNode class 没有 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);
}
RDFNode
对象将是 Literal
或 Resource
。您可以使用您在 Predicate 上使用的相同 isLiteral()
方法来确定对象的类型,然后使用 asLiteral()
和 asResource()
方法执行必要的转换。
在文字的情况下,尝试 literal.getValue().toString()
到 return 它的名字。资源当然会像主题一样被处理。