zoukankan      html  css  js  c++  java
  • [1.3].[由UML模型通过XMI生成XML,通过XSLT展示到表现层]

    第一个样式表把保存在 XMI 文件中的 UML 模型转化成 XML Schema;第二个样式表执行相反的操作,从 XML Schema 生成 XMI 文件。
          产生这类问题的根源在于:

    • UML 是一种通用语言,因此虽然支持很多建模概念,但是缺乏针对 XML 的一些概念。比方说,XML 有元素的顺序序列,而 UML 没有对概念排序。
    • XML 是一种层次化的数据模型,而 UML 使用更加灵活的图。因此,UML 和 XML 间有可能存在多种合法的映射,您必须告诉样式表要采用哪一种。

    解决方案: UML扩展
    从一开始,UML 的设计者就认识到 UML 可能会被用于没有预料到的用途,因此实现了扩展机制,以允许用户改进 UML。

    这些扩展机制之一是 构造型(stereotype),目的是允许用户在 UML 中定义新的概念,以精化已有的概念。使用构造型,用户基本上可以对这种建模工具说“我有一个概念与类(或者对象、参与者、关联,等等)相似,但是更加具体。”

    从实践的角度看,构造型是元模型中的一种继承形式。这样有助于把构造型看作是一个 UML 概念的后代。

    事实上,如果读过 UML 规范,您就会看到标准本身也大量地使用构造型。比如:

    • 注释有需求(requirement)和职责(responsibility)的构造型。
    • 约束有不变式(invariant)、前件(precondition)、后件(postcondition)和 stateInvariant 等的构造型。

    当然这些都不是用户定义的构造型。

    从图形上看,构造型用包围在尖括号中的关键字表示,比如图 1 中的 <<requirement>> 。注意,UML 允许用户重新定义构造型的图标,但是很少有工具支持这一特性。

     
    注释上的需求构造型

            与构造型密切相关的第二种扩展机制是 标记(tag)。构造型允许用户定义新的 UML 概念,而标记则允许用户存储关于这些新概念的信息。构造型提供了元模型级的继承,而标记在元模型级提供了向构造型增加类属性信息的机制。

     
            我首先说明如何规定一个层次结构。您将定义一个构造型 root,用于标记 XML 层次中作为根的元素。您将用这个构造型标记一个或多个类,样式表把它们作为全局元素实现。(在 XML Schema 中只有全局元素才能是根。)

            注意,可以有多个元素标记为根,这与 XML Schema 语言是一致的。还请注意,我决定把这个构造型称为“root”而不是"global“(全局元素)。UML 和 XML 之间可能存在不同的映射:比如,您可以在 Schema 中把所有的元素标记为全局性的以便使其能够在其他 Schema 中重用,也可以把尽量多的元素声明为本地的。(事实上使用全局元素和本地元素背后有一套非常复杂的理论.)

            我认为这些实现决策不应该在 UML 模型中公开。一个理由是,这样做在修改实现规则时不需要重新访问 UML 模型。事实上,如果把元素标记为“全局的”而又决定改变实现规则,比方说把所有的元素公开为全局的,就需要重新查看整个模型并修改多数构造型。我不愿意在 UML 模型中公开过多的实现细节。我准备在下一篇文章中更详细地讨论这个问题。


    所处理的词汇表也会影响到把哪些公开为构造型。比如,如果指定用于出版或者文档应用程序的词汇表,您可能希望定义一个属性构造型。在处理数据存储的词汇表时,对映射成属性还是元素,采用固定的规则可能更合理一些(比如本文中的样式表把一切都映射成 XML 元素)。

     
    类似的,我还定义了 position 标记,用于指定元素在 XML 序列中出现的顺序。这里的问题是模式中的元素顺序在转换成另一个模式时不一定改变。这在处理关联时尤其明显:UML 工具不对关联排序,因此不能依靠这些工具按照一定的顺序输出关联。

    一种方法是按照名称排序关联,另一种方法是使用标记明确控制位置。我发现后一种解决方案通常更好一些。

     
    图 2 是一个 UML 模型,它定义了三个类( personaddressjob )以及彼此之间的关联。该模型是前文所介绍的模型的扩展。

     
    包含关联的模型

    清单 1是导出为 XMI 的相同模型。与上一篇文章类似,这个清单是基于 XMI 标准的,而不是特定工具生成的 XMI 文档,但是很容易调整为适应特定的工具。这个列表中新增的内容包括 stereotype、tag、association 和 multiplicity。上一篇文章中已经说明,解释这些内容需要回顾前面的 UML 元模型。这些内容是按照前面所述的逻辑生成的,这里就不再添加注释了。

    清单 2是样式表的更新版本,它把这个 XMI 模型转化成 XML Schema。多数新代码都与上一篇文章中介绍的代码类似,以下几个模板除外:

    • 构造型和标记在 XMI 文件的一开始定义然后被引用,因此声明两个变量用于保存它们的 ID 非常方便。
    • 模型模板选择带有 root 构造型的类声明为全局元素,其他的类声明为本地元素。如果愿意,可以改变这一规则,把所有的元素声明为全局的。
    • 类模板遍历关联并使用 position 标记对其排序。
    • 关联模板使用特殊的模式遍历关联右端连接的类。这种模式定义了两个模板:第一个用于带有 root 构造型的类,插入对类的引用;第二个用于一般类,作为本地元素插入类定义

    本文来自博客园,作者:Slashout,转载请注明原文链接:https://www.cnblogs.com/SlashOut/archive/2005/03/28/127243.html 关注公众号:数字化转型

  • 相关阅读:
    Win2003 远程控制管理工具tsmmc 移植到XP连接多个服务器远程桌面的方法
    c++中new char(10) 和 new char[10]的区别
    64位ubuntu上安装 hadoop2.4.0
    g++编译安装
    atoi()函数实现
    LRU Cache
    Longest Palindromic Substring
    Java 中 == 和 equal 的区别 (String)
    抓取HTML
    验证码居中
  • 原文地址:https://www.cnblogs.com/SlashOut/p/127243.html
Copyright © 2011-2022 走看看