XForms架构

原创 2006年05月19日 17:58:00

HTML表单是一种用于收集用户数据和提交数据到服务器的重要应用技术,然而,HTML表单只是一个简单的工具,它本省无法满足web应用所需的一些特性,例如复杂数据有效性验证。还有,由HTML表单提供的用户界面代码是与某种设备紧密结合的,也就是说,相同的表单无法使用在PDA或移动电话上。

W3C XForms的推荐书中提到上述这些问题。XForms是XML标签,它嵌入到XHTML这样的主机语言里,当在XFomrs浏览器中呈现时,能提供丰富和动态的应用,其中包括:

        XForms利用了xml schema的强大类型检查功能来验证用户在客户端的输入数据的有效性,而不使用任何script。XForms也可以验证更复杂的数据,例如不同表单数据间的关系。

        XForms的用户界面组件与显示设备无关,也就是它们是根据显示设备来生成的。

        XForms使用的是XML,而不是name/value的方式,这样可很好地应用在Web service上。

为了介绍XForms的一些功能特性,本文将讲述一个简单应用在Amazon web service上用来查询和显示特定图书查询结果的XForms应用的开发过程。

XForms的工作原理

为了利用XForms的功能,首先我们需要一个在简单HTML表单处理模型之上的东西--XForms引擎。XForms引擎是一个应用程序,它通常安装在客户端上,比如浏览器插件,它的典型工作原理是:

        用户通过打开一个文件系统中的文档或发出一个HTTP Get,请求一个包含XForms标示的文档;

        XForms引擎阅读标示,生成表单。由于XForms用户界面组件用抽象的方式定义,因此相同的XForms可以在适当的客户设备中用某种方式生成。因此,一个日期类型输入域在桌面浏览器中可能显示成日期控件,但在另外一个类似PDA有限制的设备上,相同的输入域可能显示成单行文本框。

        一旦表单生成后,用户就可以完成他所需要的操作。当用户填写表单时,在控件之间将会触发事件,用来检验数据输入的有效性、有条件的显示不同的组件,或者执行计算操作。(XForms的计算操作和域更新使用与spressheet相同的depth-first查询和拓扑排序)。

        当用户完成表单的填写后,他点击button来提交表单,那么XForms引擎将会生成一个XML实例文档,根据表单中定义的规则处理这次提交。XForms的提交目标通常是一个URL,可能的操作包括把XML写到一个文件上、发送一个email、提交到一个web service上,或者任何一个HTTP或HTTPS的目标。

在客户端具有XForms引擎的优点是所有的数据处理都在客户端执行,而避免server端不必要的网络堵塞。然而,在XForms的实现成为更加common前,开发者都无法认为他们的client端正确安装了XForms引擎。因此,server端的XForms引擎通常通过结合script和主机语言的普通标示,为普通client端提供相同XForms功能,也就是说,cients端不需要安装XForms引擎,但是在client端获得的标示可能无法全面支持XForms的特性。

我将使用一个client端XForms引擎Formsplayer来演示本文中的例子。

XForms基础

Xforms不能作为一个单独的xml文档使用,而必须嵌入到其他主机语言上使用。通常,这种主机语言是XHTML,单也可能无线标示语言(WML)或者可扩展矢量图形语言(SVG),以及其他语言。在这些语言中,XForms紧紧遵守MVC模型,而就是XForms的数据、界面表示和逻辑明显分离。

XForms中等同于MVC的model层的是model元素,一个XForms模型实现上是一个XML文档,在转载含有任意初始化数据的模型时,XForms模型存在两个角色。如Listing 1所示, 在一个简单的“Hello World”表单中,一个简单的model存在XHTML文档的head中。 模型通常放在head中,而强调它们并不是界面组件。任意的规范的xml文档可能放在model中,作为实例子文档,或者也可以用一个url来表示为一个外部实例文档。

XForms比HTML表单好的一个关键点是XForms能够执行数据有效性检查、约束检查以及数值计算,而不需要编写client端script。XForms可通过以下几种方式来达到如此的功能:

        instance数据element中连接一个xml scheman,对于小型的model,这些约束和有效性检验可能定义在model中,而需要指向另外一个xml schema文档。

        bind元素可以用来在用户界面控件和instance文档元素之间建立一个数据绑定,bing元素同时对instance元素指定一种数据类型,而且bind元素还可以对绑定的元素应用任意计算或约束操作(通过XPath表达式)。

