跳转到主要内容

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

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

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

  • 关闭 [x]

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

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

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

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

  • 关闭 [x]

使用 Rational Software Architect 编辑工具来定制从模型到文本的转换: 创建并运行 JET 转换项目

Marya Berfeld, 软件验证开发人员, IBM
作者照片
Marya Berfeld 自从 2000 年在 IBM Rational 一直从事建模工具的软件验证工作。她主要担任多个建模特性的测试工作,并且于 2008 年在 developerWorks 上发表了一篇有关 UML 转换 Java 的文章。
Darren Coffin, 软件验证开发人员, IBM
作者照片
Darren Coffin 从 1999 年以来,一直从事于建模工具上的软件验证工作。他工作的范围很广,测试众多的建模特性和图。他毕业于特伦特大学,获得计算机研究和环境资源研究学士学位。

简介: 按照 Transformation Authoring 特性的工作流程范例,将 Java Emitter Templates(JET)的使用与 IBM® Rational® Software Architect for WebSphere® software,IBM® Rational® Software Architect 标准版,与 IBM® Rational® Software Modeler 7.5.5 之中的模型到模型转换的编辑器使用集成起来。

查看本系列更多内容

发布日期: 2011 年 4 月 15 日
级别: 中级 原创语言: 英文
访问情况 : 2146 次浏览
评论: 


下载 Rational® Software Architect 试用版  |  在线试用 Rational® Software Architect
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

引言

注意

本文中所讨论的工具,并没有包含在 Rational Software Architect 中的默认安装文件之中。您必须先安装可选的转换创建组件。

使用 IBM® Rational® Software Architect 设计与开发工具以进行模型驱动开发的一个典型工作流程,是创建一个统一建模语言(UML)模型,以代表一个特定的系统。该工具还提供了一些预定义的转换,将 UML 模型转换为任意支持的编程语言。但是,除了使用提供的转换,您可以创建自己的转换,根据您所定义的规则来转换模型。

Rational Software Architect 中的扩展性特性提供了工具,以创建 Java™ Emitter Template(JET)转换,并为输出的生成指定自己的规则。JET 是一种 IBM 所开发的模板语言。通过使用 JET 转换,您就可以快速且轻松地生成基于模板的模型到文本的转换。有了 JET 工具箱,您就可以使用包含文本和 JET 命令(标签)的模板来从一个模型生成文本文件。JET 转换会将文本生成的重复过程实现自动化。

本文将会指导您如何创建一个新的 JET 转换,以创建一个示例的图书馆 Java 项目。


创建并配置 JET 转换项目

为了适应 JET 技术来创建转换,目标领域专家必须向转换创作者提供一个 Exemplar 项目。Exemplar 项目代表了转换输出想要的格式。最佳实践方式是创建一个 Exemplar 项目,该项目代表了需要输出格式尽可能多的格式。项目必须要导入到 Rational Software Architect 工作区。

本文出于写作的目的,使用一个简单 Java™ 项目(MyLibrary)来作为范例,其中唯一的一个包(Books)中只包含了一个 Java 类(BookTitle)。当您创建并执行 JET 转换时,转换的预期输出会是一个 Java 项目,它包含了一个或者更多的 Java 类。

图 1 显示了本文中所使用到的示例性 Java 项目。


图 1. 示例性的 Java 项目
MyLibrary 构件的 Project 浏览器视图

为了开发 JET 转换,该转换接受一个 UML 模型作为源并以生成一个 Java 项目作为目标,您就必须在 Rational Software Architect 中创建一个新的 JET Project with Exemplar Authoring 类型的 JET 项目:

  1. 从主菜单中选择 File > New > Project
  2. 从 JET Transformations 类别中,指定 JET Project with Exemplar Authoring
  3. 将项目命名为 com.test.my.transform
  4. 接受下一个页面上的默认设置,然后点击 Next 按钮。
  5. 从 Transformation Scope 页面中,选择 MyLibrary 项目,然后点击 Finish

创建的项目包含了 transform.tma 文件,您可以在练习中使用该文件来开发需要的转换。它会在编辑器视图中自动打开,有两个选项卡:Schema 与 Overview。Overview 选项卡(图 2)显示了关于转换的一些信息。


图 2. 带有关于 JET 项目信息的概述选项卡
Name,ID,Version,Provider,Description

您可以在 Schema 选项卡(图 3)中进行操作以开发转换输出操作。


图 3. Exemplar 创建项目的编辑器
创建 JET 项目的 Schema 选项卡

在第一步,示例项目必须得到分析。它可能包含了您不需要在输出中生成的工件。在我们的范例中,我们不想进行转换以生成 .class 文件。这些类的生成将会在 .java 文件的基础上自动在目标 Java 项目中执行。

