如何基于数据属性推断Protégé本体has_style对象属性取值及校验模型合理性
是否需要借助推理机?
是,这种基于数值比较、动态推导对象属性关联的需求,无法通过静态的OWL类公理实现,必须使用支持规则推理的推理机完成自动推导,Protégé自带的Hermit、Pellet推理机都可以满足需求。
如何实现has_style的自动推断
你可以通过SWRL规则完成逻辑配置,操作步骤如下:
- 先确认两个数据属性的配置:
ind_active和ind_passive的取值类型设为数值型(int/float/double均可),定义域设置为Person类 - 打开Protégé的SWRLTab(如果没看到可以在插件管理器中启用SWRLTab插件),新增两条规则:
- 匹配活跃风格的规则:
Person(?p) ^ ind_active(?p, ?a) ^ ind_passive(?p, ?pa) ^ swrlb:greaterThan(?a, ?pa) -> has_style(?p, style_active)- 匹配被动风格的规则:
如果你需要处理两个数值相等的场景,可以补充第三条规则指定默认关联的风格。Person(?p) ^ ind_active(?p, ?a) ^ ind_passive(?p, ?pa) ^ swrlb:greaterThan(?pa, ?a) -> has_style(?p, style_passive) - 在Protégé中选择支持SWRL的推理机(比如Hermit),启动推理后,所有
Person类的个体都会自动推导得到对应的has_style属性值。
当前模型的优化建议
你当前的模型核心逻辑是合理的,只有几个细节可以完善避免推理出错:
- 新增一个
PersonStyle类,将style_active、style_passive设置为该类的个体,同时声明两个个体为不同个体(Different Individuals),避免推理机默认认为二者是同一实体 - 明确
has_style对象属性的定义域为Person,值域为PersonStyle,还可以将其设置为函数型属性(Functional Property),约束一个Person只能关联一种风格 - 如果你需要保证风格的互斥性,可以额外添加公理:
has_style value style_active DisjointWith has_style value style_passive
内容的提问来源于stack exchange,提问作者Silva
相关产品推荐
相关产品推荐

