Lesson 03 · 属性与关系
属性与关系
本体里大部分真实知识,都活在关系里,而不在类层级里
上一课你看到 子类 与 domain/range 如何让推理器补类型。这一课把"关系"本身讲透:它有两种形态,有些属性自带"性格开关"能解锁更狠的推理,还有一个你一定会踩的建模坑——该做成类,还是做成属性?
01两种属性:连到"个体"还是连到"值"
本体里的 property 分两类,区别只在它指向什么:
| 类型 | 连接 | Turtle 里 | 供应链计划例 |
|---|---|---|---|
对象属性 owl:ObjectProperty | 个体 ↔ 个体 | :order-1042 :requiresProduct :sku-447 | 订单需要物料、产线供给物料 |
数据属性 owl:DatatypeProperty | 个体 ↔ 字面量 | :sku-447 :hasLeadTime "14" | 提前期、优先级、数量 |
图 1 · 同一个主体,一条边连到另一个个体(对象属性),一条边连到一个数值(数据属性)。
主语 谓词 宾语。区别完全取决于你声明它是对象属性还是数据属性。不声明,机器就分不清。
02属性的"性格开关"= 推理的密码
除了 domain/range,属性还能带一些性格特征,一旦声明,推理器就能用它做更深的操作:
| 特征 | 意思 | 推理能做什么 | 供应链计划例 |
|---|---|---|---|
subPropertyOf | 属性是另一个属性的子集 | A supplies B ⇒ A provides B | 供给 ⊆ 提供 |
transitive | 链式传递 | a→b→c ⇒ a→c | partOf:产线→工厂→公司 |
inverseOf | 互为逆关系 | a requires b ⇔ b requiredBy a | 需求/被需求 |
FunctionalProperty | 一个个体最多一个取值 | 发现"两个值"即不一致 | 某库存单元(SKU)只能有一个当前主提前期 |
你只写了"紧邻"的两级,推理器补全了跨层归属——这就是传递属性。
03最常踩的坑:类,还是属性?
建模时最纠结的是:这个东西该是一个类、一个属性,还是一个个体?给三条判断粗线,并用你真会遇到的例子说明:
| 你的直觉 | 通常对应 | 供应链计划例 |
|---|---|---|
| "这是一个实体,有自己的一堆属性,可独立存在" | 类 | Supplier、Product、Order、Resource |
| "这只是一个值,或一条简单连接" | 数据/对象属性 | hasLeadTime(值)、requiresProduct(连接) |
| "这条连接本身也带着属性(数量、日期、状态)" | 一个类(reification 再化) | SupplyCommitment:供应商×物料×数量×日期 |
如果"关系"你自己都能再挂上属性(数量、生效日期、状态),就别再做属性——把它提升为一个类。[2]
例:你说"产线 X 供给物料 Y"。若这只是个简单连接,做对象属性 supplies;但若它还带"从哪天生效、每天多少产能、是否刚被改过"——那你其实在描述一个独立的对象,该叫 SupplyCommitment(类),而不是一条属性。这跟领域驱动设计(Domain-Driven Design, 简称 DDD)里"把动作/关系再化成实体"是同一个直觉。
04对检索增强生成(RAG)的意义
- 对象属性让图能"跳"——多跳检索"哪条产线能供这个订单?",沿着
requiresProduct/supplies走,而不只是关键词匹配。 - 数据属性让你能筛能约束——"提前期 ≤ 14 天的 SKU",或约束注入的数值范围。
- 把"关系"正确地再化,大语言模型(Large Language Model, 简称 LLM)才能理解"供给"不是一个布尔,而是带数量/日期的承诺。
05检查你的理解
下面哪个三元组用的是「对象属性」(连到另一个个体)?
若 :partOf 是传递属性,且 :line-1 :partOf :plant-a、:plant-a :partOf :company-x,推理器会得出?
「供应商对某物料的供货」这个连接本身还带数量与日期,该建模成?
"到底该建类还是属性"这种建模判断,建议读 Semantic Web for the Working Ontologist 中关于建模抉择的章节。
[1] 万维网联盟(World Wide Web Consortium, 简称 W3C),OWL 2 Web 本体语言(Web Ontology Language)入门 —— property / domain / range / 属性特征。
[2] Allemang & Hendler, Semantic Web for the Working Ontologist —— "该做类还是属性"的建模判断(reification)。
这一课抓住两个点:属性分对象/数据(语法一样,靠声明),以及带自己有属性的连接要做成类。拿你真实的供应链概念来问我"这个该做成类还是属性",我帮你判。