利用 CSV 和 XML 导入方法来填充、更新与加强 InfoSphere Business Glossary 内容

IBM InfoSphere™ Business Glossary 用于创建、管理以及共享企业词汇和分类系统。在版本 8.1.1 中,InfoSphere Business Glossary 引入了一些新的 CSV 和 XML 导入导出方法,来向业务术语库中填入数据。本教程提供了技术指导、技巧及示例,来帮助实现这些特性,从而高效地创建业务术语库。

Shlomit Becker, 质量保障工程师, IBM China

Shlomit Becker 照片Shlomit Becker 是设在 IBM Israel Software Lab 的 IBM InfoSphere Business Glossary 团队的一名 QA 工程师。Shlomit 于 2006 年作为 Unicorn Solutions 收购项目的一部分加入 IBM。她开发了针对 Business Glossary 导入导出特性的自动测试套件。



Yair Rinot, 软件开发人员, IBM China

Yair Rinot 照片Yair Rinot 是设在 IBM Israel Software Lab 的 IBM InfoSphere Business Glossary 团队的一名软件开发人员。Yair 拥有 Hebrew University of Jerusalem 的计算机科学学士学位。他开发了 Business Glossary CSV 与 XML 导入导出特性。



2011 年 1 月 06 日

简介

InfoSphere Business Glossary(Business Glossary)实现了利用可控的术语库来创建、管理、以及共享业务与组织观念的标准定义。Business Glossary 产品采用了类别层次结构,来对包含的术语进行分类。可依据组织的需要,来利用术语对元数据库进行分类。

想使用业务术语库,首先要对其进行数据填充。在版本 8.1.1 中,Business Glossary 引入了一些新的、采用 CSV 与 XML 格式的导入导出方法,这样,术语库管理员就能够从这些类别的文件中进行术语库内容的导入导出。这些方法采用更加灵活的方式来创建术语库内容,使得用户能够更方便、更全面地填充其业务术语库。

本教程描述并解释了如何使用这些新的导入导出特性。教程包括了最佳实践、技巧、以及例子,帮助您高效地实现这些特性,来填充业务术语库。

本教程中的例子采用了来自 IBM Industry Models Telecom Business Glossary Content Pack 的数据。为包括银行、保险、电信、零售、以及医疗等行业提供的 InfoSphere Business Glossary 内容包。

选择导入方法

CSV 和 XML 是通用的导入方法。填充业务术语库的方法的选择,要根据几个因素,包括现有的术语库内容以及业务术语库管理人员的业务水平。

CSV
CSV 格式很简单。它具有利用其数据值来包含分类和术语的功能,比如描述、缩写和自定义属性值。它还用于定义管理员关系。
XML
XML 格式全面而复杂。它能够定义术语之间、类别之间、以及其他对象类型之间的每个可能的关系,包括,术语与其他术语的关系、指向术语的类型、连接到所分配资产的术语。

您可能已经拥有了某种格式的术语库,并希望利用这些内容来开始填充新的业务术语库。或者您可能希望从头开始构建一个业务术语表。因为这些场景的起点不同,所推荐的导入方法也会有所差别。

如果数据存储在电子表格中,可能需要将现有的电子表格转换成 Business Glossary CSV 格式。如果是从头开始,就可以基于所要导入的数据以及技术水平,来选择导入方法。

表 1 和表 2 描述了可以包含在 CSV 和 XML 文件中的值。

表 1. CSV 和 XML 文件中的类别值
类别属性CSV 文件XML 文件
名称如果仅为新的类别而增加,是;现有术语和类别的名称无法改变。
长描述
短描述
子类
父类如果仅为新的类别而增加,是;现有术语和类别的父类无法改变。
引用的术语
包含的术语
定制的属性
定制的属性值如果在目标元数据库中已经存在定制的属性,是。如果定制的属性不存在,导入失败。
连接到管理员如果该管理员已存在于目标元数据库中,是。如果管理员不存在,导入失败。如果用户或者用户组已存在于目标元数据库中,是。如果用户或者用户组不存在,就无法创建管理员关系,但其他内容会成功导入。
表 2. CSV 和 XML 文件中术语的值
术语属性CSV 文件XML 文件
名称如果只为新的术语而增加,是;现有术语或者类别的名称无法改变。
长描述
短描述
缩写
用法
示例
状态
相关术语
Attribute IsModifier
属性类型
同义词
含(父)类如果仅为新的术语而增加,是;现有术语或者类别的父类无法改变。
定制属性
定制属性值如果定制属性已经存在于目标元数据库,是。如果定制属性不存在,导入失败。
连接到管理员如果管理员已存在于目标元数据库中,是。如果管理员不存在,导入失败。如果用户或者用户组已存在于目标元数据库中,是。如果用户或者用户组不存在,无法创建管理员关系,但其他内容将成功导入。
链接到分配的资产(比如列、管理员、表)如果资产已存在于目标元数据库中,是。如果资产不存在,无法创建关系,但是其他内容将会成功导入。
引用分配的外部资产(比如业务流程模式或者 web 服务)

注意: 如果要从 8.1.1 以前版本的业务术语库将内容导入新的业务术语库实例,唯一有效的方法就是 Glossary Archive 导入与导出(格式为 XMI),该方法允许在不改变其内容的情况下,在术语库实例之间传输全部或者部分术语库数据。Business Glossary Version 8.1 中,如果想要仅传输类别以及具有基本属性的术语,也需要采用 CSV 导入与导出。


采用 CSV 格式导入

业务术语库逗号分隔值(CSV)格式为向元数据库导入业务术语库数据提供了更便捷的方式。表1 和 2 描述了可包含在 CSV 文件中,用于类别和术语的属性。

