使用 IBM InfoSphere DataStage 8.5 中的 XML 转换功能,第 1 部分: 使用 DataStage XML Stage 转换 XML

解析并编写 XML 文件的新功能

了解如何在 IBM® InfoSphere™ DataStage® 8.5 中使用 XML Stage。本文为将 XML 架构导入 Schema Library Manager、解析 XML 文件、编写 XML 文档以及将它们写入 DB2® pureXML® 提供了分步说明。

Amir Bar-or, 高级架构师和经理, IBM

Amir Bar-or 的照片Amir Bar-or 是马萨诸塞实验室企业信息管理组的一名高级架构师和管理者。他在数据库研究和开发方面拥有 10 多年经验,他先在 HP 实验室做了一名研究员,然后进入 IBM SWG。现在,他在领导 DataStage 未来 XML 功能的开发。



Shruti Choudhary, 高级质量保证工程师, IBM

Shruti Choudhary 的照片Shruti Choudhary 是 IBM 印度实验室的高级质量保证工程师。她具有 DataStage XML Stage 的丰富经验,现在她正在从事 WebServices Stage 的工作。她具有两年多的质量保证方面经验。



2011 年 5 月 09 日

免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

作为 InfoSphere Information Server 8.5 版本的一部分,InfoSphere DataStage 通过称为 XML Stage 的新层次转换功能进行了增强,其提供本机 XML 架构支持以及强大的 XML 转换功能。这些功能都基于独一无二的最先进技术,该技术允许您从关系形式分析和编写任何复杂的 XML 结构和将这些结构分析和编写为关系形式,以及分析和编写为不同的层次形式。。

此新技术不同于其他已知的 XML 工具,具有直观的分步用户界面和强大的执行能力,可以使用有限内存并行处理任何文件大小(进行了超过 20GB 的测试)。XML Stage 具有与市场上的其他工具不同的独特功能,例如控制和配置执行的验证级别的能力(范围从严格到最小程度的验证),以及并行解析单个大文件的能力。XML Stage 不要求任何语言技能,例如 XSLT 或 XQuery,即便在其没有完成时也允许您即时调试并测试转换。

这些新的功能取代了以前的 DataStage XML Stage:XML 输入、XML 输出以及 XML 转换器。在使用这些阶段的以前作业将继续运行时,您应该使用新的功能,因为其具有优越的生产率和性能。

XML Stage 文档 提供了介绍性信息,同时还提供了 简单示例,说明每个转换步骤的使用。您应该使用该文档作为您了解工具并执行简单解析和转换的第一信息源。

本文是系列文章的第一篇,将会帮助您了解并利用 IBM InfoSphere Datastage 8.5 中的新功能。第 1 部分介绍了 8.5 版中的新功能,而后演示了一些用于导入元数据、将 XML 文档解析到关系数据以及从关系数据编写 XML 文档并将它们插入 DB2 pureXML 的几个基本方案。

方案一:将 XML 架构文件导入 InfoSphere Information Server

将 XML 架构文件导入 Information Server 是创建 XML 转换的先决条件。新的 XML Stage 提供了转换映射工具,利用已处理文档的 XML 架构以及阶段输入和输出链接结构。

Schema Library Manager

Schema Library Manager 可作为 InfoSphere DataStage Designer 中的新菜单条目使用。您能够使用 Schema Library Manager 来导入并管理 XML 架构定义。Information Server 存储了所有的已导入架构定义并将它们组织到架构库中。架构库是一系列 XML 架构文件,它们可为特定主题的文档结构提供规范。例如,您可以创建由许多架构文件组成的单个行业标准的架构库。如果包括在库中的所有文件都坚持 XML 架构 2.0 规则则架构库有效,并且可以解析所有引用。

通过 INCLUDE 或 IMPORT 语句,架构文件可以相互关联。针对其他架构文件的引用通过架构文件的架构位置(包括)或命名空间(导入)来完成。此类引用必须在单一架构库中进行解析。这意味着由架构库中包括的文件引用的所有文件也必须包括在库中(传递闭包)。

架构库之间不存在共享。因此,您可以在两个不同的架构库中保持相同标准的两个版本(文件集)。

处理 INCLUDE 语句

不同于使用命名空间作为架构文件 ID 的 IMPORT 语句,INCLUDE 语句使用依靠物理位置的文件位置。将架构文件导入 Information Server 时,每一个文件的位置属性默认为文件名。然而,通常不仅仅通过它们的文件名来引用这些文件。例如,架构 A 可以通过使用相对目录结构引用架构 B。

