标题：XForms
简介
XForms是W3C组织所推荐的下一代在线Forms（早在2003年10月14日就被W3C推荐），它吸取了W3C标准诸如:XML Schema, XPath和基于XML的事件，XForms试图突破当前HTML forms模型的一些限制。 
XForms的最大特色是包含了客户端验证的功能，我们知道，在HTML中，许多关于forms验证的功能需要写大量的JavaScript脚本，由于验证的Javascript脚本库依赖于forms中的各个元素，当它们发生变化时，不得不重新更新或维护Javascript验证脚本。XForms结合了许多关于验证方面的功能，对form验证只需要使用简单的XML标记完成，其它亮点还有：XForms将数据从表现中分离，更健壮的数据类型表示，能够递交XML数据到服务端－替代我们通常使用name/value递交的做法（看起来这个还不错;)),XForms可以在不同的设备上正常显示。在学习XForms之前，推荐先阅读一下Web Forms 2.0，关于XForms的教程和文档可在W3C站点找到。
被称为“下一代Web表单”的XForms最初起源于HTML工作组的工作。W3C组织力图将XForms制定成为HTML表单的替代标准，用于包括桌面电脑、手持设备、信息家电等领域在内的各种平台之上。传统的HTML Web表单没有将表单的设计目的和表现形式分离开来，表单设计的灵活性很低，同时客户端计算能力也无法充分利用。
为了克服以上缺点，XForms对表单进行了抽象定义，将表单区分为数据，逻辑和表现三方面。规范中没有规定实现细节，因此XForms处理器的实现形式是多样的。既可以基于浏览器嵌入HTML页面中，利用HTML和JavaScript进行表现；也可以用Java Swing应用程序等形式表现。另外XForms还为应用提供了事件驱动模型，这使得用户可以像开发普通的GUI应用程序一样对鼠标、键盘等事件进行相应的编程。
XForms标准的成功之处就是将表单的作用和表现方式分离，由相互独立的部分分别负责描述。这使得XForms的表现方式更灵活。
什么是XForms？
XForms 是下一代的 HTML 表单
XForms 与 HTML 表单相比更完善，更灵活
XForms 将在 XHTML 2.0 中成为表单标准
XForms 独立于平台和设备
XForms 可从表现分离数据和逻辑
XForms 使用 XML 来定义表单数据
XForms 可存储和传输 XML 文档中的数据
XForms 含有诸如计算以及表单验证等特性
XForms 可减少或根除对脚本的需求
XForms 是 W3C 标准
XForms 框架
HTML 表单的作用是搜集数据。XForms 的作用是相同的。
通过 XForms，输入数据被描述在两个不同的部分中：
XForms 模型（描述数据和逻辑）
XForms 用户界面（显示和输入数据）
XForms 模型
XForms 模型用于描述数据。
数据模型是 XML 文档的一个实例（一个模板）。
XForms 模型定义了一个 <model> 元素内部的一个数据模型：
<model>
<instance>
<fname/>
<lname/>
</person>
</instance>
<submission id="form1" action="submit.asp" method="get"/>
</model>从上面的例子，您可以看到 XForms 模型使用 一个 <instance> 元素来为需要收集的数据定义 XML 模板，并使用一个 <submission> 元素来描述如何提交数据。
<submission> 模型没有表达任何有关表单可见部分（用户界面）的信息。
XForms的设计目标
1、 支持手持设备、电视、桌面浏览器，以及打印机和扫描仪等
2、 丰富的用户界面满足商务、消费和设备控制等各种应用
3、 消除数据、逻辑和表现之间的耦合
4、 增强的国际化功能
5、 支持结构化表单数据
6、 先进的表单逻辑
7、 单页面多表单，以及单表单多页面
8、 挂起和恢复功能的支持
9、 和XML标签集的无缝集成　
[1]
XForms 绑定
XForms 使用两个部分来定义数据：XForms 模型和 XForms 用户界面。
XForms 模型是针对数据的一个 XML 模板（实例），而 XForms 用户界面是对数据输入和显示的描述。
XForms 使用 XPath 来定义这个两个部分的连接。这被称为绑定（binding）。
XForms 数据类型
XForms 属性参考名称描述calculate定义对项目执行的计算。constraint定义对项目的约束。p3ptype为项目定义 P3P 数据类型。readonly为项目定义一个编辑限定（edit restriction）（无法修改）relevant定义数据如何相关联。（供显示还是提交）required定义数据项目是必需项目。（不能为空）type为项目定义数据类型。字符串数据类型名称描述IDA string that represents the ID attributeIDREFA string that represents the IDREF attributeIDREFSlanguageA string that contains a valid language id (e.g. en, en-US)NameA string that contains a valid XML nameNCNameNMTOKENA string that represents the NMTOKEN attributeNMTOKENSnormalizedStringA string that does not contain new line characters or tabsQNamestringA string. This is the default data type XForms will use if no data type is specified.Note: string may contain tab characters and new line characters
tokenA string that does not contain line feeds, carriage returns, tabs, leading or trailing spaces, or multiple spaces所有的字符串数据类型都源自于 string 数据类型本身。
日期和时间数据类型名称描述dateDefines a date valuedateTimeDefines a date and time valuegDayDefines a part of a date - the day (DD)gMonthDefines a part of a date - the month (MM)gMonthDayDefines a part of a date - the month and day (MM-DD)gYearDefines a part of a date - the year (CCYY)gYearMonthDefines a part of a date - the year and month (CCYY-MM)timeDefines a time value
数值数据类型名称描述byteA signed 8-bit integerdecimalA decimal valueintA signed 32-bit integerintegerAn integer valuelongA signed 64-bit integernegativeIntegerAn integer containing only negative values (..,-2,-1)nonNegativeIntegerAn integer containing only non-negative values (0,1,2,..)nonPositiveIntegerAn integer containing only non-positive values (..,-2,-1,0)positiveIntegerAn integer containing only positive values (1,2, ..)shortA signed 16-bit integerunsignedLongAn unsigned 64-bit integerunsignedIntAn unsigned 32-bit integerunsignedShortAn unsigned 16-bit integerunsignedByteAn unsigned 8-bit integerAll numeric data types are derived from the decimal data type.
杂项数据类型名称描述anyURIRepresents a URI, which includes web page addressesbase64BinaryAllows characters, including control characters, that otherwise aren't representable in XMLbooleanDefines a true/false or 1/0 valuedoublefloathexBinary
XForms 数据类型名称描述listItemsRepresents a whitespace-separated listlistItemRepresents only non-whitespace characters. An excellent base type for a whitespace-separated listdayTimeDurationRepresents a duration of a certain number of secondsyearMonthDurationRepresents a duration of a certain number of months