如何使用Jena

时间:2018-05-23 00:11:52

标签: java jena

我正在使用这个家庭本体(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 paulsara isSiblingOf paulsara isBloodRelationOf paulsara isRelationOf paul 似乎Resource.listProperties()也返回INDIRECT属性,因为isSisterOf是其他属性的子属性。我只想要明确说明sara isSisterOf paul的关系,而不是所涉及的关系。

1 个答案:

答案 0 :(得分:0)

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

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

根据Jena doc,它回答

  

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

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

Jena doc说它

  

使用存储在内存中的 OWL DL 模型的规范   不做任何额外的蕴涵推理

现在,isSisterOf

只返回DIRECT关系Resource#listProperties

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