注意: 这一导入与 Metabrokers 和 Terms CSV Import(在 Business Glossary 最初的 8.0 中发布)不同。它们是两个单独的应用,并具有不同的格式。

可通过 InfoSphere Information Server Web 控制台中的 Glossary 选项卡来访问 Business Glossary CSV 导入功能,如图 1 所示。

图 1. InfoSphere Information Server Web 控制台 Glossary Import CSV 页面
屏幕截图:高亮显示的术语库,展示在面板中的 Import CSV 选项卡,下载一个高亮显示的示例 CSV 文件

完成以下步骤来导入 CSV 文件:

  1. 单击 Glossary 选项卡。
  2. 单击左边 Import and Export 部分中的 Import CSV
  3. 单击 Browse
  4. 找到 CSV 文件,并单击 Import

要开始创建 CSV 文件,单击 图 1 中所示的链接 Download a sample CSV file 来获取示例 CSV 文件,用于填入测试数据。这一文件中包含了一些示例类型和术语,它还包含一些说明来解释可以填入到这一 CSV 文件的数据类型。

使用 CSV 模板

两个编写 CSV 文件的最佳实践是,要么从前面所提到的示例文件开始,要么从具有一些初始数据的业务术语库中导出 CSV 文件。从示例文件或者从现有的术语库内容开始的一个关键原因是,要确保包含所需的全部行,原因是,如果丢失了任何内容,导入将会失败。从导出现有内容开始的优势之一是,文件将把现有的定制属性作为重要资产来保留。可以对一个 CSV 文件选择导入类别、术语、或者全部。

导入类别

如果想要仅导入类别而不导入术语,那么就需要在 CSV 文件中仅包含类别部分,如图 2 所示。

图 2. 在 CSV 中定义类别而不定义术语
屏幕截图:包含从 Begin 与 End 中间导入的类别,但没有术语

在图 2 中,CSV 文件中展示了两个类别。文件中的第一个类别称为 Business Concepts。没有为它定义父类,这意味着那并不重要,这一类别将成为顶级类。第二个类称为 Location,并具有父类 Business Concepts。图 2 也包含术语部分,但是在这一部分中还没有定义术语,这样做是允许的。

当导入这一 CSV 文件后,创建了两个类别:一个顶级类称为 Business Concepts,还有一个 Business Concepts 的子类称为 Location

导入术语

如果想仅导入术语,而不导入类别,需要在 CSV 文件中仅包含术语部分。还可在 CSV 中保留空的类别部分。

图 3. 在 CSV 中定义术语,而不定义类别
屏幕截图:CSV 包含从 Begin 与 End 之间导入的术语,但没有类别

最好定义术语的父类,而不要空着。如果空着术语的父类,就会在它的下面创建类。但是在导入过程中自动生成的类别中,类别名将无法使用,比如图 4 中展示的 Uncategorized_1273649004500

图 4. 定义没有父类的术语
屏幕截图:CSV 包含作为类的父类的 Business Concepts ,但是没有术语的父类

指定文件格式

CSV 文件要带有扩展名 .csv。如果文本编辑器不具有 .csv 扩展名选项,可指定为 .txt 然后再修改扩展名。如果文本编辑器没有 .csv 文件格式类型,可输入 .csv,并保存带有该扩展名的文件。

如果在使用 Microsoft® Excel,要确保将文件保存为 CSV(逗号分隔)(*.csv) 而不是其他 CSV 类型或者标准的 .xls 类型。如图 5 所示。

图 5. 使用 Microsoft Excel CSV 格式时保存为 .csv
屏幕截图:保存为所选的 *.csv 类型

分配管理员

管理员是业务所有者或者主题专家。管理员可被指定给术语或者类别。注意,在导入前,就要在库中存在管理员,否则导入会失败。可在 CSV 文件中,通过在 Steward 列输入管理员的用户名,来为类或者术语指定管理员,如图 6 所示。

注意: 管理员可以是一个用户或者一个用户组。

图 6. 在 CSV 文件中为类和术语分配管理员
屏幕截图:CSV 包含 Import Terms 和 Import Categories,高亮显示了各自的管理员 robertj

用户名与管理员的姓、名、或者用户组名不同。该值必须是正确的用户名值,否则导入会失败。

可在 InfoSphere Information Server Web 控制台中查看管理员,来找到用户或者用户组的用户名值,如图 7 所示。

图 7. InfoSphere Information Server Web 控制台中的管理员页面
屏幕截图:术语库选项卡中浏览具有用户名 robertj 的管理员

需要针对管理员,将本控制台中的用户名值输入到 CSV 文件中

创建定制属性

定制属性可创建用于扩展标准术语库模板的类别与术语的属性,比如名称、短描述、以及长描述。表 1 展示了有效属性的综合清单。

可在 Information Server Web 控制台的 InfoSphere Business Glossary Administrative 界面中定义定制属性,如图 8 所示。

图 8. InfoSphere Information Server Web 控制台中的 Custom Attributes 页面
屏幕截图:Glossary 选项卡,Custom Attributes 选项卡为 4 个属性分别展示 Term 或者 Category

可针对类别或者术语来定义每个定制属性。并且每个定制属性可以为字符串类型或者枚举类型。如果属性为枚举类型,就需要在定义定制属性时定义可能的枚举值。

在 CSV 文件中,可通过在文件中最后必需列的后面增加更多列来为类别和术语定制属性指定定制属性值。每个带有相应值的定制属性必须位于单独的列中。

在图 9 中,CSV 文件中的 Categories 部分,有两个新的、对应于定制属性的列称为 IndustryPriority。在 Terms 部分,有两个对应于定制属性的列称为 IDPosition

