需要使属性传递

时间:2012-03-24 14:43:11

标签: jena ontology

我正在使用Jena和TDB。我成功存储三元组但需要指定某个属性“isA”是传递的,以便使用TransitiveReasoner进行推理。

以下是我正在使用的一些方法:

private void AddTriple(String arg1, String pred, String arg2) {
    Resource r = m.createResource(NS + arg1);
    Property p = m.createProperty(NS + pred);
    Property p2 = m.createProperty(NS + arg2);
    r.addProperty(p, p2);
}

private void addTest() {
    AddTriple("cat", "isA", "feline");
    AddTriple("feline", "isA", "mammal");
    AddTriple("mammal", "isA", "animal");
    m.close();
}

我按如下方式加载模型:

Dataset dataset = TDBFactory.createDataset(directory);
m = dataset.getDefaultModel();
addTest();

我正在设置推理器如下:

Reasoner reasoner = ReasonerRegistry.getTransitiveReasoner();    
InfModel inference = ModelFactory.createInfModel(reasoner, m);

推理模型包含:

<ModelCom   {http://namespace/test#cat @http://namespace/test#isA http://namespace/test#feline; http://namespace/test#feline @http://namespace/test#isA http://namespace/test#mammal; http://namespace/test#mammal @http://namespace/test#isA http://namespace/test#animal} | >

由于“isA”属性未指定为传递属性,因此推理模型包含与原始模型完全相同的三元组。我如何指定“isA”属性是可传递的,所以我可以得到以下三元组:

cat isA mammal
cat isA animal

1 个答案:

答案 0 :(得分:2)

“当一个属性P定义为传递属性时,这意味着如果一对(x,y)是P的实例,并且该对(y,z)也是P的实例,那么我们可以推断对(x,z)也是P的一个实例。 从语法上讲,通过使属性成为内置的OWL类owl:TransitiveProperty的实例,将属性定义为可传递的,该属性被定义为owl:ObjectProperty的子类。 - http://www.w3.org/TR/owl-ref/#TransitiveProperty-def

因此,您需要将属性定义为可传递,您可以通过将以下RDF三元组添加到Jena模型来实现:

<http://namespace/test#isA> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#TransitiveProperty>

m.add(ResourceFactory.createResource(NS +“isA”),RDF.type,OWL.TransitiveProperty)

我还建议您阅读Jena网站上有关本体和推理的文档: