XSD 約束/限制
約束用於定義 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(列舉)約束。
下面的示例定義了一個名為“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(模式)約束。
下面的示例定義了一個名為“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”的元素,並帶有約束。可接受的值是零個或多個字母對,每對由一個 lowercase 字母后跟一個 uppercase 字母組成。例如,“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”的元素,並帶有約束。必須有正好八個連續字元,這些字元必須是 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(空格)約束。
此示例定義了一個名為“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”的元素,並帶有約束。該值必須正好是八個字元。
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
此示例定義了另一個名為“password”的元素,並帶有約束。該值必須至少有五個字元,最多八個字元。
<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(小數位數) | 指定允許的小數位數。必須大於或等於零 |
length | 指定允許的字元或列表項的確切數量。必須大於或等於零 |
maxExclusive(最大值不包含) | 指定數值的上限(值必須小於此值) |
maxInclusive(最大值包含) | 指定數值的上限(值必須小於或等於此值) |
maxLength | 指定允許的字元或列表項的最大數量。必須大於或等於零 |
minExclusive(最小值不包含) | 指定數值的下限(值必須大於此值) |
minInclusive(最小值包含) | 指定數值的下限(值必須大於或等於此值) |
minLength(最小長度) | 指定允許的字元或列表項的最小數量。必須大於或等於零 |
pattern | 定義可接受的字元的確切序列 |
totalDigits(總位數) | 指定允許的數字的確切數量。必須大於零 |
whiteSpace | 指定如何處理空格(換行符、製表符、空格和回車符) |