图 9. 为 CSV 中的类别和术语指定定制属性值
屏幕截图:CSV 包含 Telecom Industry and Medium Priority for Category,以及 BCLCAD and BCLCAT as Position 2 for Term

当导入这个文件后,就创建了两个类别和两个术语。并且类别和术语将具有在导入时为它们定义的定制属性。

必须在 Information Server 中定义好定制属性之后,才能导入相关值,否则导入将会失败。例如,如果想要导入图 9 所示的 CSV 文件,而没有在 Information Server 中定义定制属性 Industry,导入将会失败,并返回错误信息来解释失败原因是没有事先定义定制属性 。

注意: 如果定制属性类型为枚举,填入 CSV 的值必须是在枚举清单中定义的有效值之一。如果在 CSV 中定义了无效的值,导入将失败,并返回错误消息来说明特定值无效,并会列出有效的值。

CSV 中的大小写与合并

Information Server 中的类别、术语和管理员名称是区分大小写的。这意味着类别 Location 与类别 location 不同,术语 address 与术语 Address 不同,管理员 ROBERTJ 与管理员 robertj 不同。如果在 CSV 中错误地使用了大小写,根据具体情况的不同,或者导入会失败,或者得到的不是预期结果。如果大小写一致,并且该类别或者术语已在现有的库中有定义,那么将会对该类别或者术语进行值合并。

以下部分描述了合并场景及其结果。

类别或者术语的名称

如果类别或者术语的名称值与已有的类别或者术语大小写不同,将会创建新的类别或者术语,而不会更新现有的类别或者术语。以下是基本场景及其输出:

