实践层

Ontology Lab

每个实验 = 一个可运行 artifact — Pizza → Ad Pizza → OWL API → ...

Ontology Lab

每个实验 = 一个可运行的 artifact:建了什么类、写了什么限制、Reasoner 推导出了什么。
学 Ontology 不只是"看",是"做"——这里是 ONTAO 的工程实践记录。


Lab #001 — Pizza Ontology(结构剖析 + Reasoner 实战)

学了什么(语法清单)

Class / SubClass / Property / Restriction
some(至少一个)/ only(全部都是)/ min(数量下限)/ not(否定)/ and(合取)
EquivalentClass(等价类定义)/ Reasoning(推理)

实测结构盘点

项 数量 说明
Class 99 Pizza / NamedPizza / 43 种配料 / 4 种饼底 / 分类类(VegetarianPizza 等)
ObjectProperty 8 hasTopping↔isToppingOf、hasBase↔isBaseOf、hasIngredient↔isIngredientOf、hasCountryOfOrigin、hasSpiciness
Individual 0 纯类层级(TBox),个体由学习者自己建

关键定义(推理的燃料)

类 等价定义(EquivalentClass) 含义
VegetarianPizza Pizza ∧ ¬(hasTopping some MeatTopping) ∧ ¬(hasTopping some FishTopping) 披萨 + 没有任何肉/鱼配料
CheeseyPizza Pizza ∧ hasTopping some CheeseTopping 披萨 + 至少一种芝士
MeatyPizza Pizza ∧ hasTopping some MeatTopping 披萨 + 至少一种肉
InterestingPizza Pizza ∧ hasTopping min 3 披萨 + 至少 3 种配料

Reasoner 实战记录

实验 1:建个体"番茄+芝士+蘑菇披萨"(饼底薄脆)
→ 推理出:CheeseyPizza(有芝士 ✅)、InterestingPizza(3 种配料 ✅)、ThinAndCrispyPizza(饼底匹配 ✅)

实验 2:加一个肉配料(Pepperoni)
→ 推理出:MeatyPizza(hasTopping some MeatTopping 满足 ✅)

实验 3(⭐ 机制层发现:开放世界假设 OWA)
纯素披萨一直没被推为 VegetarianPizza——不是 bug!

OWL 是开放世界:推理器只知道"有这 3 个配料",但不能假设"只有这 3 个"(可能还有未知配料)。所以 ¬(hasTopping some MeatTopping) 无法被证明——不知道 ≠ 不存在。

对比:数据库是封闭世界(查不到 = 不存在);OWL 是开放世界(查不到 = 未知)。
这对 ONTAO 的意义:规则要机器可证明,必须明确世界假设;SHACL 才是封闭世界的规则语言。

实验 4(closure 闭合公理):显式声明 hasTopping only (番茄|芝士|蘑菇) 闭合世界后:
→ 个体被推为 VegetarianPizzaEquivalent1/2 ✅
→ 但仍推不出 VegetarianPizza!因为 MeatTopping 与 VegetarianTopping 没有显式不相交声明(disjoint),OWL 语义下二者可重叠。

教训:ONTAO 规则要能被推理器证明,disjointness(不相交声明)不可省——这是教程没明说、要自己撞出来的机制层知识。

核心领悟

OWL 分类不是静态标签——类是约束(TBox),个体是事实(ABox),推理器按约束检查事实,动态得出/撤销分类。这就是"机器可理解的语义体系"的运作机制。

与 ONTAO 的映射(路线第二步预告)

ONTAO OWL 说明
对象 Class / Individual 完全对应
关系 Object Property 完全对应
属性 Datatype Property 完全对应
规则 OWL axioms / SHACL 规则要机器可证明有讲究(OWA/disjoint)
状态 / 动作 / 权限 超出 OWL ONTAO 的 Operational 部分,需在 OWL 之上补层

复跑命令

pip3 install --user owlready2
sudo apt-get install -y default-jre-headless   # HermiT 需要 Java

python3 analyze_pizza.py    # 结构剖析(99 类 / 8 属性 / 等价类)
python3 reasoner_demo.py    # Reasoner 实战(建个体 → 推理 → 加肉 → closure 实验)

路线图(进行中)

# 实验 状态
001 Pizza Ontology — 结构 + 推理 ✅ 完成
002 Ad Pizza — 广告变现领域从零建模(AdAccount / Traffic / AdUnit / Impression / Revenue) ⏳ 下一步
003 OWL API — 程序化操作本体(Java 10 课) ⬜
004 Gene Ontology — 复杂本体工程(imports / property chain / disjointness) ⬜
005 FIBO — 企业级业务本体研究(金融行业) ⬜

每完成一个 Lab,更新本页 + 沉淀到 ONTAO 学习仓库。