内部材料

本体论工程实践方法

从概念到图的建模做法记录
本题设计· 没有方法论

斯坦福:本体论设计方法没有公认的方法论

这个领域没有唯一正确的建模方式。最佳方案取决于你设想的应用和你预期的扩展。

Ontology development is necessarily an iterative process。本体开发必然是一个迭代过程。

你组织的概念应当贴近领域里的对象和关系。这些概念通常就是人们描述这个领域时用的名词和动词。

Ontology Development 101 原文 About this guide 一节,高亮句为 there is no single correct ontology-design methodology

Ontology Development 101: A Guide to Creating Your First Ontology, 作者是 Stanford 大学的 Natalya F. Noy 和 Deborah L. McGuinness。 OpenAlex 记录到这篇文献的引用数是 4593 次

研究 · 行业经验

Stardog:不要建包罗万象的「super ontology」

Stardog 反复劝人不要建「super ontology」,也就是不要指望建一套包罗万象的本体,并给这个主张配了完整的论证,可以拆成四层。

Stardog 没有给出量化的规模上限,也没有举出过度规格化导致项目失败的具体案例。它的论证形态是重申立场加经验规则,原文用的措辞是「we're going to insist」,这是表态度,不是做证明。所以这条建议的强度属于行业经验,不属于经过验证的结论。

(Stardog: Building a knowledge graph)

定位 · 决策的表示

Palantir 把本体定位成决策的表示

Palantir 官方把每一个运营决策拆成四个部分(Why create an Ontology?):

组成含义
Data决策所依据的信息
Logic评估决策的启发式与计算过程
Action所选决策的编排与执行
Security决策符合运营策略的保证

Palantir 在文档里直接点明了本体的定位:「The Ontology represents the decisions in an enterprise, not simply the data.」

Palantir 在同一页还给了一个比喻:数据对象是本体的「名词」(semantic),动作是本体的「动词」(kinetic)。

原则 · 按优先级排序

Palantir 的四条本体设计原则

These four principles are derived from extensive field experience across government and commercial implementations. They are presented in priority order. In cases of conflict, higher-priority principles take precedence.

优先级原则核心意思
1Domain-driven design你建模真实世界,不建模源数据
2Do not repeat yourself你把同一个东西建了三遍,就该重构(rule of three)
3Open for extension, closed for modification软件设计开闭原则(OCP):对外开放扩展,关闭修改
4Composition over deep hierarchies做组合设计,不搞深继承链

Palantir 给这四条原则排了优先级,这一点很实用。你遇到两条原则互相冲突的时候,按序号取高的那条就行,不用每次重新争论。

做法 · 先领域后数据

官方给了一条明确的操作顺序:先理解领域,再设计对象模型,最后映射数据

Palantir 在这一页的 best practices 里,第一条要求你「Identify real-world entities before looking at source schemas」。最后一条写着:

Model the domain, then map the data: Understand the domain, then design the object model, then map source data into that model. Do not attempt to look at the data and replicate its shape.

Palantir 在同一页列出的反面做法有这些:

Palantir 举的例子很直观。一张 CSV 表里含 order_id、customer_name、customer_email、product_sku、quantity 五列。这五列描述的是至少三个实体(Order、Customer、Product),不是单独一个实体。

标准 · RDF 与本体是什么关系

RDF 是本体的事实标准

RDF 的设计目标是描述资源,让机器能处理网上的数据。它是个通用的数据模型,目的是任何领域的陈述都能表达,和本体没有绑定关系。

RDF 的模型适合承载本体。 因为它把一切压成三元组,类也是一个节点,属性也是一个节点,于是你可以对它们下断言。这种"什么都一样"的统一性,正是"模式也是数据"能成立的根源。

标准 · RDF 管什么、不管什么

RDF 规定的是数据模型

RDF 是 W3C 的一个标准,规定的是数据模型。它不是软件,不是数据库,也不是文件格式。全名 Resource Description Framework。它只规定两件事:

其他一概不管。所以在项目里用到多种层次的技术方案:

层标准或技术你项目里的对应物
数据模型RDF三元组、IRI、字面量、空白节点
序列化语法Turtle、N-Triples、JSON-LD、RDF/XMLontology.ttl、knowledge_docs.ttl
模式词汇RDFS、OWL空的,第 9 课要补
查询语言SPARQL你写的 SELECT、INSERT
校验SHACL没用到
存储引擎不属于 RDF 标准TDB2
服务器不属于 RDF 标准Fuseki
基础 · 三元组的硬规则

RDF 数据模型基本规则

  • 一条边(三元组)固定三部分:主语、谓词、宾语。
  • 谓词只能是 IRI。字面量不行,空白节点也不行。
  • 主语只能是 IRI 或空白节点。字面量不行。
  • 宾语可以是 IRI、空白节点、字面量。
  • 图是三元组的集合。同一条三元组不能出现两次,插入重复的三元组等于什么都没做。
  • 方向属于数据本身。A→B 和 B→A 是两条不同的边,可以同时存在。
  • 同一对节点之间可以有多条边,靠谓词区分。
  • 可以自环,主语和宾语是同一个 IRI。
  • 同一个 IRI 可以出现在任何位置,包括谓词位。
基础 · 谁是节点,谁能放在哪个位置

谁是节点,谁能放在哪个位置

图的节点等于所有主语加所有宾语。谓词不算节点,它是边上的标签。

种类有名字吗主语谓词宾语
IRI有,全局唯一能能能
空白节点没有能不能能
字面量是值本身不能不能能
本体 · 本体层与数据层

本体层与数据层

一句话对照:

数据层:  gwa:scenario_1  gwa:core_object  gwa:bo_FinancingAsset
本体层:  gwa:core_object  rdfs:range      gwa:BusinessObject

两条形状一样,区别在第二条谈论的对象是 core_object 这个谓词自己。