XML: Bài 3.2. Làm việc với DTD
Trong bài học này, Làm việc với DTD, ta sẽ tìm hiểu:
- Mô tả cấu trúc của một DTD.
- Giải thích cách tạo một DTD đơn giản.
- Mô tả ý nghĩa của các khai báo kiểu tài liệu.
3.2.1. Cấu trúc của DTD
Một cấu trúc DTD điển hình bao gồm ba khối sau:
- Khai báo phần tử
- Khai báo thuộc tính
- Khai báo thực thể
Mỗi khai báo phần tử chỉ định tên của phần tử và nội dung mà phần tử đó có thể chứa. Mỗi khai báo thuộc tính chỉ định phần tử sở hữu thuộc tính, tên thuộc tính, kiểu và giá trị mặc định của nó (nếu có). Mỗi khai báo thực thể chỉ định tên của thực thể và giá trị hoặc vị trí của giá trị của nó.
Các nhóm khai báo phần tử, thuộc tính và thực thể này tạo thành ba khối tương ứng của một DTD có thể được khai báo theo bất kỳ trình tự nào.
3.2.2. Tạo DTD nội bộ
Tạo DTD là một quy trình sáu bước đơn giản. Các bước này có thể được liệt kê như sau:
- Khai báo tất cả các yếu tố có thể
- Chỉ định các phần tử con được phép, nếu có
- Đặt thứ tự các phần tử phải xuất hiện
- Khai báo tất cả các thuộc tính phần tử có thể có
- Đặt giá trị và kiểu dữ liệu thuộc tính
- Khai báo tất cả các thực thể có thể
Bước 1 đến bước 3 xử lý khai báo phần tử, bước 4 và bước 5 với khai báo thuộc tính và bước 6 với khai báo thực thể. Điều này rõ ràng phù hợp với cấu trúc của một DTD.
Cú pháp:
<!ELEMENT element-name (element-content)> … <!ATTLIST element-name attribute-name attribute-type default-value> … <!ENTITY entity-name "entity-value"> …
Đoạn mã sau minh họa các thuộc tính của DTD nội bộ.
Đoạn mã:
<!ELEMENT Mobile (Company, Model, Price, Accessories)> <!ELEMENT Company (#PCDATA)> <!ELEMENT Model (#PCDATA)> <!ELEMENT Price (#PCDATA)> <!ELEMENT Accessories (#PCDATA)> <!ATTLIST Model Type CDATA "Camera"> <!ENTITY HP "Head Phones"> <!ENTITY CH "Charger"> <!ENTITY SK "Starters Kit">
3.2.3. Khai báo DOCTYPE
Khai báo Loại tài liệu tuyên bố rằng tệp XML mà nó hiện diện tuân theo một DTD nhất định. Tuyên bố cũng chỉ định tên của DTD đó và nội dung hoặc vị trí của nó.
Được đặt trong phần mở đầu của tài liệu XML, khai báo DOCTYPE bắt đầu bằng <! DOCTYPE và kết thúc bằng >. Ở giữa là tên của phần tử gốc, theo sau là một cặp dấu ngoặc vuông chứa chính DTD hoặc bởi từ khóa SYSTEM và một URL chỉ định nơi có thể tìm thấy DTD.
Nếu không có khai báo kiểu tài liệu thì một DTD chỉ là văn bản thuần túy. Hình 3.1 cho thấy khai báo DOCTYPE.
Hình 3.1: Khai báo DOCTYPE
Cú pháp :
<! DOCTYPE name_of_root_element [tập hợp con DTD nội bộ]>
hoặc là
<! DOCTYPE name_of_root_element SYSTEM "URL của tập hợp con DTD bên ngoài">
3.2.4. Các loại DTD
Khai báo DOCTYPE có hai dạng cú pháp cơ bản. Tùy thuộc vào cú pháp khai báo loại tài liệu được sử dụng, DTD có thể được phân loại là DTD bên trong hoặc bên ngoài.
Ø DTD nội bộ
Các DTD nội bộ được đặc trưng bởi sự hiện diện của DTD trong chính khai báo loại tài liệu. Khai báo loại tài liệu bao gồm tên DTD theo sau là DTD được đặt trong dấu ngoặc vuông.
Hình 3.2 mô tả DTD nội bộ.
Hình 3.2: DTD nội bộ
Ø DTD bên ngoài
Các DTD bên ngoài được đặc trưng bởi sự hiện diện của đường dẫn địa chỉ DTD trong khai báo kiểu tài liệu. Khai báo kiểu tài liệu bao gồm tên DTD, theo sau là từ khóa SYSTEM, theo sau là địa chỉ của tài liệu DTD.
Hình 3.3 mô tả DTD bên ngoài.
Hình 3.3: DTD bên ngoài
Kiểm tra kiến thức 2
1. Câu nào về cấu trúc DTD và khai báo DOCTYPE là đúng và câu nào sai?
(A) |
DTD được tạo thành từ ba khối khai báo và khai báo DOCTYPE. |
(B) |
Các phần tử, thuộc tính và thực thể có thể được khai báo theo bất kỳ thứ tự nào. |
(C) |
Khai báo DOCTYPE được chỉ định trong phần mở đầu của tài liệu XML. |
(D) |
Các DTD nội bộ chỉ định DTD trong dấu ngoặc vuông trong chính khai báo. |
(E) |
Các DTD bên ngoài sử dụng URL từ khóa để chỉ định vị trí của DTD. |
2. Bạn có thể sắp xếp các bước tạo DTD theo thứ tự không?
(1) |
Khai báo tất cả các thuộc tính phần tử có thể có. |
(2) |
Chỉ định các phần tử con được phép, nếu có. |
(3) |
Đặt giá trị và kiểu dữ liệu thuộc tính. |
(4) |
Đặt thứ tự các phần tử phải xuất hiện. |
(5) |
Khai báo tất cả các thực thể có thể. |
(6) |
Khai báo tất cả các phần tử có thể. |