0
我知道如何使用OntModel来完成它,但是这个构造函数的问题是我也从导入的本体中得到了类,而我只想从BaseModel中获取类和子类。 如果我使用方法listSubjects()我也得到属性,我不希望他们。 谢谢。如何使用类模型从本体中只获取类和子类?
我知道如何使用OntModel来完成它,但是这个构造函数的问题是我也从导入的本体中得到了类,而我只想从BaseModel中获取类和子类。 如果我使用方法listSubjects()我也得到属性,我不希望他们。 谢谢。如何使用类模型从本体中只获取类和子类?
无论如何,如果您只想从基本模型得到结果,您必须从OntModel
和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);
,并与这些语句的工作。当然,前两种方法会更容易。