0

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

4

1 回答 1

2

无论如何,如果您只想要基本模型的结果,则必须从OntModelwith获取基本模型OntModel.getBaseModel。如果基本模型也恰好是OntModel,您可以简单地转换它:

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

如果其他类来自子模型(与 导入的本体不完全相同owl:imports,尽管使用导入的本体owl:imports将是 的子模型OntModel),您可以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 );

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

于 2013-05-22T19:11:18.460 回答