我有一个本体,其中类可能与 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
的个体被完全处理独立地,或者如果我只是被禁止拥有同名的类(class)和个人。
我知道我可以使用 EquivalentClasses
,但出于用户体验的原因我想避免使用它。我有一种感觉,从长远来看,我们将在 OWL 完整文档上运行,这个问题变得没有实际意义,但我想能够说我们正在生成有效的 OWL DL 本体,直到我们必须进行跳跃。
最佳答案
是的,在 OWL 2 DL 中允许有同名的类(class)和个人。 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 .
关于猫头鹰 DL : Can I have a class and an individual with the same IRI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520415/