XForms/從 XML 模式載入
許多時候,您的資料的型別是在外部 XML 模式檔案中定義的。要使用此資訊,而不是必須顯式地將例項繫結到資料型別,您可以只加載 XML 模式檔案來初始化模型中的例項資料。資料型別將從 XML 模式檔案中推斷出來。
為此,您必須在模型中新增一個schema 屬性,其中引數的值是 XML 模式原始檔。請注意,引數是schema 而不是src。src 用於讀取例項資料。
<xf:model id="test" schema="data-types.xsd">
<xf:instance src="instance-data.xml"/>
</xf:model>
這是一個示例程式的螢幕影像。請注意,日期和布林資料型別的輸入表單是從 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>Loading data from an XML Schema file</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: small;
padding-right: 5px;
width: 150px;
}
*:required {
background-color: yellow;
}
*:invalid {
background-color: pink;
}
</style>
<xf:model id="test" schema="data-types.xsd">
<xf:instance src="instance-data.xml"/>
</xf:model>
</head>
<body>
<xf:group model="test" nodeset="/Data">
<xf:input ref="date">
<xf:label>Date:</xf:label>
</xf:input>
<xf:input ref="string-required">
<xf:label>Required String:</xf:label>
</xf:input>
<xf:input model="test" ref="string-optional">
<xf:label>Optional String:</xf:label>
</xf:input>
<xf:repeat nodeset="string-unbounded">
<xf:input ref=".">
<xf:label>Unbounded String:</xf:label>
</xf:input>
</xf:repeat>
<xf:input ref="integer">
<xf:label>Integer:</xf:label>
</xf:input>
<xf:input ref="positive-integer">
<xf:label>Positive Integer:</xf:label>
</xf:input>
<xf:input ref="short">
<xf:label>Short:</xf:label>
</xf:input>
<xf:input ref="byte">
<xf:label>Byte:</xf:label>
</xf:input>
<xf:input ref="unsignedByte">
<xf:label>Unsigned Byte:</xf:label>
</xf:input>
<xf:input ref="boolean">
<xf:label>Boolean:</xf:label>
</xf:input>
</xf:group>
</body>
</html>
<?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 listing of 10 XML Schema data types</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="date" type="xs:date"/>
<xs:element name="string-required" type="xs:string"/>
<xs:element name="string-optional" type="xs:string" minOccurs="0"/>
<xs:element name="string-unbounded" type="xs:string" maxOccurs="unbounded"/>
<xs:element name="integer" type="xs:integer"/>
<xs:element name="positive-integer" type="xs:positiveInteger"/>
<xs:element name="short" type="xs:short"/>
<xs:element name="byte" type="xs:byte"/>
<xs:element name="unsignedByte" type="xs:unsignedByte"/>
<xs:element name="boolean" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML instance file-->
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="data-types.xsd">
<date>2006-09-21</date>
<string-required>The quick brown fox jumped over the lazy dog.</string-required>
<string-optional>This string is optional.</string-optional>
<string-unbounded>One of many.</string-unbounded>
<string-unbounded>Two of many.</string-unbounded>
<string-unbounded>Three of many.</string-unbounded>
<integer>-123</integer>
<positive-integer>2</positive-integer>
<short>4096</short>
<byte>127</byte>
<unsignedByte>255</unsignedByte>
<boolean>true</boolean>
</Data>
測試資料型別是否從 XML 模式檔案正確載入的一種方法是嘗試輸入特定資料型別的無效值。XForms 應該自動檢查輸入欄位是否滿足 XML 模式檔案中指定的資料要求。
例如,在正整數字段中,您可以嘗試輸入“-1”。完成此操作並輸入“Tab”後,表單的背景應該以粉紅色顯示為警告。這就是螢幕應有的樣子
您顯示無效控制元件的方式由 CSS 檔案中的以下行控制
*:invalid {
background-color: red;
}
這被稱為偽元素。雖然沒有名為“invalid”的資料元素,但 XForms 只將此屬性新增到每個輸入控制元件,然後樣式表會根據您在樣式表中提供的屬性新增任何屬性。
此程式還使用 CSS 來顯示資料元素。
請注意,如果不存在示例例項資料,則繫結不起作用。
除了本節之外,它可能在其他 Xform 平臺中不受支援。在 XSLTForms 中測試,它不起作用,最新版本截至 2010 年 6 月 9 日。使用 FormFaces,它起作用了,但無法正確渲染 css。
還存在跨瀏覽器相容性問題。
http://betterform.wordpress.com/using-schema-datatypes/ betterForm 內聯模式型別