<xs:include schemaLocation="../common/basic.xsd">

或者,它甚至能够引用 web 托管文件的 URL。

<include schemaLocation ="http://www.example.com/schemas/address.xsd">

在这样的情况下,如 图 2 所示,您必须在 Schema Library Manager 中将已引用文件的文件位置属性修改为 INCLUDE 语句使用的位置。

下面的步骤将演示如何通过它们之间的包含依赖关系来导入两个架构文件。架构位置使用 URL,因此文件的位置属性必须变更以便与该 URL 相匹配。

导入架构的步骤

  1. 通过从 IBM DataStage 和 QualityStage Designer 客户端选择 ImportSchema Library Manager 来打开 Schema Library Manager。您还可以从 XML Stage 的 Assembly Editor 访问 Schema Library Manager。
  2. 根据创建名为 Example 的架构库,将在其下导入架构。
    1. 要创建库,请单击 New Library 按钮。
    2. 在 New Contract Library 窗口中,在 Name 字段键入 Example
    3. 单击 OK
    4. 如果需要将库分类,则在创建库时输入类别。
  3. 单击您刚刚创建的库。
    1. 转到导入架构,请单击 Import New Resource 按钮。
    2. 浏览查找架构 Company.xsd,并单击 Open
    3. 成功导入该架构,但是库行是红色的,这说明出现了错误。为了查看错误,请单击 Validate 按钮。图 1 显示了库中的错误。
      图 1. 在导入 Company.xsd 以后,Schema Library Manager 中的错误
      在只导入 Company.xsd 时,Schema Library Manager 显示错误

      (查看图 1 的 放大图。)

    4. 正如错误消息所指出的,无法在架构 Company.xsd 中找到 Dept_idDept_NameDept_location 的类型定义。这是因为这些定义位于名为 Department.xsd 的另一个架构中。该警告表示无法在库中找到 Department.xsd。
  4. 将 Department.xsd 导入相同的库。用对 Company.xsd 的相同方式执行导入。即使在导入 Department.xsd 以后,仍会在库中看到该错误。这是因为 Company.xsd 架构中的位置属性指向了文件的实际物理位置,即 http://ibm.com/definitions/Department.xsd,但是在 Schema Library Manager 中位置属性默认为架构名,即 Department.xsd。
  5. 要解决这些错误,请更改架构 Department.xsd 的位置。
    1. 在 Resource View 窗口中单击 Department.xsd 架构。
    2. File Location 字段,用 http://ibm.com/definitions/Department.xsd 替代 Department.xsd
    3. 如图 2 所示,在您更改文件位置名时,库行变为绿色,这说明库是有效的。
      图 2. 更改 Department.xsd 的文件位置以后的 Schema Library Manager
      在变更 Department.xsd 的文件位置以后,Schema Library Manager 行变为绿色

      (查看图 2 的 放大图。)

处理多文件架构

Schema Library Manager 具有导入包含许多 XSD 文件的整个 zip 文件的能力。在导入 zip 文件时,Schema Library Manager 会导入所有 zip 文件中的文件并将位置属性设置为从 zip 文件的根设置开始的相对目录。此功能可节省导入所有文件的繁琐工作并更新其各自的位置。

来自示例 XML 文件的架构归纳

在一些方案中,您可能获得了没有定义架构的 XML 数据,或者该架构不再与数据正确匹配。您可以通过使用许多可用 XML 工具中的一个来解决此问题,其可以从实例 XML 数据归纳出一个架构。还有开源库,可以从一系列文件归纳出 XML 架构。以下步骤显示了如何使用 Trang 工具以便从 下载 部分中的一系列 XML 示例文件归纳出架构。

  1. 下载 trang.jar 并将其解压到您所希望的位置。
  2. 从命令提示符运行此命令:
    java -jar trang.jar -I xml <absolute path of xml files> <absolute path of xsd file>

    例如,您可以将输入文件 library1.xmllibrary2.xml 放入 C:\test 文件夹。然后将 trang 解压到 C:\trang 文件夹。然后创建 library.xsd 的命令将从 C:\trang 文件夹运行。以下命令显示了如何执行此操作:

    java -jar trang.jar -I xml C:\test\library1.xml C:\test\library2.xml library.xsd

    在运行此命令时,将使用架构结构填充 library.xsd 文件。现在,使用以前描述的流程将 library.xsd 上传到 Information Server。

方案二:将 XML 文件解析到平面文件

