---
title: "避免数据集成中的冗余"
date: "2012-04-30"
categories: 
  - "applications"
  - "data-integration"
tags: 
  - "data-integration"
  - "mapforce"
  - "missionkit"
  - "stylevision"
description: 探索如何利用 MapForce 来适应不断变化的 API，从而在减少冗余的同时，通过创新的数据映射来提升价值。
---
Status: #blog

Tags:  #data-integration #mapforce #missionkit #stylevision

Categories: [data-integration](/blog/zh/category/data-integration.md)
# 避免数据集成中的冗余

互联网提供了海量的数据，可以用于许多有趣的应用程序。但是，每当你设计一种独特的分析和呈现方式，而这些信息并非你所拥有或控制时，就存在一种风险：未来某个时候，信息的拥有者可能会提供相同的内容，从而使你的应用程序瞬间变得多余。

正如我们最初在[2011年8月](https://www.altova.com/blog/2011/08/processing-groupon-api-with-altova.html)报道的，我们的Groupon API数据挖掘项目也遇到了类似的情况。幸运的是，我们项目的核心是一个[MapForce图形化数据映射工具](https://www.altova.com/zh/mapforce/mapping-interface.html)。我们可以快速、轻松地调整映射关系，并将其重新利用，以呈现完全不同的数据集，从而提供新的价值。

![MapForce和StyleVision生成的HTML输出](https://lh4.ggpht.com/-Cljb05Xyph0/T5638l3TgOI/AAAAAAAAAzY/e2ZOHUuYI18/clip_image001%25255B1%25255D.png?imgmax=800 "HTML output from MapForce and StyleVision")

<!--more-->

我们的项目最初的灵感来源于一个观察：Groupon的优惠券通常只在少数特定地点可用，但实际上可以通过网络购买，并购买的商品可以几乎运送到任何地方。

我们使用 MapForce 工具，查询 Groupon API，获取来自所有 Groupon 门店的优惠信息。然后，我们过滤掉了那些被归类为“在线优惠”的商品，并使用 Altova [StyleVision](https://www.altova.com/zh/stylevision.html) 工具，将筛选后的优惠信息以美观的 HTML 页面形式呈现，使其适用于桌面设备和移动设备。

最近在Groupon网页顶部新增的“商品”选项卡，使得我们之前的数据映射变得完全多余，因为它直接提供了来自多个地区的在线商品信息。

![Groupon 菜单栏](https://lh6.ggpht.com/-orkQDLNQCSY/T563-EVvRvI/AAAAAAAAAzc/yA-Y-iOqQIA/clip_image003%25255B1%25255D.png?imgmax=800 "Groupon Menu Bar") 

更糟糕的是，由于绝大多数商品都在 Groupon 的各个分店都有售，我们的地图现在会生成数十个重复的标注。

**重新利用该应用程序**

从更宏观的角度来看，我们最初项目的合理性仍然成立：Groupon 按照地理位置来组织和展示优惠活动，但有时，优惠活动本身比地点更具吸引力。例如，也许去宾夕法尼亚州的阿伦镇并不在您的旅行计划中，但如果您知道 Groupon 有一个优惠活动，可以以半价体验在波科诺赛车场驾驶法拉利、兰博基尼或阿斯顿·马丁跑车，进行五到十圈，您会怎么想？

法拉利提供的优惠并非在线优惠，因此它没有出现在“商品”选项卡下，也没有被我们的 MapForce 数据映射程序选中。作为我们数据映射设计的一个新目标，让我们收集所有来自各个地区的 Groupon 优惠，但仅限于那些**不**被归类为在线优惠的商品。 也许在一些不太为人熟知的地区，也隐藏着许多有趣的事物。 以下是我们在原始数据映射中，用于从 API 获取数据并筛选出在线优惠的部分：

![MapForce 映射工具选择在线优惠](https://lh5.ggpht.com/-Ptb0HXebrqc/T563-k1EN7I/AAAAAAAAAzg/CIcr6nH_yfk/clip_image004%25255B1%25255D.png?imgmax=800 "MapForce mapping selects Online deals")

截图中心的代码片段中的 `contains` 函数用于检查交易描述中是否存在名为 `redemptionLocation` 的元素，并判断该元素是否包含单词 "Online"，以此来确定该交易是否为线上交易。只有当判断结果为真时，该交易才会继续进行后续处理。

位于右上角的“与”运算符将在线优惠信息与一个名为`isSoldOut`的属性进行比较，从而只选择那些仍然可用的优惠信息（`isSoldOut`的值为“false”）。

我们可以非常简单地反转已收集的数据集，方法是在 "contains" 函数之后插入一个逻辑非 (logical-not) 函数。新的映射关系会选择所有不包含 "Online" 的交易，这些交易的 "`redemptionLocation`" 元素中不包含 "Online" 这个关键词。

![MapForce 映射工具，仅选择非在线优惠](https://lh3.ggpht.com/-l13YN4e-Ato/T563_kIuLDI/AAAAAAAAAzk/XGsRLiOmeR4/clip_image005%25255B1%25255D.png?imgmax=800 "MapForce mapping selects NOT Online deals")

由于数据结构没有改变，只有内容发生了变化，所以在执行新的映射版本之前，我们无需进行任何其他操作。以下是 XML 输出的一部分，展示了关于法拉利的交易信息：

![MapForce XML 输出的部分内容](https://lh5.ggpht.com/-dp5HsRJow_0/T564AKiKGLI/AAAAAAAAAzo/eHry_7Ow_vo/clip_image006%25255B1%25255D.png?imgmax=800 "Portion of MapForce XML Output") 

我们可以将这个输出文件直接导入StyleVision，并使用我们最初的样式表将其转换为HTML文档，但既然我们还在MapForce中，我们再添加两个增强功能。

**删除重复数据**

我们仍在新的结果中发现一些重复项，这是因为相同的优惠活动经常在大型城市的不同区域同时推出。其中一个使用 MapForce 的示例是一个名为 DistinctArticles.mfd 的映射，它演示了如何从包含重复数据的 XML 数据流中去除重复项。

我们可以轻松地将示例中的设计复制到我们的Groupon页面上

![MapForce 会移除包含重复内容的 XML 节点](https://lh5.ggpht.com/-kNbDk_pMp9M/T564A1OHw9I/AAAAAAAAAzs/YuYcMlJFKpc/clip_image007%25255B1%25255D.png?imgmax=800 "MapForce removes XML nodes with duplicate content") 

“标题”元素作为唯一的标识符，用于识别重复的交易记录，而“计算时”变量只将第一个副本发送给后续处理模块。

当然，我们也可以将这种去重策略应用于最初的“在线优惠”信息整理，以确定某个地区的“商品”选项卡是否真的包含了所有可用的在线优惠。(事实并非如此。)

**数据排序**

MapForce 2012 第二版新增了一个功能，允许我们在数据写入输出文件之前对其进行排序。以下是映射配置中的一部分，它首先按照分部名称进行排序，这些分部名称代表 Groupon 的优惠活动地点，然后按照每个地点内的优惠活动标题进行排序。

![MapForce 中的数据排序](https://lh4.ggpht.com/-aGsc77JuG5U/T564BtdPWcI/AAAAAAAAAzw/xYktjaMw2t0/clip_image008%25255B1%25255D.png?imgmax=800 "Data sorting in MapForce")

现在，我们可以处理已完成的映射，并通过将 XML 输出文件与我们最初的 StyleVision 样式表进行转换，生成一个 HTML 文档

![HTML 输出由 StyleVision 转换](https://lh6.ggpht.com/-TbYmj47yh6A/T564CQgaXHI/AAAAAAAAAz0/7EJajx0u_KQ/clip_image009%25255B1%25255D.png?imgmax=800 "HTML output transformed by StyleVision")

也许，在驾驶一辆速度很快的意大利汽车之后，我们还能以优惠的价格买到美味的意大利小吃！**MapForce和StyleVision都包含在特别优惠的Altova MissionKit中。亲自体验一下，使用MissionKit集成来自Web API的数据是多么简单——** [**下载免费的30天试用版！**](https://www.altova.com/zh/download/missionkit/software_development_tools_enterprise.html)
