2 XForms入门
本章简单描述XForms,但并未全部描述Xforms的所有功能。 For XForms完整标准的描述, 请参考后续文档。以下小节提供了嵌入XHTML文档的XForms应用程序的完整实例,实例在E.1 XForms In XHTML。
2.1 从表述中分离目的或意图
典型的表单由意图(或目的)等与数据集合组成,意图通过创建允许用户提供必需信息的交互式表述实例化, 完成表单返回结果数据。
意图
表述
数据
数据集合
表单控件的布局
注册信息
工作时间列表
收集工作时间的用户界面
工作天数、小时数
购物应用程序
购物的用户界面
订单、 运输、 支付信息
信息采集
WWW页面集成表单界面
用户联系信息
HTML表单不能从表述中分离意图,而且,只能提供由表单捕获的有限的数据,下面列举了XForms的主要优点:
更强的输入
提交的数据是通过由输入验证规则自动生成的代码验证的、有效的数据,使用输入验证规则将有助于客户端验证。
现有架构重用
使用XForms应用程序可以消除副本, 并确保业务逻辑定义内的变更导致的更新验证规则可以无需重新创建验证规则。
外部架构添加
使得XForms创作者能够在基本约束集合之外提供附加约束,并作为 XForms模型的一部分,同时将增强Web应用程序结果的全局可用性。
XML提交
将消除为争利提交数据而自定义服务器端逻辑的需求,接收到的XML实例文档能够直接被应用程序后端验证和处理。
国际化
应用XML 1.0的实例数据确保提交的数据国际化。
增强的可用性
XForms分离内容和表述,用户界面控件封装了所有相关媒体数据(如:标签),,将增强不同形式应用程序的可用性。 XForms用户界面控件是一般的、平台独立的。
多设备支持
高级用户界面控件以及基于意向的用户界面创作使得用户在不同设备间交互成为可能。
公布的事件句柄
与现在用交互脚本进行事件处理不同,通过定义适合于一般事务的基于XML的公布的事件句柄(如:setFocus, message, and setValue),多数XForms文档能被静态分析。
2.2 当前方法:HTML
假设简单的基于HTML的s电子商务表单被创建如下:
实例:HTML 表单
<html>
<head>
<title>eCommerce Form</title>
</head>
<body>
<form action="http://example.com/submit" method="post">
<table summary="Payment method selector">
<tr>
<td><p>Select Payment Method:</p></td>
<td><label><input type="radio" name="as" value="cash"/>Cash</label>
<label><input type="radio" name="as" value="credit"/>Credit</label></td>
</tr>
<tr>
<td><label for="cc">Credit Card Number:</label></td>
<td><input type="text" name="cc" id="cc"/></td>
</tr>
<tr>
<td><label for="exp">Expiration Date:</label></td>
<td><input type="text" name="exp" id="exp"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit"/></td>
</tr>
</table>
</form>
</body>
</html>
某个用户代理可能显示如下:
这个表单未能从表述(表单控件input )中分离意图(数据集合),无法控制获得的一系列名称和值对应的结果,XForms则不同, XForms极大丰富了电子表单的内涵。
2.3 转变到XForms
XForms语法表述中, 表单由描述表单行为的单元(称为:XForms模型)和描述表单如何表现的单元组成。 XForms 1.0 定义的XForms用户界面, which is a 设备独立的, 平台独立的适合普遍用途的表单控件集合,通过XForms绑定机制,XForms模型实现对用户界面的约束,这种结构允许用户将自己的用户界面添加到XForms表述中,结构形式如下:
最简单的形式允许用户创建新的XForms表单控件而无需实现表单的其他单元, 将HTML表单转换到Xforms表单,需要在文档的head 单元内定义 model元素:
<xforms:model>
<xforms:submitInfo action="http://examples.com/submit" id="submit"/>
</xforms:model>
通过这种转换,前一个例子可以写成:(这个例子假定缺省的XForms命名空间前缀):
<selectOne ref="as">
<caption>Select Payment Method</caption>
<choices>
<item>
<caption>Cash</caption>
<value>cash</value>
</item>
<item>
<caption>Credit</caption>
<value>credit</value>
</item>
</choices>
</selectOne>
<input ref="cc">
<caption>Credit Card Number</caption>
</input>
<input ref="exp">
<caption>Expiration Date</caption>
</input>
<submit submitInfo="submit">
<caption>Submit</caption>
</submit>
这个设计具有以下的特性:
单选按钮不难编码实现,因此可以以适当方式在不同设备(如:voice browser)上实现单选("selectOne")。
表单控件通常具有相关联的标题子元素(caption),这是为实现易用性而设计的关键功能。
与HTML语言中相似,form元素是不能嵌套使用的。 (关于创作多表单文档的详细信息可以参照 2.6 多表单文档 )
简化了表单控件的定义。
可以将数据以XML形式提交。
经过上述变更, XForms处理器 就能够直接提交XML实例数据(instance data),. XML实例数据的子节点名由表单控件属性ref定义,本例中表单提交的数据可能如下所示:
<instanceData>
<as>Credit</as>
<cc>1235467789012345</cc>
<exp>2001-08</exp>
</instanceData>