当我运行“getEquivalentClass()”并且我的equivalentClass是远程的(EX:http://dbpedia.org/data3/Film.rdf)时引发错误:
无法将节点http://dbpedia.org/data3/Film.rdf转换为OntClass:它没有rdf:type owl:Class或等效
我的代码是:
OntModel m = ModelFactory.createOntologyModel();
m.read("http://localhost/ontology/my_ontology.owl#Film");
Resource r = m.getResource(outputs.get(i).getParamType().getURI().toString());
OntClass filmClass = (OntClass) r.as( OntClass.class );
for (Iterator j = filmClass.listEquivalentClasses(); j.hasNext(); ) {
System.out.println(j.next());
}
电影本体论(my_ontology.owl#Film):
<owl:Class rdf:about="#Film">
<rdfs:subClassOf rdf:resource="#Media"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">1</owl:minCardinality>
<owl:onProperty rdf:resource="#Title"/>
</owl:Restriction>
</rdfs:subClassOf>
<owl:equivalentClass rdf:resource="http://dbpedia.org/data3/Film.rdf"/>
</owl:Class>
有可能吗?我失去了很多时间找到这个解决方案。
谢谢你的帮助!
答案 0 :(得分:2)
耶拿用户名单 Dave Reynolds 的回答:
这与资源是否为远程无关,而是本地模型是否知道资源确实是一个类。
最简单的解决方案是设置:
m.setStrictMode(false);
另一种方法是启用推理,因此推断可以推断出它是owl:equivalentClass断言的对象,http://dbpedia.org/data3/Film.rdf必须是一个类。但推论在这里是过度的。
BTW这是错误的URI,电影的dbpedia资源URI实际上是:
http://dbpedia.org/ontology/Film