Các hạn chế/khía cạnh XSD
Các hạn chế được sử dụng để xác định các giá trị được chấp nhận cho các phần tử hoặc thuộc tính XML. Những hạn chế đối với các phần tử XML được gọi là các khía cạnh.
Hạn chế về giá trị
Ví dụ sau định nghĩa một phần tử có tên "age" kèm theo một hạn chế. Giá trị của tuổi không được nhỏ hơn 0 hoặc lớn hơn 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>
Hạn chế đối với một tập hợp các giá trị
Để giới hạn nội dung của một phần tử XML ở một tập hợp các giá trị có thể chấp nhận được, chúng ta sẽ sử dụng ràng buộc liệt kê.
Ví dụ bên dưới định nghĩa một phần tử có tên "ô tô" có hạn chế. Các giá trị duy nhất được chấp nhận là: 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>
Ví dụ trên cũng có thể được viết như thế này:
<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>
Lưu ý: Trong trường hợp này, loại "carType" có thể được sử dụng bởi các phần tử khác vì nó không phải là một phần của phần tử "car".
Hạn chế đối với một chuỗi giá trị
Để giới hạn nội dung của một phần tử XML nhằm xác định một chuỗi số hoặc chữ cái có thể được sử dụng, chúng ta sẽ sử dụng ràng buộc mẫu.
Ví dụ dưới đây định nghĩa một phần tử có tên là "letter" có một hạn chế. Giá trị duy nhất được chấp nhận là MỘT trong các chữ cái CHỮ HOA từ a đến z:
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ tiếp theo định nghĩa một phần tử được gọi là "tên viết tắt" có hạn chế. Giá trị duy nhất được chấp nhận là BA trong số các chữ cái CHỮ HOA từ a đến 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>
Ví dụ tiếp theo cũng định nghĩa một phần tử được gọi là "tên viết tắt" có một hạn chế. Giá trị duy nhất được chấp nhận là BA trong số các chữ cái CHỮ HOA HOẶC CHỮ HOA từ a đến 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>
Ví dụ tiếp theo định nghĩa một phần tử được gọi là "sự lựa chọn" có một hạn chế. Giá trị duy nhất được chấp nhận là MỘT trong các chữ cái sau: x, y, OR z:
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ tiếp theo định nghĩa một phần tử có tên "prodid" kèm theo một hạn chế. Giá trị duy nhất được chấp nhận là NĂM chữ số trong một chuỗi và mỗi chữ số phải nằm trong phạm vi từ 0 đến 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>
Các hạn chế khác đối với chuỗi giá trị
Ví dụ dưới đây định nghĩa một phần tử có tên là "letter" có một hạn chế. Giá trị được chấp nhận là không hoặc có nhiều lần xuất hiện các chữ cái viết thường từ a đến z:
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ tiếp theo cũng định nghĩa một phần tử có tên là "letter" có một hạn chế. Giá trị được chấp nhận là một hoặc nhiều cặp chữ cái, mỗi cặp bao gồm một chữ cái viết thường, theo sau là một chữ cái viết hoa. Ví dụ: "sToP" sẽ được xác thực theo mẫu này chứ không phải "Dừng" hoặc "DỪNG" hoặc "dừng":
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ tiếp theo định nghĩa một phần tử được gọi là "giới tính" có hạn chế. Giá trị duy nhất được chấp nhận là nam HOẶC nữ:
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ tiếp theo định nghĩa một phần tử có tên là "password" có một hạn chế. Phải có chính xác tám ký tự trong một hàng và các ký tự đó phải là chữ thường hoặc chữ in hoa từ a đến z hoặc một số từ 0 đến 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>
Hạn chế về ký tự khoảng trắng
Để chỉ định cách xử lý các ký tự khoảng trắng, chúng ta sẽ sử dụng ràng buộc khoảng trắng.
Ví dụ này định nghĩa một phần tử được gọi là "địa chỉ" có hạn chế. Ràng buộc khoảng trắng được đặt thành "bảo toàn", có nghĩa là bộ xử lý XML SẼ KHÔNG xóa bất kỳ ký tự khoảng trắng nào:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ này cũng định nghĩa một phần tử được gọi là "địa chỉ" có hạn chế. Ràng buộc khoảng trắng được đặt thành "thay thế", có nghĩa là bộ xử lý XML SẼ THAY THẾ tất cả các ký tự khoảng trắng (nguồn cấp dữ liệu dòng, tab, dấu cách và dấu xuống dòng) bằng dấu cách:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ này cũng định nghĩa một phần tử được gọi là "địa chỉ" có hạn chế. Ràng buộc khoảng trắng được đặt thành "thu gọn", có nghĩa là bộ xử lý XML SẼ XÓA tất cả các ký tự khoảng trắng (nguồn cấp dữ liệu, tab, dấu cách, dấu xuống dòng được thay thế bằng dấu cách, dấu cách ở đầu và cuối bị xóa và nhiều dấu cách được giảm xuống còn một khoảng trắng):
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Hạn chế về chiều dài
Để giới hạn độ dài của một giá trị trong một phần tử, chúng ta sẽ sử dụng các ràng buộc về độ dài, độ dài tối đa và độ dài tối thiểu.
Ví dụ này định nghĩa một phần tử được gọi là "password" có một hạn chế. Giá trị phải có chính xác tám ký tự:
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Ví dụ này định nghĩa một thành phần khác gọi là "mật khẩu" kèm theo một hạn chế. Giá trị phải có tối thiểu năm ký tự và tối đa tám ký tự:
<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>
Hạn chế đối với kiểu dữ liệu
Constraint | Description |
---|---|
enumeration | Defines a list of acceptable values |
fractionDigits | Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero |
length | Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero |
maxExclusive | Specifies the upper bounds for numeric values (the value must be less than this value) |
maxInclusive | Specifies the upper bounds for numeric values (the value must be less than or equal to this value) |
maxLength | Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero |
minExclusive | Specifies the lower bounds for numeric values (the value must be greater than this value) |
minInclusive | Specifies the lower bounds for numeric values (the value must be greater than or equal to this value) |
minLength | Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero |
pattern | Defines the exact sequence of characters that are acceptable |
totalDigits | Specifies the exact number of digits allowed. Must be greater than zero |
whiteSpace | Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled |