在Protege 5中向objectProperty添加多个域

whi*_*993 4 semantic-web owl ontology protege

我使用Protege 5-beta-17创建了一个本体.在我的本体论中,我有一些课程:

Mountain, Lake, Location etc...
Run Code Online (Sandbox Code Playgroud)

我也有一个对象属性:

hasLocation.
Run Code Online (Sandbox Code Playgroud)

对于这个对象属性,我将范围设置为"Location"类,将域设置为"Mountain"和"Lake"类.

当我尝试使用CMap工具查看本体时,它只显示了

"Mountain" "hasLocation" "Location".
Run Code Online (Sandbox Code Playgroud)

"Lake"类没有"hasLocation"对象属性.

我做错什么了吗?我在Protege做了别的什么吗?

whi*_*993 8

我发现了问题所在.

将域/范围添加到protege中的object属性时,您必须单击以下按钮并选择其中一个类:

在此输入图像描述

如果要添加其他域/范围,只需再次单击其中一个按钮并添加另一个类.如果你这样做你告诉Protege你的对象属性的域/范围是两个类的INTERSECTION.这意味着将占据域/范围位置的个体是两个类别的实例而不是它们中的一个.这是我的错.我以错误的方式将域添加到域中.

所以......为对象属性添加多个不同域的正确方法如下:

只需再次单击域/范围按钮,然后选择"类表达式编辑器"选项卡: 在此输入图像描述

在类中的"类表达式编辑器"中输入如下类:"ClassA或ClassB或ClassC或......".

就我而言,它是"山或湖".

之后点击"确定"即可.

  • 这是完成你想要做的事情的正确方法,但我对这个描述嗤之以鼻.如果属性P有一个D类作为域,那么每当我们有一个断言P(x,y)时,我们就可以推断出x是D的一个实例.如果P有多个域,比如D1和D2,那么从P (x,y)我们可以推断x既是D1又是D2.如果P有多个域,那就会发生这种情况.你实际上要做的是添加一个*single*域,它是一个联合类.如果P具有联合类"(D1或D2)"作为域,那么从P(x,y)我们可以推断出x是"(D1或D2)".这是一个*单*域. (2认同)