AllValuesFrom这样的约束是OWL语言新加的,也是OWL比RDF表达能力更加的证据。初学者,特别是对规范还不熟悉的情况下直接用Protege做东西的朋友们常常会遇到这样的问题:
- only(AllValuesFrom)跟some(SomeValuesFrom)有什么区别?
- only, some的作用跟domain,range有什么区别?
先说第一个问题,举个例子:有个类tree,有个类leaves,有个属性has,tree has some leaves这样的句子或者说tree has SomeValuesFrom leaves,它的意思其实是很直观的:如果有一样东西(individual)是tree,对于has这个属性而言,那么它至少有一片叶子的实例(individual)(>=1)。由于开放世界的假设,这个陈述并不暗示着它只能有叶子(而不能有其他的)。
但如果是这样的陈述: tree has only(AllValuesFrom) leaves的意思是指如果有一样东西(individual),它是tree,它只能has leaves,不能has其他的,比如根,茎什么的,都是不合法的。
AllValuesFrom还隐含着一点小trick,即如果has的leaves是空,对它来说也是合法的。这点可能有些不好理解,稍做下解释:比如这样一个陈述:P的孩子只能是女孩,那么如果p有一个男孩子,自然与之前的陈述违背,但是p如果没有孩子,逻辑上并没有违背前面的陈述,因此是合法的(没有违背就是合法的是owl的世界观之一)。
接下来是第二个问题。AllValuesFrom与Range的区别。其实这两者表示的逻辑含义有很多相似之处。都可以表达某属性的客体取值能且只能取某个范围。两者很重要的区别在于作用域不同,并且AllValuesFrom看起来意义更加的清晰。
Range的作用范围是全局的,domain:people peroperty:hasChild range: Child,表示hasChild这个属性,不管在哪,都只能有客体是Child,而AllValuesFrom的表达是local的,people hasChild AllValuesFrom Child仅对people这样一个主体有效,同样可以定义monkey hasChild AllValuesFrom BabyMonkey这样的陈述。当然,我们可以通过创建谓词hasChild的子谓词来使得range达到与AllValuesFrom一样的表达效果,但是太不直观。