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一样的表达效果,但是太不直观。
domain跟range是来自于rdf的语法,owl也继承了下来。在owl文件中使用domain和range是完全符合规范的。
domain和range,直观的理解就是定义域和值域,这样的理解也勉勉强强可以说是正确的。比如有一个谓词(property): hasBeautifulHair,我们可以定义它的domain是PEOPLE,值域是HAIR。这样的定义跟我们的常识中对于定义域和值域的理解是一致的,不必多说。
在如上的定义下,我们如果加入了以下这样的声明:ASmallDog hasBeautifulHair Bluehair,其中,ASmallDog是类DOG的一个实例,Bulehair是HAIR的一个实例。如果从日常的观点,或者说从熟识的数学的角度理解,这样的陈述是假的,也就是说它违背了之前定义的公理,即hasBeautifulHair的定义域是PEOPLE,而不是DOG。但事实上,从RDF或者OWL的观点看来,这个陈述的真假是不知道的,它与之前的公理并没有发生冲突。
看到这里,就会有些疑问了,为什么会没有冲突?如果没有冲突,那么domain跟range的约束就根本没有意义,会什么还要加上呢?下面对此问题的解释是一些我自己的理解,正确与否尚待思考。:)
解释:为什么没有冲突?将hasBeautifulHair的domain(定义域)和range(值域)定义成PEOPLE和HAIR,从rdf的角度看来,这只是它(本体,知识库)增加了一条关于hasBeautifulHair的知识,而不是增加了一条约束。因为我们有个前提:OWA(Open Word Assumption,开放世界假设):不能确定的陈述并不认为是假的。只是指明了hasBeautifulHair的定义域是PEOPLE,就不能认为其他的取值为假,除非显式的说明。就像一个小孩学到了一条知识:猫会叫。对他来说,狗能叫这样的陈述,他是不知道这句话是对的还是错的。如果将rdf想象中这样一个小孩,对这点的理解会容易得多。
那为什么还要加上约束呢?正如前面的分析,对这个知识库或者本体来说,这是一条关于它的知识,因此是有必要的。在实践中,这也是有意义的。因为,它可以利用这条知识来进行推理。还是举刚才那个小孩的例子,小孩学到了一条知识:猫会叫。如果这个小孩某天见到一个没见过的动物(可能是狗,可能是猫,可能是其他…)对着他叫,他根据他现有的知识,他会认为(infer)这个动物很有可能是猫。显然,我们可以认为这样的推理是合乎逻辑的。随着知识的增多,我们的推理可以更加准确(比如,知道猫的叫声,狗的叫声等等)。pellet等推理机支持这种类型的推理。这也是domain和range这样的语法存在的意义。增加知识,有益推理。
http://blog.csdn.net/lqk1985/archive/2008/11/27/3391548.aspx