我是耶拿(Jena)的菜鸟,正在阅读此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(s​​tudent);
    ser.addSubClass(person);

    推理机能够完美推断,但不幸的是,OntModel“基础”和OntModel“模型”向我展示了相同的RDF。我认为“模型”应该向我显示一个最小的RDF图。

    我应该怎么做才能看到RDF结构中的这种变化?

    十分感谢大家!!!!!

    最佳答案

    您的代码是好的,唯一的问题是:

    model.write(System.out);
    

    调用OntModel.write(),它被定义为仅编写基本模型。这是因为许多用户希望能够拥有读取模型,操作模型,保存模型的工作流,并且不希望保存的版本因传递属性的关闭而受到污染。

    如果查询模型,则查询将看到推断的三元组以及基本模型三元组。这是唯一受影响的write()。如果您确实想编写整个模型进行调试,包括推论的三元组,请使用OntModel.writeAll()

    09-16 07:18