我目前正在探索Owlready库的所有可能性。 现在我正在尝试处理一些SWRL规则,到目前为止进展得很好,但我有一点被卡住了
我已经在我的本体中定义了一些规则,现在我希望看到所有的结果(因此,从规则推断出的所有内容)
例如,如果我有一条规则
has_brother(David, ?b) ^ has_child(?b, ?s) -> has_uncle(?s, David)
大卫有两个兄弟,约翰和皮特,约翰的孩子是安娜,皮特的孩子是西蒙,我也想看看这样的东西:
has_brother(David, John) ^ has_child(John, Anna) -> has_uncle(Anna, David)
has_brother(David, Pete) ^ has_child(Pete, Simon) -> has_uncle(Simon, David)
这有可能吗? 我想如果我运行reasoner,我可以在它的输出中看到它,但是我在任何地方都找不到它
我感谢任何可能的帮助
这是我的解决方案:
注意事项:
有人可能会认为
has_brother
是has_brother(A, B)
⇒has_brother(B, A)
has_brother(A, B) + has_brother(B, C) ⇒ has_brother(A, C)
然而,及物性只有在唯一名称假设成立时才成立。否则
A
可能是与C
相同的个体,这与不可伸缩性冲突。因此,我对这种“弱及物性”使用了一个规则一旦,
has_brother
按预期工作,叔叔规则也会这样做。当然,推理者必须先运行更新:我在this Jupyter notebook中发布了解决方案(其中还包含执行的输出)
相关问题 更多 >
编程相关推荐