несколько вопросов по 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 и в настоящее время не много зарабатываю. Так что я даже согласен (и буду рад узнать ваше мнение), если вы предложите мне другие способы вычисления правил (вперед и назад) и математических вычислений в онтологиях или базе знаний/тройных хранилищах/что-то еще.
Не стесняйтесь предлагать мне веб-сайты/статьи/книги, чтобы я мог улучшить себя.
Заранее спасибо. Борис