XML - 数据交换管理/XForms
上一章 | 下一章 |
← XML 和 JDBC | XMLWebAudio → |
表单是当今许多 Web 应用程序的重要组成部分。HTML 表单使 Web 应用程序能够接收用户的输入。Web 用户现在进行的复杂交易开始超出标准 HTML 表单的限制。XForms 是下一代 HTML 表单,它比 HTML 表单更丰富、更灵活。
XForms 使用 XML 进行数据定义,使用 HTML 或 XHTML 进行数据显示。XForms 将表单的数据逻辑与其呈现方式分离。将数据与呈现方式分离使 XForms 成为设备无关的,因为数据模型可以用于所有设备。呈现方式可以针对不同的用户界面进行定制,例如手机和平板设备,并可以在这些设备之间提供交互性。还可以将 XForms 元素直接添加到其他 XML 应用程序中,例如 VoiceXML(语音 Web 数据)、WML(无线标记语言)和 SVG(可缩放矢量图形)。
XForms 将目的与呈现方式分离。例如,问卷应用程序的目的是收集有关用户的的信息。这是通过创建一个允许用户提供所需信息的呈现方式来完成的。Web 应用程序通常将此类呈现方式呈现为交互式文档,该文档在用户交互过程中不断更新。通过将目的与其呈现方式分离,XForms 能够将不同的交互绑定到一个模型。
XForms 模型定义了表单是什么,它包含哪些数据,以及它应该做什么。XForms 用户界面定义了输入字段以及如何显示它们。XForms 提交协议定义了 XForms 如何发送和接收数据,包括暂停和恢复表单完成的能力。XForms 是“实例数据”,这是映射到熟悉的“表单控件”的数据的内部表示。实例数据基于 XML,并根据 XPath 的内部树表示和 XML 的处理过程进行定义。
在 XForms 中,输入数据在两个不同的部分中描述
- XForm 模型
- XForm 用户界面
XForm 模型定义了表单是什么,它包含哪些数据,以及它应该做什么。
数据模型是 XML 文档的实例(模板)。XForms 模型在 <model> 元素内定义数据模型
<model> <instance> <person> <fname/> <lname/> </person> </instance> <submission id="form1" action="submit.asp" method="get"/> </model>
从上面的示例中,您可以看到 XForms 模型使用 <instance> 元素定义要收集的数据的 XML 模板,并使用 <submission> 元素描述如何提交数据。
XForms 模型没有说明表单的视觉部分(用户界面)。
XForms 收集的数据表示为 XML 实例数据。XForms 始终为 XML 文档收集数据。XForms 模型中的 <instance> 元素定义了 XML 文档。
在上面的示例中,表单正在收集数据的“数据实例”(XML 文档)如下所示
<person> <fname/> <lname/> </person>
在收集数据后,XML 文档可能如下所示
<person> <fname>Jim</fname> <lname>Jones</lname> </person>
XForms 模型使用 <submission> 元素描述如何提交数据。<submission> 元素定义表单以及如何提交它。在上面的示例中,id="form1" 属性标识了表单,action="submit.asp" 属性定义了表单应提交到的 URL,而 method="get" 属性定义了提交数据时要使用的方法。
下图显示了 XForm 模型如何能够与各种用户界面一起使用。
XForms 用户界面用于显示和输入数据。XForms 的用户界面元素称为控件(或输入控件)
<input ref="fname"><label>First Name</label></input> <input ref="lname"><label>Last Name</label></input> <submit submission="form1"><label>Submit</label></submit>
在上面的示例中,两个 <input> 元素定义了两个输入字段。ref="fname" 和 ref="lname" 属性指向 XForms 模型中的 <fname> 和 <lname> 元素。<submit> 元素具有 submission="form1" 属性,它引用 XForms 模型中的 <submission> 元素。提交元素通常显示为按钮。请注意示例中的 <label> 元素。在 XForms 中,每个输入控件元素都具有一个必需的 <label> 元素。
XForms 必须在另一个 XML 文档中运行。它可以在 XHTML 1.0 中运行,它将在 XHTML 2.0 中运行。如果我们把所有这些内容放在一起,文档将如下所示
<xforms> <model> <instance> <person> <fname/> <lname/> </person> </instance> <submission id="form1" action="submit.asp" method="get"/> </model> <input ref="fname"><label>First Name</label></input> <input ref="lname"><label>Last Name</label></input> <submit submission="form1"><label>Submit</label></submit> </xforms>
内置于浏览器中的 XForms 处理器将负责将 XForms 数据提交到目标。数据可以以 XML 形式提交,可能如下所示
<person> <fname>Jim</fname> <lname>Jones</lname> </person>
或者它可以以文本形式提交,如下所示
fname=Jim;lname=Jones
XForms 的官方命名空间为:http://www.w3.org/2002/xforms。如果您想在 HTML(或 XHTML 1.0)中使用 XForms,则应使用 XForms 命名空间声明所有 XForms 元素。XForms 预计将成为 XHTML 2.0 的标准部分,从而不再需要 XForms 命名空间。
使用 XForms 查看此文档
<xforms> <model> <instance> <person> <fname/> <lname/> </person> </instance> <submission id="form1" method="get" action="submit.asp"/> </model> <input ref="fname"> <label>First Name</label></input>
<input ref="lname"> <label>Last Name</label></input>
<submit submission="form1"> <label>Submit</label></submit> </xforms>
处理数据输入和显示的表单组件称为表单控件或用户界面控件。XForms 定义了一套全面的设备中立、平台独立的表单控件。对于模型中定义的每个数据元素,表单控件通过客户端定义其外观。这些控件可以与样式表结合使用,以提供复杂的表单显示。
XForms 表单控件 | 最接近的 XHTML 等效项 | 描述 |
<input> | <input type="text"> | 用于输入少量文本 |
<textarea> | <textarea> | 用于输入大量文本 |
<secret> | <textarea> | 用于输入大量文本 |
<secret> | <input type="password"> | 用于输入敏感信息 |
<output> | N/A | 用于内联显示任何实例数据 |
<range> | N/A | 用于平滑“音量控制”选择值 |
<upload> | <input type="file"> | 用于上传文件或设备数据 |
<trigger> | <button> | 用于激活表单事件 |
<submit> | <input type="submit"> | 用于提交表单数据 |
<select> | <select multiple="multiple"> 或多个 <input type="checkbox"> | 用于选择零个、一个或多个选项 |
<select1> | <select> 或多个 <input type="radio"> | 用于从多个选项中选择一个选项 |
在表单处理过程中,通常需要执行某些特定操作。
XForms 操作 | 描述 |
setfocus | 将焦点设置到特定的表单控件。 |
setvalue | 设置特定节点的值。 |
message | 向用户显示消息。 |
send | 提交全部或部分实例数据。 |
reset | 重置全部或部分实例数据。 |
load | 在同一窗口或新窗口中打开文档。 |
refresh | 刷新实例数据的视图。 |
recalculate | 重新计算实例数据。 |
revalidate | 重新验证实例数据。 |
setindex | 在重复序列中导航。 |
insert | 从重复序列中插入节点。 |
delete | 从重复序列中删除节点。 |
toggle | 选择开关的用例 |
dispatch | 分派事件。 |
XForms 规范使用并构建在 XPath 之上,包括添加一些对表单有用的方法调用:这些方法可以在允许使用 XPath 的任何位置调用。此外,实现可以支持“扩展函数”以提供附加功能。
方法 | 描述 |
avg() | 返回指定节点的算术平均值 |
min() 和 max() | 返回指定节点的最小值或最大值 |
count-non-empty() | 返回非空节点的数量 |
if() | 根据布尔值返回两个字符串中的一个 |
index() | 指示重复序列中的当前位置 |
days-from-date() | 将 XML Schema 数据类型转换为天数 |
seconds-from-dateTime() | 将 XML Schema 数据类型转换为秒数 |
seconds() | 将 XML Schema 持续时间转换为秒数 |
months() | 将 XML Schema 持续时间转换为月数 |
now() | 返回当前日期/时间 |
- XForms 教程和食谱维基教科书 这本维基教科书包含 75 个以上的 XForms 示例,并链接到工作 XForms 应用程序。