精通xmi
本专栏目前专注于建模,UML和XML。 更具体地说,我正在探索将UML建模用于XML开发,尤其是XSLT样式表如何通过自动派生提供帮助。
由于XML已成为开发项目中的常见功能,因此许多开发人员对将XML与他们的其余开发集成起来越来越感兴趣。 尽管许多组织仍使用临时工具来进行XML开发,但趋势是采用已经用于其他开发需求(例如Java技术)的相同XML方法论(或至少一套通用工具)。 ,数据库或Web。
自动推导
如上一专栏所述,模型是对系统的简化描述,可以帮助进行计算和预测。 在本文的上下文中,系统始终是XML词汇表。
图1将建模周期说明为模型的连续体。 第一个模型绘制在白板(或一张纸)上,并且往往是非正式的。 在此阶段,目标是给所有参与者(用户,开发人员,设计师)一个自由表达自己的机会。
图1.连续的模型

下一步是绘制一个UML模型(如果词汇很复杂,则可以绘制几个模型)。 UML模型更为完善和形式化,但由于它主要用作团队成员之间的沟通工具,因此仍具有综合性和可读性。
最后一个模型是XML模式,这是所有模式中最精确的一种。 它的目标是允许解析器根据词汇表定义来验证XML文档,以便它可以放弃可读性,而倾向于精度。
所有这些模型之间的主要区别是它们的目标:从非正式交流到解析器进行精确的正式验证。 区别不在于模型的性质(XML词汇表的简化描述),而在于每种模型提供的帮助级别。
如果您考虑到模型的连续性,从最不精确的模型到最正式的模型,则有必要研究一下自动推导 -从较早的模型自动生成一个模型的过程。 显然,仅当两个模型具有相同的描述性时,自动推导才能很好地工作,这与某些模型的描述性强于其他模型的思想产生了冲突。 下一节将讨论模型中描述的不同层次。 在这里,我将专注于推导。
XML元数据交换(XMI)
您会从上一期中回想起我是通过XMI和XSLT实现自动派生的。 假设你已经熟悉XML模式(如果你不是,请参阅相关信息 ),我将在本节介绍XML元数据交换(XMI)。
词汇和兼容性
XMI是一个复杂的规范(1.2版超过400页),因此,在本文中,我将局限于自动派生所需的最低限度的描述。
XMI不指定XML词汇表,而是指定一种为元模型生成词汇表的算法 。 换句话说,XMI不会像您期望的那样定义Class
, Attribute
, Association
或其他标签。 相反,XMI指定如何为元模型中的概念创建标签。 我知道有很多模型可以使用,但请耐心等待-稍后它会变得更加清晰。
因此,XMI与其说是框架,不如说是词汇。 不幸的是,这意味着没有两个工具以相同的方式解释该框架。 同一工具的不同版本之间也存在差异:Rational Rose最初是通过Unisys开发的附件来支持XMI的。 最新版本的Rational XDE具有对XMI的内置支持,但这是一个稍微不同的变体。 差异不一定显着,但可能会导致不兼容。 在实践中,将样式表定位到社区中使用的一个或两个工具是有意义的,而不必担心其余的工具。
在本文中,我将坚持使用OMG发布的示例,而不是采用一个特定版本的XMI。 尽管没有工具可以直接与样品兼容,但这是良好的中间立场。 使它们适应您选择的工具将不会很困难。
XMI标头
尽管XMI主要指定一种算法,但它还定义了一些标签和属性。 您将需要以下内容:
-
XMI
始终是根元素。 它必须具有xmi.version
属性(有效版本为1.0、1.1、1.2和2.0)。 -
XMI.header
是有关模型信息的占位符。 它最重要的子级是XMI.documentation
和XMI.metamodel
。 -
XMI.documentation
将最终用户信息保留为以下子元素(其名称不言自明):-
XMI.owner
-
XMI.contact
-
XMI.longDescription
-
XMI.shortDescription
-
XMI.exporter
<
-