技术开发 频道

使用PowerDesigner导入VISIO文档

    双击任意Process可以发现,转换后的Process被正确设置到所在的Swimlane(如图5所示)。而这种关系在VISIO中是不可见的。另外,当用户对这个Process进行影响分析(Impact Analysis)时,此关系将被正确地追踪,这也体现了PowerDesigner强大的元数据管理能力。

     

    图5. 转换后的Process被正确设置到所在的Swimlane 

    3.  模型转换基础

    模型转换并不是一种崭新的技术,Wiki百科将模型转换定义为:给定2个元模型(metamodel)A和B,将由元模型A定义的模型a转换为由元模型B定义的模型b的过程。以VISIO导入插件为例,模型a相当于VISIO文档(document),A则为定义这个文档中图形(shape)的模板文件(stencil);而b为PowerDesigner的模型,B则为PowerDesigner的某个库(如EAM,BPM)。整个关系如图6所示,而映射定义文件(mapping profile)则是整个转换的核心,它定义了具体的对应关系。就这个插件而言,它定义了如何将VISIO的Shape转换为PowerDesigner的Object,它既可以是一对一的关系,也可以是一对多或者多对一关系。

    
    图6. VISIO Import中的模型转换架构

 

    一般,映射定义文件总是定义在元模型层,它可以以任意形式存在(普通文本,xml,代码等)。转换引擎将根据此映射定义文件进行转换。此外,值得一提的是,图6中给出的结构是可扩展的,元模型可以继续具有自己的元模型(meta-metamodel)。

    4.  挑战

    如前所述,只要转换引擎足够强大,那么转换的问题已经被完美解决了。但是前面的讨论含有一个假设,即模型总是被它的元模型完全定义。不幸的是,现实模型世界往往不能满足这一假设:首先元模型并不是非常明确的存在;其次,模型本身有时是自定义的(即模型的元模型是其本身)。第一个问题主要源于各公司的产品一般不会完全暴露其内部的元模型。第二个问题意味着只有当模型被读取时才能获得其元模型,这使得映射定义文件无法在设计时(design time)定义,而是必须在读取模型时(runtime)动态定义。下面将对VISIO插件面临的挑战一一进行讨论。

    4.1  所有物体都是Shape

    在VISIO的一个页面(page)中,所有的图形都被称为Shape。VISIO并不区分链接(link),它只是一种特殊的Shape而已,而且大多数时候,链接是自定义的(self-defined)。 

    4.2  VISIO中的自定义Shape

    对于自定义的Shape,图6所示的映射框架将无法正常工作。因为自定义Shape的元模型只有在转换运行时(读取模型a时)才能被获取。由于VISIO非常自由,即使原本有元模型的Shape,也可以定义一些自定义信息:例如,Shape都可以定义自定义属性(custom property),如何映射这些自定义信息成为一个挑战。 

    4.3  链接link

    VISIO中,链接工具栏被广泛使用,它可以链接任意2个Shape,而对于PowerDesigner,link是有类型的,某种类型的link只能链接特定的物体。如何选择正确的PowerDesigner链接是对模型转换的一个挑战。

     4.4  Shape作为背景

    很多时候,用户会使用一些矩形或者椭圆形Shape作为其他Shape的背景图片(如图7所示)。当进行转换时,如果不将Shape的序数(index)考虑进去的话,背景图片可能会遮挡住前面的Shape。这显然不是用户所希望的行为。

    

    图7. 白色矩形作为背景 

    5.  解决方案

    针对第4节中所提到的挑战,本节将分析VISIO插件第一版中的解决方案,并且对解决方案进行评估,提出展望。 

    5.1  具有元模型定义的Shape

    对于这类Shape,将根据图6框架进行映射。但是对于4.2中提到的具有自定义属性的Shape,其自定义属性被忽略。在下个版本中,这一问题将被改善,所有自定义属性将被保留并映射为PowerDesigner中的扩展属性(Extended Property)。

    5.2  自定义Shape

    VISIO插件定义了4个虚拟的元模型:GenericLink, Polyline, Rectangle和UnknownShape。所有自定义的Shape将被归类为这4种中的一个。有了这种机制后,映射定义文件(mapping profile)成为可能,分类算法如表I所示。

    表I. 分类算法

    

    其中GenericLink和Polyline是专为被用作link的Shape设计的。GenericLink将被转换为PowerDesigner中的某种link。而Polyline则将根据坐标被直接绘制出来,第一版只支持线段的绘制,下个版本将加入对任意曲线绘制的支持。而Rectangle是4.4的解决方案,因为大多数时候背景Shape不会被连接。VISIO插件的作者认为,按照序号(index)转换对性能将产生很大的影响,所以作为一种对性能的取舍,放弃了按照序号转换的方式。

    同样的,对于虚拟元模型,由于无法预知Shape所包含的自定义属性,这部分信息与5.1中所述相同,被忽略了。下个版本中将通过类似反射的方式,支持这些属性向PowerDesigner扩展属性的映射。 

    5.3  可扩展性

    由于采用了图6所示的转换模式,VISIO插件是可扩展的。只要更新映射定义文件,可以将任意VISIO文件转换为PowerDesigner模型。当然,对于PowerDesigner不支持的文件类型(如电路图等),转换是没有意义的。由此也可发现,VISIO和PowerDesigner的侧重点各不相同。在下个版本中,将引入一些扩展机制,使得用户也可以参与到映射文件的定义中来,按照用户的需求进行转换。 

    6.  总结

    在本文中,首先介绍了PowerDesigner 15中的新增功能VISIO Import的安装与使用。在此基础上,介绍了模型转换的基础知识。接着,本文讨论了VISIO插件在开发过程中遇到的挑战。最后,本文给出了第一版中的部分解决方案并对这些方案进行了评估,提出了下一版本中的展望。

0
相关文章