我是耶拿的菜鸟并阅读page,更具体地说是图5(iii) - “直接推断关系”我找到了我需要的东西。基本上,我的OntModel需要遵守以下规则:“不能允许可以推断的直接语句”。但不幸的是,我不知道如何在耶拿实现这一想法。
我的示例代码是:
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);
那么,
我尝试将“isA”属性构建为“transitiveProperty”,但推理器无法识别它。我该如何解决?
如果我改变: base.add(new StatementImpl(studant,isA,person)); base.add(new StatementImpl(person,isA,ser));
为:
person.addSubClass(学生); ser.addSubClass(人);
推理者能够完美地推断出来,但不幸的是,OntModel“base”和OntModel“模型”向我展示了相同的RDF。我认为“模型”应该向我展示反映的最小RDF图。
如何在RDF结构中看到这种变化?
非常感谢你们!!!!!
答案 0 :(得分:1)
你的代码很好,唯一的问题是:
model.write(System.out);
调用OntModel.write()
,它被定义为仅编写基本模型。这是因为许多用户希望能够拥有读取模型,操作模型,保存模型以及不使用例如关闭传递属性而污染的已保存版本的工作流程。
如果查询模型,您的查询将看到推断的三元组以及基本模型三元组。这里仅受write()
影响。如果您真的想要编写整个模型以进行调试,包括推导出的三元组,请使用OntModel.writeAll()
。