站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Eclipse 专题模型驱动的复合文档开发

模型驱动的复合文档开发

摘要: 使用基于开放标准的方法(这种方法使用 Eclipse Modeling Framework 和底层的 ECore 模型来表示功能模式及其之间的关系)可以为混合名称空间文档的创建构建灵活的工具。利用这些模型可以提供一种动态的环境,在提供受控的编辑体验的同时,还可以自动序列化符合组合功能模式定义的实例文档。

复合文档

W3C 已经成立了 Compound Document Formats (CDF) 工作组。CDF 工作组源自 Web Applications and Compound Documents Workshop,探索关于复合文档标准化和某些格式结合的行为规范的问题,解决可扩展和可互操作 Web 的要求。

CDF 工作组专注于将成为 CDF 配置文件的特定名称空间词汇表的组合,比如用于移动设备的丰富媒体配置文件可能包括 XHTML 和 SVG Tiny。其他的例子包括 XHTML 和 XForms 的组合、使用 X+V 配置文件的 XHTML 和 VoiceXML 一个子集的组合。

复合文档定义 <table align="right" border="0" cellspacing="0" cellpadding="0" width="40%"><tr><td width="10"></td><td><table border="1" cellspacing="0" cellpadding="5" width="100%"><tr><td bgcolor="#eeeeee"> 更多信息

要进一步了解本文所提到的技术,请参阅 参考资料 中的相关链接。

</td></tr></table></td></tr></table>

名称空间惟一标识了一组名称,这样,来源不同而名称相同的对象混合在一起的时候就不会出现歧义。一个 XML 名称空间就是一个元素类型和属性名的集合,这些元素类型和属性用所属 XML 名称空间的惟一名称来惟一标识。在 XML 文档中,任何元素类型或属性名都可使用两段式的名称,包括名称空间名和元素或属性名。

Compound Document by Inclusion (CDI) 将来自多个名称空间的 XML 标记组合到一个物理文档中。已经存在一些标准,并将继续出现新的标准,来描述单一名称空间中的 XML 标记,XHTML、XForms、VoiceXML 和 MathML 是这类标准中最突出的例子,每一个都有自己的名称空间。每种规范都关注丰富内容开发的某一方面。比如,XForms 专注于数据采集和提交,VoiceXML 突出语音,MathML 则强调数学符号的显示。

对于内容的作者而言,所有这些标准都非常有用,非常重要。但是,只有将来自这些标准的任意数量的元素结合起来,才具有真正的灵活性和强大能力来创建丰富文档。要创建的文档可能要求在 Web 浏览器中显示,并且包括输入表单、可缩放的图像以及一些数学符号 —— 所有这些都在同一个页面中。XHTML、XForms、SVG 和 MathML 可分别满足这些要求,因此可以将它们结合到一个多名称空间的文档中。

考虑一个简单的例子:包含 XHTML 和 MathML 的复合文档。清单 1 中名称空间声明后面的注释与下面的说明编号相对应:


清单 1. 简单的复合文档
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>


<?xml version="1.0" encoding="iso-8859-1"?>

  
    A Compound document
    A simple formula using MathML in XHTML.
    
      
        
          49
        
        =
        7
      
    
  

</td></tr></table>
  1. XHTML 名称空间声明: 清单 1 中的每个 XHTML 元素用 xhtml: 名称空间前缀限定。
  2. MathML 名称空间声明: 清单 1 中的每个 MathML 元素用 mathml: 前缀限定。

图 1 是 清单 1 中结合 XHTML 和 MathML 的简单复合文档的显示结果。




复合文档可以由包含多个名称空间的单一文档组成,如 清单 1 那样。这是一个 Compound Document by Inclusion(基于包含的复合文档,CDI)。但是,复合文档也可以由多个文档组成,其中属于特定名称空间的一个文档引用不同名称空间的另一个单独的文档。比如,根文档或者顶层文档可能包含定义和格式化页面的 XHTML 内容。通过使用 XHTML 标记,这个 XHTML 父文档可以引用属于其他名称空间的另一个文档。可根据需要重复这一过程,以引入更多的文档。根文档加上这些单独的、被引用的文档就是一个 Compound Document by Reference(基于引用的复合文档,CDR)。图 2 是一个简单的 CDR 文档,其中 XHTML 根文档包含对单独的 SVG 子文档的引用,SVG 文档包含三个彩色圆的标记。




