Запрос SQWRL для выбора разности сгруппированных наборов

Допустим, у меня есть эта информация

Individual  |   Sex     |   HairColor
---------------------------------------
Joseph      |   Male    |   Black
Peter       |   Male    |   Black
Kevin       |   Male    |   Blonde
Andrew      |   Male    |   Brown
Boris       |   Male    |   Brown
Chistine    |   Female  |   Black
Julia       |   Female  |   Black
Julieth     |   Female  |   Brown
Judith      |   Female  |   Brown
Mary        |   Female  |   Blonde

Мои люди все разные. У меня есть класс Муж и Женщина, утвержденный каждому. И у меня также есть свойство hasHairColor, заявленное каждому со своей ценностью.

Вопрос в том, как я могу запросить всех мужчин с цветом волос, отличным от черного (онтология может иметь много других цветов волос)?

До сих пор я пробовал этот запрос с ошибочными результатами...

1. Male(?x) ^ Male(?y) ^ hasHairColor(?y, "Black") ^ differentFrom(?x, ?y) -> sqwrl:select(?x)
2. Male(?x) ^ Male(?y) ^ hasHairColor(?y, "Black")  .  sqwrl:makeSet(?males, ?x) ^ sqwrl:groupBy(?males, ?x) ^ sqwrl:makeSet(?blacks, ?y) ^ sqwrl:groupBy(?blacks, ?y)  .  sqwrl:notEqual(?males, ?blacks) -> sqwrl:select(?x)
3. Male(?x) ^ Male(?y) ^ hasHairColor(?y, "Black")  .  sqwrl:makeSet(?males, ?x) ^ sqwrl:groupBy(?males, ?x) ^ sqwrl:makeSet(?blacks, ?y) ^ sqwrl:groupBy(?blacks, ?y)  .  sqwrl:difference(?diff, ?males, ?blacks) -> sqwrl:select(?x)

Я что-то упускаю в способе соединения. Результат работает, но только когда один из наборов имеет только один элемент (то есть, если я пытаюсь удалить блондинок)

Я использую Protege 5.2 с вкладкой SWRL и SQWRL 2.0.5

заранее спасибо

1 ответ

Проблема все еще не решена, но решение заключалось в использовании SPARQL для достижения того, что я хотел.

Если вам нужна дополнительная информация об открытом вопросе. Вы можете найти его здесь https://github.com/protegeproject/swrlapi/issues/43

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