如何在OWL本体中定义等价于无关联Design的UnsatisfiedRequirement类
本体基础定义
- 类:
- Design
- Requirement
- UnsatisfiedRequirement
- 对象属性:
- hasDesign:定义域设为Requirement,值域设为Design
核心需求
把UnsatisfiedRequirement定义成完全没关联任何Design的Requirement,让推理机能自动把符合条件的Requirement个体分到这个类里。
试过但没用的方法
- 直接给UnsatisfiedRequirement写等价类:
Requirement and not(hasDesign some Design)- 因为OWL的开放世界假设(OWA),推理机不会默认“没写的关系就是不存在”,只要没明确证明某个Requirement没有hasDesign关联,就不会把它归到UnsatisfiedRequirement里。
- 先定义
SatisfiedRequirement ≡ Requirement and (hasDesign some Design),再设置它和UnsatisfiedRequirement不相交- 这种方式能准确识别出有明确hasDesign关联的需求,但还是没法反过来推“没关联的就是未满足需求”,本质还是受OWA限制。
- 写SWRL规则:
Requirement(?requirement) ^ not(hasDesign(?requirement, ?design)) -> UnsatisfiedRequirement(?requirement)- Protege不支持SWRL里的
not否定语法,规则根本用不了。
- Protege不支持SWRL里的
可行的解决办法
要绕开OWA的限制,关键是要明确告诉推理机某个Requirement确实没有hasDesign关联,下面是几种可行的方式:
方式1:添加负属性断言
给需要标记为未满足的Requirement个体,添加负对象属性断言,明确声明它和任何Design都没有hasDesign关联。比如在Protege里操作:
找到目标Requirement个体,添加“Negative Object Property Assertion”,选择属性hasDesign,不需要指定具体的Design个体,直接声明该个体没有这个属性关联。
添加之后,再用UnsatisfiedRequirement ≡ Requirement and not(hasDesign some Design)的定义,推理机就能自动把这个个体分到UnsatisfiedRequirement类里。
方式2:用限定基数约束定义类
把UnsatisfiedRequirement的等价类改成:UnsatisfiedRequirement ≡ Requirement and (hasDesign max 0 Design)
这个定义表示“属于Requirement且hasDesign关联的Design数量最多为0”,配合负属性断言使用,推理机就能识别出符合条件的个体。
方式3:用SPARQL构造规则替代SWRL
在Protege里可以用SPARQL规则来实现,规则代码如下:
CONSTRUCT { ?req a :UnsatisfiedRequirement } WHERE { ?req a :Requirement . FILTER NOT EXISTS { ?req :hasDesign ?design } }
这个规则会自动找出所有没有hasDesign关联的Requirement个体,给它们加上UnsatisfiedRequirement的类型标记。
内容的提问来源于stack exchange,提问作者onkar kunjir

