技巧: 应用 XML Schema Standard Type Library 简化开发
应用模式定义简化例程验证
XML 验证让您能够创立复杂规矩以定义可接收的数据。但是假如您不应用这些规矩,那么它们就毫无用处。在本文中,您将学习应用 XML Schema Standard Type Library 简化获取格局化数据(如电子邮件地址和电话号码)的过程。
本文假定您熟悉 XML 并至少对 XML Schema 有必定程度的懂得。文中的示例将应用 XForms,但不强迫请求懂得 XForms。(假如您想要运行示例,可下载针对 Firefox 的 XForms 扩大。 )
验证 XML 或确保满足基于类型的某些限制是语言自身所固有的才能;Document Type Definitions 是 XML 规范的一部分。不久之后,对更高机动性和更强功效的需求逐渐明显,从而产生了 XML Schema。XML Schema 使您能够创立具有很多特别指定的定义。您可以指定元素必需包含特定数目标附加元素,或属性必需包含 datetime 值,文本符合某种模式,或任何其他结构。
例如,考虑以下 XForms 表单(参见清单 1)。
清单 1. 基础表单
xmlns:xforms='http://www.w3.org/2002/xforms'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
此表单很简略,只是查找用户的姓名、电子邮件地址和电话号码,如图 1 所示。
图 1. 表单
在本例中,将电子邮件或电话号码的条目束缚为有效的电子邮件或电话号码 — 或者至少将其束缚为准确的情势,都会有所帮助。为此,您需要向文档添加模式(见清单 2)。
清单 2. 添加模式
...
...
然后您可以添加事件,用以在条目无效时告诉用户(见 源代码 中的应用方法)。
留心,此时电子邮件和电话号码定义没有附带类型。原因是大多数程序员都不愿意卷进检查类型的麻烦。电子邮件地址有多种格局,但是有一种尺度格局。同样,电话号码的情势也花样繁多,如 “带区号”、“不带区号”、“带分机号” 等等,并且这还不包含国家区号。
谁愿意往做所有的这些工作?反正我不愿意。所幸的是,存在电话号码或电子邮件地址的常见类型库。您可以从 http://www.codesynthesis.com/projects/xsstl/ 下载 XML schema standard type library。导进准确的名称空间和文档即可将该库添加到模式中(见清单 3)。
清单 3. 导进模式定义
xmlns:ev='http://www.w3.org/2001/xml-events'
xmlns:xforms='http://www.w3.org/2002/xforms'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:stl='http://www.codesynthesis.com/xmlns/xsstl'>
schemaLocation='xsstl.xsd'/>