我很想知道在Class描述中混合使用SubClassOf和EquivalentClass,以及推理器的行为方式。
具体来说,如果同时为同一个类同时拥有一个EquivalentClass和一个SubClassOf断言,那么同一个类和SubClassOf条件是否需要满足于在该类中被分类的个体,或者只有EquivalentClass?
或者这是一种不好的做法?
例如(省略声明):
ObjectPropertyRange(:format :Bar)
ObjectPropertyRange(:format owl:Thing)
EquivalentClass(:Foo ObjectSomeValuesFrom(:format :Bar))
SubClassOf(:Foo :Sna)
我想确保在下面的情况下,:x
被归类为:Foo
,因为满足EquivalentClass和SubClassOf断言:
ClassAssertion(:x :Sna)
ObjectPropertyAssertion(:format :x :someBar)
但:y
不是,因为SubClassOf不满意:
ClassAssertion(:y :NotASna)
ObjectPropertyAssertion(:format :y :someOtherBar)
谢谢,
乔纳森
答案 0 :(得分:2)
我不完全理解你的问题,但我会尝试澄清一些事情。首先,下面的公理似乎与你的问题无关(而第二个公正是多余的,因为owl:Thing
是任何属性的范围):
ObjectPropertyRange(:format :Bar)
ObjectPropertyRange(:format owl:Thing)
另一件事是EquivalentClasses
- 公理可以被视为SubClassOf
- 公理的语法糖,例如。
EquivalentClasses(C1 C2)
在逻辑上等同于
SubClassOf(C1 C2)
SubClassOf(C2 C1)
因此,您可以将EquivalentClasses
重写为:
SubClassOf(ObjectSomeValuesFrom(:format :Bar) :Foo)
SubClassOf(:Foo ObjectSomeValuesFrom(:format :Bar))
这可能会简化对本体论所包含内容的理解。
现在,如果你说:
ClassAssertion(:x :Sna)
ObjectPropertyAssertion(:format :x :someBar)
我假设你想说:
ClassAssertion(:x :Sna)
ClassAssertion(:someBar :Bar)
ObjectPropertyAssertion(:format :x :someBar)
这需要:x
同时为:Foo
和:Sna
,这当然是可能的,因为:Foo
是:Sna
的子类。
当你说
时ClassAssertion(:y :NotASna)
ObjectPropertyAssertion(:format :y :someOtherBar)
我认为你的意思是:
ClassAssertion(:y :NotASna)
ClassAssertion(:someOtherBar :Bar)
DisjointClasses(:NotASna :Sna)
ObjectPropertyAssertion(:format :y :someOtherBar)
这是一个逻辑上的不一致,因为:y
必须是:Foo
(:Sna
的子类),但同时:y
被声明为:Sna
在一个与SubClassOf(:Foo ObjectSomeValuesFrom(:format :Bar))
不相交的班级。
另请注意,我们没有使用
的知识EquivalentClasses
后面是{{1}} - 公理。