在此方案中,您使用可用 InfoSphere DataStage Designer 中调色板的 Real Time 部分上可用的 XML Stage。XML Stage 可以是源阶段,这意味着它直接读取 XML 文件并向前传递关系信息;从多关系输入流编写 XML 文件的目标阶段;或者中间阶段,其可以在将关系数据转换为 XML 或者从 XML 转换关系数据时读取并写入 XML 文件。

在此方案中,您将使用该阶段作为中间阶段,其可以接受 XML 文件路径作为输入、解析这些文件中的每一个以及将它们转换为将发送到输出链接的平面关系记录。图 3 显示了 DataStage 作业的布局。

图 3. 用于解析 XML 文件的 DataStage 作业的布局
用于解析 XML 文件的 DataStage 作业的布局。

要定义转换,您需要创建阶段集合。该集合是一系列步骤,对分层数据执行丰富功能和转换。

该集合由多个步骤组成。在以前的作业中,输入、解析和输出用于将多个 XML 文件解析为关系记录。以下的步骤描述了如何创建集合:

  1. 要打开 Stage Editor,请双击 XML stage
  2. 从 Stage Editor 窗口,单击 Edit assembly 按钮以便打开 Assembly Editor
  3. 单击 Assembly Outline 下的 Input Step。Input Step 描述了关系结构的元数据。在提供输入链接到 XML Stage 时,该步骤被激活。添加到 XML Stage 的前一阶段的列可以修改、删除,也可以添加新列。如图 4 所示,您可以看到列 file_names,其被添加到前面的 External Source Stage。
    图 4. XML Stage 中的输入步骤
    XML Stage 中的输入步骤。

    (查看图 4 的 放大图。)

  4. 要将 Parser Step 添加到 Assembly Outline 中,请单击 Palette,并双击 XML_Parser Step
  5. 要查看 Parser Step,请单击 Assembly Outline 中的 XML_Parser Step。Parser Step 用于解析 XML 文件。在 Parser Step 中您需要定义 XML SourceDocument Root。XML Source 定义从哪里读取 XML 文档,而 Document Root 定义所有读取文档的常见结构。
    1. 如图 5 所示,从 XML Source 窗口,选择 File set 选项并从下拉列表中选择 top/InputLinks/library/file_names。向 XML Stage 提供一系列文件路径时,使用 File 设置选项。
      图 5. XML Parser Step 中的 XML Source 配置
      XML Parser Step 中的 XML Source 配置。

      (查看图 5 的 放大图。)

    2. 如图 6 所示,从 Document Root 窗口,单击 Browse,并从 Schema Library Manager 选择根元素 library。架构 library.xsd 应先导入到 Schema Library Manager 中,然后才能在 Parser Step 的文档根目录中选择它。XML 文档应该符合在 Parser Step 的 Document Root 中选择的架构。
      图 6. 在 XML Parser Step 中配置 Document Root
      在 XML Parser Step 中配置 Document Root。

      (查看图 6 的 放大图。)

      在以前的架构中,有 authorsbooks 两个列表。使用输出步骤,可以将这两个列表映射到两个不同的链接。

  6. Output Step 允许您将分层数据结构映射到关系数据结构。因为该作业有来自 XML Stage 的两个输出链接,所以 Output Step 的 Mappings 窗口中可以看到两个列表。已经在输出顺序文件中定义的列在 Mappings 窗口中的各自列表下是可见的。
    1. 单击 author 目标列表的 Source 列。
    2. 从 Suggestion List 下拉列表,选择 XML_Parser:result/nso:library/authors 并单击 Auto Map。请注意所有的源列都映射到各自的目标列中。
    3. 单击 book 目标列表的 Source 列。
    4. 从 Suggestion List,选择 XML_Parser:result/nso:library/authors/books,并单击 Auto Map。请注意所有的源列都映射到各自的目标列中。
    5. book 列表,您需要手动更正自动对 author_id 字段进行的映射。Auto Map 选择了错误的项目因为其尝试映射相同层级的第一个项目。您想通过使用 Suggestion List 中的 More 选项来将父列表的项目用作外键。然后将 author_id 字段映射到 /library/author/@id
    6. 完整的映射显示在图 7 中。
      图 7. Output Step 的 Mappings 窗口
      Output Step 的 Mappings 窗口。

      (查看图 7 的 放大图。)

  7. 组装完成后,如果任何步骤中都未见错误,您就可以在运行 DataStage 作业之前测试集合。您可以使用一小部分测试数据以便查看集合的逻辑是否正确。测试数据应放置在需要外部输入的所有步骤中。在当前的作业中,您必须具有针对输入步骤和 XML_Parser 步骤的输入。
    1. 在 Input Step 中,您需要为列 file_names 指定值。在原始作业中,此列将保持 XML 文件的绝对路径。对于测试 Assembly 来说,文件的位置不必指向确切的 XML 文件位置。因此在 Input Step 中,请单击 Test Data 选项卡,并为 Input Test Data 值键入 C:\test
    2. 在 XML_Parser 步骤中,请单击 Test Data 选项卡并将 XML 文件之一的内容粘贴到 Input Test Data 窗口。
    3. 然后,您可以通过单击 Assembly Editor 中的 Test Assembly 按钮运行 Test Assembly。
    4. Test 窗口中,请单击 Run Test 按钮。一旦 Assembly 已经与测试数据一起运行,您将看到 Test completed 的消息。
    5. 为了检查每一个步骤的输出,您可以单击各自步骤的 Test Data 选项卡。
    6. 程序集的最终输出可出现在 Output Step 中,如图 8 所示。
      图 8. 运行 Test Assembly 以后的输出
      运行 Test Assembly 以后的输出。

      (查看图 8 的 放大图。)

  8. 单击 OK 保存并关闭 Assembly Editor。
  9. 单击 OK 保存并关闭 Stage Editor。

