Создание ограничения регулярных выражений для класса 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", введите описание ссылки здесь, правила.

Другие вопросы по тегам