有一种方法可以在不使用推理器for (OWLClass child : reasoner.getSubClasses(clazz, true).getFlattened() )
的情况下查找类的所有已命名子类,而无需使用公理进行推理?谢谢
答案 0 :(得分:2)
使用owl-api本体可以查询获取所有子类的公理。 然后筛选结果以仅保留命名的类。
for (final OWLSubClassOfAxiom subClasse : ontology.getAxioms(AxiomType.SUBCLASS_OF))
{
if (subClasse.getSuperClass() instanceof OWLClass && subClasse.getSubClass() instanceof OWLClass)
{
System.out.println(subClasse.getSubClass() + " extends " + subClasse.getSuperClass());
}
}
使用Jena,您可以列出语句,添加查找" subClassOf"谓词,然后在owl-api中你过滤只获得非烦人的对象。
final StmtIterator it = model.listStatements();
while (it.hasNext())
{
final Statement s = it.next();
if (s.getPredicate().equals(RDFS.subClassOf) && !s.getObject().isAnon())
System.out.println(s.getSubject() + " extends " + s.getObject());
}