【发布时间】:2014-03-06 10:23:13
【问题描述】:
我有一个这样的类层次结构:
Thing
- ClassA
-ClassC
-ClassD
- ClassB
-ClassC
-ClassE
C 类是 ClassA 和 ClassB 的子类,而 ClassD 和 ClassE 只是 ClassA 或 ClassB 的子类
现在我想指定一个类,它相当于 ClassA 和 ClassB 的子类的交集。以下不起作用:
NamedClass a owl:Class
NamedClass owl:equivalentClass (ClassA and ClassB)
原因是推理器将使用这种规则对个体进行分类,即我是否有一个属于 ClassA 和 ClassB 类型的个体 Ind1,它也会被分类为 NamedClass 类型。这不是(唯一)我想要的。我希望 ClassC 本身成为 NamedClass 的子类。
我知道这可以通过使用规则(例如 SPIN)来实现,但可以在没有规则的情况下完成吗?
【问题讨论】:
-
F owl:equivalentClass (A and B)有什么问题?如果您检查推理器,您会发现C是F的子类。这是一个简单的推论:某物是 C,那么它就是 A;如果某物是 C,那么它就是 B;因此,如果某物是 C,那么它就是 A 和 B;因此,如果是 A 和 B,那么它是 F;因此,如果某物是 C,那么它就是 F。这就是子类关系的定义。 -
不,Joshua,它不起作用。例如,当我有像 owl:equivalentClass(property1 some ClassB) 这样的关系但我的示例中的 Intersection 不起作用时,它确实有效。当我启动推理器时(不管是哪一个),ClassC 不属于 NamedClass 的子类。
-
我添加了一个答案,显示了一个具有 Protégé 结构的本体。 Pellet 正确地将我的 C 类归类为 F 的子类(您一直称之为 NamedClass)。
-
我看到你已经接受了答案,谢谢!您是否有机会查明您一直看到的有问题的行为?其他一些建模结构可能没有达到预期的效果,我们也许可以追踪到……
-
看我对你的回答的评论:)
标签: type-inference owl inference reasoning