我知道如何使用OntModel来实现它,但是这个构造函数的问题在于我从导入的本体中获取了类,我只想从BaseModel获取类和子类。 如果我使用方法listSubjects()我也得到属性,我不想要它们。 谢谢。
答案 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 );
并使用这些陈述。当然,前两种方法会更容易。