当然,复合文档也可以是 CDI 和 CDR 的混合体。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

模型驱动的开发 <table align="right" border="0" cellspacing="0" cellpadding="0" width="45%"><tr><td width="10"></td><td><table border="1" cellspacing="0" cellpadding="5" width="100%"><tr><td bgcolor="#eeeeee"> 缩写形式

CDI——Compound Document by Inclusion(基于包含的复合文档)
CDR——Compound Document by Reference(基于引用的复合文档)
DTD——Data Type Definition(数据类型定义)
EMF——Eclipse Modeling Framework(Eclipse 建模框架)
MathML——Mathematical Markup Language(数学标记语言)
MDA——Model Driven Architecture(模型驱动的体系架构)
MDD——Model Driven Development(模型驱动的开发)
MOF——Meta-Object Facility(元对象设施)
OMG——Object Management Group(对象管理组)
PIM——Platform Independent Model(平台独立的模型)
PSM——Platform Specific Model(平台专用的模型)
SMIL—— Synchronized Multimedia Integration Language(同步多媒体集成语言)
SVG——Scalable Vector Graphics(可伸缩向量图形)
UML——Unified Modeling Language(统一建模语言)
VoiceXML——Voice eXtensible Markup Language(语音可扩展标记语言)
W3C——World Wide Web Consortium(万维网联盟)
X+V——XHTML + Voice profile(XHTML + Voice 配置文件)
XHTML——eXtensible HyperText Markup Language(可扩展超文本标记语言)
XMI——XML Model Interchange(XML 模型交换)
XML——eXtensible Markup Language(可扩展标记语言)
XUL——XML User interface Language(XML 用户接口语言)

</td></tr></table></td></tr></table>

模型驱动的开发(MDD) 是更快地开发更好的软件的一种方法和一组技术。对象管理组(OMG)给 MDD 概念贴上了模型驱动的体系架构(MDA)的标签,并开发了一组标准来支持 MDD。过程从软件开发需求阶段早期的业务逻辑定义开始。在对业务逻辑进行抽象的基础上,可使用统一建模语言(UML)对业务逻辑建模。得到的一个或多个模型形成了生成代码获得实现的基础。

使用 MDD 的一些理由包括:

  • 加快开发过程
  • 业务逻辑从平台中独立出来
  • 如果业务逻辑变化,模型也要变化
  • 专门的技术应用于业务模型而不是软件中
  • 降低软件开发的成本

模型可以用多种形式表示,如 UML、XML Model Interchange、Essential Meta Object Facility 和 W3C XML Schema。

Eclipse 中模型驱动的开发

Eclipse 是一种开放源代码的工具集成平台,最常在 Java 开发环境中使用。作为一种工具集成平台,Eclipse 拥有多种编辑器和实用工具,并且还在不断增加,其中之一就是 Eclipse Modeling Framework (EMF)

EMF 是 Eclipse Open Source Project 的一个工具子项目。EMF 是一种建模和数据集成框架,也是一个用于为 Eclipse 创建插件的代码生成框架。EMF 使用 ECore 元语言描述模型,并为这些模型提供运行时支持。EMF 使用的 ECore 元语言以 OMG Meta Object Facility 2.0 (MOF) 的一个子集 Essential MOF (EMOF) 为基础来描述模型。EMF 模型被持久化为 XML Model Interchange (XMI) 文档。EMF 提供了查看和基于命令编辑模型的能力,以及按照 EMF 模型操纵和序列化实例文档的基本编辑器。EMF 模型可从带注释的 Java 代码、XML 文档或 UML 模型产生。

EMF 是 Eclipse 中进行模型驱动开发的基础。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

复合文档加工

