2012-10-03 18 views
3

我在耶拿noob,閱讀這page,更具體地在圖5(iii) - 「直接推斷關係」,我發現我所需要的。基本上,我的OntModel需要遵守以下規則:「不能被允許的直接聲明,可以推斷」。但不幸的是,我不知道如何在耶拿實現這個想法。jena直接推斷圖

我的示例代碼:

String baseUri="http://entidades.owl"; 
    OntModel base = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 

    OntClass studant = base.createClass(baseUri +"#Student"); 

    OntClass person = base.createClass(baseUri +"#Person"); 
    OntClass ser = base.createClass(baseUri +"#ThingLive"); 

    Property isA = base.createTransitiveProperty(baseUri+"#IsA", true); 
    nome.addDomain(person); 
    base.add(new StatementImpl(studant, isA, person)); 
    base.add(new StatementImpl(person, isA, ser)); 

    base.createIndividual(baseUri+"#JonhDoe",studant); 
    base.createIndividual(baseUri+"#JonhDoe",person); 
    base.createIndividual(baseUri+"#JonhDoe",ser); 
    base.write(System.out); 

    OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF,base); 
    model.write(System.out); 

好,

  1. 我嘗試建立一個 「ISA」 屬性爲 「transitiveProperty」,但推理不能識別它。我該如何解決它?

  2. 如果我改變了: base.add(new StatementImpl(studant,isA,person)); base.add(new StatementImpl(person,isA,ser));

到:

person.addSubClass(學生); ser.addSubClass(person);

推理者能夠完美推理,但不幸OntModel「base」和OntModel「model」向我展示了相同的RDF。我認爲「模型」應該顯示出我反映的最小RDF圖。

如何才能在RDF結構中看到這種變化?

非常感謝你們這些傢伙!!!!!

回答

1

你的代碼是不錯,唯一的問題是:

model.write(System.out); 

電話OntModel.write(),其被定義爲只寫示範基地。這是因爲許多用戶希望能夠擁有讀取模型,操作模型,保存模型以及不使用保存的版本(例如,關閉傳遞屬性)的工作流程。

如果查詢模型,查詢將看到推斷的三元組以及基本模型三元組。這裏只有write()受影響。如果您真的想編寫整個模型進行調試,包括推導出的三元組,請使用OntModel.writeAll()