http://www-900.ibm.com/developerworks/cn/xml/x-svguml/
| SVG与UML图 | ||||
车皓阳 (grandiose11@msn.com) SVG是W3C的一种图形矢量标准,与Flash相似,它们都可以在网上快速加载矢量图。虽然目前SVG还没有Flash那么好的可用性,但其基于XML,倒是先天优势,有继续发展成为主流的可能性。在网上使用SVG技术显示UML图,不仅可以在浏览器内无失真地对对象执行缩放和平移等操作,还可以利用Xlink、XPointer等XML技术将大图分解,化简为小图浏览,甚至结合后台数据库直接存取元数据信息,并将结果动态地绘制为UML图,在网上显示出来。SVG强大的事件及脚本功能,也使得UML图具有更强的交互性和更为丰富的表达能力。本文在粗略介绍SVG和UML两种技术的基础上,描述了使用SVG绘制UML图形的过程中会用到的一些技术以及相关工具,UML图可以从不同的角度出发划分为一系列标准组件元素,利用它们基本上就可以无障碍地构建各种UML图。 SVG是W3C的一种图形矢量标准,与Flash相似,它们都可以在网上快速加载矢量图。虽然目前SVG还没有Flash那么好的可用性,但其基于XML,倒是先天优势,有继续发展成为主流的可能性。在网上使用SVG技术显示UML图,不仅可以在浏览器内无失真地对对象执行缩放和平移等操作,还可以利用Xlink、XPointer等XML技术将大图分解,化简为小图浏览,甚至结合后台数据库直接存取元数据信息,并将结果动态地绘制为UML图,在网上显示出来。SVG强大的事件及脚本功能,也使得UML图具有更强的交互性和更为丰富的表达能力。本文在粗略介绍SVG和UML两种技术的基础上,描述了使用SVG绘制UML图形的过程中会用到的一些技术以及相关工具,UML图可以从不同的角度出发划分为一系列标准组件元素,利用它们基本上就可以无障碍地构建各种UML图。 一、SVG 在SVG中,允许三种图像对象存在,分别是矢量图像、点阵图像和文本。SVG定义了六种常用的基本矢量形状,包括直线、圆形、椭圆形、矩形、多边形和折线,在此基础上,利用坐标变换、路径、动画、滤镜图案等功能扩展,通过多层次组合矢量、点阵以及文本图,并配以各种属性,进行矢量绘图。 经过一段时期的发展,SVG的业务领域慢慢也已拓展开来,涵盖Web图表、地图、框图、流程图、项目计划图等多种类别。构建各个领域中的基本元件库也成为迫切需求,一些开源项目正以此为目标,提供可重用、基于SVG的元件库。UML图可以明确地按照种类划分,针对不同的种类,提出基本组件,再结合SVG固有的功能,就可以很容易地使用SVG创建出多种UML应用。 SVG的语法非常简单,设计人员一般在一天之内就会熟悉,IBM Developerworks中也有SVG的专题讨论,这里也就不再赘述了。 二、UML图
UML中还包含其它一些图,例如对象图、包图、组合图等,以及演化出的一些新的概念,如模板(Stereotypes)、职责 (Responsibilities)、扩展机制(Extensibility mechanisms)、线程(Threads)、过程(Processes)、分布 式(Distribution)、并发(Concurrency)、模式(Patterns)等,是否使用要依据建模过程中系统的层次、分类和大小等具体情况而定。诚然,对于个体来说,我们并不会用到所有的符号,但一个完整的UML建模工具却是要尽可能详尽地考虑到UML中丰富的符号语法和语义信息。在这里,我们无法描述清楚使用SVG绘制每种UML符号的方法,我们要关注的是UML基本符号元件的划分以及使用SVG绘制UML图的一些常用方法和便利之处。 三、UML基本元件 在Visio的软件模具里,包括数据流模型图、程序结构图、ROOM、Jackson图和UML模型图等。Visio中UML图的功能分类比上述常用分类要多出两项,包图和静态结构图。包图是表达系统架构的有效机制,它可以用来将系统划分为较小的、易于管理的子集,它可以由任何一种UML图组成。静态结构图包括概念图和类图,概念图代表现实世界中的概念以及概念之间的关系,它侧重于关系和属性,而不是方法。 图一是Visio按照功能分类方法划分的UML图的基本元件。可以看出,这种分类方法是有很多重叠的,例如,包在用例图等四种UML图中都被看成基本元件。但这样做,在分类清晰的基础上,可以提高用户访问模板元件的速度;忽视UML功能分类,完全访问集合要包含一百个左右的成员,访问元件的效率可能会较低。 或者,我们也可以结合这种按照功能进行分类的方法,根据视觉特征将UML基本元件分组,然后在每种视觉特征分组下,再按照功能进行分组。使用SVG绘制UML图形,这有可能会是一种较好的分类复用的方法。这样我们不仅可以保证用户快速地访问到UML元件,而且在基于SVG的建模工具内部也易于管理。例如,我们可以进行这样的分类:
图一 Visio中的UML图形元件 初看起来,可能会觉得这种分类有些杂乱,但这样的分类却是从SVG角度出发对UML图元做出的分类,适合SVG建模软件底层存储。例如,包元件的SVG模板代码如下:
图二 SVG绘制的包模板元件 上面这些语句,可以作为包模板元件的SVG源码进行存储,这时尺寸相关的属性值设置仅表示比例关系。使用模板元件时,各部分尺寸依据存储时的缺省值按照比例进行放大或缩小,其余属性值则不涉及运算,直接把新值替代缺省值即可。未出现的模板中的属性在使用过程中可以自行加入。 四、使用SVG绘制UML图的一些技术
也可以嵌套在网页中使用,如下: 一般说来,在绘制UML图的时候,主体很少会用中文进行描述,但在注释中就难免需要使用中文。SVG目前还不支持中文编码,在遇到中文字符的时候,需要使用UTF-8编码,这样就可以有效避免不同的语言环境下的字符编码问题。下面就绘制UML图的过程中,SVG技术带来的一些好处进行探讨。 * 动态显示注解信息 SVG把图元看作一个个对象,并且提供DOM接口可直接访问对象及其属性,SVG亦提供了事件响应函数可获取界面、鼠标以及一些自定义的事件消息。有了这些支持,再加上SVG的对象分组功能( 以前面的包代码为例,来看一下如何利用JavaScipt动态显示注解信息。
在上面这段代码中,包含两个分组对象,一个是待注解的对象,另外一个是注解本身。前面的一段JavaScript代码的功能是处理待注解对象的点击事件,显示注解对象。注解对象可以选择点击注解对象本身或再次点击待注解对象进行关闭,代码与此段JavaScript代码相似。 另外,还可以在待注解对象与注解对象之间建立一条虚线,表示两者之间有关系。 其中路径中的M表示Moveto(移动到),C表示Curve(贝赛尔曲线控制)。虚线也可跟随注解对象同时显示或消隐。 * 以Highlight + Slide方式讲解UML图 也可以这样: 幻灯片都是以Slide方式一页一页进行演示的,我们如果要讲解一个软件系统,或者说交付系统设计方案,也可以直接使用SVG来完成。在SVG中,结合标签或
或
* 分层与图分解 我们可以在XHTML页面中加入一些Checkbox,用于显示/隐藏非兴趣区域,也可实现SVG自己的Checkbox来完成这项工作,下面就是相关代码:
要显示/消隐其它的组也可以直接放在check函数中if语句范围内来实现。 点击UML中的包或其它需要详细描述的单元,显示其中的内容,就能实现将大图分解为小图的功能。这部分代码与上面Slide Show的代码如出一辙,改动很少,在这里就不再赘述了。 * 后台实时更新
当然了,后端服务器中数据源也可以是数据库。SVG API提供了克隆或生成新元素插入现有DOM的方法,我们可以编写Java程序访问服务器中的数据库,将元信息取出,生成新的SVG文件,或在现有SVG DOM中进行修改,反映出元信息的变化。下面的代码是生成SVG文件的一个框架。
其中,访问数据库部分内容被省略掉,在这里,关键是要结合UML模板元件,这样就可快速准确地生成新的SVG组元素。 SVG还支持一些其它的功能,例如滤镜、声音等,也可以用来描述UML图,在这里就不再多说了,有兴趣的读者可以翻阅相关书籍,这里仅仅是提出一些想法,实现时还需要不厌其烦地关注一些细节信息。 常见的SVG浏览工具有Adobe、CSIRO和Corel的SVG Viewer,Bitstream Viewer,它们都是浏览器的插件。IBM也用Java语言制作了一个浏览SVG文件的工具SVG View。除了IE以后,Amaya和Mozilla浏览器都内嵌支持SVG。 下表是常见的可以导出SVG格式的UML建模工具以及可用于UML建模的SVG编辑工具。
表一 支持SVG格式的UML建模工具及可制作UML的SVG编辑工具 六、结论 利用SVG在线发布UML图,并不是一项全新的应用,现有的一些大型建模软件都提供了输出SVG文件的功能,但是这些系统却过于庞大,不利于快速敏捷地进行建模。因此,现有的敏捷建模方法甚至推荐仅使用纸笔来绘制一些不太正式的UML图,事实上,这种方法在实际使用过程中常常也会获得一定程度地成功。但这种方法绘制出的UML图并不总是能够正确地捕捉,而且代码更新所带来的变化也不能持续地反映出来。由此可以看出,这些方法都有不足之处,最好是利用轻量级UML建模工具敏捷快速地建模,然后存储为SVG格式,直接将其在网络上发布。当然了,基于SVG的建模工具是应当能够比较充分地支持SVG标准,除了支持基本的绘图功能之外,还要支持SVG图形的交互功能和动画特性,这一点很多通用建模工具是不可能完成的。另外,一些开源项目也在研究基于SVG的组件库。整体上来说,SVG的功能绝不仅仅限于绘制各种各样的UML图,但是,SVG的流行肯定与UML图形是分不开的,如果可以更好地对UML图进行支持,例如开发基于SVG格式的UML组件库,构建基于SVG格式的UML建模工具,那么SVG格式或许也能因此而更加流行。在这一领域,还有许多工作需要完成。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=186360