XForms/Facet 验证
外观
< XForms
XML 模式包含大量的数据元素约束信息,而不仅仅是数据类型。对特定数据类型的这些限制被称为“方面”。不同的数据类型具有不同类型的方面。例如,字符串可能具有最小和最大长度值,而整数可能具有最小和最大数值。
此程序演示了 XForms 如何根据 XML 模式中的方面来验证数据集。
注意: 此程序在 Firefox 0.6 扩展中无法运行。
X-Smiles 浏览器用于演示此程序。
此屏幕图像取自 X-Smiles 的 XForms 实现。
请注意,第二个字段的长度至少为三个字符,因此该字段无效,并且根据无效字段的 CSS 样式,背景被设置为粉红色。
这是一个简单的 XML 模式,包含四个字符串。第一个字符串只允许两个字符长。第二个字符串的最小长度必须为三个字符。第三个字符串的长度不能超过五个字符,而第四个字符串的长度必须在五个到七个字符之间才能有效。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Data">
<xs:annotation>
<xs:documentation>A demonstration of XML Schema string facets.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="string-length-2">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="string-min-3">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="string-max-5">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="string-5-7">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<Data
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema.xsd">
<string-length-2>MN</string-length-2>
<string-min-3>abcd</string-min-3>
<string-max-5>abcd</string-max-5>
<string-5-7>abcdef</string-5-7>
</Data>
以下程序从两个外部文件(schema.xsd 和 instance.xml)加载 XML 模式和初始实例数据。此示例中的初始数据有效,但您可以更改数据以测试验证。
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<title>Facet validation using X-Smiles.</title>
<style type="text/css">
@namespace xf url("http://www.w3.org/2002/xforms");
xf|input {
/* display: table-row; */
line-height: 2em;
}
xf|label {
/* display: table-cell; */
text-align: right;
font-family: Ariel, Helvetica, sans-serif;
font-weight: bold;
font-size: medium;
padding-right: 5px;
width: 130px;
}
*:required {
background-color: yellow;
}
*:invalid {
background-color: pink;
}
</style>
<xf:model id="test" schema="schema.xsd">
<xf:instance src="instance.xml" />
</xf:model>
</head>
<body>
<xf:group model="test" nodeset="/Data">
<p>
<xf:input ref="string-length-2" incremental="true">
<xf:label>Length exactly 2:</xf:label>
</xf:input>
</p>
<p>
<xf:input ref="string-min-3" incremental="true">
<xf:label>Length 3 or more:</xf:label>
</xf:input>
</p>
<p>
<xf:input ref="string-max-5" incremental="true">
<xf:label>Length 5 or less:</xf:label>
</xf:input>
</p>
<p>
<xf:input ref="string-5-7" incremental="true">
<xf:label>Length 5 to 7:</xf:label>
</xf:input>
</p>
</xf:group>
</body>
</html>
加载 XML 模式和实例数据的两行代码是
<xf:model id="test" schema="schema.xsd">
<xf:instance src="instance.xml" />
</xf:model>
另请注意,输入字段的 incremental 属性设置为 true。这允许逐字符验证。每次按键时都会重新验证表单。