# XSD 限定 / Facets
限定(restriction)用于為 XML 元素或者屬性定義可接受的值。對 XML 元素的限定被稱為 facet。
## 對值的限定
下面的例子定義了帶有一個限定且名為 "age" 的元素。age 的值不能低于 0 或者高于 120:
```
<xs:element name="age">
? <xs:simpleType>
??? <xs:restriction base="xs:integer">
????? <xs:minInclusive value="0"/>
????? <xs:maxInclusive value="120"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
## 對一組值的限定
如需把 XML 元素的內容限制為一組可接受的值,我們要使用枚舉約束(enumeration constraint)。
下面的例子定義了帶有一個限定的名為 "car" 的元素。可接受的值只有:Audi, Golf, BMW:
```
<xs:element name="car">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:enumeration value="Audi"/>
????? <xs:enumeration value="Golf"/>
????? <xs:enumeration value="BMW"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
上面的例子也可以被寫為:
```
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
? <xs:restriction base="xs:string">
??? <xs:enumeration value="Audi"/>
??? <xs:enumeration value="Golf"/>
??? <xs:enumeration value="BMW"/>
? </xs:restriction>
</xs:simpleType>
```
**注意:** 在這種情況下,類型 "carType" 可被其他元素使用,因為它不是 "car" 元素的組成部分。
## 對一系列值的限定
如需把 XML 元素的內容限制定義為一系列可使用的數字或字母,我們要使用模式約束(pattern constraint)。
下面的例子定義了帶有一個限定的名為 "letter" 的元素。可接受的值只有小寫字母 a - z 其中的一個:
```
<xs:element name="letter">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="[a-z]"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下一個例子定義了帶有一個限定的名為 "initials" 的元素。可接受的值是大寫字母 A - Z 其中的三個:
```
<xs:element name="initials">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="[A-Z][A-Z][A-Z]"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下一個例子也定義了帶有一個限定的名為 "initials" 的元素。可接受的值是大寫或小寫字母 a - z 其中的三個:
```
<xs:element name="initials">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下一個例子定義了帶有一個限定的名為 "choice 的元素。可接受的值是字母 x, y 或 z 中的一個:
```
<xs:element name="choice">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="[xyz]"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下一個例子定義了帶有一個限定的名為 "prodid" 的元素。可接受的值是五個阿拉伯數字的一個序列,且每個數字的范圍是 0-9:
```
<xs:element name="prodid">
? <xs:simpleType>
??? <xs:restriction base="xs:integer">
????? <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
## 對一系列值的其他限定
下面的例子定義了帶有一個限定的名為 "letter" 的元素。可接受的值是 a - z 中零個或多個字母:
```
<xs:element name="letter">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="([a-z])*"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下面的例子定義了帶有一個限定的名為 "letter" 的元素。可接受的值是一對或多對字母,每對字母由一個小寫字母后跟一個大寫字母組成。舉個例子,"sToP"將會通過這種模式的驗證,但是 "Stop"、"STOP" 或者 "stop" 無法通過驗證:
```
<xs:element name="letter">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="([a-z][A-Z])+"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下面的例子定義了帶有一個限定的名為 "gender" 的元素。可接受的值是 male 或者 female:
```
<xs:element name="gender">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="male|female"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
下面的例子定義了帶有一個限定的名為 "password" 的元素。可接受的值是由 8 個字符組成的一行字符,這些字符必須是大寫或小寫字母 a - z 亦或數字 0 - 9:
```
<xs:element name="password">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:pattern value="[a-zA-Z0-9]{8}"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
## 對空白字符的限定
如需規定對空白字符(whitespace characters)的處理方式,我們需要使用 whiteSpace 限定。
下面的例子定義了帶有一個限定的名為 "address" 的元素。這個 whiteSpace 限定被設置為 "preserve",這意味著 XML 處理器不會移除任何空白字符:
```
<xs:element name="address">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:whiteSpace value="preserve"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
這個例子也定義了帶有一個限定的名為 "address" 的元素。這個 whiteSpace 限定被設置為 "replace",這意味著 XML 處理器將移除所有空白字符(換行、回車、空格以及制表符):
```
<xs:element name="address">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:whiteSpace value="replace"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
這個例子也定義了帶有一個限定的名為 "address" 的元素。這個 whiteSpace 限定被設置為 "collapse",這意味著 XML 處理器將移除所有空白字符(換行、回車、空格以及制表符會被替換為空格,開頭和結尾的空格會被移除,而多個連續的空格會被縮減為一個單一的空格):
```
<xs:element name="address">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:whiteSpace value="collapse"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
## 對長度的限定
如需限制元素中值的長度,我們需要使用 length、maxLength 以及 minLength 限定。
本例定義了帶有一個限定且名為 "password" 的元素。其值必須精確到 8 個字符:
```
<xs:element name="password">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:length value="8"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
這個例子也定義了帶有一個限定的名為 "password" 的元素。其值最小為 5 個字符,最大為 8 個字符:
```
<xs:element name="password">
? <xs:simpleType>
??? <xs:restriction base="xs:string">
????? <xs:minLength value="5"/>
????? <xs:maxLength value="8"/>
??? </xs:restriction>
? </xs:simpleType>
</xs:element>
```
## 數據類型的限定
| 限定 | 描述 |
| --- | --- |
| enumeration | 定義可接受值的一個列表 |
| fractionDigits | 定義所允許的最大的小數位數。必須大于等于0。 |
| length | 定義所允許的字符或者列表項目的精確數目。必須大于或等于0。 |
| maxExclusive | 定義數值的上限。所允許的值必須小于此值。 |
| maxInclusive | 定義數值的上限。所允許的值必須小于或等于此值。 |
| maxLength | 定義所允許的字符或者列表項目的最大數目。必須大于或等于0。 |
| minExclusive | 定義數值的下限。所允許的值必需大于此值。 |
| minInclusive | 定義數值的下限。所允許的值必需大于或等于此值。 |
| minLength | 定義所允許的字符或者列表項目的最小數目。必須大于或等于0。 |
| pattern | 定義可接受的字符的精確序列。 |
| totalDigits | 定義所允許的阿拉伯數字的精確位數。必須大于0。 |
| whiteSpace | 定義空白字符(換行、回車、空格以及制表符)的處理方式。 |
- XML 基礎
- XML 簡介
- XML 用途
- XML 樹結構
- XML 語法規則
- XML 元素
- XML 屬性
- XML 驗證
- 查看 XML 文件
- 使用 CSS 顯示 XML
- 使用 XSLT 顯示 XML
- XML Javascript
- XMLHttpRequest 對象
- XML Parser
- XML DOM
- XML to HTML
- XML 應用程序
- XML 進階
- XML 命名空間
- XML CDATA
- XML 編碼
- 服務器上的 XML
- XML DOM 高級
- XML 注意事項
- XML 相關技術
- 現實生活中的 XML
- XML 編輯器
- XML - E4X
- DTD 教程
- DTD 簡介
- DTD - XML 構建模塊
- DTD - 元素
- DTD - 屬性
- XML 元素 vs. 屬性
- DTD - 實體
- DTD 驗證
- DTD - 來自網絡的實例
- XML DOM
- XML DOM 簡介
- XML DOM 節點
- XML DOM 節點樹
- XML DOM 解析器
- XML DOM 加載函數
- XML DOM - 屬性和方法
- XML DOM - 訪問節點
- XML DOM 節點信息
- XML DOM 節點列表
- XML DOM 遍歷節點樹
- XML DOM 瀏覽器差異
- XML DOM - 導航節點
- XML DOM 獲取節點值
- XML DOM 改變節點值
- XML DOM 刪除節點
- XML DOM 替換節點
- XML DOM 創建節點
- XML DOM 添加節點
- XML DOM 克隆節點
- The XMLHttpRequest 對象
- XML DOM 節點類型
- XML DOM - Node 對象
- XML DOM - NodeList 對象
- XML DOM - NamedNodeMap 對象
- XML DOM - Document 對象
- XML DOM - DocumentImplementation 對象
- XML DOM - DocumentType 對象
- XML DOM - ProcessingInstruction 對象
- XML DOM - Element 對象
- XML DOM - Attr 對象
- XML DOM - Text 對象
- XML DOM - CDATASection 對象
- XML DOM - Comment 對象
- XMLHttpRequest 對象
- XML DOM Parse Error 對象
- XML DOM 解析器錯誤
- XSLT 教程
- XSL 語言
- XSLT 簡介
- XSLT 瀏覽器
- XSLT - 轉換
- XSLT <xsl:template> 元素
- XSLT <xsl:value-of> 元素
- XSLT <xsl:for-each> 元素
- XSLT <xsl:sort> 元素
- XSLT <xsl:if> 元素
- XSLT <xsl:choose> 元素
- XSLT <xsl:apply-templates> 元素
- XSLT - 在客戶端
- XSLT - 在服務器端
- XSLT - 編輯 XML
- XML 編輯器
- XSLT 元素參考手冊
- XSLT 函數
- XPath 教程
- XPath 簡介
- XPath 節點
- XPath 語法
- XPath 軸(Axes)
- XPath 運算符
- XPath Examples
- XPath、XQuery 以及 XSLT 函數函數參考手冊
- 函數參考手冊
- XQuery 教程
- XQuery 簡介
- XQuery 實例
- XQuery FLWOR 表達式
- XQuery FLWOR + HTML
- XQuery 術語
- XQuery 語法
- XQuery 添加元素 和屬性
- XQuery 選擇 和 過濾
- XQuery 函數
- XQuery 參考手冊
- XLink 和 XPointer 教程
- XLink 和 XPointer 簡介
- XLink 和 XPointer 語法
- XLink 實例
- XPointer 實例
- XLink 參考手冊
- XML Schema 教程
- XML Schema 簡介
- 為什么使用 XML Schemas?
- XSD 如何使用?
- XSD - <schema> 元素
- XSD 簡易元素
- XSD 屬性
- XSD 限定 / Facets
- XSD 復合元素
- XSD 空元素
- XSD 僅含元素
- XSD 僅含文本
- XSD 混合內容
- XSD 指示器
- XSD <any> 元素
- XSD <anyAttribute> 元素
- XSD 元素替換(Element Substitution)
- XSD 實例
- XSD 字符串 數據類型
- XSD 日期和時間數據類型
- XSD 數值數據類型
- XSD 雜項 數據類型
- XML 編輯器
- XML Schema 參考手冊
- XSD 元素
- XSD 限定/Facets
- SOAP 教程
- SOAP 簡介
- SOAP 語法
- SOAP Envelope 元素
- SOAP Header 元素
- SOAP Body 元素
- SOAP Fault 元素
- SOAP HTTP 協議
- SOAP 實例
- WSDL 教程
- WSDL 簡介
- WSDL 文檔
- WSDL 端口
- WSDL 綁定
- WSDL UDDI
- RSS 教程
- RSS 簡介
- RSS 歷史
- RSS 語法
- RSS <channel> 元素
- RSS <item> 元素
- RSS 發布您的 Feed
- RSS 閱讀器
- RSS 參考手冊
- RDF 教程
- RDF 簡介
- RDF 規則
- RDF 實例
- RDF 主要 元素
- RDF 容器 Elements
- RDF 集合
- RDF Schema (RDFS)
- RDF 都柏林核心元數據倡議
- OWL 簡介
- RDF 參考手冊
- XSL-FO 教程
- XSL-FO 簡介
- XSL-FO 文檔
- XSL-FO 區域
- XSL-FO 輸出
- XSL-FO 流
- XSL-FO 頁面
- XSL-FO 塊
- XSL-FO 列表
- XSL-FO 表格
- XSL-FO 與 XSLT
- XSL-FO 軟件
- XSL-FO 參考手冊
- SVG 教程
- SVG 簡介
- SVG 實例
- SVG 在 HTML 頁面
- SVG <rect>
- SVG <circle>
- SVG <ellipse>
- SVG <line>
- SVG <polygon>
- SVG <polyline>
- SVG <path>
- SVG <text>
- SVG Stroke 屬性
- SVG 濾鏡
- SVG 模糊效果
- SVG 陰影
- SVG 漸變 - 線性
- SVG 漸變- 放射性
- SVG 參考手冊
- 免責聲明