我们可以用Grakn为多重继承建模吗?

问题描述 投票:0回答:1

在RDF / OWL中,我们可以有一个具有多个超类的类,这些超类可以通过多重继承进行分配或推断。许多参考本体都需要多重继承的支持。

但是,Grakn仅支持单一类型继承,如何使用Grakn。

例如,可以在Grakn中为该示例建模吗?

company      rdf:type         rdfs:Class
government   rdf:type         rdfs:Class

employer     rdf:type         rdfs:Class
employer     rdfs:subClassOf  government
employer     rdfs:subClassOf  government
rdf owl rdfs grakn graql
1个回答
0
投票

问题中张贴的示例将employer建模为companygovernment类。但是,尽管这看起来似乎是正确的,但问题在于,作为建模概念的多重继承经常没有以正确的方式使用。多重继承应该对事物进行分组,而不是对“类型”进行子类化,其中每个类型都是对其他事物的定义。换句话说,我们不想表示数据实例。这是一个常见的错误。

而不是多重继承,我们应该分配角色,这使我们可以对任何类型的域进行建模。角色在关系的上下文中定义事物的行为和方面,我们可以为事物分配多个角色(请注意,当类型子类化另一个时,角色是继承的。)>

例如,government可以使用person,而company可以使用person。可能建议创建一个既继承government又继承company的类,该类可以使用person,最后得到一个同时继承这两个子类的employer类(如上例所示)。

但是,这是对继承的滥用。在这种情况下,我们应该创建一个与employer关系相关的角色employment,并通过扮演company的角色来具体化governmentemployer与该关系的关系。

company sub entity,
    plays employer;

government sub entity,
    plays employer;

employment sub relation,
    relates employer;
© www.soinside.com 2019 - 2024. All rights reserved.