我正在使用这个家庭本体(www.cs.man.ac.uk/~stevensr/ontology/family.rdf.owl),我删除了所有现有的个体。 通过使用Jena,我添加了02个实例" paul"和" sara"对班级人员说萨拉是保罗的姐妹。
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 paul
似乎Resource.listProperties()
也返回INDIRECT属性,因为isSisterOf是其他属性的子属性。我只想要明确说明sara isSisterOf paul
的关系,而不是所涉及的关系。
答案 0 :(得分:0)
最后,我怀疑这是一个蕴涵的问题。问题在于用于创建OntModel的 OntModelSpec 。
我正在使用:OntModel model = ModelFactory.createOntologyModel();
根据Jena doc,它回答
一种新的本体模型,它将处理本体的内存模型 表达了默认的本体语言( OWL )
我已更改为OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
Jena doc说它
使用存储在内存中的 OWL DL 模型的规范 不做任何额外的蕴涵推理
现在,isSisterOf
Resource#listProperties
@ssz感谢您的回复,让我用新的眼光看待我的问题。