我有一个本体,其中类可能与UUID相关联,但我想在大部分工作中使用人类可读的名称。我想要像
这样的东西Declaration( Class( a:C ) )
Declaration( NamedIndividual( a:C ) )
Declaration( NamedIndividual( urn::uuid:00112233-4455-6677-8899-aabbccddeeff ) )
Declaration( NamedIndividual( a:someObject) )
ClassAssertion( a:C a:someObject )
SameIndividual( a:C urn::uuid:00112233-4455-6677-8899-aabbccddeeff )
目的是建立一个专门的处理步骤,从UUID转换到类,然后从那里开始对OWL DL本体进行推理。对我来说,使用SameIndividual
构造是有意义的,因为我认为UUID只是该类的另一个名称。
我所做的显然是元建模,因为我将一个实体视为一个类和一个个体,但我不希望实际上做任何利用该元建模的推理。我从规范中告诉我这是否是一个有效的OWL DL文档,其中一个名为a:C
的类和一个名为a:C
的个人完全独立对待,或者我是否被禁止从一个班级和一个同名的人。
我知道我可以使用EquivalentClasses
,但出于用户体验的原因,我希望避免使用它。我有一种感觉,从长远来看,我们将在OWL Full文档上进行操作,这个问题没有实际意义,但我希望能够说我们需要制作有效的OWL DL本体,直到我们必须制作跳跃。
答案 0 :(得分:2)
是的,允许在OWL 2 DL中有一个类和一个具有相同名称的个人。 document for OWL 2 New Features称之为" punning"。结果是有两个独立的术语,所以推理一个不会影响另一个的推理。例如,以下内容是一致的(我用Turtle语法编写,我更熟悉):
ont: a owl:Ontology .
ont:C a owl:Class, ont:C .
ont:D a owl:Thing, owl:Class;
owl:sameAs ont:C;
owl:disjointFrom ont:C .