您可以按照下面的操作,来从 Exemplar 示例删除 BookTitle.class:

  1. 在 Transform Authoring 窗口中右击 BookTitle.class
  2. 从菜单中选择 Delete

在图 4 中,最终版本之中的 Exemplar 项目就会显示在转换 Schema 编辑器之中。


图 4. 最终的 Exemplar 项目
Schema 编辑器显示了示例性的工件

开发输入与输出模式(Schema)操作

现在您就可以开始输入模式(Schema)和输出操作,这样您就可以自动生成转换输出了。

按照下面的方法来指定目标 Java 项目生成:

  1. 右击“定义转换输入模式以及输出操作”窗格中的 root 条目,并从背景菜单中选择 New >Type
  2. 给新的类型起名字为 projectInfo
  3. 向 projectInfo 类型添加一个新的名为 my.project 的项目。
  4. 如果您要创建一个输出操作,那么您可以将 .classpath.project 文件从 Exemplar 窗格拖拉到转换输入与输出操作窗中的 my.project 节点上。
  5. 在转换输入模式与输出操作窗格中,将创建的文件重命名为 .project.classpath

现在文件已经添加至“定义转换输入模式以及输出操作”窗格。在 Exemplar 窗格中,.project 与 .classpath 文件节点旁边的图标出现了。这意味着已经为这些元素创建了该操作(参见图 5)。


图 5. 转换输入模式中的 .classpath 和 .project 文件
示例与模式的初始映射

图 5 的大图

  1. 如果在工作区中您没有看到 Properties 视图,那么您可以右击“定义转换输入模式以及输出操作”窗格中的任意添加元素,然后从背景菜单中选择 Show Properties View
  2. 向 projectInfo 类型添加一个名为 name 的属性。

创建的转换应该非常灵活,这样它就可以为不同的库生成各种名字的项目了。按照下面的操作来实现这种灵活性:

注意

您可以跳过第 10 步至第 12 步,稍后工具将会自动显示示例文本。

  1. 右击“定义转换输入模式以及输出操作”窗格之中的 projectInfo 类型,并从背景菜单中选择 New > Attribute
  2. 将新属性命名为 name
  3. (可选的)右击 name 属性,并从背景菜单之中选择 Edit Exemplar Text
  4. 在 Edit Exemplar Text 窗口之中,向名字属性添加名为 MyLibrary 的项目(图 6)。
  5. 点击 Add 然后点击 OK

图 6. 设置示例文本
Edit Exemplar Text 视图

示例的项目名会显示在 Exemplar Text 区域下 Properties 视图中(参见图 7)。


图 7. 编辑名字属性的性质
属性视图,Property 与 Value 列

替换 Exemplar Text 字符串

该示例文本字符串可以自动使用运行转换时您为项目所使用的名字来替换。输出项目将会以原模型中指定的用户设定名称生成。

按照下面的步骤来指定,示例文本应该根据执行转换时的用户输入来替换:

  1. 选择 my.project 项目。
  2. 在 Properties 视图中,Action Parameters 部分下,右击 Name 属性的值。
  3. 选择 Replace with model reference(参见图 8)。

图 8. 更新项目名字参数
调用 Replace with Model Reference 选项

图 8 的大图

  1. 在“Replace with Model References”对话框窗口中,选择 projectInfo 类型的 name 属性然后点击 OK(图 9)。

图 9. 选择“名字”属性
Replace with Model References 对话框

结果,名为 my.project 的项目的 Action Parameter 名字 的值会替换为 {$projectInfo/@name} 标签(图 10)。


图 10. 替换“名字”值的操作参数
Schema 视图

指定转换操作以生成工件

现在您就要生成转换操作,以生成项目工件了。

为了对每一个库项目生成一个 Java 文件,需要创建一个输出操作,以及与示例 Java 文件之间的联系。为了实现这一点,您需要向“projectInfo”类型添加一个名为“item”的新类型,并指定 Java 类生成:

  1. 在“定义转换输入模式以及输出操作”窗格中,右击 projectInfo 类型。
  2. 从背景菜单中选择 New > Type
  3. 将新类型命名为 item
  4. BookTitle.java 文件从 Exemplar 窗格中拖拉到 item 类型之中。
  5. 将文件命名为 myBookTitle.java

新的 myBookTitle.java 文件现在就可以添加至“定义转换输入模式以及输出操作”窗格了。一个图标会出现在 Exemplar 窗格中 BookTitle.java 旁边。注意,在 Action 部分的 Properties 视图下,您可以为生成添加联系,以及任意生成工件的描述(参见图 10)。

保存创建的模式并更新项目:

  1. 从主菜单中,选择 File > Save All
  2. 在“定义转换输入模式以及输出操作”窗格的编辑器视图之中,右击 root 类型并选择 Update Project(图 11)。

