应用数据映射模式

Altova MapForce 包含强大的映射组件,这些组件对应于用于满足数据转换需求的设计模式。 提前分析数据映射的挑战,并遵循一些简单的指导原则,可以发现数据映射模式,从而简化映射设计的创建,并最终获得最佳解决方案。 "MapForce 示例"项目提供了示例映射文件和数据集,这些文件和数据集展示了许多常见的数据映射模式。 查阅这些示例,并使用 MapForce 内置的执行引擎运行它们,是帮助您为自己的项目选择最佳模式的另一种有效方法。

精确匹配 vs. 条件匹配

首先,确定您的输入和输出之间是严格一一对应的关系,还是需要分析更复杂的情况,例如从...到...的范围,或者需要使用条件语句(如if-else)。

精确匹配功能允许您通过一个简单的双列表格来表达您的需求。算法的工作原理是:“在左列中查找与给定输入值完全匹配的项,然后使用该行右列中的值。” 请注意,左列中的所有项目必须是唯一的,而右列中可能存在重复的值。

精确匹配的例子包括将月份名称映射到数字,或者将ISBN转换为书籍标题。

精确匹配选项

如果表格中的条目数量固定且相对较少(例如,最多20个,或者在特殊情况下最多200个),可以使用“值映射”组件。典型的应用场景包括将月份名称转换为数字,或者将一种代码转换为另一种代码(例如,将“F”转换为“XX”,将“M”转换为“XY”)。

您甚至可以重命名“value-map”组件的输入和结果列的名称。只需在“value-map”属性对话框中,双击“input”或“result”名称(或者点击铅笔图标),然后开始输入即可。 这样可以更轻松地识别映射中多个“value-map”组件的用途。

“MapArticle.mfd” 示例展示了如何使用“value-map”组件。

有时我们会收到询问,为什么没有一个设置可以将未知的输入值原样传递到输出。 答案是,如果输入和输出端的数据类型不同,这样做就无法实现。 例如,如上所示,将整数映射到字符串就是一个例子。

解决方案是取消选中“Otherwise”选项(这样,对于未知输入,value-map将返回一个空序列),然后在输出端使用核心函数库中的“substitute-missing”节点,将这个空序列替换为原始输入值。

更大的查找表

对于大量数据条目或经常变化的查找表,使用数据库查询是最佳解决方案。这意味着查找表的实际值不会直接包含在映射中,而是存储在数据库中。为了实现这种模式,需要在映射中添加一个数据库组件和一个SQL-WHERE组件。DB_PhoneList.mfd示例展示了这种策略。

如果您无法使用数据库,并且数据量不大,您也可以使用其他组件来代替,例如 XML 或 CSV,以及一个过滤组件,就像在示例文件 CompletePO.mfd 中看到的。但是,这种方案在运行时可能比使用带有 WHERE 子句的数据库更慢。

对于某些需求,您甚至可能需要调用 Web 服务来查找值。示例文件 BookISBNConvertWS.mfd 和 CurrencyConverter.mfd 展示了如何使用 Web 服务进行数据查询。

条件匹配

如果需要进行比精确匹配更复杂的条件判断,例如检查输入值的范围,可以使用“if-else”组件,就像在示例文件“ClassifyTemperatures.mfd”中展示的那样。

在“如果-否则”组件中,红色的加号允许您添加更多测试条件,每个条件都基于不同的逻辑函数。 “否则”输入框允许您定义在所有逻辑测试条件都不满足时,结果应该是什么。

复杂映射与组件重用

如果您的数据转换需求涉及多个输入和输出,您可以轻松地在一个映射中包含多个值映射和条件判断组件。

您可以复制上述任何组件,方法是在单个设计中或在不同的映射文件中使用复制和粘贴。此外,您还可以将此处描述的任何解决方案封装在用户自定义函数中,以便重复使用。您可以将您自己的函数保存到用户函数库中,以便在其他项目中使用,或者与同事共享。

亲自体验一下,看看如何在您自己的数据转换项目中轻松应用 MapForce 的数据映射方案! 下载免费的30天试用版 关于 MapForce 的信息。