我想模拟某些事情可能是真实的,但不能保证是真实的。例如,房子可能有车库,但不一定。车库可能是房屋的一部分,但不一定。
如果我将“has_part some 'garage'”作为公理添加到我的“house”类中,我就声称所有房屋都有车库,但这并不总是正确的。同样,出于同样的原因,我无法将“partOf”添加到我的车库类中。
模拟这种关系的理想方式是什么?
我已经修改过声明“house”类“has_part some 'garage' min 0”,以便使用基数将最小界限设置为零,但我不确定这是正确的。
在这种情况下,您可以认为房屋类由两个不同的类别组成:(1)没有车库的房屋类别和(2)有车库的房屋类别。
您可以使用曼彻斯特语法执行此操作,如下所示:
Class: ClassWithoutGarage
SubClassOf: hasGarage max 0 Thing //has no garage
Class: ClassWithGarage
SubClassOf: hasGarage min 1 Thing
DisjointWith: ClassWithoutGarage //has at least 1 garage
ObjectProperty: hasGarage
Domain: ClassWithGarage
Range: Garage
Class: House
EquivalentTo: ClassWithGarage or ClasWithoutGarage
在这种情况下,我们为这两个可能的类给出了明确的名称。通常在本体中,可以暗示这些类的存在而无需显式命名它们:
Class: House
EquivalentTo: hasGarage max 0 Thing
or
hasGarage min 1 Thing
可以更简洁地表述为
Class: House
EquivalentTo: hasGarage only Garage
hasGarage only Garage
定义了由这些个体x
组成的个体类,这样当个体y
通过hasGarage
链接到个体x
时,那么y
属于类型Garage
,或者那些个体 x
没有通过 hasGarage
的链接。