XForms模型的最后一部分是submission元素,它使用uri来描述如何处理所提交的xml实例文档。在“hello world”实例中,当用户点击“Write to Disk” button时,xml实例文档简单的写到一个以命名文件中。

一旦模型定义好后,模型的全部或部分通过用户界面组件来显示。符合MVC模型,XForms用户界面组件相当于在模型的上view层,连接这两层的是XPath表达式,如Listing 1所示,或者是一个bind节点。与HTML定义了具体的用户界面组件如radio按钮和check按钮,XForms定义的是一系列抽象的组件。这些抽象的组件告诉组件应该做什么,而实际上组件的显示依赖与主机语言和它所在的显示设备。

然而,XForms引擎对XForms关心用户界面的生成,开发者仍然可以通过几种途径来设置表单的style。XForms可以利用主机语言的特性来直接设置表单的style,因此在XHTML中,XForms的控件可以嵌入到tables,heading和其他XHTML标签中,但是,由于这种方法使用了固定代码来设置style,限制了表单的独立于设备的特性。

设置style的一种替换方式是只使用最少的主机语言来设定XForms的标示。例如在XHTML中,只把XForms的model放在head段,把抽象用户界面组件放在body段,使用一个外部stylesheet,如Listsing 2所示,来为特定设备指定color,font和其他属性。

MVC模型的最后一部分控制器相当于XForms的事件和动作。XForms中的events由XML events规范定义,其对DOM level2的event语法提供基于element的接口。同时,XForms的actions作为响应XForms events的hanlder,也就是说XForms遵守著名的Gang of Four Observer模型,其中observers为特定的elements,当由events触发时,它们接到通知,接着执行相应的actions。

XForms的events和actions结合起来,能完成以下的任务:

        能为用户提供不同级别的message,从model对话框到工具栏提示等等;

        修改instance文档中的一些数值;

        动态地插入或删除table中的行数;

        可能在这个新的窗口或者在活动的表单窗口中连接到一个新的URI;

        提交xml instance文档中的全部或部分数据;

        在不同组件之间触发事件来实现表单工作流流转。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

XForms xpath使用手册

本文所描述的所有函数为XForms 1.1所提供的xpath函数,这些函数只能在GForms的xpath编辑器中可用,这样才能在运行时识别并执行。 不可在XMLUtil、标准XML DOM中使用这些...
  • ghpaas
  • ghpaas
  • 2014年06月12日 11:32
  • 421

XForms设计器----模型管理

在模型视图中进行模型管理。   模型配置 属性名称 描述 Schema 一个模型可以有多个schema文件,开发人员可以通过schema文件选择器选择多个文件,如果手动录入,则多个...
  • ghpaas
  • ghpaas
  • 2014年06月14日 15:49
  • 432

XForms标准介绍

XForms是W3C组织所推荐的下一代在线展现服务标准(早在2003年10月14日就被W3C推荐),它吸取了W3C标准诸如:XML Schema, XPath和基于XML的事件,XForms试图突破当...
  • ghpaas
  • ghpaas
  • 2014年06月12日 11:16
  • 530

xforms&ria

  • 2009年07月26日 00:18
  • 177KB
  • 下载

架构设计:负载均衡层设计方案(9)——负载均衡层总结下篇

很明显通过前面的八篇文章的介绍,并不能覆盖负载均衡层的所有技术,但是可以作为一个引子,告诉各位读者一个学习和使用负载均衡技术的思路。虽然后面我们将转向“业务层”和“业务通信”层的介绍,但是对负载均衡层...

XForms 教程

  • 2013年01月31日 12:19
  • 7.51MB
  • 下载

.NET直接编译成本地代码:.NET Native架构简介

这篇Blog好久没有更新了。最近一直在忙.NET Native相关的事情(主要是MCG),但是又因为保密的原因不能在Blog中提到。上个星期Build终于发布(可惜没有去成,team名额太少),我也终...
  • ATField
  • ATField
  • 2014年04月11日 15:48
  • 29618
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XForms架构
举报原因:
原因补充:

(最多只允许输入30个字)