恒川工业的 BA 在白板上画了一个 Facility,准备让 Plant 和 Warehouse 都“继承”它。开发人员只问了一句:“初版应用做在 Workshop,而 Interface 目前不受 Workshop 支持,这个抽象准备交付给谁?”
会议安静了下来。
抽象不是把相似字段圈在一起,也不是让模型显得高级。它必须为真实消费方消除重复,同时不能制造产品支持、权限和迁移上的新债务。
本篇要解决的问题
上一篇解决了对象身份:ERP M-1042、WMS MAT1042-SH 和供应商门户 P-8821 经过规则确认后,才共同指向 Material / MAT-0001042。
身份稳定以后,重复开始出现:Plant 和 Warehouse 都有名称与位置;多个对象都有风险等级和生效日期;520 EA 总被拆成数量和单位;同一物料编码规则在 Pipeline 和 Ontology 中重复校验。
这些问题分别该交给 Interface、Shared Property、Struct 还是 Value Type?又在什么时候应该坚持使用普通 Object Type 和 Property?
一句话定义:
Ontology
的高级类型构件,是在已有 Object Type 与 Property 之上复用对象能力、属性元数据、复合值结构或字段语义的建模机制;它们减少的是被证实的重复,不是代替具体
业务对象
。
“高级类型系统”是本系列对四类构件的教学分组,不是 Palantir 对外提供的一个独立产品名称。
先放回 Palantir 架构:四个词并不在同一层
它们都服务于 Foundry 管理的 Ontology,但职责和生命周期不同。

