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。這允許逐字元驗證。每次按鍵時都會重新驗證表單。