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

Rdf 我们可以用Grakn建模多重继承吗?,rdf,owl,rdfs,vaticle-typedb,vaticle-typeql,Rdf,Owl,Rdfs,Vaticle Typedb,Vaticle Typeql,在RDF/OWL中,我们可以拥有一个具有许多超类的类,这些超类可以通过多重继承进行赋值或推断。许多参考本体需要多重继承的支持 但是,Grakn只支持单类型继承,如何使用Grakn实现这一点 例如,这个例子可以用Grakn建模吗 company rdf:type rdfs:Class government rdf:type rdfs:Class employer rdf:type rdfs:Class employer

在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

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

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

例如,
政府
可以雇用
,而
公司
可以雇用
。有人可能建议创建一个继承了
政府
公司
的类,该类可以雇用
人员
,并最终创建一个
雇主
类,该类同时对这两个类进行子类化(如上面的示例所示)

然而,这是对继承权的滥用。在这种情况下,我们应该创建一个角色
雇主
,该角色与
雇佣
关系相关,并将
公司
政府
如何参与该关系(通过扮演
雇主
的角色)

company sub entity,
    plays employer;

government sub entity,
    plays employer;

employment sub relation,
    relates employer;