1

我正在尝试创建一个简单的本体,它有两个类:class1 和 class2,以及两个具有相同名称的简单文本数据属性的实例(hasName: "string1"^^xsd:string 和 hasName "string2"^^ xsd:string 分别)。我想根据正则表达式将这些实例与推理器分类到相应的类(例如,类 1 的限制是 hasName some xsd:string[pattern "string1"],这样,推理器应该推断 instance1 属于class1,但 instance2 不是)。怎么做到呢?

4

1 回答 1

0

使用 Openllet(2.6.2-SNAPSHOT) 你可以做这样的事情:

    final OWLNamedIndividual x1 = OWL.Individual("#I1");
    final OWLNamedIndividual x2 = OWL.Individual("#I2");

    owl.addAxiom(OWL.equivalentClasses(ClsA, OWL.some(propB, OWL.restrict(XSD.STRING, OWL._factory.getOWLFacetRestriction(OWLFacet.PATTERN, OWL.constant("A.A"))))));
    owl.addAxiom(OWL.propertyAssertion(x1, propB, OWL.constant("AAA")));
    owl.addAxiom(OWL.propertyAssertion(x2, propB, OWL.constant("BBB")));

    owl.addAxiom(OWL.differentFrom(x1, x2));

    final OpenlletReasoner r = owl.getReasoner();
    assertTrue(r.isEntailed(OWL.classAssertion(x1, ClsA)));
    assertFalse(r.isEntailed(OWL.classAssertion(x2, ClsA)));

如您所见:

OWL.restrict(XSD.STRING, OWL._factory.getOWLFacetRestriction(OWLFacet.PATTERN, OWL.constant("A.A"))))));

是将“正则表达式”添加到分类算法中的一种。

这里的模式是'AA',模式遵循'java-regexp'在此处输入链接描述规则。

于 2017-08-22T07:27:01.870 回答