2、元数据标准与模型:DCAT、Dublin Core、Common Warehouse Metamodel (CWM) 标准介绍
聊到元数据互联互通,绕不开的就是标准。说白了,标准就是大家约定好的「共同语言」。没有标准,你家的元数据跟我家的元数据,就像一个说粤语一个说闽南话,根本没法聊。
我这些年做数据治理项目,见过太多「自创标准」的团队。一开始觉得灵活,到后面要跨系统对接时,那叫一个痛苦。所以,咱们先看看业界已经沉淀下来的几个主流标准——DCAT、Dublin Core、CWM。它们各自解决什么问题?怎么用?坑在哪?
2.1 Dublin Core:最轻量的元数据「通用语」
Dublin Core 是元数据标准里的老前辈了。1995 年就出来了,初衷很简单——给网页资源做编目。它只有 15 个核心元素,简单到让你怀疑人生。
15 个核心元素:
- 内容相关:Title、Subject、Description、Source、Language、Relation、Coverage
- 知识产权相关:Creator、Publisher、Contributor、Rights
- 实例相关:Date、Type、Format、Identifier
嗯,就这些。你想想看,15 个字段能描述什么?其实能描述的东西不少。我早期做一个文档管理系统,就用 Dublin Core 给所有内部文档打标签。效果出奇的好——因为简单,大家愿意用。
但 Dublin Core 有个问题——太简单了。你描述一本书还行,描述一个数据仓库里的多维模型?完全不够用。所以后来有了 DCAT 和 CWM。
2.2 DCAT:数据目录的「高速公路」
DCAT(Data Catalog Vocabulary)是 W3C 出的标准,专门用来描述数据目录。它的核心思想是:让不同组织的数据目录能互相理解。
DCAT 的核心模型就几个类:
| 类名 | 含义 | 我常用的场景 |
|---|---|---|
| dcat:Catalog | 数据目录本身 | 整个数据门户的根节点 |
| dcat:Dataset | 数据集 | 一个 CSV 文件、一张数据库表 |
| dcat:Distribution | 数据集的访问方式 | API 接口、下载链接、文件路径 |
| dcat:DataService | 数据服务 | REST API、SPARQL 端点 |
DCAT 最妙的地方在于 Distribution 这个设计。一个数据集可以有多种分发方式——比如同一个数据集,既提供 CSV 下载,又提供 JSON API,还提供数据库直连。这在跨平台场景下太常见了。
核心思路:DCAT 不关心数据长什么样,只关心「怎么找到数据」和「怎么拿到数据」。它是目录层的标准,不是数据层的标准。
我曾经帮一个省级大数据局做数据开放平台,就是用 DCAT 来统一描述各部门的数据集。之前各部门各写各的目录,有的用 Excel,有的用 Word,有的干脆没有。统一成 DCAT 后,至少大家知道「数据集」是什么、「更新频率」怎么写、「联系人」放哪。
dct:accrualPeriodicity(更新频率)字段,很多人直接写「每日」「每周」。但跨系统对接时,建议用 ISO 8601 重复间隔格式,比如 R/P1D 表示每天一次。不然不同系统对「每日」的理解可能不一样——工作日还是自然日?
2.3 CWM:数据仓库的「元数据全家桶」
CWM(Common Warehouse Metamodel)是 OMG 出的标准。名字里带「Common」,但一点都不 common——它非常庞大。
CWM 覆盖了数据仓库建设的方方面面:
- 资源层:关系型数据库、文件系统、XML 数据源
- 分析层:多维模型(OLAP)、数据挖掘模型
- 转换层:ETL 过程、数据映射、转换规则
- 管理层:数据质量管理、元数据生命周期
说白了,CWM 想做的事情是:把数据仓库里所有的「元数据」都用一个统一模型来描述。从源系统的表结构,到 ETL 的转换逻辑,再到最终报表的维度定义,全包了。
我实际用过 CWM 一次,是在一个大型金融数据仓库项目里。当时要对接五个不同厂商的 ETL 工具,每个工具都有自己的元数据格式。我们想用 CWM 做统一交换格式。结果呢?
实话实说:CWM 太复杂了。它的完整规范有上千页,光理解核心包就要花几周。而且很多工具厂商对 CWM 的支持只是「部分兼容」——你按规范写,他读不全。
2.4 三个标准的对比:什么时候用哪个?
| 维度 | Dublin Core | DCAT | CWM |
|---|---|---|---|
| 复杂度 | 极低(15 元素) | 中等(约 30 类) | 极高(上百类) |
| 适用场景 | 资源发现、简单编目 | 数据目录、开放数据 | 数据仓库、ETL 元数据 |
| 跨平台能力 | 强(RDF/XML 序列化) | 强(W3C 标准,RDF 原生) | 中(基于 MOF,工具支持少) |
| 实际落地难度 | 容易 | 中等 | 困难 |
| 我的推荐指数 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
你看这个表就明白了。我个人习惯是:能用 DCAT 就用 DCAT,它平衡了表达力和复杂度。Dublin Core 适合做「最小公共集」,CWM 适合做「理论参考」。
2.5 知识体系总览
下面这张图,是我梳理的三个标准在元数据互联互通中的定位。你可以看到,它们覆盖了不同的抽象层次:
从这张图能看出来,三个标准不是互斥的,而是互补的。Dublin Core 在最上层,做资源发现;DCAT 在中间层,做数据目录;CWM 在最底层,做数据仓库元数据。你完全可以组合使用——比如用 DCAT 描述数据集,用 Dublin Core 描述数据集的作者和标题,用 CWM 描述数据集背后的 ETL 逻辑。
2.6 实际项目中的选择策略
说了这么多,到底怎么选?我给出一个简单的决策树:
- 你只需要描述「有什么资源」? → Dublin Core,15 个字段搞定。
- 你要建一个数据目录,让外部系统能发现和访问数据? → DCAT,这是它的强项。
- 你要做数据仓库的元数据管理,涉及 ETL、多维模型、数据质量? → 参考 CWM 的核心概念,但别全盘照搬。建议用 DCAT 做目录层,自己扩展一个 CWM 子集做细节层。
- 你要做跨平台的元数据交换? → 首选 DCAT + JSON-LD 序列化。RDF 的灵活性在跨平台场景下是无可替代的。
一句话总结:标准是工具,不是枷锁。理解每个标准的设计哲学,然后根据你的实际场景裁剪、组合、扩展。我见过最成功的元数据项目,往往是「70% 标准 + 30% 自定义」的混合体。