在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
问题中张贴的示例将employer
建模为company
和government
类。但是,尽管这看起来似乎是正确的,但问题在于,作为建模概念的多重继承经常没有以正确的方式使用。多重继承应该对事物进行分组,而不是对“类型”进行子类化,其中每个类型都是对其他事物的定义。换句话说,我们不想表示数据实例。这是一个常见的错误。
而不是多重继承,我们应该分配角色,这使我们可以对任何类型的域进行建模。角色在关系的上下文中定义事物的行为和方面,我们可以为事物分配多个角色(请注意,当类型子类化另一个时,角色是继承的。)>
例如,government
可以使用person
,而company
可以使用person
。可能建议创建一个既继承government
又继承company
的类,该类可以使用person
,最后得到一个同时继承这两个子类的employer
类(如上例所示)。
但是,这是对继承的滥用。在这种情况下,我们应该创建一个与employer
关系相关的角色employment
,并通过扮演company
的角色来具体化government
或employer
与该关系的关系。
company sub entity,
plays employer;
government sub entity,
plays employer;
employment sub relation,
relates employer;