Дизъюнкция внутри правила SWRL

Я использую Protege 4.3 для создания некоторых правил SWRL. Можно ли написать правило, содержащее дизъюнкт? Например:

Person(?x), Age(?x,?age), (?age < 10 or ?age > 30) -> blabla(?x)

Имеются в виду все люди в возрасте ‹ 10 ИЛИ > 30 лет.


person riad    schedule 20.03.2014    source источник
comment
Каждое правило неявно является конъюнкцией: все атомы тела должны совпадать, чтобы голова была истинной. Вы спрашиваете о (X или Y), что является дизъюнкцией. Я отредактировал вопрос соответствующим образом.   -  person Joshua Taylor    schedule 20.03.2014


Ответы (1)


К сожалению, вы не можете напрямую выразить дизъюнктию в теле правила так, как вам хотелось бы, но есть некоторые обходные пути. Самое прямое решение - написать два правила:

Человек(?x), Возраст(?x,?возраст), ?возраст ‹ 10 -> blah(?x)
Человек(?x), Возраст(?x,?возраст), ?возраст > 30 -> мля(?х)

SWRL поддерживает использование выражений класса (подробнее см. в OWL 2 и SWRL Tutorial), поэтому вы можете сделать это:

Person(?x), ((возраст xsd:integer[‹ 10]) или (возраст xsd:integer[> 30]))(?x) -> blah(?x)

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

Человек(?x), ((возраст (xsd:integer[‹ 10] или xsd:integer[> 30]))(?x) -> blah(?x)

или даже отец и сделать это:

(Человек и (некоторый возраст (xsd:integer[‹ 10] или xsd:integer[> 30])))(?x) -> blah(?x)

Конечно, на этом этапе, в зависимости от того, что такое blah(?x), вы можете просто использовать общую аксиому класса, которую Protege примет. Например, если blah на самом деле является классом, Not10To30YearOldPerson, вы можете использовать такую ​​аксиому:

Человек и (возраст некоторый (xsd:integer[‹ 10] или xsd:integer[> 30])) subClassOf not< /strong> TenToThirtyYearOldPerson

аксиома вместо правила

person Joshua Taylor    schedule 20.03.2014
comment
Большое спасибо Джошуа за ответ - person riad; 20.03.2014
comment
@riad Если это решило вашу проблему, вы должны принять это. Это позволяет другим (которые могут не видеть комментарий), что это сработало для вас, и уменьшает количество вопросов без принятых ответов на Stack Overflow). Это также дает вам и мне некоторые очки репутации. Если это не сработало для вас, есть ли что-то еще, что я могу добавить, чтобы помочь? - person Joshua Taylor; 20.03.2014
comment
Я знаю это, я приму ответ, как только попробую - person riad; 20.03.2014
comment
Извини, Джошуа, еще один глупый вопрос, я не привык работать с протеже, но у меня нет этой вкладки на картинке Общие аксиомы класса, я что-то упустил? - person riad; 20.03.2014
comment
Для меня это находится на нижней панели вкладки Active Ontology, но это может быть нестандартно. Вы можете перейти в Window > Views > Class Views > General Class Axioms, чтобы добавить его в свой интерфейс. - person Joshua Taylor; 20.03.2014
comment
Хорошо, спасибо за все - person riad; 20.03.2014