可以用现有的 XML 编辑器创建和编辑 CDR,因为对其他文档的引用使用如 标记这样的一般引用机制。但是 CDI 编辑器要求不仅仅知道如何验证引用的单个文档实例以便提供受控的编辑体验。支持复合文档的编辑器必须了解可把一个名称空间的什么标记作为孩子插入另一个名称空间标记的详细信息。这种跨名称空间的联系可以是双向的和递归的。复合文档配置文件为一组混合名称空间定义了何种标记可以插入到其他何种标记下。目前已经存在几种明确的复合文档配置文件,如 XHTML/X+V(VoiceXML 的一个子集)和 XHTML/MathML/SVG。

为了提供了一个具体的例子,不妨考虑 XHTML+XForms 复合文档配置文件,它必须定义什么 XForms 标记可以作为特定 XHTML 标记的孩子,反之亦然。对此配置文件的一个要求是 xhtml:div 元素可以包含 xforms:repeat 子元素,后者又可以拥有另一个 xhtml:div 元素作为孩子,这个元素又可以有一个 xforms:input 元素作为孩子,如清单 2 所示。


清单 2. XHTML 和 XForms 嵌套标记
<table bgcolor="#eeeeee" width="100%" cellpadding="5" cellspacing="0" border="1"><tr><td>



  
    
      
        Address Line
      
    
  

</td></tr></table>

由于验证和受控编辑器,标记的嵌套必须用 xsd:anyxsd:anyAttributes 之外的机制明确地定义,而为浏览器编写呈现代码的用户代理的实现者则需要更明确的详细信息来无歧义地验证和指导文档的构造,建立处理引擎和呈现引擎。

复合文档加工用户

考虑复合文档的创建和编辑加工时,必须要记住需要适应两种用户:复合文档模式架构师实例文档创建者

复合文档模式架构师需要有效地表达定义,即如何使用定义好的配置文件组合特定的名称空间词汇表。这是建立复合文档配置文件实现的人。

实例文档创建者需要利用配置文件,但是对构造和编辑配置文件不感兴趣。实例文档创建者只想创建结构良好的、符合配置文件的有效文档实例,更愿意使用受控编辑器和基于结构的改正体验。在这种体验中,为编辑器提供受限制的选择来根据配置文件检查上下文敏感的选项。

作为一种开放的建模技术,EMF 非常适合定义复合文档配置文件。然后可以使用 EMF ECore 模型为文档创建和序列化构建基于 Eclipse 的编辑器。

复合文档加工的模型驱动方法从配置文件中包含的每种功能名称空间(XHTML、XForms、SVG 等等)的 Platform Independent Models (PIMs) 开始。PIM 是不考虑具体实现,只考虑建模对象目的 的高层抽象。PIM 可采用不同的形式,如 W3C XML Schema、RELAX NG、Schematron、MOF 或 UML 模型。一旦建立了所有配置文件模式的 PIM 模型,就可以转化成 Platform Specific Models (PSMs),全部采用同一种标准类型。比如,PSM 可能全部是 XML Schema、UML 模型或 EMF ECore 模型。然后通过创建模型间的交叉模型引用来实现配置文件,交叉模型引用表示在那儿可以引用或者插入另一个名称空间中的标记。比如,XHTML+XForms 配置文件需要定义, 标记可以插入到 标记中。图 3 中,PSM XHTML+XForms 配置文件使用 UML 符号表示 XHTML PIM 模型中的 head 类和 XForms PIM 模型中的 model 类之间的聚合关系。




可以将 PSM 转化成 EMF ECore 模型,后者可使用 EMF 提供的工具从 UML 模型或者 XML Schemas 创建而来。图 3 所示的例子中,聚合关系变成了 PSM ECore 模型中的 EReference。建立这些模型和利用交叉模型引用实现配置文件是复合文档模式架构师的职责。实现复合文档配置文件的那些 PSM 模型然后被用于驱动受控的编辑器,实例文档创建者用这种编辑器创建和编辑符合该配置文件的实例。图 4 是从 PIM 到 PSM 再到序列化实例文档的 XHTML+XForms+XML Events 配置文件。




