【发布时间】:2016-08-05 01:13:43
【问题描述】:
我已经定义了一个类作为属性的限制:
:A rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :P ;
owl:someValuesFrom xsd:string
] .
并且想在另一个类中“重用”这个限制,我使用的是等效类层次结构:
:B rdf:type owl:Class ;
owl:equivalentClass :A.
但后来我对 Protege 显示的结果感到困惑::B 显示为等效于 :A 的类(如预期的那样),但显示为“subClassOf(匿名祖先)”到“P some xsd:string”。我已经预料到, :B 也继承了等效类的属性限制。
B 中属性限制的子类化而不是等价的类关系会影响包含属性 P 的个体的类型推断:
:Ind rdf:type owl:NamedIndividual ;
:P "p" .
推理器(我使用 FACT++)推断 Ind 属于 A 类型,因为它包含属性 P,并且属于 B 类型 - 因为它是 A,并且 A 等于 B,但不是因为属性P.
那么,我想问一下,为什么在我的例子中属性限制是继承为 subClassOf 的,是否有可能将其继承为等效类?
感谢任何提示。
从 A 查看:
从 B 处查看:
【问题讨论】:
-
不知道为什么会发生这种情况,但我可以确认(并添加了支持截图)。这很奇怪。但是,由于您具有等效的公理,因此我希望您所做的推理不会受到负面影响。我希望这只是渲染中的一个怪癖。由于一切都是其自身的子类/超类,因此您看到的结果是正确的,只是奇怪地将它们列为超类而不是等效类。
-
感谢 Joshua 的截图。不幸的是,我不允许自己发布它们。
-
不幸的是,观察到的问题不仅仅是 Protege 视图的渲染问题。你会看到,如果你添加一个具有属性 P 的个体,然后让推理器推断它的类型,你会对它的结果感到惊讶。我在帖子中添加了 cmets。
-
"因为它是A,并且A等于B,但不是因为属性P。"你怎么解释这里的?即使推理者报告了一个理由,也可能有其他理由。
-
这只是对 protege 给出的“Ind Type B”的解释:1)Ind P“p”2)A EquivalentTo P some xsd:string 3)A EquivalentTo B