耶拿有没有办法看到OntClass来自导入的本体?

问题描述 投票:0回答:1
owl jena
1个回答
0
投票

正如 UninformedUser 的评论中所说,感谢他,您可以执行以下操作:

  • 列出所有导入本体的URI
    model.listImportedOntologyURIs()
  • 列出导入本体的所有类
    model.getImportedModel(uri).listClasses()
  • 在模型的所有类上创建一个迭代器,删除所有导入的类
    model.listClasses().filterDrop(importedClasses::contains)

因此,要打印模型的所有类而无需导入类:

import java.util.HashSet;
import java.util.Set;

import org.apache.jena.ontology.OntClass;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.OntModelSpec;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.util.iterator.ExtendedIterator;

OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
model.read("file:///Users/von/tools/data.owl", "RDF/XML");
Set<OntClass> importedClasses = new HashSet<>();
for (String uri : model.listImportedOntologyURIs()) {
  importedClasses.addAll(model.getImportedModel(uri).listClasses().toSet());
}

ExtendedIterator<OntClass> it = model.listClasses().filterDrop(importedClasses::contains);
while (it.hasNext()) {
  OntClass cls = it.next();
  System.out.println(cls);
} 
© www.soinside.com 2019 - 2024. All rights reserved.