使用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'enter link description here規則。
您可以使用'xsd:pattern'的OWL facet限制作爲數據類型 – AKSW
在曼徹斯特語法中:'class1 SubClassOf hasName some string [pattern'THE_PATTERN_HERE「] – AKSW
但它取決於推理支持的確,您可以試試Pellet和HermiT--可能是REGEX模式中的一種。 – AKSW