Вывод свойства объекта с помощью операций набора sqwrl в протеже
Я новичок в протеже и онтологиях. Я написал это правило на вкладке SQWRL в протеже, чтобы выяснить, управляется ли p r:
metadata(?md1) ^ hasValue(?md1, ?val) ^ hasLabel(?md1, ?lbl) ^ replicaset(?r) ^ hasMatchlabels(?r, ?md1) . sqwrl:makeSet(?sr, ?md1) ^
metadata(?md2) ^ pod(?p) ^ hasMetadata(?p, ?md2) ^ hasValue(?md2, ?val) ^ hasLabel(?md2, ?lbl) ^ sqwrl:makeSet(?sp, ?md1) ^ sqwrl:groupBy(?sp, ?p) .
sqwrl:difference(?s, ?sr, ?sp) ^ sqwrl:isEmpty(?s) -> isManagedBy(?p, ?r)
- Первая строка создает набор меток сопоставления r
- вторая строка, если p имеет метки, которые имеют те же значения, что и метки соответствия, эти метки сопоставления помещаются в другой набор и группируются по p.
- третья строка проверяет, пуста ли разница между двумя множествами. Если да, то это означает, что p управляется r.
Если я изменю левую часть на-> sqwrl:select(?p,?r)
он отображает правильную пару (p,r), но если я изменю результат на-> isManagedBy(?p,?r)
резонер (Pellet) не применяет этот вывод. Я новичок в protege и sqwrl, поэтому я не уверен, что я делаю неправильно?? Может ли резонер не применять правила sqwrl, если они используют операции над множествами?
Редактировать : понял, что я перепутал sqwrl и swrl. swrl предназначен для создания правил вывода, а sqwrl — для запросов. Таким образом, sqwrl нельзя использовать для добавления правил вывода. Тем не менее, я не понял, как смоделировать отношения, которые у меня здесь.