Сопоставление абстрактного класса в Jess Tab Protege

В моей онтологии Protege у меня есть абстрактный класс Building с конкретными дочерними классами Chalet и Apartment.

Я хочу сопоставить их с LHS правила Джесса, но не могу заставить его работать.

Моя попытка заключается в следующем:

(mapclass Building)
(defrule dummy
    ?vivienda <- (object (is-a Building))
    =>
    (assert (it-worked))
)

Правило не выдает ошибок разбора, но не соответствует ни одному из моих Building экземпляров. Что я делаю не так?


person Jsevillamol    schedule 08.04.2018    source источник


Ответы (1)


Вы можете сопоставить экземпляр только с наиболее конкретным классом. Если вы хотите сопоставить все экземпляры суперкласса, вам нужно проверить это явно.

Как указано в документации JessTab, существует логическая функция с именем superclassp который проверяет, является ли класс суперклассом второго класса. В вашем примере:

(mapclass Building)
(defrule dummy
    ?vivienda <- (object (is-a ?subclass))
    (test (superclassp Building ?subclass))
    =>
    (assert (it-worked))
)
person David Rubio    schedule 14.04.2018