如何使用 Jena 获取资源的 EXPLICIT listProperties(而非推断属性)

How to get EXPLICIT listProperties (not Infered properties) of a Resource with Jena

我正在使用这个家庭 ontology (www.cs.man.ac.uk/~stevensr/ontology/family.rdf.owl),我删除了所有现有的个人。 通过使用 Jena,我向 class Person 添加了 02 个 "paul" 和 "sara" 实例,并声明 sara 是 paul 的姐妹。

String u = "http://www.co-ode.org/roberts/family-tree.owl#";
String path = "src/main/resources/family.rdf.owl" ;

OntModel model = ModelFactory.createOntologyModel();
model.read(path);

OntClass c = model.getOntClass(u + "Person");
Individual s = c.createIndividual(u + "Sara");
Individual p = c.createIndividual(u+"Paul");
model.add(s, model.getObjectProperty(u+"isSisterOf"), p);
StmtIterator stmtIterator = s.listProperties();
stmtIterator.forEachRemaining(System.out::println);

s.listProperties() returns 声明 sara isSisterOf paul 还有,sara isDirectSiblingOf paul, sara isSiblingOf paul, sara isBloodRelationOf paul, sara isRelationOf paul 似乎 Resource.listProperties() 也是 returns INDIRECT 属性,因为 isSisterOf 是其他属性的子属性。我只想要我明确声明的关系 sara isSisterOf paul,而不是包含的关系。

终于如我所料,是一个蕴涵问题。问题在于用于创建 OntModel 的 OntModelSpec

我正在使用:OntModel model = ModelFactory.createOntologyModel();

根据 Jena 文档,它回答

a new ontology model which will process in-memory models of ontologies expressed the default ontology language (OWL)

我已经改成了OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);

耶拿医生说的

uses a specification for OWL DL models that are stored in memory and do no additional entailment reasoning

现在,Resource#listProperties

只有直接关系 isSisterOf 是 return

@ssz 感谢您的回复,让我用新的眼光看待我的问题。