图 11. 从菜单中选择 Update Project
输入模式根的菜单

每种类型的文件夹将会生成,包括指定每一种需要文件的 JET 模板(图 12)。


图 12. 生成的 JET 模板
Project Explorer 与生成的工件

main.jet 模板包含了指定 .project、.classpath 及 myBookTitle.java 文件的标签(图 13)。


图 13. main.jet 模板中生成的模板标签
main.jet 模板代码视图

图 13 的大图

使用 xPath 表达式来替换硬代码字符串

为了添加生成各种输出结果的灵活性,JET 模板之中的各种硬代码字符串可以随着 XPath 表达式一起更新。这里,我们将会向您描述一些可能出现的情况作为范例,以及推荐的工作流程。

  1. 在“转换输入模式和输出操作”窗格中,选择 myBookTiltle.java 文件(图 14)。
  2. 在“操作参数”之下的 Properties 视图中,选择 路径 属性的 MyLibrary/books 值,并选择 “Replace with Model Reference”菜单项。

图 14. 选择使用 Properties 中模型引用替换的字符串
使用模型替换硬代码路径

图 14 的大图

图 15 显示了结果对话框窗口:使用模型引用替换。


图 15. Replace with Model References 窗口
选择的根

在该对话框窗口中,您可以选择一个已存在的属性,或者创建一个新的属性。这里,我们将会向您演示创建一个新属性,它描述了包名的生成。

  1. 选择 projectInfo 类型。
  2. 点击 New

当您在点击 New 按钮时,“创建新获得的属性”对话框窗口将会出现(图 16)。在这个窗口之中,您可以定义带有从计算中获得值的属性。属性的 名字 字段应该由您,也就是用户来设置。示例性 字段就是对话框激活时您所选择的字符串,默认条件下,相同的字符串会得到写入。对于这里的练习,您可以保持默认值不变,但是,在真实的转换操作中,您就可以使用一个 XPath 表达式来替换它。


图 16. 创建一个获得的属性
Create New Derived Attribute 对话框窗口

  1. 向“属性名”文本区域添加 pkgDir 字符串。
  2. 点击 OK以关闭“创建新获得的属性”窗口。
  3. 点击 OK 以关闭“Replace with Model References”窗口。

新获得的属性,pkgDir,会得到创建,并显示在“转换输入模式与输出操作”编辑器窗格之中(图 17)。


图 17. 新创建的获得属性,pkgDir
模式项的输入模式部分

myBookTitle.java 路径 属性的值会随着生成的获得属性参数一起更新(图 18)。


图 18. 带有替换参数的路径名
带有部分变量字符串的 Properties 视图

图 18 的大图

转换的创作者也应该提供生成多种 Java 类的能力。

为了支持这一点,您可以为 项目 类型创建一个新的 名字 属性,操作的方式与您在前面为 projectInfo 类型执行的操作相同。对于 myBookTitle.java 文件的 路径 参数,使用创建的属性来替换硬代码的文件名。

  1. 在“转换输入模式与输出操作”编辑器窗口中选择 myBookTitle.java
  2. 在 Property 视图的路径值中选择 BookTitle 文件名。
  3. 在 Properties 视图的路径值中右击 BookTitle 文件名。
  4. 选择“Replace with Model Reference”背景菜单项。
  5. 在“Replace with Model References”对话框窗口中,选择属于 项目 类型的 名字 属性。

结果,硬码路径会使用包含有 XPath 表达式的字符串来替换(图 19)。这就给予了转换用户生成不同名字 Java 类的灵活性。


图 19. 带有替换文件名的路径名
带有完全生成字符串的属性图

图 19 的大图

  1. 保存 创建的模式。
  2. 在“定义转换输入模式以及输出操作”窗格的编辑器视图中,右击 root 类型并选择 Update Project

JET 模板也得到了升级。接下来的 XPath 表达式将会被添加至 main.jet 模板:

<ws:file path="{$projectInfo/@pkgDir}/{$item/@name}.java" replace="true"
template="templates/item/myBookTitle.java.jet"/>

编辑模板以定制转换输出

注意

如果您想要得到关于该过程的更多信息,那么您可以阅读 基于资源开发的战略性重用 (一本 IBM Redbooks 出版的书籍,2008 年 5 月)并在 Eclipse.org 网站上读取 JET 模板指南

到目前为止,您要使用 JET 创建编辑器来开发转换。现在,当您在生成模板框架时,您应该进一步调节它们,以根据项目的需求来生成转换输出的内容。

这里,我们将会向您演示怎样使用 Rational Software Architect 工具集中所提供的编辑工具。

为了帮助您进行模板编辑,工具会指示可以使用转换工件替换的模板之内的字符串。信息符号会显示在 Project Explorer 视图(图 20)中。当您打开指示的模板时,下一个将会被替换的文本将会得到下划线强调显示。当您将鼠标停留在下划线的文本上时,会显示一个带有建议性操作的帮助字符串。


