我对本体论和OWL相当熟悉并且一直在使用它们。但我始终没有一个想法,当我试图找到一个好的答案时,总是会出现矛盾。也就是说,何时使用 rdf:Type 与 rdf:subClassOf。
我将 RDF、RDFS 和 OWL 本体绘制为图表,试图理解该模式,并且还阅读了一些解释。让我首先分享一些我制作的图表的链接,以及解释以及为什么它没有对我进行协调。
浏览此文,我发现没有明显的模式可以解释这两个动词的含义。尽管我确实注意到,虽然几乎每个对象都有一个类型,但其中很少有一个对象有一个父类(明确地)。
接下来,当我查找答案时,我得到了很多教程,它们很大程度上将“类型”解释为表示个人。类似的子类化通常被描述为具有被设置的类的子集。因此,例如
cat rdf:subClassOf animal
是有意义的,但对于类型来说,它必须更像 mittens rdf:Type cat
。这一切都很好,但是当我查看上面列出的本体时,这似乎与这个想法不符。
例如,FunctionalProperty 显然不是一个单独的属性,而是一组功能属性(每个对象只能应用一次)。所以人们可能认为它根本没有类型。然而根据模式,FunctionalProperty 是一种 Class 类型,不是 Property 类型,但它是 Property 的子类。为什么?
我的猜测是,个人与集体的解释可能不是一个好的解释。看来它与固有的功能有更多关系?例如,FunctionalProperty 与其父类 Property 具有相同的域和范围,但与其父类型具有不同的域和范围,这只是一个不受限制的类...也许子类继承了子类型所没有的限制?
我还注意到奇怪的事情,有时 subPropertyOf 用于属性,有时使用 subClassOf 。例如,FunctionalProperty 被定义为 Property 的 subClassOf Property,而不是它的 subPropertyOf,这正是我所期望的。
任何帮助我理解何时使用其中一种与另一种的解释将非常感激,谢谢。
我认为你对继承功能的思考是正确的。
考虑您的
owl:FunctionalProperty
示例。说 owl:FunctionalProperty
是 Class 的类型而不是 Property 的类型,就是说 owl:FunctionalProperty
是 Class 而不是 Property。如果 owl:FunctionalProperty
是一个属性,那么将它用作三重语句中的谓词项是有意义的,对吧?然后,你就可以这样说:
<individualA> owl:FunctionalProperty <individualB>
但是这个三元组没有明确的语义。
由于
owl:FunctionalProperty
是一个类,我们可以说各个实体是该类的成员。例如,我们可以将属性 :hasMother
定义为一种函数属性:
:hasMother rdf:type owl:FunctionalProperty
另一方面,如果
owl:FunctionalProperty
是一个属性,那么这就没有意义。 RDF 中的属性没有成员。只有班级才有成员。
类似地,
owl:FunctionalProperty
是Property的子类,因为它是一类属性(更窄的类),而不是单个属性。
总结一下:
owl:FunctionalProperty
是Property的子类,而不是属性的类型,因为它是属性的类,而不是实际的属性。
我们可以说出以上内容,因为
owl:FunctionalProperty
具有实例/成员,即特定的功能属性。类可以拥有这些,但属性不能。此外,使用 owl:FunctionalProperty
作为三元组中的主语或宾语是有意义的,但不能用作谓语。这也表明它是一个类而不是一个属性。
希望这是有道理的。