模型驱动方法是创建特定名称空间的功能 PIM 的有效方式,这些 PIM 可用于创建名称空间组合的 PSM 来表示配置文件。可以在不同组合中重用 PIM 模型,组成需要的配置文件。使用 Eclipse EMF ECore 模型对于在 Compound XML Document Editor 中创建实例文档,是一种非常理想的方式,可以直接编辑和序列化。

Compound XML Document Editor

Compound XML Document Editor(可从 IBM alphaWorks 下载)是一种动态编辑器框架,它使用 ECore 模型推动基于模型的复合文档构造。

不需要编写任何 Java 代码,就可以向 Compound XML Document Editor 框架添加序列化为 XML 的任何类型的文档。Compound XML Document Editor 使用模型资料库,ECore 模型保存在其中。只要把 ECore 模型拖到 Compound XML Document Editor 模型资料库中,并启动 Compound XML Document Editor,就可以从这些 ECore 模型创建或动态地编辑实例文档了。可以根据需要创建模型资料库以容纳任意多种模型和复合文档配置文件。

可以交换出单个模型,也可以在运行时交换出整个模型资料库。此外,可以随时修改 ECore 模型,并立即在编辑器和序列化实例文档中反映出来。

Compound XML Document Editor 提供了 XHTML、XForms、XML Events、SVG、SMIL、VoiceXML、XUL、MathML 和 XLink 的 ECore 模型。图 5 显示了以 XHTML 作为根文档的默认模型资料库中可用的配置文件组合,其中一个配置文件允许包含来自其他名称空间的元素和属性。




通过限制允许的标记插入右击选项,Compound XML Document Editor 使用底层的 EMF 模型提供受控的编辑体验。图 6 给出了一个例子:集成 PSM 模型的 EMF 编辑器严格遵守配置文件的要求,通过询问 PSM 模型只允许遵循复合文档配置文件的输入。元素属性表示为属性表中的属性。




创建文档后,可以利用支持文档中使用的复合文档配置文件的可配置右键菜单选项,将它直接呈现在浏览器中(如图 7 所示)。




图 8 显示了 Automobile Loss Reporting 基于在 X-Smiles 浏览器中呈现的 ACORD 模式的一份保险单。





<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

结束语

Compound XML Document Editor 是一种基于标准的、模型驱动的复合文档开发框架,支持动态的复合文档创建和序列化。Compound XML Document Editor 利用 Model Driven Development 概念和 Eclipse EMF 帮助开发灵活的复合文档以及定义它们的配置文件。

致谢: 感谢 Simon Johnston 和 Steve Speicher。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

作者简介<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Kevin E. Kelly 是一位从事软件标准的 IBM Corporation 高级软件工程师。Kevin 是 W3C XForms 工作组和 W3C Compound Document Format 工作组的成员。他主要关注客户机技术和基于开放标准的演化技术,通过基于 XML 和模型驱动的方法推动更快、更有效的标准采用。加入 IBM 之前,Kevin 在 Rational Software 工作了八年,从事 UML 建模和 Java 技术。Kevin 拥有 Mercer 大学的科学硕士学位和 Montana 大学的科学博士学位。

</td></tr></table>
<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Jan Joseph Kratky 是 Compound XML Document Editor 和 XML Forms Generator 的首席开发人员。他目前是位于北卡罗来纳州 Research Triangle Park 的 IBM Emerging Software Standards 的软件工程师,从 Cornell University 获得了 B.A.,从 Rensselaer Polytechnic Institute 获得了 M.S.。Jan 是 Sun 认证的 Java Programmer 和 Web Component Developer,他从 1997 年开始使用 Java 技术,从 2001 年开始接触 Eclipse 技术。

</td></tr></table>
<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Keith Wells 是 IBM RTP 的一位软件开发人员。Keith 有几年参与了 Emerging Technologies 和 Emerging Technologies Toolkit。

</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


↑返回目录
前一篇: 模型驱动的 XML 表单生成,第 1 部分: 从使用 XML Forms Generator 开始
后一篇: 下一代模型驱动开发