Создание ограничения регулярных выражений для класса OWL
Я пытаюсь создать простую онтологию, которая имеет два класса: class1 и class2,- и два экземпляра, которые имеют простое свойство текстовых данных с тем же именем (hasName: "string1"^^xsd:string и hasName "string2"^^xsd: строка соответственно). Я хочу классифицировать эти экземпляры с помощью аргумента к соответствующим классам на основе регулярного выражения (например, ограничение для класса 1 будет иметь hasName some xsd:string[pattern "string1"], и таким образом, аргументатор должен сделать вывод, что instance1 принадлежит класс1, но экземпляр2 нет). Как это можно сделать?
1 ответ
Используя 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", введите описание ссылки здесь, правила.