>我正在尝试创建一个简单的本体,它有两个类:class1和class2,- 以及两个具有相同名称的简单文本数据属性的实例(hasName:"string1"^^xsd:string 和hasName "string2"^^xsd:string(。我想根据正则表达式将这些带有推理器的实例分类到相应的类(例如,类 1 的限制是 hasName some xsd:string[pattern "string1"],等等,推理者应该推断实例 1 属于类 1,但实例 2 不是(。怎么能做到呢?
使用 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"))))));
是将"正则表达式"添加到分类算法中的那个。
这里的模式是"A.A",模式遵循"java-regexp"在此处输入链接描述规则。