Запрос 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