Protege本体构建小tips

现在这篇文章是记录我重新修改本体后,再次构建本体,遇到了问题以及好的一些小tips记录。

持续更新中………………

1.中英文创建本体(4.13)

       为了使得本体模型更加通用灵活,采用中英文构建本体模型,而且更加清晰,不限制使用人员的英文水平哈哈哈。

(1)首先在创建类、对象属性、数值属性时候,先选择一种命名方式,定义好一个类。

(2)选中类/对象属性/数值属性,在Annotations处,点击添加。

(3)选择rdfs:lable,输入中文名称,例如“壳类零件”,并且在Language Tag处写上zh,选择Chinese,如下图1-1所示,点击确定。同时重复该步骤,输入英文名称“ShellPart”,输入en语言,选择English,如下图1-2所示,点击确定。

图1-1中文设置

图1-2 英文设置

注:大家可以会有疑问,最开始创建的时候不是已经命名了一次了吗?为什么这里还需要中英文都定义呢?这是因为最开始我们创建类输入的名称只是为了创建出IRI,但是并不是其标签。

(4)同样的,为了增强可读性,你还可以在这里增加comment,也就是一个注释,为了更加清楚。

(5)这个时候,我们可以发现Class hierarchy这里的名称变化了。如果我们最开始创建的是英文的IRI名称,但是我们创建好Lable后,他就会显示为中文。这是因为在Protege里面的语言设置中,其优先顺序是中文、然后才是英文。如果想要显示英文,那就将英文的顺序调整到前面即可。具体设置为点击File—Preferences—Render—Configure—Set Language,将en调整到zh前面就行,如下图1-3所示,这样就会优先显示英文了。即想要显示谁,就设置谁优先。谁优先Anotation这里就会先显示谁,如下图1-4所示(我的是英文)。

图1-3 优先级设置

图1-4 优先级设置

2.创建对象属性约束(4.14)

当你设置完成对象属性后,其Domains和Ranges通常是父类之间,子类之间会自动集成该关系。但是子类又有一定的限制,例如酒由工厂制作,即Domains 为酒,Ranges 为 工厂,对象属性为被制作。但是酒下面又有很多子类,例如白酒、红酒等,工厂也有很多例如A类工厂、B类工厂,但是存在一些限制,例如白酒只能由A类工厂制作,所以就需要添加对象属性约束,使得所有 白酒 的 被制作 属性指向的个体都必须是 A类工厂。这就需要我们创建Restricted preperty,在里面选择约束的对象属性、约束类型、以及约束值域(填充)。

选择好要设置的Domains的子类,然后再点击SubClassof,点击右上角的 + 添加一个子类约束,选择里面的obejct restriction creator。 

如下图案例所示,特征具有加工计划,孔只有孔加工计划,故需要设置 Hole hasFeatureMachiningPlan only HoleFeatureMachiningPlan。如下图所示:


图1-5 约束设置

3.Pellet推理数值属性类型错误(4.15)

构建完成本体后,包括类、对象属性、数值属性以及部分实例后,想用一下推理查看是否本体存在语义不一致的问题,检查一下。结果发现使用Pellet推理机推理后,实例部分的数值属性里面出现了错误的推理,即对原有的实例数值属性,重新推理出来,但是数据类型变化了。

即 你设置了Tool1 :minAchievableFeatureSize 30 ,在protege里面是默认是decimal的,但是pellet估计是有点问题,他理解的是int,所以就会有冲突,就会再次推理出一次Tool1 :minAchievableFeatureSize "30"^^xsd:int .,但是实际上我们设置的没问题,size的值类型的确需要是decimal,只不过这里刚好是整数而已。

为了避免这种情况发生,我们就需要多设置个小数点,即如果出现decimal类型的值是整数的,例如30^^xsd:decimal,我们就需要改成30.0^^xsd:decimal.

我这样更改后就不会出现推理重复以及类型错误了。

Pellet 和 Protege 在数值类型处理上的一个“微妙的不一致”问题。

图1-6 修改方式

我这样改的原因是因为我的确没有在protege里面发现我定义错误的问题,以及SWRL里面定义错误的问题,因此只能是推理机的问题了,而且用hemit就不会出现刚刚我说的问题。所以我才这样解决的,如果你也出现了,建议按一下顺序来调整:

(1)检查本体中出现这个数值属性的地方是否有定义冲突,即数值属性那边定义的和实例处引用定义的数值类型不一样;

(2)检查是否在SWRL规则里面引用更改了这个数值类型;

(3)如果都没有则按上面的解决吧,加个小数点吧!

4.定义类和基本类(6.16)

创建第二个本体的时候,遇见了一些问题,发现对象属性是顶层与顶层之间的,例如软件具有操作,但是软件的子类具有不同的操作子类,因此就需要对类进行限制,也就是2中提到的对象属性的约束。在这过程中,发现了可以去定义类,即告诉本体满足什么条件的就是这个类。

例如具有A参数B参数(类)的操作就是型腔铣操作,这样可以根据定义去实现推理,想必这就是DL逻辑给出的推理,不仅仅用SWRL能推理,通过本体自身的定义也会实现推理。

定义类是需要设置 EquivalentTo 的,设置完成后类名前面的图标就会多三道横线。

这种“定义类”会被推理器动态分类,不再只是静态归在某个上层类下面。

但是不是所有的类都需要进行定义,例如“软件名称”并不是靠逻辑属性来推理归类的,他就是个标签,而操作根据选择的参数不同操作也不同,所以可以进行一个定义用来自动归类。

且定义的时候如下所示:

图1-7 类定义方式

这个就表示具有这些参数的二轴加工才是2D等距操作。

图1-8 定义类显示图标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值