![7e287433ea630dbc6656172a377d3ccd.png](https://i-blog.csdnimg.cn/blog_migrate/fe935932b26d90bf4e910be89b00b8ab.jpeg)
本文将介绍如何通过 Protege 构建 OWL 本体,文中使用的软件版本为 mac 上的 protege 5.5.0 桌面版。
1 OWL 本体简介
OWL 是由 W3C 开发的一种本体描述语言,按照表达性可以被分为三类:
- OWL-Lite:可表达性最低
- OWL-DL:可表达性中等(本指南使用)
- OWL-Full:可表达性最高
本指南中将使用 OWL-DL(下文简称为 OWL),其基于描述性逻辑(Description Logics),表达性适中且支持自动化推理。关于 OWL 版本的选择,可以参考如下准则:OWL-Lite 和 OWL-DL 间的选择主要取决于OWL-Lite 的简单结构是否足够;OWL-DL 和 OWL-Full 间的选择则取决于是否需要支持自动推理或是否需要使用复杂的表达或建模工具。
OWL 本体的组件与 Protege 框架下的本体组件相对应,包括:
- Individuals:对应 Instances
- Properties:对应 Slots
- Classes:对应 Classes
1.1 Individuals(个体)
个体表示我们感兴趣的领域中的对象。与其他基于 Protege 的本体的重要区别在于,原始的 OWL 不遵循唯一命名假设(UNA),即两个不同名称的个体可能表示同一个个体,在 OWL 中,必须要明确指出个体之间是等同的还是不同的,否则其可能相同也可能不同。
下图给出了对某个领域中某些个体的表示:
![0321d578e69a03593b7754013b20339a.png](https://i-blog.csdnimg.cn/blog_migrate/a75d520f1a906492bdd6c7aef394b224.jpeg)
1.2 Properties(属性)
属性是个体间的二元关系,即属性将两个个体连接在一起。
属性拥有多种特征,如:
- 可以转置
- 可以被限制为单值
- 可以传递或具有对称性
下图展示了将某些个体连接起来的某些属性:
![43f1241a7122c9b7a6bb14917bc108ec.png](https://i-blog.csdnimg.cn/blog_migrate/73aef3c5e951232093e1763a7287b1c3.jpeg)
1.3 Classes(类)
类可以理解为包含个体的集合。类通常使用正式的描述来精确表明其需求,如类 Cat 会包含领域中所有的猫的个体。类可以被组织为超类-子类的层级关系,即分类学(taxonomy)。OWL 的一个重要特征是超类-子类关系可以由推理机自动计算得出。
下图给出了包含个体的某些类:
![01f8cfb8e57305af2656371ffef914a7.png](https://i-blog.csdnimg.cn/blog_migrate/38c2a4b14b8e96584289310ab160cc83.jpeg)
2 构建一个 OWL 本体
本章节以创建一个披萨本体为例,介绍如何通过 protoge 构建一个 OWL 本体。
2.1 创建本体
File -> New 新建一个本体,修改其 IRI(每个本体唯一):
![d67fa97ed53a0bb7ac016cfc33a6a482.png](https://i-blog.csdnimg.cn/blog_migrate/2bb805b41af35d41ecd397c9299ad15e.png)
以 OWL 形式保存为 "pizza.owl":
![0306dd75c2613ffc2573f9eeefe778b4.png](https://i-blog.csdnimg.cn/blog_migrate/939e5504bf15ce478e35e0a22e80c24e.jpeg)
在 Annotation 中可以添加评论:
![1ec4775cc7bc6c86215b3e62cfcdd1d5.png](https://i-blog.csdnimg.cn/blog_migrate/bdb315a7e4acf61d26a1854d0b2adb3d.jpeg)
当前状态如下:
![6def2341af4b426f512199c205a96f52.png](https://i-blog.csdnimg.cn/blog_migrate/cf8d2eeb593384f548d54d02d920d131.jpeg)
2.2 创建类
首先,在 Classes Tab 下(可能需要手动打开),新建 Thing 的子类。Thing 表示所有个体的集合。选中 Thing 后新建子类,新建一个子类后可以选择新建兄弟类:
![b10d263b53997ce3a735c1d98d51fb68.png](https://i-blog.csdnimg.cn/blog_migrate/3197cd5782afca591e431935d6330e6b.jpeg)
注意类的命名规则应该统一,建议使用驼峰命名。然后为这些子类设置 disjoint。disjoint 即一个类的实例无法归属于另一个类:
![80123134903c323d90c26342fefe2934.png](https://i-blog.csdnimg.cn/blog_migrate/07b5884d2dc3d7023f1e637cdd83a2d6.jpeg)
2.2.1 使用 Create Class Hierarchy 来创建类
下面介绍一种同时创建多个子类的方法。选中 PizzaBase,点击 Tools -> Create class hierarchy,在弹出窗口中逐一输入类名即可。注意:类名不可重复,可批量添加前缀和后缀,默认类之间 disjoint:
![89eb9f7607fdf0f5fea7798e492b1562.png](https://i-blog.csdnimg.cn/blog_migrate/b1008ae2e0244e5852b068b0d69df09b.jpeg)
同理,创建 PIzzaTopping 的子类,可以在创建时使用 tab 来进一步划分子类。最终的类层级结构如下:
![2101c50c6df18a0ae6ddcfd845d9f657.png](https://i-blog.csdnimg.cn/blog_migrate/a63db3fd6edb5c744eab69dcfb471a63.jpeg)
在 OWL 本体中,子类意味着其实例均为父类的实例:
![224543a3c560fec91cbe5207a295d167.png](https://i-blog.csdnimg.cn/blog_migrate/66deb1ec512bb381e7b7d30e4c5b1703.jpeg)
2.3 OWL 属性
OWL 属性主要分为两种:Object 属性和 Datatype 属性。还有一种属性是 Annotation 属性,用于补充信息。下图给出了各个属性的说明:
![b2e838a5233ddef2187233684c174c4e.png](https://i-blog.csdnimg.cn/blog_migrate/d9dddc85bda38ffa3c925d84d7248a77.jpeg)
在 Object Properties Tab 中(需要手动打开)新建如下属性:
![0b1a57a79eb8657fcb91528adb44e800.png](https://i-blog.csdnimg.cn/blog_migrate/25da180d9c594bf7eea1eee1e952d043.jpeg)
关于属性建议采用小驼峰命名,并使用 has 等前缀提升可读性。属性可以拥有子属性,但要注意属性类型必须相同,如数据属性不能是对象属性的子属性。
2.3.1 转置属性
每个对象属性都可以拥有一个转置属性:
![31a7cd92e190c9d7aa3a8b19903c72ee.png](https://i-blog.csdnimg.cn/blog_migrate/5010fd31fa8f8237676b293e4fffc999.jpeg)
我们可以新建如下转置属性,并通过 Inverse of 将其关联起来:
![9cbf7298be3f2717f718f5eab4baeca6.png](https://i-blog.csdnimg.cn/blog_migrate/a79de57b19ac8c1a4f44590441014589.jpeg)
2.4 OWL 对象属性特征
OWL 通过属性特征来使得属性的意义更加丰富,可选的特征如下:
2.4.1 功能(Functional)属性
功能属性的对应个体至多为一个&#x