Apache Ossie本体概念详解:一文看懂EntityType与ValueType的本质区别
发布时间:2026/9/18 20:15:17 锦皓数字建站

Apache Ossie本体概念详解一文看懂EntityType与ValueType的本质区别【免费下载链接】ossieApache Ossie, industry wide specification effort to standardize how we exchange semantic metadata across analytics, AI and BI platforms, providing a vendor neutral, single source of truth for semantic data项目地址: https://gitcode.com/GitHub_Trending/osi1/ossieApache Ossie 是一个面向数据分析、AI 与 BI 生态的开源语义元数据交换标准前称 OSI其本体Ontology规范中最容易混淆的两个核心概念就是EntityType实体类型与ValueType值类型。本文面向新手用一个生活化的例子加一张对比表帮你快速分清两者的本质区别不再在建模时选错类型。如上图所示本体Ontological Layer位于 Apache Ossie 三层架构的最上层负责描述业务里有哪些概念、概念之间如何关联而 EntityType 与 ValueType 正是定义这些概念的两种基本方式。一句话区别是对象还是数据先记住这个判断标准 EntityType现实世界中独立存在的东西不能直接用值引用必须借助其他信息来定位。例如一个人要凭身份证号或邮箱地址才能找到他。ValueType一种带了业务语义的数据类型。例如身份证号本质是一个字符串或整数但被赋予了必须恰好九位数字这类额外含义。规范原文的表述见 ontology/ontology.mdAn entity type is a concept that represents real-world objects that must be referenced using other information. A value type is a concept that represents instances of some data type with additional semantics.在 JSON Schema 中每个概念concept的type字段只有两个合法取值EntityType和ValueType见 ontology/ontology.json二选一没有第三种。EntityType现实世界的对象EntityType 描述的是业务里的名词性主角人、公司、机场、航班……它们有几个鲜明特征必须有识别关系identify_by实体对象不能凭空引用要通过一个或多个识别关系来定位。比如Airport用 IATA 三字码code识别Aircraft用tailnum尾号识别。只能继承其他 EntityType每个实体类型隐式继承内置概念Any最通用的实体类型。可以拥有关系relationships实体之间通过关系连接比如航班在某机场出发。以仓库中的航班示例 examples/flights.yaml 为例Airport就是一个典型的 EntityType- concept: Airport type: EntityType identify_by: [ code ] # 通过 AirportCode 唯一识别 relationships: - name: code roles: - concept: AirportCode # 识别关系指向一个 ValueType multiplicity: OneToOne注意Airport用identify_by: [code]声明我要靠 code 这个关系找到你而 code 的另一端AirportCode恰恰是一个 ValueType——这就是两类概念如何协作的典型模式。ValueType带业务语义的数据ValueType 描述的是值但它比数据库里的裸类型String、Integer多了一层业务含义必须直接或间接继承内置值类型Integer、String、Date、Decimal等见 ontology/ontology.md 的内置概念列表。可以用 requires 加约束把业务规则写进类型本身。还是看航班示例- concept: DegreesLatitude type: ValueType extends: [ Decimal ] requires: [ DegreesLatitude 90, DegreesLatitude -90 ] - concept: CancelationCode type: ValueType extends: [ String ] requires: [ CancelationCode A OR CancelationCode B ... ]DegreesLatitude纬度值只是Decimal但被约束在 -90 到 90 之间CancelationCode只是String但只允许 A/B/C/D 四个取值。同样的裸数据一旦挂上 ValueType业务含义、校验规则就随之确定了——这正是单一事实来源的价值所在。EntityType 与 ValueType 对比速查表对比维度EntityType实体类型ValueType值类型本质现实世界的独立对象带业务语义的数据类型类比实体 / 对象类型数据类型 / 域Domain如何引用必须通过identify_by识别关系间接引用值本身即可传递和引用继承规则只能继承其他 EntityType隐式继承Any必须直接或间接继承内置值类型典型字段identify_by、relationshipsextends、requires示例Airport、Flight、CarrierAirportCode、Delay、Distance新手建模三步判断法写 YAML 时拿不准选哪个按顺序问自己三个问题 ✅它是一个东西还是一个值会在现实中被指向、有生命周期机场、航班、客户→ EntityType只是某个属性取的值价格、日期、编码→ ValueType。引用它需要钥匙吗需要先拿 ID 再找对象→ EntityType记得写identify_by。它是某内置类型的业务子集吗是如只允许 A/B/C/D 的字符串→ ValueType用extendsrequires表达。一个实用经验实体的身份往往就是某个 ValueType。Aircraft靠TailNr识别、Route靠RouteId识别——识别关系OneToOne是连接两类概念的桥梁。深入阅读规范与源码在哪里想动手验证或二次开发建议按这个顺序阅读 本体规范全文概念、关系、识别关系、约束与推导ontology/ontology.md机器可读的 JSON Schema校验概念类型是否合法ontology/ontology.json完整示例TPC-DS 语义模型 examples/tpcds_semantic_model.yaml、本体示例 examples/flights.yamlPython 参考实现中的ConceptType枚举与Concept模型converters/ontology/src/ossie_ontology/model.py核心规范文档逻辑层与表达式语言core-spec/spec.md小结EntityType 是谁现实对象靠识别关系定位彼此用关系连成业务网络ValueType 是什么值内置数据类型的业务化子集用extends定血统、用requires定规则两者通过识别关系identify_by OneToOne握手共同构成 Apache Ossie 本体层的概念世界。理解了这个区别你就能读懂任意一份 Ossie 本体文件也为后续学习关系多重度ManyToOne/OneToOne、推导表达式derived_by打下基础。【免费下载链接】ossieApache Ossie, industry wide specification effort to standardize how we exchange semantic metadata across analytics, AI and BI platforms, providing a vendor neutral, single source of truth for semantic data项目地址: https://gitcode.com/GitHub_Trending/osi1/ossie创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。