Правило SWRL не то

У меня есть онтология, желающая Protege, и теперь я хотел бы реализовать правила.

У меня есть человек, у которого есть буквальный PANEL = "R1-2B". Мне нравится формулировать правило, согласно которому если это значение равно «R1-2», то этот человек имеет свойство объекта «isGiveWaySign».

Я пробовал кое-что, но у меня SWRL не такой, как предполагалось. Я получаю только новые классы man вместо того, чтобы устанавливать только свойство объекта.

Мои подходы выглядят так:

PANEL(?a, ?b) ^ swrlb:substring(?b, "R1-2") -> isGiveWaySign(?a)

я что-то пропустил?


person mixi    schedule 22.08.2018    source источник
comment
унарный предикат обозначает класс в OWL ... свойства в OWL всегда являются бинарными предикатами. если isGiveWaySign должен быть свойством, вы должны добавить для него значение, например "true"^^xsd:boolean или что-то в этом роде - я не знаю вашей онтологии.   -  person UninformedUser    schedule 22.08.2018
comment
Это скриншот моей текущей онтологии! Действительный XHTML.   -  person mixi    schedule 22.08.2018
comment
У меня есть три экземпляра в классе SignsRegulatory. Один из них, например, Sign_GiveWay_6411546. Этот человек имеет PANEL_01_DESIGN как значение «R1-2B». Я хотел бы иметь правило, которое считывает это значение, а затем перемещает этого человека в класс: GiveWaySign (вероятно, установив свойство объекта isGiveWaySign). То, что я пробовал, не работает   -  person mixi    schedule 22.08.2018


Ответы (2)


исправление решения выше, которое сработало для меня лучше:

Панель (? S,? Gws) ^ swrlb: содержит (? Gws, "R1-2") ^ Знак (? S) -> GiveWaySign (? S)

person mixi    schedule 22.08.2018
comment
Вам лучше отредактировать свой предыдущий ответ, - person Stanislav Kralin; 22.08.2018

Я понял это, используя отличный пример артериального давления здесь при переполнении стека. Я упростил свою онтологию и смог определить решение своей проблемы:

Панель (? S,? Gws) ^ swrlb: содержит (? Gws, "R1-2") ^ Sign (? Bs) -> GiveWaySign (? Bs)

person mixi    schedule 22.08.2018
comment
Правильно. вам следует объяснить, что swrlb:contains проверяет наличие строки по сравнению с swrlb:substring, который извлекает строку. кстати, вы все еще производите утверждения классов, а не утверждения свойств. - person UninformedUser; 22.08.2018
comment
и, пожалуйста, не забудьте принять свой ответ, чтобы он был помечен как решенный. - person UninformedUser; 22.08.2018
comment
Спасибо!. Тем не менее, по-прежнему наблюдается странное поведение. Если я запустил на вкладке SWRL в Protege OWL SWRL - ›Drools, снова запустил Drools и Drools, я получу много новых классов ... - person mixi; 22.08.2018