丰富内容的复合 XML 文档配置文件, 第 2 部分: 开发复合 XML 文档模式的一种范型

来源:百度文库 编辑:神马文学网 时间:2024/04/28 20:14:15
级别: 高级
Steve Speicher , 高级软件工程师, IBM
Kevin E. Kelly , 高级软件工程师, IBM
2005 年 10 月 27 日
从核心规范模式建立复合 XML Schema 配置文件。本系列包括两部分,第 1 部分 探讨了 XML Schema 的几种扩展能力,比较了建立复合文档格式(CDF)配置文件的不同方法。本文根据第 1 部分的分析,定义了使用 XML Schema 开发混合名称空间配置文件的一种范型(pattern)。
在桌面和移动设备平台上,用户对丰富 Web 应用程序内容的要求不断增加。开放的、基于标准的、支持丰富内容的功能性 XML 模式有助于保证这类内容(以及生产这种内容的技术)的普遍性、易用性和低成本。模式还有助于保证这种技术不会变成一家或少数几家供应商的私有技术,从而受制于特定的编程框架或者特殊的呈现器和浏览器技术。
基于 XML 的声明性功能模式,如 XHTML、XForms、XML Events、可缩放向量图形(SVG)、SMIL、VoiceXML 和 XHTML Mobile Profile,这些模式都为创建丰富内容提供了特定的功能性。
每种功能模式适用于特定的功能领域。比如,SVG 处理图形,XForms 处理表单输入收集和提交,XML Events 处理事件和监听程序的创建,等等。但是,更丰富的 Web 应用程序需要在一个文档中结合使用两种或更多的功能模式。模式组合很容易引起问题,因为并非所有模式都能嵌入到其他模式中。也不是所有模式都允许其他模式嵌入自己内部。事实上,多数功能模式都假设自己是一个文档的根模式,只有一个功能名称空间,如果需要另一个功能名称空间的丰富内容,可引用具有自己的根模式的单独文档。比如,XHTML 文档可以引用单独文档中的 SVG 图形,运行时呈现该图形。
有些模式是专门用于嵌入的,如 XForms(永远不会作为文档中的根模式)。有些模式通过使用更新的模式结合已有的功能模式(如 XHTML 和 VoiceXML 的 X+V 配置文件),为内嵌进行了调整。XForms 规范包含装入模式的指南,但是没有真正的组合驱动模式。而在 X+V 中则创建了单独的驱动模式,它复制了 VoiceXML 模式并使用 XHTML 模式元素代替了专用的元素。
对于用户代理开发人员和内容创造者,关于哪些 XHTML 标记中允许来自 XForms 的标记,以及哪些 XForms 标记中允许什么 XHTML 标记,并没有明确的说明。



回页首
该范型的一个关键是使用了这样一个配置文件模式,它提供支持复合 XML 文档的创建、修改和验证的重定义。利用这种方法,可以将验证跨名称空间元素的目标组合划分出来,而不破坏核心功能模式的完整性。作为一个例子,第 1 部分 给出了一个简单的复合,支持把 XForms 元素放入 XHTML 文档,同样也可以将 XHTML 元素放入 XForms 元素中,如图 2 所示。

第 1 部分中提到,使用 XML Schema 重定义提供了扩展核心模式所需要的灵活性。
每种名称空间组合至少需要一个配置文件模式。但是,有时候可以创建一个配置文件模式来重定义一个模式,同时引入多个外部名称空间。我们建议使用模块化的方法,将这些重定义分开,因为可能需要独立使用或者与其他组合共同使用。
要记住,可以重用这些配置文件模式来创建双向组合或者与其他名称空间的组合。