Interface 与 Object Type 都是 Ontology type,但一个抽象、一个具体。Shared Property 与 Struct 解决 Property 层的问题。Value Type 能用于 Ontology,却与 Space 绑定。Palantir:Value types overview
|
构件 |
概念类型 |
上一级/基础 |
平级或最易混淆项 |
下游消费者 |
|
Interface |
抽象 Ontology type |
Ontology Language;interface properties、Link/Action constraints、metadata |
具体 Object Type |
实现它的 Object Types、Functions、Object Set、OSDK 等受支持入口 |
|
Shared Property |
可跨 Object Type 使用的 Property |
Property 元数据与各对象的数据映射 |
Local Property |
多个 Object Types 与其建设者 |
|
Struct |
Property base type |
Dataset/Restricted View 中的单一 struct column |
独立 Object Type、普通标量 Property |
Ontology Property、Action、受支持应用与 Functions |
|
Value Type |
Space 关联的字段语义类型 |
primitive field type、metadata、constraints、版本和权限 |
primitive field type、Property |
Builder pipelines、Ontology Properties 等同 Space 消费方 |
一张选择表:它们各自在复用什么
|
你真正想统一的东西 |
优先评估 |
不要误写成 |
|
多类对象共同具备的形状和可交互能力 |
Interface |
父表、对象全集或共享数据源 |
|
多个属性的名称、描述、显示等 metadata |
Shared Property |
多对象共用同一份属性值 |
|
一个属性值内部不可分的多个字段 |
Struct |
没有身份的“轻量 Object” |
|
一个值的领域含义、格式和校验约束 |
Value Type |
Property 或 Object Type 的替代品 |
|
只有一处使用、语义尚未稳定 |
普通 Object Type / Local Property |
为未来想象预建抽象层 |
这四项并非成熟度阶梯。项目不会从 Local Property “升级”到 Struct,再升级成 Interface。它们回答的是四类不同问题。
Interface:统一的是对象能力,不是对象数据
接口(Interface)是一种抽象 Ontology type,用来描述 Object Type 应有的形状和能力。它可以包含 interface properties、Link Type constraints、Action Type constraints 与 metadata;一个 Object Type 可以实现多个 Interface。Interface 没有 backing dataset,不能直接实例化为 Object。Palantir:Interfaces overview
在恒川,具体对象仍然是:
-
Plant / PLANT-EAST,由 ERP/MES 主数据支撑;
-
Warehouse / WH-E01 与 Warehouse / WH-S02,由 WMS 支撑。
候选 Facility Interface 可以要求实现者提供 facilityName、location 等共同能力。它不产生一条名为 Facility-001 的记录,也不把 Plant 与 Warehouse 两份 datasource 合成一张表。
Interface 的价值出现在消费端。假设已确认两个工作流:TypeScript v2 Function 跨 Plant 与 Warehouse 检索供应节点;TypeScript OSDK 应用通过共同 API 展示设施。此时新增 ColdStorage Object Type 并实现 Facility,已有工作流可以少做一次按具体类型重构。
但若唯一消费方是初版 Workshop 页面,就不应为想象中的未来先建 Interface。按 2026-08-08 官方页面,当前支持面如下:
|
支持状态 |
应用/服务 |
当前边界 |
|
支持 |
Ontology Manager、Marketplace、TypeScript v2 Functions |
可定义、编辑、实现、打包或在 TS v2 Functions 中使用 |
|
部分支持 |
Actions |
可对实现 Interface 的对象做创建、修改、删除或 Link 操作;Interface Action Type constraints 仍为 beta |
|
部分支持 |
Object Set Service |
可按 Interface 搜索、排序;聚合和 Interface Link Type 支持仍在开发 |
|
部分支持 |
Ontology SDK |
TypeScript 当前支持;Java 与 Python 支持仍在开发 |
|
尚未支持 |
Workshop、TypeScript v1 Functions、Python Functions |
不能假设与具体 Object Type 相同的消费能力 |
这张表是带日期的产品事实,不是永久能力承诺。项目发布超过 30 天或目标 enrollment 不同时,应重新打开官方文档核验。
在 Ontology Manager 中,建设者会看到带虚线边框图标的 Interface,配置属性与约束,再由具体 Object Type 实现。运营用户看到的仍应是 Plant、Warehouse 及其业务操作。
Shared Property:统一 metadata,不统一值
共享属性(Shared Property)是可被多个 Object Type 使用的 Property。它让团队一致建模,并在一个位置集中维护 Property metadata;各 Object Type 背后的数据仍然分别存在。Palantir:Shared properties overview
恒川可评估 externalReference Shared Property:Plant 从 ERP 取得外部编码,Warehouse 从 WMS 取得外部编码。两边共用名称、描述和展示语义,但各自的值和 datasource 仍然独立。
Ontology Manager 为 Shared Property 提供独立管理页面,并用地球图标标识。集中维护意味着一次 metadata 修改可能影响多个 Object Type,因此必须有 Owner 和变更评审。
以下情况不值得共享:两个字段都叫“状态”,但一个表示仓库营业状态,另一个表示缺料处置状态。名字相同不等于业务语义相同。若硬合成一个 Shared Property,只会把差异藏进枚举和说明文字。
Struct:把多个字段作为一个复合值
结构体(Struct)是 Ontology Property 的一种 base type,用一个有 schema 的 Property 容纳多个字段。上游字段可以来自不同数据源,但在定义到 Ontology 前,必须先转换为单一 struct type column。Palantir:Structs overview
例如 AP-2048 的调拨量可以候选建为:
transferQuantity = { amount: 520, unit: "EA" }
当金额和币种、数量和单位在该场景中必须作为一个整体读取和编辑,Struct 比两个彼此可能错配的普通字段更清楚。但“放在一起显示”不是充分理由。
如果某个字段组合需要独立 Primary Key、Link、Action、权限或生命周期,它已经更像一个业务对象。例如一条可被批准、撤销和对账的调拨任务,不应藏进 Allocation Proposal 的 Struct,而应评估独立 Object Type。
Struct 还有几条不能绕过的当前限制:
-
深度只有一层,不能嵌套,且至少包含一个字段;
-
当前字段类型只支持官方清单中的 primitive types;
-
数组中的 Struct 查询可能分别匹配不同元素的字段,不能想当然地按同一个元素成对命中;
-
不支持 Object Storage v1,因此对象数据必须走支持 Struct 的 Object Storage v2 路径;
-
当前只能从 Dataset 与 Restricted View 创建;OSDK 支持因语言而异,Functions 的参数和编辑能力也要按语言核验。
在产品里,建设者先在上游形成 struct column,再在 Ontology Manager 定义 Struct/Property 映射。当前 Action 可以创建或修改 Struct 值,Workshop 可以显示并把它作为变量使用,但这不等于所有入口都完整支持。
Value Type:统一“这个值是什么意思”
值类型(Value Type)是对 primitive field type 的语义包装,附加 metadata 与 constraints。Property 回答“哪个对象拥有哪个特征”,Value Type 回答“这个值属于什么领域类型、必须满足什么约束”。Palantir:Value types overview
恒川可为 canonical material ID 评估 MaterialId Value Type:底层仍是 STRING,但它明确表示跨系统归并后的物料身份,并可加入受控格式校验。Pipeline 字段和 Material.canonicalMaterialId Property 可以复用同一语义,不必每处依赖列名和说明猜测。
若 WarehouseCode 只在 Warehouse 一个 Property 上出现,Local Property 已经足够;同一语义进入多个 Pipeline、Object Type 或参数后,才评估 Value Type。
Value Type 与 Space 关联,只能在定义它的 Space 内使用;Default ontology 不可用。它还受权限和版本治理。“跨平台复用”不等于跨所有 Space 全局可见。Palantir:Value types overview
建设者定义 Value Type 后,可在 Builder pipeline 字段和 Ontology Property 上使用。变更约束前要检查版本兼容、既有数据与消费方。
四种错误抽象,怎样伤害缺料处置
|
错误做法 |
表面收益 |
恒川后果 |
正确判断 |
|
先建 Facility,再找用例 |
看起来统一 |
Workshop 无法按预期消费,团队又为 Plant/Warehouse 写两套逻辑 |
先列真实消费者与支持入口 |
|
把所有 status 设为 Shared Property |
减少属性名 |
仓库营业、订单履行、缺料处置状态被混成一套枚举 |
只共享完全一致的业务语义和 metadata |
|
把调拨任务做成 Struct |
少建一个对象 |
无法独立授权、追踪 Action、失败与对账 |
有身份和生命周期就评估 Object Type |
|
把 MaterialId 当全局 Value Type |
似乎统一全集团 |
目标 Space 无法使用或版本升级破坏 Pipeline |
先确认 Space、权限、版本和迁移范围 |
抽象还会进入函数签名、Action 参数、SDK、权限和发布包。提前抽象未必专业;先获得复用证据,才有资格抽象。
BA 工作台:Ontology Abstraction Decision Card
Ontology Abstraction Decision Card 是本系列的 BA 实施资产,不是 Palantir 官方固定模板。它用于方案设计和变更评审,要求每个抽象候选同时说明收益、消费者和反证条件。
|
卡片字段 |
Facility Interface 填写样例 |
|
候选构件 |
Interface:Facility |
|
要消除的重复 |
Plant 与 Warehouse 的共同设施查询和 API 交互逻辑 |
|
具体实现者 |
Plant、Warehouse;均保留独立身份与 datasource |
|
已确认消费者 |
TS v2 Function;TypeScript OSDK 应用 |
|
共同契约 |
facilityName、location;未来 Link/Action constraint 另行评审 |
|
产品支持核验 |
两个消费者当前可支持;Workshop 当前不支持,不能作为验收入口 |
|
Space / 权限 |
与目标 Ontology 同一治理范围;Interface 定义和 Object 数据权限分别验证 |
|
迁移代价 |
对齐 Property 语义、修改 Function/OSDK 类型、回归搜索与 Action |
|
反证条件 |
只有一个消费者;两个类型的“位置”口径不同;初版只能用 Workshop |
|
Owner |
Ontology Product Owner;Plant 与 Warehouse 业务 Owner 联合签字 |
|
验收方式 |
两类对象均能被同一消费方读取;新增第三类实现者无需复制核心逻辑;具体类型功能不退化 |
|
当前决定 |
有条件采用:两个消费者完成 PoC 和权限测试后进入正式 Ontology |
对其他三类候选,BA 可用同一张卡快速给出结论:
|
候选 |
复用证据 |
当前决定 |
上线前必须验收 |
|
externalReference Shared Property |
Plant/Warehouse 共用相同 metadata,数据仍来自 ERP/WMS |
可采用 |
两边语义一致;metadata 变更有 Owner 与影响分析 |
|
transferQuantity {amount, unit} Struct |
520 与 EA 必须共同读取、编辑 |
条件采用 |
OSv2;上游单一 struct column;Action/Workshop/查询行为通过测试 |
|
MaterialId Value Type |
Pipeline 与 Property 重复使用身份语义和格式校验 |
条件采用 |
同一 Space;非 Default ontology;权限、版本、存量数据兼容通过 |
一套可以直接执行的决策顺序
先写消费者。 没有具体应用、Function、Action、Pipeline 或 SDK 消费者,不进入抽象评审。
再写复用内容。 是对象能力、metadata、复合值,还是字段语义?只选一个主问题。
核对产品路径。 检查目标 enrollment、Interface 支持矩阵、OSv2、Datasource、Space、语言 SDK 与 Function 版本。
写出反证。 什么条件出现时应退回普通 Object Type 或 Local Property?
做最小 PoC。 不只验证能创建,还要验证查询、Action、权限、版本和实际交付入口。
确定 Owner。 抽象一旦被多个对象采用,修改不再是单团队私事。
本系列建议“至少两个具体 Object Type、两个已确认消费者”后再评估 Interface。这是实施归纳,不是 Palantir 官方准入规则;它的目的,是让抽象由使用证据驱动。
结论:抽象必须服务运行
Interface 复用对象的形状和能力;Shared Property 复用 Property metadata;Struct 把多个字段组成一个 Property 值;Value Type 复用值的领域语义和约束。四者都不能自动共享对象数据,也不能代替对象身份、Link、Action 和权限设计。
在恒川,Facility 是否成立,不取决于 Plant 和 Warehouse 看起来相似,而取决于是否有受支持的共同工作流。transferQuantity 是否成为 Struct,也不取决于页面排版,而取决于它是不是不可分的值,并能穿过 OSv2、数据源与消费入口的限制。
模型现在已经能表达“谁、有什么特征、怎样复用”。但缺料处置还有一个更难的问题:availableQuantity=760 EA 是此刻状态、每日快照,还是一段时间序列?供应商承诺从 8 月 12 日改到 8 月 18 日,应该覆盖当前值,还是保留为业务事件和当时证据?
本文依据 Palantir 公开资料、本地阅读笔记及实施研究整理,与 Palantir Technologies 无官方关联。“Ontology 高级类型系统”分组和
Ontology Abstraction Decision Card 不是 Palantir 官方独立产品或固定模板。产品能力与支持矩阵可能变化,请以官方文档和目标环境为准。