表 3. CSV 中字母大小写与合并的基本场景
场景CSV导入之前的库导入之后的库
大小写不同的类别名类别:Business Concepts类别:business concepts类别:Business Concepts + business concepts
大小写相同类别中名称大小写不同的术语 术语:Address in category Business Concepts>>Location术语:address in category Business Concepts>>Location术语:Address + address in category Business Concepts>>Location
大小写相同的类别名类别: Business Concepts类别:Business Concepts类别:Business Concepts(来自 CSV 的,关于类别 Business Concepts 的值将会覆盖库中该类别的现有值)
大小写相同类别中名称大小写相同的术语术语:Address in category Business Concepts>>Location术语:Address in category Business Concepts>>Location术语:Address in category Business Concepts>>Location(来自 CSV 的,关于术语 Address 的值将会覆盖库中该术语的现有值。 如果 CSV 中没有特定属性的值,而库中有该属性的值,那么该值将保留;并且导入不会将该值删除。

父类

如果 CSV 中类别或者术语的父类与现有的父类大小写不同,那么将不会在导入时产生连接,如表 4 所示。

表 4. CSV 中大小写与合并父类的基本场景
场景CSV导入之前的库导入之后的库
类别的父类名大小写不同类别:Location parent category: Business Concepts类别:Location parent category: business Concepts类别:Business Concepts>>Location + business concepts>>Location
术语的父类名大小写不同术语: Address with parent category defined as Business Concepts>>Location(如果 CSV 中没有 定义类别 Business Concepts>>Location ,则预期它在库中)有类别:business concepts导入失败,返回错误消息说明无法导入术语 Address,因为找不到其父类 Concepts>>Location。

管理员

如果在 CSV 中定义了类别或者术语的管理员为 robertj,并且库中有名为 ROBERTJ 的管理员,而没有名为 robertj 的管理员,那么导入失败,并返回消息说明找不到管理员,如表 5 所示。

表e 5. 管理员的大小写与合并场景
场景CSV导入之前的库导入之后的库
类别的管理员名大小写不同类别:Location with steward robertj类别:Location with steward ROBERTJ导入失败,返回错误消息说明无法导入类别 Location,因为找不到管理员 robertj。
术语的管理员名大小写不同术语:Address with steward robertj术语:Address with steward Robertj导入失败,返回错误消息说明无法导入术语 Address,因为找不到管理员 robertj。

利用 XML 格式导入

新的 Business Glossary XML 文件导入,自 8.1.1 开始提供,能够为类别或者术语导入每一类型的值和关系。因为它支持所有类型的值,因此 CSV 文件的编写变得更加复杂。但是该 XML 的架构的设计,是为了增加可读性与可理解性,从而让用户很方便地进行文件编写。

XML 导入流程允许合并数据。XML 文件中的对象可在导入中连接到库中已有的对象,包括引用技术资产。

通过 Information Server Web 控制台中的 Glossary 选项卡来访问 InfoSphere Business Glossary XML 导入,如图 10 所示。

图 10. Information Server Web 控制台 Glossary Import XML 页面
屏幕截图:Glossary 选项卡,随文件导入的 XML 格式为 BG 8.1 XML 并且 Download 参考文件被高亮显示

完成以下步骤来导入 XML 文件:

  1. 单击 Glossary 选项卡。
  2. 单击左边 Import and Export 部分中的 Import XML
  3. 单击 Browse 并选择一个文件。
  4. 选择四个合并方法中的一个。稍后 将详细讨论合并选项。
  5. 单击 Import 来完成导入。

如果不浏览您的文件,您还可以单击 Download a sample XML file 链接来查看包含各类 XML 应当包括的数据的 XML 文件。还可下载 XML 架构。

用于在 Business Glossary 8.0.1 和 8.1 中上传类别和术语的 XML 格式,在 8.1.1 及后来的版本中也有支持,您需要选择 File is Business Glossary 8.1 or earlier XML format 复选框,如 图 10 所示。因为 8.1.1 XML 导入中的所有选项都与旧版的 XML 导入无关,因此,当选择这一复选框时,这些选项不会展示。

注意: 旧版 XML 格式与新版 XML 格式的架构不同。新的(8.1.1 及以后) XML 格式要比旧有的 XML 格式复杂得多,并支持数据合并。在编写新的 Business Glossary XML 文件时采用新格式。

导入 XML 架构

Business Glossary 8.1.1 XML 架构的设计要依据 XML 标准,其中 XML 属性定义对象属性并且 XML 元素定义对象关系。虽然设计这一 XML 架构时,会与这一标准有些偏差:类别和术语是分层结构的。即术语包含在类别中,类别和术语设计为同一分层级别中单独的元素。这一设计考虑了 8.1.1 XML 导入支持部分导入。例如, 可导入不带类别的术语。稍后 将详细说明部分导入。

XML 设计用于防止用户在编写 XML 文件时出现错误。很多术语库关系都是双向的,其对象可以是两个对象中的任何一个。如果 XML 数据没有正确编写,这一区域将会导致导入错误。在大部分情况下,该架构允许仅对这些对象之一定义关系。本教程后面的部分将展示具体示例。

为帮助编写 XML 文件,可检查该架构来查看可增加的不同元素和属性,并了解每种类型的需求。

为两个类别和术语编写 XML

清单 1 展示导入两个类别,以及包含术语的例子。

清单 1. XML 中两个基本的类别和术语
<categories>
    <category name="Business Concepts"/>
    <category name="Location">
        <parentCategory identity="Business Concepts"/>
    </category>
</categories>
<terms>
    <term name="Address">
        <parentCategory identity="Business Concepts::Location"/>
    </term>
</terms>

在清单 1 中,类别 Business Concepts 没有父类,因此,这是个根或者顶级类别。

可利用类别和术语的名称及其父类,来唯一标识业务术语库中的类别和术语。 在 XML 架构中,当类别或者术语引用其他对象时,比如父类,可利用 identity 属性来保存用于单独标识所引用对象的值。

对于类别或者术语的 parentCategory 标记,XML 中的标识值包含到其父类的完整路径,从顶级类别开始直到直接父类。路径中的类别通过双冒号(::)来分隔。

在清单 1 中,类别 Location 包含在根父类 Business Concepts 中,因此,Location 的父类的标识值是 Business Concepts。术语 Address 包含在类别 Location 中,包含在类别 Business Concepts 中的是它本身。因此,术语 Address 的父类的标识值是 Business Concepts::Location。

为两个类别和一个术语导入 XML

当导入 XML 时,导入服务将会查看标识值,来确定是否有对象与标识值匹配。服务会在 XML 文件及目标库中查找这一潜在引用对象。如果找到匹配,会生成引用连接。如果没有找到匹配,可能会有两种结果:

  • 生成这一引用的对象将被加入到目标库中。如果引用的对象没有硬性规定新对象的存在,则会增加新对象,但不会增加该引用。

    例如,可存在没有父类的类别。因此,如果 XML 定义了具有父类的新类,但是在 XML 中或者库中不存在该父类,那么该导入的新类将创建为顶级类。将在 XML 中忽略为其定义的父类。

    可存在没有引用术语的术语。因此,如果 XML 定义了具有引用术语的术语,但是在 XML 或者库中不存在该引用术语,那么该导入将创建新术语,但是该新术语没有引用术语。

  • 生成引用的对象没有 加入到目标库中。如果强制新对象的引用对象存在,那么新对象将不会加入到库中。

    例如,如果 XML 定义为没有父类的新术语,但是在 XML 或者库中不存在该父类,那么该导入根本不会创建新术语,因为父类需要术语存在。

导入结果的例子

这部分描述了有关这些 import-result 概念的一些例子

清单 2 增加新术语。

清单 2. 增加新术语
<term name="Street">
    <parentCategory identity="Customer"/>
    <replacedByTerm identity="Business Concepts::Location::Address"/>
</term>

清单 2 包含术语 Street。对于这个例子,Street 的父类,具有标识 Customer,在 XML 或者目标库中不存在。在导入中,没有创建术语 Street,因为需要其父类,但在 XML 或者库中没有找到该父类。

在下一个例子中,在库中不存在父类 Customer ,但是术语 Address,其被设为术语 Street 的 replacedByTerm 值,在 XML 或者目标库中不存在。注意,该术语的标识,Business Concepts::Location::Address,包含其类目录以及该术语本身,并且与两个术语之间存在潜在引用。在本例中,导入时,创建了术语 Street ,它具有父类 Customer。但是将在 Street 和 Address 之间创建关系 replacedByTerm,因为在 XML 或者目标库中不存在术语 Address。

可以由此得出结论,如果 Business Concepts::Location 和 Business Concepts:: Location::Address 都存在于 XML 或者目标库中,那么在导入时,术语 Street 将被增加到目标库中,并且将创建其关系 replacedByTerm。

这些原则同样适用于在 XML 中定义的其他类型的关系,此时,在 XML 或者库中找不到引用的对象。在 XML 中需要有关新项目的关系时,如果找不到该引用的对象,那么根本不会增加新对象。在新对象的存在不需要引用对象的情况下,导入成功,但是关系没有确立。

注意: 如果有些数据没有导入,这时需要进行检查。错别字、字母错误、或其他无效的关系定义也可能导致导入错误。

导入匹配

清单 2 中,该例子在目标库中增加了新的项目。以下内容描述了 XML 导入能够更新目标库中已存在项目的场景。

在导入过程中,服务首先检查 XML 中的每个对象是否已经存在于目标库中。这决定了是增加新对象,还是更新已有的对象。当执行这一检查时,服务首先确定在 XML 中是否为对象定义了库 ID(RID)。RID 是由 Information Server 在内部产生的唯一 ID。如果定义了 RID,服务会检查在目标库中是否有具有该 ID 的对象。如果在 XML 中没有为对象定义 RID,或者如果没有找到 RID,那么服务将查看该对象的标识来确定是否有匹配。

当从业务术语库导入 XML 格式的数据时,会将 RID 作为每个对象的属性来导入。但要注意,当向一个将要导入库的 XML 文件写入新对象时,不应当 为该对象,将 RID 属性及其值加入到 XML 文件中。只有 InfoSphere Information Server 能够在内部生成这些值,不能手动创建。在本例中,必须增加相应的标识值而不是 RID。

在清单 3 中,从业务术语库中导入了已有的术语 Address。该术语具有 RID 属性和值。该值由一长串数字、字母、和其他字符组成。

清单 3. RID 匹配
<term name="Address" 
    rid="b1c497ce.e1b1ec6c.38683868.73b6c473-1dc5-45f6.8e65.550faa5565f8"
    shortDescription="LOCATION ADDRESS TYPE">
    <parentCategory identity="Business Concepts::Location"/>
</term>

在本例中,同时指定了术语的 RID 和父类,检查匹配对象的顺序如下:

  1. 检查目标库中是否已经存在其它具有 RID 值 b1c497ce.e1b1ec6c.38683868.73b6c473-1dc5-45f6.8e65.550faa5565f8 的术语。如果找到了,那么不会增加新术语,并会更新目标库中的术语。在本例中,通过 RID 构成了匹配,术语的名称和父类也被更新了。
  2. 如果找不到具有该 RID 的术语,会进行标识检查,来确定在目标库中的类别 Business Concepts::Location 中是否有名称为 Address 的术语。如果有,就不增加新术语,并会更新目标库中的术语。
  3. 如果 RID 和标识都没找到,那么会依据 XML 文件,在目标库中创建新的术语。

可通过 RID 或者标识来指示对象。在清单 3 中,同时为术语指定了 RID 和标识。当编写 XML 文件时,实际上仅需要 RID 或者标识。

清单 4 描述了在 XML 中仅有术语的标识,而没有 RID 的场景。

清单 4. 标识匹配
<term name="Address">
    <parentCategory identity="Business Concepts::Location"/>
</term>

在本例中,在 XML 文件中没有为术语指定 RID。但是,有一个父类标识。当把术语 Address 导入到业务术语库时,因为在 XML 中没有 RID 值,所以导入服务会通过标识来检查在目标库中是否已存在该术语。导入时会发生以下动作序列:

  1. 通过检查来确定是否已在目标库的 Business Concepts::Location 类别中存在名为 Address 的术语。如果找到该术语,就不增加新的术语,并会更新目标库中的术语。
  2. 如果找不到该标识,则会依据 XML 文件,在目标库中创建新术语。

合并导入的属性

一旦确定了 XML 文件中的某个项目已在目标库中存在,那么接下来的问题就是如何合并其所有的属性值。例如,对于一个术语,在 XML 文件中会有与目标库中不同的属性值。本部分将详细描述合并流程。

清单 5 导入 Business Concepts::Location 中的 Address。

清单 5. 在 XML 中合并
<term name="Address" 
    status="CANDIDATE"
    example="1222 Park Avenue"
    abbreviation="ADDR">
    <parentCategory identity="Business Concepts::Location"/>
</term>

如果在目标库中找到了该术语,通过 RID 或者标识匹配,那么会将来自 XML 文件的、该术语的值与目标库中该术语的值进行对比。比如,在清单 5 中,用于缩写的值是 ADDR,而在目标库中,用于缩写的值是 ADR。那么问题是:是采用 XML 文件中的值,还是采用目标库中的值?并且,如果在 XML 或者目标库中没有属性值,情况将会怎样?

答案取决于所采用的合并方法。InfoSphere Business Glossary XML 导入具有 4 个不同的合并选项可供选择。除了这 4 个合并方法之外,合并行为还取决于该属性能够包含单个值,还是能够包含一列值。

图 11 展示了这些合并方法是如何在 InfoSphere Information Server Web 控制台中显示的,并提供了一些例子。

图 11.XML 合并方法的图形用户界面
单选按钮:忽略导入值,覆盖现有值,合并&忽略导入值,或者合并&覆盖现有值

清单 6 展示了在库中存在相同的术语时,如何从 清单 5 导入术语 Address。.

清单 6. 在 XML 中合并单值属性
<term name="Address" 
    status="CANDIDATE"
    abbreviation="ADR"
    additionalAbbreviation="AD">
    <parentCategory identity="Business Concepts::Location"/>
</term>

XML 与目标库中都有一个值,允许单个值

缩写属性可以具有单个值,在 XML 中,该缩写值是 ADDR,在目标库中,该缩写值是 ADR。

当导入这一术语时,采用每个合并方法时,缩写属性的结果是:

忽略
导入值 ADDR 被忽略,目标库中的值 ADR 保持不变。
覆盖
导入值 ADDR 覆盖目标库中的值 ADR。
合并并忽略
因为导入值和现有值都填有数据,所以将采用与忽略相同的方式进行合并:导入值将被忽略,目标库中的值 ADR 保持不变。
合并并覆盖
因为导入值和现有值都填有数据,所以将采用与覆盖相同的方式进行合并:将采用导入值 ADDR。

XML 中没有值,并且目标库中有值,允许单个值

属性 additionalAbbreviation 也可以具有单个值。在 XML 中没有关于 additionalAbbreviation 的值,然而,在目标库中有值 AD。

当导入这一术语时,每个导入方法中 additionalAbbreviation 属性的结果是:

忽略
导入值 ADDR 被忽略,目标库中的值 AD 保持不变。
覆盖
导入的 ADDR non-value 覆盖现有的值 AD,目标库中的值 ADR,因此,在结果中,additionalAbbreviation 没有值。
合并并忽略
因为现有值填有数据,所以导入的 non-value 被忽略,现有值 AD 保持不变。
合并并覆盖
因为导入的 additionalAbbreviation 没有值,所以它无法覆盖现有值 AD。

XML 中有值,并且目标库中没有值,允许单个值

对于示例属性,在 XML 中有值,而在目标库中没有值。结果如下:

忽略
导入值被忽略,目标库中的值保持不变。保持无值。
覆盖
导入的示例值覆盖原有值,原来没有值。
合并并忽略
因为现有示例没有值,所以采用导入值 1222 Park Avenue。
合并并覆盖
因为导入的示例有值,所以采用该值。

合并具有多个基数值的属性

上一节 中解释了如何在 XML 导入中合并单个属性值。本部分将描述具有多个基数的值的合并,这意味着其包含多个值。

通常,这些合并与单值合并类似。区别在于,选择合并并忽略选项与选择合并并覆盖选项时,结果列表将是现有值与导入值的组合。

XML 包含术语 Address 及相关术语 Street

在清单 7 的例子中,XML 包含术语 Address 与相关术语 Street 合并。

清单 7. 关于多值属性的 XML 值
<term name="Address">
    <parentCategory identity="Business Concepts::Location"/>
    <relatedTerms>
        <termRef identity="Customer::Street"/>
    <relatedTerms/>
</term>

目标库包含术语 Address 与相关术语 Road

在清单 8 的例子中,目标库包含术语 Address 与相关术语 Road 合并。

清单 8. 关于多值属性的目标库值
<term name="Address">
    <parentCategory identity="Business Concepts::Location"/>
    <relatedTerms>
        <termRef identity="Industry::Road"/>
    <relatedTerms/>
</term>

每个合并方法的结果是:

忽略
导入的相关术语被忽略,保持现有相关术语不变,其为 Road。
覆盖
导入的相关术语 Street 覆盖现有的相关术语 Road。
合并并忽略
现有相关术语与导入相关术语结合起来,因此,结果中的相关术语清单同时包含 Street 和 Road。
合并并覆盖
现有相关术语与导入相关术语结合起来,因此,结果中的相关术语清单同时包含 Street 和 Road。

理解 XML 中的大小写

Information Server 中的所有名称都是区分大小写的。这意味着,术语 Street 与术语 street 不同。当指向新的或者已有的术语库数据时,要确保大小写正确,否则,可能会创建错误的术语库层次结构。例如,目标库可能含有术语 Business Concepts::Location::Street,但不含术语 Business Concepts::Location::street。如果尝试更新术语 Street,但是错误地在 XML 中输入了 Business Concepts::Location:street ,那么,在导入时,术语 street 会被增加到 Business Concepts::Location 中,并不会更新 Street。

理解对部分导入的支持

新的 XML 导入引入了执行部分导入的功能。这意味着可在 XML 文件中定义类别或者术语之类的对象,而不必在 XML 文件中增加其引用对象。在本例中,需要在导入之前的目标库中存在引用对象,这样就可在 XML 文件中定义连接。

清单 2 通过导入术语 Street,提供了一个此类导入的例子。在该例子中,可向术语库增加新的术语,其父类和 replaced-by 术语不在 XML 中,但是希望其存在于目标库中。需在在 XML 文件中定义这些现有引用对象的正确标识或者 RID。

分配管理员

XML 导入支持通过分配管理员来管理类别和术语。清单 9 展示了如何在 XML 中分配管理员来管理类别或者术语。需要定义管理员 userName 和类型。

清单 9. XML 中为类别和术语分配管理员
<category name="Location" longDescription="Set of Terms relating to:  Location">
    <parentCategory identity="Business Concepts"/> 
    <steward userName="analysts" type="USERGROUP"/>
</category>
		
<term name="Address" shortDescription="LOCATION ADDRESS TYPE" 
      status="CANDIDATE" type="NONE" isModifier="false">
    <parentCategory identity="Business Concepts::Location"/>
    <steward userName="robertj" type="USER"/>
</term>

userName 值与 CSV 部分中关于分配管理员的内容 中所描述的相同。类型值可以是 USER 或者 USERGROUP,这些都是在架构中定义的有效值。

如果在 XML 中定义的 USER 或者 USERGROUP 在库中不存在,则导入成功,但是,从术语或者类别到管理员的连接没有生成。这遵循了前面所描述的原则,如果在 XML 中为新的类别或者术语定义了 引用,并且 XML 或者库中不存在引用(一个管理员),那么在导入时,将会创建新的类别或者术语,但是管理员连接将被忽略。

注意: 如果库中不存在 XML 中关于 userName 的管理员,但是库中存在 XML 中关于 userName 的 USER 或者 USERGROUP,那么在导入时,将为 userName 创建管理员。

处理包含术语及子类的类

在本教程描述的几个例子中,在 XML 中为术语定义父类(parentCategory 元素)。在设计 XML 架构时确定了,这种包含术语的类别关系仅可在术语标记中定义,而不能在类别中定义。这是因为,导入术语时,可以不导入其父类,并且,术语的存在需要有一个父类,因此,要为术语定义父类。另一方面,类别的存在不需要包含术语。通过仅允许在术语级别定义这种关系,可最小化 XML 出错的风险。清单 10 展示了为术语定义父类的 XML 代码。

清单 10. 术语的父类
<term name="Address">
    <parentCategory identity="Business Concepts::Location"/>
</term>

类似的原理可应用于在 XML 架构中定义的子类。XML 中的类可定义其父类,但是不能定义其子类。区别在于,一个类不需要具有父类或者子类。但是因为一个类仅有一个父类,所以只允许通过标记 parentCategory,而不允许通过标记 subCategories 来定义这种关系,这样可以简化操作并避免出错。清单 11 展示了为类别定义父类的 XML 代码。

清单 11. 类别的父类
<category name="Location">
    <parentCategory identity="Business Concepts"/>
</category>

理解类别如何引用术语

在 InfoSphere Business Glossary 中,类别能够引用其所不包含的术语。在 XML 中的类别层次和术语层次都可定义这种关系。在定义架构时,确定了对这一功能的支持,因为一个类别可引用多个术语。一个术语可被多个类别所引用。两个方向都具有多个基数,因此,在编写 XML 时,出错可能性非常小。清单 12 展示了类别引用术语的 XML 代码。

清单 12. 引用术语的类别
<category name="Industry">
    <referencedTerms>
        <termRef identity="Business Concepts::Location::Address"/>
    </referencedTerms>
</category>

创建定制属性

定制属性是那些创建用于扩展标准术语库模板的类别及术语的属性,在 CSV 部分 中有相关描述。可在 XML 文件中定义定制属性以及定制属性值。

定义定制属性

在 XML 中的相应部分对定制属性进行定义,其与类别及术语部分是分开的。类别定制属性定义与术语定制属性定义位于各自不同的部分。

定制属性定义可以为字符串或者枚举类型。在定义字符串定制属性定义时,仅需要名称,并且有一个可选的描述。在定义枚举定制属性定义时,另外需要一个包含有效值的枚举清单。

清单 13 展示了 XML 中类别与术语定制属性定义部分的相关例子,其中类别定制属性定义为字符串类型;术语定制属性定义为枚举类型。

清单 13. 定制属性定义
<categoryCustomAttributes>
    <customAttributeDef name="Priority">
        <validValues>
            <validValue value="high"/>
            <validValue value="medium"/>
            <validValue value="low"/>
        </validValues>
    </customAttributeDef>
</categoryCustomAttributes>
<termCustomAttributes>
    <customAttributeDef name="ID"/>
</termCustomAttributes>

类别定制属性定义的名称为 Priority,类型为枚举。其枚举值包括 high、medium、和 low。

术语定制属性定义的名称为 ID,类型为字符串。由于其类型为字符串,因此它可以取任何值。

在导入时,如果这些定制属性定义不存在,将进行创建。如果存在,将保持库中的原样。

如果库中已经存在枚举定制属性定义,并且 XML 中有效值的清单与库中的不同,那么,可以通过改变导入合并选项,来改变该清单,这与其他类别及术语清单相似。

定义定制属性值

要在 XML 中特定类别和术语部分中定义定制属性值。清单 14 展示了定制属性值的定义。

清单 14. 具有定制属性的类别
<category name="Location" longDescription="Set of Terms relating to:  Location">
    <parentCategory identity="Business Concepts"/>
    <customAttributes>
        <customAttributeValue customAttribute="Priority" value="medium"/>
    </customAttributes>
</category>

在清单 14 中,类别 Location 具有为定制属性定义 Priority 定义的定制属性值 。因为定制属性值定义 Priority 的类型为枚举,其有效值为 high、medium以及 low,所以定制属性值必须是这三个值之一。如果在 XML 中 Priority 的定制属性值不是这三个值之一,比如 very high,那么导入失败并返回错误消息:

Custom attribute value very high defined for Category
Location does not match its custom attribute definition
Priority. Valid values are: high, low,
medium.

清单 15 展示了具有定制属性值的术语。

清单 15. 具有定制属性值的术语
<term name="Address" shortDescription="LOCATION ADDRESS TYPE"
    status="CANDIDATE" abbreviation="ADDR">
    <parentCategory identity="Business Concepts::Location"/>
    <customAttributes>
        <customAttributeValue customAttribute="ID" value="2"/>
    </customAttributes>
</term>

在清单 15 中,术语 Address 定制属性定义 ID 的定制属性值为 2。因为定制属性定义 Priority 的类型为字符串,所以它可以是任何值。

需要在 XML 中或者元数据库中定义定制属性值所引用的定制属性定义,来支持对定制属性值的导入。如果定义不存在,导入将成功,但是,将不会创建这些定制属性值。

定义同义词组

在业务术语库中,每个术语可以有一个或多个同义词。在数据库中,通过定义同义词组来将术语设置为同义词,该同义词组包含这一术语。每个术语仅可属于一个同义词组。为确保这一点,要在 XML 中的不同的对象中定义同义词组,而不是像其他术语关系那样在术语标记中定义。

每个同义词组最多具有一个首选同义词。这也要在 synonymGroup 标记中定义,如清单 16 所示。

清单 16. 同义词与首选同义词
<synonymGroups>
    <synonymGroup>
        <synonyms>
            <termRef identity="Business Concepts::Location::Address"/>
            <termRef identity="Customer::Street"/>
        </synonyms>
        <preferredSynonym identity="Customer::Street"/>
    </synonymGroup>
</synonymGroups>

在清单 16 中,两个术语 Street 和 Address 定义为同义词。当导入含有同义词的 XML 时,如果在库中已存在同义词组中的一个或多个术语,并且具有不同的同义词,那么三个同义词将合并为一个同义词组。注意,对于同义词,采用 XML 合并的四个选项时,所进行的合并相同。

在清单 16 中,术语 Street 被定义为该同义词组的首选同义词。

分配资产

在 Business Glossary 中,术语可具有多个分配的资产,其可为多种类型,包括数据库、列、BI 报告等等。为术语指定资产是 Business Glossary 的重要功能之一。 XML 导入允许以直接了当的方式为术语指定资产。清单 17 展示了为术语 Street 指定称为 BUSINESS_SERVER 的 host 的例子。

清单 17. 指定 host 类型的资产
<term name="Street">
    <parentCategory identity="Business Concepts::Location"/>
    <assignedAssets>
        <hostRef host="BUSINESS_SERVER"/>
    </assignedAssets>
</term>

在导入过程中,如果在目标库中存在名为 BUSINESS_SERVER 的 host,它被分配给术语。如果 BUSINESS_SERVER 不存在,将导入术语,但不进行分配。

在清单 17 中,通过名称来识别 host。每个资产类型具有其自己的标识属性集,这是架构定义的。一些标识属性在 XML 中需要,而另一些则不需要。导入匹配的关键是,在 XML 中必须指定在库中为该资产定义的所有 相关属性。

清单 18 展示为术语指定数据库列的例子。

清单 18. 为类型列指定的资产
<term name="Street">
    <parentCategory identity="Business Concepts::Location"/>
    <assignedAssets>
        <columnRef column="CUSTOMER_NAME" table="CUSTOMER" schema="DB1_SC" 
        databaseName="BUSINESS" host="BUSINESS_SERVER" />
    </assignedAssets>
</term>

在清单 18 中,对于列 CUSTOMER_NAME,在 columnRef 标记中定义 5 个属性值:

  • 架构
  • databaseName
  • host

针对类型为列的资产,XML 架构需要这些属性。如果在导入中,在目标库中存在具有所有这 5 个属性值的列,那么将创建匹配。

其他类型的资产可能具有分层结构的定义。例如,该对象可包含在分层结构的架构中,其可包括几个相同类型的实例。清单 19 中展示了此类资产的例子。

清单 19. 为类型 BI 报告字段指定的资产
<term name="Street">
    <parentCategory identity="Business Concepts::Location"/>
    <assignedAssets>
        <BIReportFieldRef field="Total net. profit">
            <BIReportGroupRef group="Sales">
                <BIReportGroupRef group="Products">
                    <BIReportRef report="Annual Report" />
                </BIReportGroupRef>
            </BIReportGroupRef>
        </BIReportFieldRef>
    </assignedAssets>
</term>

这一分配的资产是 BI 报告字段类型,其总是包含在一个 BI 报告组中。该 BI 报告组可能包含在其他 BI 报告组中,或者它可能包含在其他 BI 报告中。XML 嵌套的元素,代表了 BI 报告组实例之间的层次结构。在清单 19 中,名为 Total net. profit 的 BI 报告字段包含在称为 Sales 的 BI 报告组中。Sales 包含在称为 Products 的 BI 报告组中。Products 包含在称为 Annual Report 的 BI 报告中。在导入时,如果存在与目标库中相同层次结构同名的 BI 报告字段,将创建匹配。

有些资产类型具有通过架构定义的可选属性。

清单 20 展示了在 XML 文件中已分配数据库的例子,它定义三个标识属性。

清单 20. 为类型数据库指定的资产
<term name="Street">
    <parentCategory identity="Business Concepts::Location"/>
    <assignedAssets>
        <databaseRef 
            databaseName="BUSINESS"
            host="BUSINESS_SERVER" 				
            databaseDBMS="DB2" />
    </assignedAssets>
</term>

对于一个数据库资产,依据架构,仅需要 databaseName 和主机属性。 一个数据库具有三个其他选项属性:

  • databaseDBMS
  • databaseInstance
  • databasePath

在清单 20 中,仅定义了三个可选属性之一,databaseDBMS。在导入这一 XML 时,如果数据库具有这三个属性值,并且仅有这三个属性值,可在库中找到,那么将完成为该术语的分配。

如果在库中有一个具有相同名称和主机的数据库,但是,在此处没有定义 databaseDBMS 值,因此,没有完成分配。

如果在库中存在具有相同名称、主机、和 databaseDBMS 的数据库,但是,在库中还有为 databaseInstance 定义的值,那么在导入中,没有为术语完成分配,因为该资产被看做是不同的。


结束语

导出

InfoSphere Business Glossary 还支持以 CSV 和 XML 格式来导出内容,其可用于在环境和服务器实例之间传输数据。可对这一导出的文件进行编辑,增加更多类别和术语,然后重新将其导入到其所导出的服务器。

一旦填充了业务术语库,可利用导出将这一内容从一个业务术语库拷贝或者传输到其他业务术语库中,这是填充第二库的好办法。除了 XML 和 CSV 格式之外,还支持 XMI 格式的导出。

结束语

InfoSphere Business Glossary 中 XML 导入与导出特性,在版本 8.1.1 中引入,为用户提供了强大的工具,来创建并更新业务术语库数据。

致谢

作者衷心感谢 Michael Fankhauser、Benny Halberstadt、Roger Hecker、Nancy Navarro、和 Erel Sharf,他们对此教程进行了细心的审阅并提供了非常有意义的反馈。


下载

描述名字大小
用于本教程的 CSV 与 XML 示例文件SampleCSV_XML_ImportFiles.zip3KB

参考资料

学习

获得产品和技术

讨论

条评论

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=606669
ArticleTitle=利用 CSV 和 XML 导入方法来填充、更新与加强 InfoSphere Business Glossary 内容
publish-date=01062011