回页首
下面的小节中,我们强烈建议使用重定义开发核心模式。这些建议使您的核心模式不需要修改就很容易被重定义,或者至少将需要的修改减至最少。
不能对匿名的简单或复杂类型声明(在真正的元素/属性声明上下文中)使用 XML Schema 重定义。相反,应该通过定义元素的内容来公开这些类型,然后让元素声明引用这些类型。
这种方法还有助于内部组件化和抽象:可以定义抽象的、可重用的父类型,也可以进行新的扩展或限制。
使用重定义时(一般来说是为了得到更好的模式设计),根据全局分组定义来定义内容模型通常是合理的。使用组来定义元素和属性内容,很容易扩展已有的组定义来包括新的项。
在类型声明或组的上下文之外声明元素必须小心,因为其作用域是全局。这一步还可以让该元素成为实例文档中合法的根元素。这样可能误导生成工具,使创建的文档以不希望的元素作为根元素,至少从模式创建者的观点来看是这样的。但是,使用该模式的模式验证工具不会报告错误。因此使用全局元素声明必须谨慎。
但是,当在复杂内容定义中引用不同名称空间的元素时,全局元素很有用。第 1 部分中的那个例子就是这种情况,添加全局 XHTML p 元素,以便扩展 XForms select 元素的复杂类型定义。即便如此,理想的解决方案仍然是从包括 p 元素声明的 XHTML 模式中引用组声明。
所有编程语言类型中都有命名约定,以便让读者快速理解关于语言结构的附加元数据。如果没有这些约定,读者可能必须搜索语言结构或者依赖提供可视化标志的工具。这些约定对于帮助用户理解不同的核心模式结构很有用。建议采用 XHTML 模块化规范中使用的约定。(请参阅参考资料。)
虽然不是该范型中的主要方面,但是模块化能够为模式的重用、理解、可扩展性和维护带来很多好处。对于复合文档,模块化提供了包含和导入适当模块的驱动模式,简化了新模式的构造。可以使用本文和第 1 部分中介绍的技术来修改或重定义该驱动模式。


回页首
第 1 部分中提到,本系列文章的目的是探索建立健壮、可重用的模式的高层应用场景和设计范型,从而为复合文档内容提供坚实的验证框架。验证内容和语义的细节由 W3C 的 XHTML 2.0、XForms 和 CDF 工作组共同开发。(请参阅参考资料。)


回页首
按照本文定义的范型,标准设计人员和业务数据建模人员都能从更具有可重用性的文档和数据模型中受益。也可以从嵌入其他数据模型(模式)或者被其他数据模型嵌入的技术(范型)中受益。设计人员常常认为自己的根元素总会是根,但后来认识到很多场合下它们的模型需要存在于其他模型之中。


回页首
学习
您可以参阅本文在 developerWorks 全球站点上的英文原文。
请阅读本系列的第 1 部分,进一步了解 XML 模式可扩展性选项的背景。
进一步了解W3C Compound Document Format (CDF) 活动。
看一看W3C 的 XHTML 模块化规范。
关于 XForms 规范及工具的信息请访问W3C XForms 站点。
通过XForms Wiki 进一步了解 XForms 和 CDF。
通过developerWorks XML 专区 进一步了解 XML 和 XML Schema,可以找到技术文档、how-to 文章、教学、下载和产品信息,等等。
了解如何才能成为一名IBM 认证的 XML 及相关技术的开发人员。
获得产品和技术
看看这些有关的 alphaWorks 技术:Compound XML Document Editor 和XML Forms Generator。
从 formsPlayer 网站下载SideWinder CDF 呈现器。
讨论
通过参与developerWorks blogs 加入 developerWorks 社区。


回页首

Steve Speicher 是从事软件标准的一位 IBM 高级软件工程师。Steve 目前主要从事利用工具和模型驱动的开发改进创立标准的过程。Steve 以前曾经在 Rational 部门开发软件开发工具和 IBM 内部工具。Steve 从肯特州立大学获得了计算机科学和应用数学硕士学位。通过sspeiche@us.ibm.com 与 Steve 联系。

Kevin E. Kelly 是从事软件标准的 IBM 高级软件工程师。Kevin 是 W3C XForms Working Group 的成员,和 W3C Compound Document Format Working Group 的主席。主要研究客户机技术和基于开放标准的演化技术,通过基于 XML 和模型驱动的方法促进更快、更有效的标准采用。加入 IBM 之前,Kevin 在 Rational software 工作了八年,从事 UML 建模和 Java 技术。Kevin 拥有 Mercer 大学的硕士学位和 Montana 大学的博士学位。通过kekelly@us.ibm.com 与 Kevin 联系。
_xyz