我的本体论中有一堂Joy。它有个人快乐,很高兴等。快乐状态欢乐的isDefinedBy Annotation属性。现在我想获得传递的任何个体的类名(或URI),所以我尝试了个人的getOntClass()方法,但没有得到所需的结果。然后我尝试了getIsDefinedBy()方法并得到了这个。
Exception in thread "main" com.hp.hpl.jena.ontology.ConversionException: Cannot convert node "Joy" to OntResource
at com.hp.hpl.jena.ontology.impl.OntResourceImpl$1.wrap(OntResourceImpl.java:79)
at com.hp.hpl.jena.enhanced.EnhNode.convertTo(EnhNode.java:152)
at com.hp.hpl.jena.enhanced.EnhNode.convertTo(EnhNode.java:31)
at com.hp.hpl.jena.enhanced.Polymorphic.asInternal(Polymorphic.java:62)
at com.hp.hpl.jena.enhanced.EnhNode.as(EnhNode.java:107)
at com.hp.hpl.jena.ontology.impl.OntResourceImpl.objectAs(OntResourceImpl.java:1411)
at com.hp.hpl.jena.ontology.impl.OntResourceImpl.objectAsResource(OntResourceImpl.java:1421)
at com.hp.hpl.jena.ontology.impl.OntResourceImpl.getIsDefinedBy(OntResourceImpl.java:395)
at myPackage.Ontology.load(Ontology.java:90)
at myPackage.MyClass.main(MyClass.java:75)
这是我使用的代码
Individual indiv = mod.getIndividual(namespace + "Happy");
//System.out.println(indiv.getOntClass());
System.out.println(indiv.getIsDefinedBy());
我该怎么办?
答案 0 :(得分:2)
据我所知Jena(我已经使用它3个月了)你误解了URI的含义。 URI代表唯一资源标识符或类似的东西,因此同一个OntClass的2个个体将具有不同的URI但是相同的OntClass。
如果我错了,请纠正我,但是你想让这个人属于这个OntClass,对吧?
如果是OntClass,您想要检索我的个人解决方案是使用type
命名空间的属性rdf
。
OntModel m = ModelFactory.createOntModel();
m.read("file:///" + ontologyPath);
string RDF = m.getNsPrefixURI("rdf");
string namespace = m.getNSPrefixURI(yourOntologyPrefix);
Property type = m.getProperty(RDF, "type");
Individiual indiv = m.getIndividual(namespace + "Happy");
if (indiv.getPropertyResourceValue(type).toString().Equals(namespace + "Joy"))
println("you got it");
else
println("this is not joy :(");
可能不是最优雅的方式,但很好:D