Lesson 03 · 属性与关系

属性与关系

本体里大部分真实知识,都活在关系里,而不在类层级里

上一课你看到 子类 与 domain/range 如何让推理器补类型。这一课把"关系"本身讲透:它有两种形态,有些属性自带"性格开关"能解锁更狠的推理,还有一个你一定会踩的建模坑——该做成类,还是做成属性?


01两种属性:连到"个体"还是连到"值"

本体里的 property 分两类,区别只在它指向什么:

类型连接Turtle 里供应链计划例
对象属性 owl:ObjectProperty个体 ↔ 个体:order-1042 :requiresProduct :sku-447订单需要物料、产线供给物料
数据属性 owl:DatatypeProperty个体 ↔ 字面量:sku-447 :hasLeadTime "14"提前期、优先级、数量
sku-447 us-plants(个体) "14"(字面量) hasSupplier(对象) hasLeadTime(数据)

图 1 · 同一个主体,一条边连到另一个个体(对象属性),一条边连到一个数值(数据属性)。

关键点(工程师最容易忽略):这两类属性在 Turtle 语法里长得一模一样——都是 主语 谓词 宾语。区别完全取决于你声明它是对象属性还是数据属性。不声明,机器就分不清。

02属性的"性格开关"= 推理的密码

除了 domain/range,属性还能带一些性格特征,一旦声明,推理器就能用它做更深的操作:

特征意思推理能做什么供应链计划例
subPropertyOf属性是另一个属性的子集A supplies B ⇒ A provides B供给 ⊆ 提供
transitive链式传递a→b→c ⇒ a→cpartOf:产线→工厂→公司
inverseOf互为逆关系a requires b ⇔ b requiredBy a需求/被需求
FunctionalProperty一个个体最多一个取值发现"两个值"即不一致某库存单元(SKU)只能有一个当前主提前期
# 一个传递属性的实战:材料清单的 partOf 链 :line-1 :partOf :plant-a . :plant-a :partOf :company-x . # 推理器自动补出:line-1 :partOf :company-x

你只写了"紧邻"的两级,推理器补全了跨层归属——这就是传递属性。

03最常踩的坑:类,还是属性?

建模时最纠结的是:这个东西该是一个类、一个属性,还是一个个体?给三条判断粗线,并用你真会遇到的例子说明:

你的直觉通常对应供应链计划例
"这是一个实体,有自己的一堆属性,可独立存在"类Supplier、Product、Order、Resource
"这只是一个值,或一条简单连接"数据/对象属性hasLeadTime(值)、requiresProduct(连接)
"这条连接本身也带着属性(数量、日期、状态)"一个类(reification 再化)SupplyCommitment:供应商×物料×数量×日期
判断口诀

如果"关系"你自己都能再挂上属性(数量、生效日期、状态),就别再做属性——把它提升为一个类。[2]

例:你说"产线 X 供给物料 Y"。若这只是个简单连接,做对象属性 supplies;但若它还带"从哪天生效、每天多少产能、是否刚被改过"——那你其实在描述一个独立的对象,该叫 SupplyCommitment(类),而不是一条属性。这跟领域驱动设计(Domain-Driven Design, 简称 DDD)里"把动作/关系再化成实体"是同一个直觉。

04对检索增强生成(RAG)的意义

05检查你的理解

下面哪个三元组用的是「对象属性」(连到另一个个体)?

若 :partOf 是传递属性,且 :line-1 :partOf :plant-a、:plant-a :partOf :company-x,推理器会得出?

「供应商对某物料的供货」这个连接本身还带数量与日期,该建模成?

本课主来源 · 值得一读 万维网联盟(W3C):OWL 2 入门 w3.org/TR/owl2-primer 读"Properties"一节:对象/数据属性、domain/range、属性特征(特性、逆、传递、函数性)的权威定义。

"到底该建类还是属性"这种建模判断,建议读 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)。

有疑问?问 agent

这一课抓住两个点:属性分对象/数据(语法一样,靠声明),以及带自己有属性的连接要做成类。拿你真实的供应链概念来问我"这个该做成类还是属性",我帮你判。