несколько вопросов по OWL + SWRL: 1/проверка наличия у человека свойства данных 2/получение «листьев» дерева 3/суммирование всех ветвей дерева

У меня есть несколько вопросов по OWL+SWRL. Обратите внимание, что я новичок в науке, лежащей в основе логики и онтологий. И новичок в протеже. Сейчас я использую Protégé 5.6.1. У меня есть онтология, в которой я моделирую сборки, состоящие из деталей. Таким образом, у меня есть своего рода древовидная структура, использующая свойство транзитивного объекта, называемое. И обратное свойство.

Я прилагаю минималистическую онтологию, чтобы объяснить мою проблему. Вы можете скачать это здесь

Я создал людей и заявил свойства, такие как:

      assembly_1 hasPart part_01.
part_01 hasPart part_02.

и более сложный пример:

      assembly_2 hasPart part_10.
assembly_2 hasPart part_20.
assembly_2 hasPart part_30.

part_10 hasPart part_11.
part_30 hasPart part_31.
part_31 hasPart part_32.

Каждая часть имеет свойство данных. За исключениемpart_31

Начиная с Pellet Reasonner, транзитивное свойство ведет себя правильно, ИМХО. Например, при использовании утверждения и вывода в сборке_2 все части >= часть_10. И деталь_32 является частью детали_31, детали_30 и сборки_2.

Но вот тут я застрял...

Хотелось бы при SWRL знать (насколько я понимаю), что деталь - это лист дерева сборки. Мне очень хотелось написать что-то вроде:

isPartOf(?object, ?parent) ^ not( hasPart(?object, ?noSubPart)) -> isLeaf(?object, true)

То есть: «объект, который является частью родительского объекта, но не имеет подчасти, является листом». К сожалению, отрицание, похоже, не поддерживается в свойствах объекта (смотрите этот FAQ).

Как я могу сделать ?

Аналогичный вопрос будет касаться свойств данных. Например, как я могу создать базу правил SWRL при условии, что у человека нет свойства данных?

Наконец, я хотел бы создать правило/способ (возможно, SQWRL?), чтобы получить общее количествособрания. Либо потому, что это самый верхний элемент дерева. Или (потому что у меня будет такой случай в будущем), потому что индивид принадлежит к данному классу, и мне нужна сумма всех частей, которые являются его частью.

Я открыт для предложений. И открыт для непредвзятости. Потому что я новичок в OWL и SWRL и в настоящее время не много зарабатываю. Так что я даже согласен (и буду рад узнать ваше мнение), если вы предложите мне другие способы вычисления правил (вперед и назад) и математических вычислений в онтологиях или базе знаний/тройных хранилищах/что-то еще.

Не стесняйтесь предлагать мне веб-сайты/статьи/книги, чтобы я мог улучшить себя.

Заранее спасибо. Борис

0 ответов

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