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 最适合做「资源发现」级别的元数据。别指望它描述复杂的业务逻辑,它就是个「门牌号」。

但 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 后,至少大家知道「数据集」是什么、「更新频率」怎么写、「联系人」放哪。

避坑指南: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 的支持只是「部分兼容」——你按规范写,他读不全。

我的建议:CWM 更适合做「元数据交换的参考模型」,而不是直接实现的规范。你可以参考它的核心概念(比如 Transformation、Mapping),但别指望完全按规范走。实际项目中,我通常只取 CWM 的 20% 核心包,其他自己扩展。

2.4 三个标准的对比:什么时候用哪个?

维度 Dublin Core DCAT CWM
复杂度 极低(15 元素) 中等(约 30 类) 极高(上百类)
适用场景 资源发现、简单编目 数据目录、开放数据 数据仓库、ETL 元数据
跨平台能力 强(RDF/XML 序列化) 强(W3C 标准,RDF 原生) 中(基于 MOF,工具支持少)
实际落地难度 容易 中等 困难
我的推荐指数 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐

你看这个表就明白了。我个人习惯是:能用 DCAT 就用 DCAT,它平衡了表达力和复杂度。Dublin Core 适合做「最小公共集」,CWM 适合做「理论参考」。

2.5 知识体系总览

下面这张图,是我梳理的三个标准在元数据互联互通中的定位。你可以看到,它们覆盖了不同的抽象层次:

元数据标准体系结构图 元数据标准体系结构 Dublin Core 资源发现 · 15 核心元素 · 最轻量 DCAT(Data Catalog Vocabulary) 数据目录 · Catalog/Dataset/Distribution · W3C 标准 CWM(Common Warehouse Metamodel) 数据仓库元数据 · ETL/OLAP/多维模型 · OMG 标准 抽象层次 ↑ 高抽象 ↓ 低抽象 ↓ 更具体 跨平台能力 RDF/XML RDF/JSON-LD MOF/XMI 核心原则:从通用到专用,逐层细化 Dublin Core → DCAT → CWM 覆盖不同抽象层次 实际项目中,建议以 DCAT 为主,Dublin Core 做补充,CWM 做参考

从这张图能看出来,三个标准不是互斥的,而是互补的。Dublin Core 在最上层,做资源发现;DCAT 在中间层,做数据目录;CWM 在最底层,做数据仓库元数据。你完全可以组合使用——比如用 DCAT 描述数据集,用 Dublin Core 描述数据集的作者和标题,用 CWM 描述数据集背后的 ETL 逻辑。

2.6 实际项目中的选择策略

说了这么多,到底怎么选?我给出一个简单的决策树:

  1. 你只需要描述「有什么资源」? → Dublin Core,15 个字段搞定。
  2. 你要建一个数据目录,让外部系统能发现和访问数据? → DCAT,这是它的强项。
  3. 你要做数据仓库的元数据管理,涉及 ETL、多维模型、数据质量? → 参考 CWM 的核心概念,但别全盘照搬。建议用 DCAT 做目录层,自己扩展一个 CWM 子集做细节层。
  4. 你要做跨平台的元数据交换? → 首选 DCAT + JSON-LD 序列化。RDF 的灵活性在跨平台场景下是无可替代的。

一句话总结:标准是工具,不是枷锁。理解每个标准的设计哲学,然后根据你的实际场景裁剪、组合、扩展。我见过最成功的元数据项目,往往是「70% 标准 + 30% 自定义」的混合体。