XML: Bài 4.4. Làm việc với kiểu đơn giản
Giải phóng thời gian, khai phóng năng lực
Trong bài học cuối cùng này, Làm việc với kiểu đơn giản, bạn sẽ học cách:
- Mô tả kiểu đơn giản.
- Liệt kê và mô tả các kiểu dữ liệu được sử dụng với kiểu đơn giản.
- Giải thích các hạn chế và khía cạnh.
- Xác định việc sử dụng các thuộc tính.
4.4.1. Định nghĩa phần tử kiểu đơn giản
Kiểu đơn giản là một phần tử hoặc thuộc tính XML trong đó chỉ chứa văn bản và không chứa các phần tử hoặc thuộc tính khác.
Các khai báo kiểu đơn giản được sử dụng để tạo dữ liệu dạng văn bản và chỉ định kiểu dữ liệu được phép trong các thuộc tính và phần tử.
Cú pháp:
<xs:element name="XXXX" type="YYYY"/>
Trong cú pháp này, XXXX là tên của phần tử, YYYY là kiểu dữ liệu của phần tử.
Đoạn mã sau đây thể hiện rằng phần tử TotalNoOfPages có thể được chỉ định là một kiểu số nguyên, cụ thể là một số nguyên dương có ba chữ số.
Book.xml: Các phần tử XML
<Book_name>The Da vinci code</Book_name> <TotalNoOfPages>360</TotalNoOfPages> <Author_name>Dan Brown</Author_name>Book.xsd: Định nghĩa phần tử đơn giản tương ứng
<xs:element name="Book_name" type="xs:string"/> <xs:element name="TotalNoOfPages" type="xs:integer"/> <xs:element name="Author_name" type="xs:string"/>
4.4.2. Các kiểu dữ liệu được sử dụng với kiểu đơn giản
Các phần tử thuộc kiểu đơn giản có xu hướng mô tả nội dung và kiểu dữ liệu của tài liệu hơn là cấu trúc của nó.
Trong Lược đồ XML, người ta có thể đề cập đến kiểu dữ liệu mà một phần tử có thể chứa bằng cách gán cho nó một định nghĩa kiểu đơn giản cụ thể. Vì vậy, dựa trên kiểu dữ liệu mà nó hỗ trợ, lược đồ XML chia các phần tử của các kiểu đơn giản thành hai loại lớn:
- kiểu đơn giản có sẵn
- kiểu đơn giản do người dùng định nghĩa
4.4.3. Kiểu đơn giản có sẵn
Có một số kiểu đơn giản được tích hợp sẵn, chẳng hạn như số nguyên, ngày tháng, số thực và chuỗi mà người ta có thể sử dụng mà không cần sửa đổi thêm.
Một phần tử đơn giản được tích hợp sẵn có thể chứa một giá trị mặc định hoặc một giá trị cố định. Giá trị 'mặc định' là giá trị được gán tự động cho phần tử khi không có giá trị nào khác được chỉ định. Giá trị 'cố định' được gán cho một phần tử, khi không cần thay đổi giá trị cho phần tử đó. Hình 4.7 mô tả các kiểu đơn giản có sẵn.
Hình 4.7: Các kiểu đơn giản cài sẵn
Cú pháp :
<xs:element name="XXXX" type="YYYY" default="ZZZZ"/>
Trong cú pháp này, XXXX là tên của phần tử, YYYY là kiểu dữ liệu của phần tử và ZZZZ là giá trị mặc định được chỉ định cho phần tử.
Đoạn mã sau minh họa việc khai báo kiểu đơn giản có sẵn.
Đoạn mã: kiểu đơn giản tích hợp sẵn: khai báo phần tử
<xs:element name="AccountType" type="xs:string" fixed="Savings"/> <xs:element name="BalanceAmount" type="xs:integer" default="5000"/>
Đoạn mã hiển thị khai báo các kiểu đơn giản được tích hợp sẵn "AccountType" và "BalanceAmount". Giá trị cố định cho "AccountType" là "Savings" và giá trị mặc định cho "BalanceAmount" là "5000".
4.4.4. Kiểu đơn giản do người dùng tạo
XML-schema hỗ trợ một thư viện các kiểu dữ liệu tích hợp sẵn. Tuy nhiên, trong quá trình viết các tài liệu lược đồ phức tạp, một nhà phát triển có thể cần một loại dữ liệu không được xác định trong lược đồ đã đề xuất. Ví dụ: hãy xem xét khai báo của một phần tử <AngleMeasure>. Nó thực hiện các hạn chế có sẵn đối với nội dung của nó để chấp nhận các giá trị số không âm, nhưng nó vẫn chấp nhận các giá trị không mong muốn như:<AngleMeasure>490</AngleMeasure>
Theo khai báo trên, "490" là một giá trị số không âm hợp lệ, nhưng nó vẫn cần kiểu số cho phép các giá trị có phạm vi từ 0 đến 360. Do đó, có thể tạo kiểu dữ liệu do người dùng tùy chỉnh xác định bằng cách sử dụng định nghĩa <simpleType>.
Cú pháp:
<xs:simpleType name="name of the simpleType"> <xs:restriction base="built-in data type"> <xs:constraint="set constraint to limit the content"/> </xs:restriction> </xs:simpleType>
Đoạn mã sau đây chứng minh các thuộc tính của các kiểu đơn giản do người dùng định nghĩa.
<xs:simpleType name="AngleMeasure"> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="360"/> </xs:restriction> </xs:simpleType>
Ví dụ tiếp theo:
<xs:simpleType name="triangle"> <xs:restriction base="xsd:string"> <xs:enumeration value="isosceles"/> <xs:enumeration value="right-angled"/> <xs:enumeration value="equilateral"/> </xs:restriction> </xs:simpleType>
Trong ví dụ trên, một kiểu dữ liệu mới được gọi là "triangle", các phần tử có kiểu này có thể chứa các phần tử có kiểu triangle, các phần tử thuộc kiểu này có thể có giá trị "isosceles" hoặc "right-angled" hoặc "equilateral".
4.4.5. Các hạn chế
Khai báo kiểu dữ liệu đặt ra những hạn chế nhất định đối với nội dung của một phần tử hoặc thuộc tính XML. Nếu một phần tử XML thuộc loại "xs:integer" và chứa một chuỗi như "Welcome", phần tử sẽ không được xác thực. Các giới hạn này được gọi là các hạn chế, định nghĩa các giá trị được phép cho các phần tử và thuộc tính XML.
Các hạn chế có thể được chỉ định cho các phần tử simpleType và các loại hạn chế được khai báo bằng cách sử dụng khai báo <restriction>. Về cơ bản, khai báo <restriction> được sử dụng để khai báo một simpleType dẫn xuất, là một tập con của simpleType cơ sở của nó. Giá trị của thuộc tính cơ sở có thể là bất kỳ loại dữ liệu simpleType hiện có nào hoặc kiểu dữ liệu Lược đồ XML có sẵn.
Cú pháp:
<restriction base="tên của simpleType mà bạn đang lấy">
Trong khai báo <restriction> này, kiểu dữ liệu cơ sở có thể được chỉ định bằng cách sử dụng thuộc tính base. Đoạn mã sau đây thể hiện một kiểu đơn giản là "Age" được bắt nguồn bằng cách chỉ định cơ sở là kiểu số nguyên.
<xs:simpleType name="Age"> <xs:restriction base="xs:integer"> ... ... </xs:restriction> </xs:simpleType>
Với Lược đồ XML, các hạn chế tùy chỉnh có thể được chỉ định trên các phần tử và thuộc tính XML. Những hạn chế này được gọi là các facet.
Các facet được sử dụng để hạn chế tập hợp hoặc phạm vi giá trị mà một kiểu dữ liệu có thể chứa. Phạm vi giá trị được xác định bởi facet phải bằng hoặc nhỏ hơn phạm vi giá trị của kiểu cơ sở.
Có 12 phần tử facet, được khai báo bằng một cú pháp chung. Chúng đều có một thuộc tính giá trị bắt buộc cho biết giá trị của khía cạnh. Một hạn chế có thể chứa nhiều khía cạnh. Bất kỳ giá trị nào xuất hiện trong thể hiện và không gian giá trị phải tuân theo tất cả các facet được liệt kê.
Bảng 4.2 mô tả các ràng buộc facet.
facet |
Mô tả |
---|---|
minExclusive |
Chỉ định giá trị tối thiểu cho kiểu loại trừ giá trị được cung cấp. |
minInclusive |
Chỉ định giá trị nhỏ nhất cho kiểu bao gồm giá trị được cung cấp. |
maxExclusive |
Chỉ định giá trị lớn nhất cho kiểu loại trừ giá trị được cung cấp. |
maxInclusive |
Chỉ định giá trị lớn nhất cho kiểu bao gồm giá trị được cung cấp. |
TotalDigits |
Chỉ định tổng số chữ số trong một kiểu số. |
fractionDigits |
Chỉ định số chữ số phân số trong kiểu số. |
length |
Chỉ định số lượng mục trong kiểu danh sách hoặc số ký tự trong kiểu chuỗi. |
minLength |
Chỉ định số mục tối thiểu trong một loại danh sách hoặc số ký tự tối thiểu trong một loại chuỗi. |
maxLength |
Chỉ định số mục tối đa trong một loại danh sách hoặc số ký tự tối đa trong một loại chuỗi. |
enumeration |
Chỉ định một giá trị cho phép trong một danh sách được liệt kê. |
whiteSpace |
Chỉ định cách xử lý khoảng trắng trong kiểu. |
pattern |
Hạn chế các loại chuỗi. |
Cú pháp:
<xs:simpleType name="name"> <xs:restriction base="xs:source"> <xs:facet value="value"/> <xs:facet value="value"/> … </xs:restriction> </xs:simpleType>
Đoạn mã sau đây chứng minh rằng thuộc tính giá trị cung cấp giá trị của facet đó.
Ví dụ:
<xs:simpleType name="triangle"> <xs:restriction base="xs:string"> <xs:enumeration value="isosceles"/> <xs:enumeration value="right-angled"/> <xs:enumeration value="equilateral"/> </xs:restriction> </xs:simpleType>
Ở đây, phép liệt kê facet được thêm vào giới hạn với thuộc tính giá trị là isosceles hoặc right-angled hoặc equilateral. Vì vậy, một phần tử được khai báo là kiểu triangle phải là là isosceles hoặc right-angled hoặc equilateral.
4.4.7. Các thuộc tính
Các phần tử XML có thể chứa các thuộc tính mô tả các phần tử. Trong các Lược đồ XML, khai báo thuộc tính tương tự như khai báo phần tử. Để khai báo một thuộc tính, phần tử <xs:attribute> được sử dụng.
Một thuộc tính có thể được chỉ ra liệu nó là bắt buộc hay tùy chọn hoặc nó có giá trị mặc định hay không. Giá trị mặc định được tự động gán cho thuộc tính khi không có giá trị nào khác được chỉ định.
Thuộc tính use
chỉ định liệu thuộc tính là bắt buộc hay tùy chọn. Dưới đây là các giá trị khác nhau có thể được gán cho các thuộc tính:
Ø default
Giá trị default được tự động gán cho thuộc tính khi không có giá trị nào khác được chỉ định. Ví dụ,
<xs:attribute name="genre" type="xs:string" default="fiction"/>
Trong ví dụ trên, giá trị của thuộc tính default của attribute genre là fiction.
Ø fixed
Giá trị này làm cho thuộc tính cố định. Một giá trị cố định được tự động gán cho thuộc tính và không thể chỉ định một giá trị khác. Ví dụ,
<xs:attribute name="genre" type="xs:string" fixed="fiction"/>
Trong ví dụ trên, giá trị fiction của thuộc tính fixed được gán cho thuộc tính genre, vì vậy không thể chỉ định một giá trị khác cho nó.
Ø optional
Giá trị này làm cho thuộc tính trở thành tùy chọn, có nghĩa là thuộc tính có thể có bất kỳ giá trị nào. Giá trị mặc định cho bất kỳ attribute nào cũng là tùy chọn. Ví dụ,
<xs:attribute name="genre" type="xs:string" use="optional"/>
Ở ví dụ trên, attribute genre có thể nhận bất kỳ giá trị chuỗi nào.
Ø prohibited
Giá trị này có nghĩa là thuộc tính không thể được sử dụng. Ví dụ,
<xs:attribute name="genre" type="xs:string" use="prohibited"/>
Trong ví dụ trên thì thể hiện phần tử sẽ không có attribute genre.
Ø required
Giá trị này làm cho thuộc tính trở thành bắt buộc. Thuộc tính có thể có bất kỳ giá trị nào. Ví dụ,
<xs:attribute name="genre" type="xs:string" use="required"/>
Ở ví dụ trên thì attribute genre phải được sử dụng trong khai báo phần tử XML.
Hình 4.8 mô tả khai báo thuộc tính.
Hình 4.8: Các thuộc tính
Cú pháp :
Cú pháp để xác định một thuộc tính là:
<xs:attribute name="Attribute_name" type="Attribute_datatype"/>
trong đó,
Attribute_name là tên của thuộc tính,
Attribute_datatype chỉ định kiểu dữ liệu của thuộc tính. Có rất nhiều kiểu dữ liệu tích hợp sẵn trong lược đồ XML như chuỗi, số thập phân, số nguyên, boolean, ngày và giờ.
Đoạn mã sau minh họa các thuộc tính của attribute. Trong ví dụ này, các phần tử xs:attribute đứng sau xs:sequence và xs:group tạo nên phần thân của phần tử. Phần tử Name có thể có một attribute tùy chọn có tên là age với kiểu positiveInteger.
.... <xs:complexType name="SingerType"> <xs:sequence> <xs:element name="Name"> <xs:complexType> <xs:all> <xs:element name="FirstName" type="xs:string"/> <xs:element name="LastName" type="xs:string"/> </xs:all> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="age" type="xs:positiveInteger" use="optional/> </xs:complexType> ....
Kiểm tra kiến thức bài 4.4
1. Câu nào sau đây về phần tử kiểu đơn giản là đúng và câu nào sai?
(A) |
Một kiểu dữ liệu do người dùng xác định tùy chỉnh có thể được tạo bằng cách sử dụng định nghĩa <simpleType>. |
(B) |
Phần tử của kiểu đơn giản mô tả nội dung và kiểu dữ liệu của một phần tử. |
(C) |
Các phần tử của kiểu đơn giản tạo nên cấu trúc của một tài liệu XML. |
(D) |
Một phần tử đơn giản được tích hợp sẵn có thể chứa một giá trị mặc định hoặc một giá trị thuộc tính. |
(E) |
Giá trị mặc định là giá trị được gán tự động cho phần tử khi không có giá trị nào khác được chỉ định. |
2. Bạn có thể đối sánh các từ khóa khác nhau với mô tả tương ứng của chúng không?
Mô tả |
Mục |
||
(A) |
Specifies the number of digits after decimal point |
(1) |
pattern |
(B) |
Restricts string types using regular expressions |
(2) |
use |
(C) |
Specifies an allowable value in an enumerated list |
(3) |
prohibited |
(D) |
Specifies whether the attribute is required or optional |
(4) |
fractionDigits |
(E) |
Specifies that the attribute cannot be used |
(5) |
enumeration |
Tóm tắt mô-đun
Trong mô-đun này, Lược đồ XML, bạn đã học về:
Ø Lược đồ XML
Lược đồ XML là một giải pháp thay thế dựa trên XML cho các DTD, nó mô tả cấu trúc của một tài liệu XML. Ngôn ngữ Lược đồ XML còn được gọi là Định nghĩa Lược đồ XML (XML Schema Definition - XSD). Một Lược đồ XML có thể xác định các phần tử, các thuộc tính, các phần tử con và các giá trị khả dĩ có thể xuất hiện trong một tài liệu. Lược đồ khắc phục các hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML một cách mạnh mẽ mà không cần dựa vào các công cụ xác thực đặc biệt.
Ø Khám phá các lược đồ XML
Lược đồ XML cung cấp một loạt các kiểu dữ liệu. Nó hỗ trợ các kiểu dữ liệu tích hợp như string, boolean, number, dateTime, binary và uri. Các kiểu dữ liệu bổ sung như số nguyên, thập phân, thực, thời gian, chu kỳ thời gian và kiểu dữ liệu do người dùng xác định.
Ø Làm việc với loại phức hợp
Các phần tử có kiểu phức hợp có thể chứa các phần tử lồng nhau và có các attribute. Một phần tử phức hợp có thể được xác định bằng cách đặt tên trực tiếp cho phần tử và bằng cách sử dụng tên và thuộc tính kiểu của kiểu phức hợp. minOccurs chỉ định số lần xuất hiện tối thiểu của phần tử trong tài liệu XML. maxOccurs chỉ định số lần xuất hiện tối đa của phần tử trong tài liệu XML. Nội dung phần tử trong tài liệu XML chỉ chứa các phần tử XML và nội dung hỗn hợp chứa văn bản trộn với các phần tử. Các cấu trúc nhóm trong lược đồ XML chỉ định thứ tự của các phần tử XML.
Ø Làm việc với kiểu đơn giản
Các phần tử của kiểu đơn giản mô tả nội dung và kiểu dữ liệu của phần tử hơn là cấu trúc của nó. Kiểu đơn giản có thể có các kiểu dữ liệu cài sẵn và do người dùng xác định. Định nghĩa kiểu đơn giản nhận một trong hai giá trị, mặc định hoặc cố định theo yêu cầu. Kiểu dữ liệu do người dùng xác định có thể được lấy từ kiểu tích hợp sẵn hoặc kiểu đơn giản hiện có. Việc sử dụng các hạn chế và facet hạn chế nội dung của nó ở các giá trị do người dùng quy định. Lược đồ hỗ trợ việc sử dụng các thuộc tính trong các phần tử, được khai báo với một định nghĩa kiểu đơn giản.
Giải phóng thời gian, khai phóng năng lực