图 20. 帮助性建议
编辑器之中的帮助性弹出文本

图 20 的大图

  1. 选择有下划线的文本。
  2. 右击并选择 Find/Replace with Model References(图 21)。
  3. 在“Find/Replace with Model References”对话框窗口中,您可以选择建议的属性或者其他已存在的属性,或者您可以创建一个新的属性。
    对于演示的目的考虑,我们选择了建议的属性,item 类型之下的 name
  4. 点击 Replace,然后点击 Close

图 21. 使用自动生成的字符串来替换名字
Find/Replace with Model References 窗口

模板中选择的文本将会使用该 JET 标签替换:

<c:get select="$item/@name" />

此时您就可以使用 JET 标记来替换任意的文本。在附件中示例项目的 project.jet 和 main.jet 模板中(查看 下载 部分),我们要使用该 XPath 表达式来替换硬代码项目名字:

<c:get select="$projectInfo/@name" />

注意:
当所有建议的更新都得到执行,且更新的模板都得到保存时,roject Explorer 中所显示的信息符号将会消失。


运行转换

您创建了一个基本的 JET 转换,现在您就可以执行它了。

为了测试创建的转换,您可以创建一个文本,它包含了转换输入。IBM® Rational® Software Architect for WebSphere® 版本提供了工具,以生成基于 XSD 模式的测试输入文件,该 XSD 模式是在转换创建项目中生成的。按照下面的步骤操作,以生成输入文件:

  1. 选择 File > New > Other > XML > XML File,然后点击 Next
    注意:
    您可能需要选择 New 对话框窗口之中的 Show All Wizards 复选框以得到以下的这些选项。
  2. 如果出现一个对话框让您这样做时,确认激活功能。
  3. 选择 com.test.my.transform 项目作为一个容器,输入 MyTest.xml 作为名字,并点击 Next
  4. 选择 从一个 XML 模式文件创建 XML 文件 单选按钮,并点击 Next
  5. 点击 Select file from Workspace 单选按钮。
  6. com.test.my.transform 项目之中,选择 schema.xsd 文件,然后点击 Next
  7. 选中所有的复选框,然后点击 Finish
  8. 在生成的 MyTest.xml 文件中输入需要的数据,然后保存并关闭该文件。

图 22 显示了建议的输入文件。


图 22. 建议的转换输入文件
XML 输入文件内容的屏幕截图

转换已经为执行做好准备了。

  1. 在 Project Explorer 中,右击 MyTest.xml 文件,并从菜单中选择 Run As
  2. 选择 Run Configuration
  3. 在 Run Configurations 窗口中,双击 JET Transformation
  4. 确定 MyTest.xml 文件作为 Transformation Input 列出来了(图 23)。
  5. 点击 Run

图 23. 定义一个测试转换配置
Run Configurations 对话框窗口

图 23 的大图

在转换运行时,会创建名为 BookLibrary 的新项目。它包含了在 MyTest.xml 文件中所指定的 Java 文件(参见图 24)。


图 24. 运行转换所生成的文件
Project Explorer 显示了转换输出

Rational Software Architect 工具集可以按照相似的方式使用,以进一步地精化转换输入模式与输出操作。


接下来的内容

本文提供了怎样在 JET 模板的基础上定义基本转换的具体指南。这样一个功能强大的用户定义转换可以简化基于资源开发的过程,并帮助实现代码的重用性。

由两篇文章所组成专题的下一篇文章,将会演示怎样使用 Rational Software Architect 工具,来生成特定转换目标域的概述,以及怎样将转换部署到工作区内。

确保您检查过了参考资源部分以得到更多内容。



下载

描述名字大小下载方法
示例项目文件artifacts04c.zip28KBHTTP

关于下载方法的信息


参考资料

学习

获得产品和技术

讨论

作者简介

作者照片

Marya Berfeld 自从 2000 年在 IBM Rational 一直从事建模工具的软件验证工作。她主要担任多个建模特性的测试工作,并且于 2008 年在 developerWorks 上发表了一篇有关 UML 转换 Java 的文章。

作者照片

Darren Coffin 从 1999 年以来,一直从事于建模工具上的软件验证工作。他工作的范围很广,测试众多的建模特性和图。他毕业于特伦特大学,获得计算机研究和环境资源研究学士学位。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


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


忘记密码?
更改您的密码

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

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

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

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

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


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

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=647202
ArticleTitle=使用 Rational Software Architect 编辑工具来定制从模型到文本的转换: 创建并运行 JET 转换项目
publish-date=04152011
author1-email=mberfeld@ca.ibm.com
author1-email-cc=
author2-email=dcoffin@ca.ibm.com
author2-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。