方案三:在 DB2 pureXML 中构建并存储 XML 文档

在此方案中,您使用 XML Stage 以便将关系数据合并到分级文档,执行分级转换以便筛选相关数据,并将信息重组到所需的架构中。根据 XML Stage ,您将使用 DB2 Connector 以便将文档插入 XML 列。

该作业旨在将来自两个连续文件的数据合并为一个 XML 文件,且该 XML 文件将被写入数据库中的列。连续文件包含不同作者和他们所著书籍的信息。包含作者信息的 Author_file 阶段,包括 first-namelast-nameDateOfbirthauthor_id。包含每本书的信息的 Book_file 阶段,包括 titlelangbook_idauthor_id。列 author_id 涉及到各自书籍的作者。您可以在图 9 中看到 DataStage 作业的布局。

图 9. 用于构造 XML 文件的 DataStage 作业的布局
用于构造 XML 文件并将已编写的 xml 文档放入数据库的 DataStage 作业的布局
  1. 使用 Join Stage 合并来自 Sequential 文件、Author_file 和 Book_file 的数据。
    1. 双击打开 Join Stage
    2. 单击 Stage Propertie 选项卡,然后从 Join Keys 下拉菜单选择 author_id
    3. 单击 Output 选项卡,然后将来自左侧窗格的所有列映射到右侧窗格上的输出链接。
  2. XML Stage 将使用 Input、Regroup、Composer 和 Output Step 以便创建 XML 文件然后将其写入数据库。
  3. 双击 XML Stage 以打开 Stage Editor
  4. Stage Editor 窗口,单击 Edit assembly 按钮打开 Assembly Editor
  5. 为了将步骤添加到 Assembly Outline 中,请单击 Palette
  6. 双击 Regroup StepXML_Composer Step 以便将它们添加到如图 10 所示的 Assembly Outline 中。
    图 10. Assembly Outline
    Assembly Outline。
  7. Assembly Outline 下,单击 Input Step 以便显示 Join Stage 输出的列,如图 11 所示。
    图 11. XML Stage 中的 Input Step
    XML Stage 中的 Input Step。

    (查看图 11 的 放大图。)

  8. Assembly Outline 下,单击 Regroup Step。Regroup Setp 通过消除重复并创建关系联接创建的平面列表外的嵌套列表来补充关系联接。嵌套列表基于一组键形成父子关系。
    1. List to Regroup 字段定义了需要重组项目的列表。从下拉中选择输入链接以便用输入链接下所有字段填充 Child Items 列。
    2. 为了创建层级,请将父字段拖进 Parent Items 列。然后将 first_namelast_nameDateOfbirthauthor_id 拖进 Parent Items 列,如图 12 所示。
      图 12. 配置 Regroup Step
      配置 Regroup Step。

      (查看图 12 的 放大图。)

  9. 如图 13 所示,从 Regroup Step 的 Keys 窗口,从下拉列表中选择 author_id
    图 13. 在 Regroup Step 中配置 KEYS 窗口
    在 Regroup Step 中配置 KEYS 窗口。

    (查看图 13 的 放大图。)

  10. 如图 14 所示,单击 Regroup Step 的 Output 选项卡以便显示输出架构结构。
    图 14. Regroup Step 的 Output 选项卡
    Regroup Step 的 Output 选项卡。
    1. Regroup:result 列表包括父级和子级列表项目,可将它们重命名以使它们更易于理解。要重命名,请单击 Output 选项卡,然后右键单击 Regroup: 结果列表。
    2. 选择 Rename 选项。
    3. 将名称更改为 author
    4. 同样,将 DSLink7 名称更改为 books。图 15 显示了 Regroup Step 的重命名输出架构结构。
      图 15. 重命名链接以后 Regroup Step 的 Output 选项卡
      重命名链接以后 Regroup Step 的 Output 选项卡。
  11. Assembly Outline 中,单击 XML_Composer Step。在 XML_Composer Step 中,您需要定义 XML TargetDocument Root。定义了 Document Root 后,还需要完成 Mappings 屏幕。
    1. XML Target 窗口,选择 Pass as String。这将 XML 文件作为单一字符串传递到下游步骤或进一步处理的阶段。
    2. Document Root 窗口,单击 Browse 按钮并从 Schema Library Manager 选择 library 根元素。
    3. 架构 library.xsd 应该在 Composer Step 的文档根中选择它以前导入到 Schema Library Manager。来自 Composer Step 的输出 XML 文件符合此架构。
    4. Mappings 窗口,将源项目映射到目标项目。为 author 目标列表选择 Source 列。
    5. 从 Suggestion List 选择 top/Regroup:author 并单击 Auto Map
    6. 请注意将名称、姓氏、书籍和标题目标项目映射到各自的源项目中。为了映射目标项目 DateOfBirth,请从 Suggestion List 中单击 More,并从 More 窗口选择 Regroup:author/DateOfBirth
    7. 单击 OK
    8. 同样,映射目标项目 lang 到各自的源项目。完整的映射如图 16 所示。
      图 16. XML_Composer Step 中的 Mappings 窗口
      XML_Composer Step 中的 Mappings 窗口。

      (查看图 16 的 放大图。)

      在以上的映射中请注意,少数映射被标记为警告。这些警告的原因是将在运行时中执行类型转换。警告意味着如果数据不遵从目标类型,则类型转换就会失败。

      编辑器步骤的输出具有包含完成 XML 文档的名为 result-string 的新项目。在输出步骤中将其映射到列并将其传递到 DB2 连接器。

  12. 要查看输出步骤,从 Assembly Outline,单击 Output Step。它显示 result 列,其已经在 DB2 连接器阶段中定义。从 Mappings 窗口,将 top 映射到输出列表,然后单击 Auto Map。您可以将 top 映射到文档集因为您想创建包含所有作家和书籍的单一文档。如果您想为每一个作家都创建一个文件,则要将作家列表映射到文档集。
  13. 如图 17 所示,在 Output Step 中,请将 Composer Step 的输出映射到输出列。
    图 17. Output Step 中的 Mappings 窗口
    Output Step 中的 Mappings 窗口。

    (查看图 17 的 放大图。)

  14. 单击 OK 来保存并关闭 Assembly Editor
  15. 单击 OK 来保存并关闭 Stage Editor。

    在运行作业以前,执行清单 1 中的步骤以便在 DB2 数据库中创建数据库和表。

    清单 1. 用来创建数据库的 DDL
    CREATE db Test;
    CONNECT to Test;
    CREATE SCHEMA XML_data;
    CREATE TABLE XML_data.PureXML(result XML);

结束语

您已经了解了如何在 IBM InfoSphere DataStage 8.5 中使用 XML Stage 以便将 XML 架构导入 Schema Library Manager,解析 XML 文件,构建 XML 文档以及将它们写入 DB2 pureXML。

以前有关 DataStage 和 DB2 pureXML 集成的文章 中,您可以发现有关 DB2 XML Integration 的更多信息。虽然 DB2 连接器阶段在 8.5 中维持不变,但是已经弃用了 XML Stage 并用新的 XML Stage 代替。


下载

描述名字大小
使用 XML Stage 的 DataStage 作业样例Part1Examples.zip39KB

参考资料

学习

获得产品和技术

  • 通过 IBM 试用软件 构建您的下一个开发项目,可直接从 developerWorks 下载。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, XML
ArticleID=657375
ArticleTitle=使用 IBM InfoSphere DataStage 8.5 中的 XML 转换功能,第 1 部分: 使用 DataStage XML Stage 转换 XML
publish-date=05092011