2017-10-07 12 views
2

Es gibt eine Möglichkeit, alle benannten Unterklassen einer Klasse zu finden, ohne einen Reasoner zu verwenden for (OWLClass child : reasoner.getSubClasses(clazz, true).getFlattened()) und ohne Schlussfolgerung nur durch Verwendung von Axiomen? DankeUnterklassen einer Klasse erhalten OwlApi

Antwort

2

Mit Eulen-API kann die Ontologie abgefragt werden, um alle Unterklassen-Axiome zu erhalten. Dann filtern Sie das Ergebnis, um nur die benannten Klassen beizubehalten.

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 verwenden, können Sie Anweisung auflisten, hinzufügen Look für die "subClassOf" Prädikat, dann wie in owl-api Sie nur nicht-annoymous Objekte zu erhalten filtern, um.

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()); 
} 
+0

Vielen Dank für die Lösung. es berücksichtigt jedoch keine Beziehungen zwischen Klassen und der Klasse der ersten Ebene, die Sache ist. Ich verstehe, denn in der owl.file gibt es keinen Verweis darauf, dass diese Klassen Unterklassen von Thing sind, die vom Reasoner gemacht werden. Es gibt keine Möglichkeit, sie zu berücksichtigen, ohne einen Reasoner zu verwenden? Ich hoffe, dass ... – Nina

+0

Machen Sie einen Satz (A) aller Unterklassen gesehen, die keine Unterklassen von Ding sind. Nimm die Menge (B) aller Klassen in die Signatur und entferne die Klassen von (A). Der Rest von B sollte ein zusätzlicher Satz von Klassen sein, die direkt Unterklassen von Thing sind. – Galigator

Verwandte Themen