跳轉到內容

XForms/Facet 驗證

來自華夏公益教科書,開放的書籍,開放的世界

XML 模式包含大量的資料元素約束資訊,而不僅僅是資料型別。對特定資料型別的這些限制被稱為“方面”。不同的資料型別具有不同型別的方面。例如,字串可能具有最小和最大長度值,而整數可能具有最小和最大數值。

此程式演示了 XForms 如何根據 XML 模式中的方面來驗證資料集。

注意: 此程式在 Firefox 0.6 擴充套件中無法執行。

X-Smiles 瀏覽器用於演示此程式。

螢幕影像

[編輯 | 編輯原始碼]

此螢幕影像取自 X-Smiles 的 XForms 實現。

使用 X-Smiles 進行方面驗證

請注意,第二個欄位的長度至少為三個字元,因此該欄位無效,並且根據無效欄位的 CSS 樣式,背景被設定為粉紅色。

XML 模式 (schema.xsd)

[編輯 | 編輯原始碼]

這是一個簡單的 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>

示例例項 (instance.xml)

[編輯 | 編輯原始碼]
<?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。這允許逐字元驗證。每次按鍵時都會重新驗證表單。

下一頁: 動態載入 JavaScript | 上一頁: 使用模式型別驗證
首頁: XForms
華夏公益教科書