首页 > 解决方案 > 如何使用 Jena 获取资源的 EXPLICIT listProperties(非推断属性)

问题描述

我正在使用这个家庭本体(www.cs.man.ac.uk/~stevensr/ontology/family.rdf.owl),我已经删除了所有现有的个人。通过使用 Jena,我在 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()返回语句sara isSisterOf paul但也, , sara isDirectSiblingOf paul, sara isSiblingOf paul,sara isBloodRelationOf paul似乎sara isRelationOf paulResource.listProperties()返回 INDIRECT 属性,因为 isSisterOf 是其他属性的子属性。我只想要我明确陈述的关系sara isSisterOf paul,而不是必然的关系。

标签: javajena

解决方案


最后,正如我所怀疑的那样,这是一个蕴涵问题。问题在于用于创建 OntModel 的 OntModelSpec

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

根据 Jena doc,它回答

一种新的本体模型,它将处理本体的内存模型,表示默认本体语言(OWL

我已更改为OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);

耶拿医生说

使用存储在内存 中且不进行额外蕴涵推理的OWL DL模型的规范

现在,只有 DIRECT 关系isSisterOfResource#listProperties

@ssz 感谢您的回复,促使我以新的眼光看待我的问题。


推荐阅读