如何使用类Model从本体中获取类和子类?

时间:2013-05-22 15:35:54

标签: jena

我知道如何使用OntModel来实现它,但是这个构造函数的问题在于我从导入的本体中获取了类,我只想从BaseModel获取类和子类。 如果我使用方法listSubjects()我也得到属性,我不想要它们。 谢谢。

1 个答案:

答案 0 :(得分:2)

无论如何,如果您只想要基础模型的结果,您必须从OntModel获得OntModel.getBaseModel的基本模型。如果基本模型恰好是OntModel,您可以简单地投射它:

OntModel model = ...;
OntModel base = (OntModel) model.getBaseModel();

如果其他类来自子模型(与owl:imports导入的本体不完全相同,尽管使用owl:imports导入的本体将是OntModel的子模型{1}}),您可以使用相同的基本模型创建新的OntModel,但不能创建其他子模型:

OntModel model = ...;
OntModel wrappedBase 
  = ModelFactory.createOntologyModel( model.getSpecification(), 
                                      model.getBaseModel() );

然后使用wrappedBase列出您感兴趣的类和子类。如果您真的不想要第二个OntModel,那么您可以在表示您感兴趣的事物的基本模型,但这需要了解本体语言如何表示类。 OWL模型可能是最常见的,因此您可以执行以下操作:

OntModel model = ...;
Model base = model.getBaseModel();
... = base.listStatements( null, RDF.type, OWL.Class );
... = base.listStatements( null, RDFS.subClassOf, null );

并使用这些陈述。当然,前两种方法会更容易。