




CDM是可自我描述、语义激活的底层数据框架,通过定义传感器观测值表达、时间戳时区、单位制等本质约束实现跨系统语义互通;CDMMapping.xml是IBM Control Desk中对接DIS的映射配置文件,须符合预定义schema且修改后需重启DIS生效。
CDM(Common Data Model)不是一种“规范”本身,而是一个**可自我描述、语义激活的底层数据框架**——它不强制统一所有字段名或业务逻辑,而是通过明确定义“传感器观测值怎么表达”“时间戳带不带时区”“单位用 SI 还是工程制”这类本质约束,让不同系统能真正“读懂彼此的数据”,而不是只靠字段名硬对。
它在 XML 映射中不直接出现,但起着关键支撑作用:XML 文件(比如 CDMMapping.xml)之所以能稳定工作,正是因为背后有 CDM 提供的语义锚点。没有 CDM,maximo.assetnum 和 DIS.assetIdentifier 的映射就只是字符串替换;有了 CDM,它们才被共同锚定到“资产唯一标识”这个业务语义上,哪怕将来字段名全换,只要语义不变,映射规则依然有效。
这是 IBM Control Desk 中用于对接 DIS(Data Integration Service)的配置文件,核心作用是把 Maximo 数据库字段(如 workorder.status)映射到 DIS 要求的命名属性(如 DIS.workOrderStatus),最终生成 NRS 集成标识。
,每个 必须含 source 和 target 属性,且 target 值必须是 DIS 已注册的命名属性target 写了 DIS 不认识的名字(比如拼错成 DIS.workOrderStaus),DIS 启动时会静默跳过该条映射,不报错也不警告,但数据就丢了你在 Integration Composer 或自研 ETL 中写的 XSLT 或 XmlDocument.Load() + XPath 处理,属于技术层映射;而 CDM 是业务层契约。两者脱节时,典型问题如下:
loan.interestRate 映射为 DIS.annualInterestRatePct,但 CDM 定义里后者单位是“百分比数值”(如 4.5),而源系统存的是小数(0.045)——映射代码没做乘100,结果利率全错 100 倍sensor.timestamp 必须是 ISO 8601 带时区格式(2026-01-14T12:10:00+08:00),但 XML 映射脚本直接用了 DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),导致下游解析失败addr.street/addr.city,B 团队用一个 addr.fullText 字段——表面都能跑通,但 CDM 要求结构化地址以便地理编码,这种“能跑≠合规”别只测“XML 能生成”,要测“语义没漂移”。实操建议:
System.Xml.Schema.XmlSchemaSet 加载 CDM 官方提供的 XSD(如有),再用 XmlReader.Create(..., settings) 开启 DTD
source 字段后,立刻检查其值是否符合 CDM 对该字段的约束(如非空、长度≤50、正则匹配手机号格式),不符合就抛 InvalidOperationException 并带 CDM 字段 IDDIS.assetLifecycleStage 取值只能是 'commissioned'/'decommissioned'/'maintenance'”)写成单元测试的 [TestCase],每次更新映射都跑一遍),应提取为参数或引用外部 lookup 表——因为 CDM 约束可能随监管变化,硬编码会让映射和 CDM 脱钩