[Loạt bài viết] Bài 3: Document Type Definition (DTDs) là gì?

Trong bài này chúng ta sẽ làm quen khái niệm DTDs như khai báo DOCTYPE, khai báo Element và cách tạo DTDs trong file XML, validation XML bằng DTDs…

>> [Loạt bài viết] Bài 2: 10 điểm ghi nhớ khi làm việc với XML

I. DTDs là gì:

Loại tài liệu Definition (DTD) là một tập hợp các tờ khai đánh dấu để xác định một loại tài liệu cho các ngôn ngữ đánh dấu như: SGML, XML, HTML. DTD là một tiền thân của lược đồ XML Schema và có chức năng tương tự, mặc dù khả năng khác nhau.

DTD sử dụng một cú pháp ngắn gọn khai báo chính xác những yếu tố và tài liệu tham khảo có thể xuất hiện ở đâu trong tài liệu XML. DTD cũng khai báo các thực thể (Entity) có thể được sử dụng trong tài liệu XML.

II. Tại sao lại sử dụng DTDs:

- Với một DTD, mỗi tập tin XML của bạn có thể thực hiện một mô tả của định dạng riêng của mình.
- Với một DTD, các nhóm độc lập của người dân có thể đồng ý sử dụng một DTD tiêu chuẩn cho việc trao đổi dữ liệu.
- Ứng dụng của bạn có thể sử dụng một tiêu chuẩn DTD để xác minh rằng các dữ liệu bạn nhận được từ bên ngoài là hợp lệ.
- Bạn cũng có thể sử dụng một DTD để xác minh dữ liệu của riêng bạn.

III. Cấu trúc DTD và các bước tạo DTD:

a. Cấu trúc DTDs bao gồm có 3 phần:

[IMG]

- Khai báo Element: khai báo Element gồm có tên của Element và nội dung của Element
- Khai báo Attribute: khai báo Attribute thuộc Element nào, tên Attribute, kiểu dữ liệu của Attribute và giá trị mặc định của Attribute
- Khai báo Entity: khai báo tên của Entity, giá trị của Entity hay vị trí của giá trị Entity

b. Tạo DTD bao gồm 6 bước:

- Khai báo tất cả các element có trong XML
- Khai báo các element con cho từng element nếu có
- Xác định thứ tự xuất hiện của các element
- Khai báo tất cả thuộc tính của từng element nếu có
- Khai báo kiểu dữ liệu và giá trị mặc định cho thuộc tính
- Khai báo các Entity nếu có

IV. Kiểu DTDs:

- DTDs có 2 dạng tùy thuộc vào vị trí đặt DTDs: bên trong file XML hay ở file .dtd bên ngoài. Hai dạng có cách khai báo DTD khác nhau như hình sau:

[Loạt bài viết] Bài 3: Document Type Definition (DTDs) là gì?

- Hình bên trái là DTD khai báo trong file XML. Cú pháp khai báo:

<!DOCTYPE tên thẻ root [các thành phần trong thẻ root]>

- Hình bên phải là DTD khai báo ngoài file XML, chỉ có nội dung bên trong thẻ root

V. Các dạng khai báo trong DTD:

a. Khai báo Element:

- Element rỗng:

<!ELEMENT element-name EMPTY>

- Element chứa text dạng parsed character

<!ELEMENT element-name (#PCDATA)>

- Element chứa text dạng bất kỳ:

<!ELEMENT element-name ANY>

- Element với các thẻ con, tuần tự:

<!ELEMENT element-name (child1,child2,...)>

- Khai báo số lần xuất hiện của các thẻ con:

- Chỉ có tên thẻ con: xuất hiện duy nhất 1 lần

  • +: phải xuất hiện tối thiểu 1 lần
  • *: xuất hiện 0 hay nhiều lần
  • ?: xuất hiện 0 hay 1 lần
  • Child1|child2: hoặc child1 xuất hiện hoặc child2 xuất hiện

b. Khai báo Attribute:

<!ATTLIST element-name attribute-name attribute-type default-value>

Default value có thể là 1 trong các giá trị sau:
- value: giá trị mặc định. Ví dụ:

DTD:

<!ELEMENT square EMPTY>

<!ATTLIST square width CDATA "0"> (“0” là giá trị mặc định)

Valid XML:

<square width="100" />

= #REQUIRED: bắt buộc phải có giá trị. Ví dụ:

DTD:<!ATTLIST person number CDATA #REQUIRED>

Valid XML:<person number="5677" />

Invalid XML:<person />

- #IMPLIED: có thể có hoặc không attribute này. Ví dụ:

DTD:<!ATTLIST contact fax CDATA #IMPLIED>

Valid XML:<contact fax="555-667788" />

Valid XML:<contact />

- #FIXED: giá trị attribute là hằng số, ví dụ:

DTD:<!ATTLIST sender company CDATA #FIXED "Microsoft">

Valid XML:<sender company="Microsoft" />

Invalid XML:<sender company="W3Schools" />

- Khai báo tập giá trị cho attribute:

DTD:<!ATTLIST payment type (check|cash) "cash">

XML example:<payment type="check" />hay<payment type="cash" />

VI. Ví dụ DTD:

Trong ví dụ này chúng ta xây dựng 1 DTD cho file XML lưu trữ thông tin tất cả sách trong 1 thư viện có các yêu cầu sau:

- Thẻ root: thuVien
- Trong thẻ root có ít nhất 1 thẻ <sach>
- Trong thẻ <sach> là các thẻ con theo thứ tự sau: id, ten, tacGia, nhaXuatBan, gia. Trong đó, id, ten, tacGia là những thẻ bắt buộc phải có, nhaXuatBan, gia xuất hiện tối đa 1 lần
- Trong thẻ <sach> có 2 thuộc tính là theLoai và ngonNgu, trong đó giá trị của thuộc tính thể loại là một trong các giá trị sau: Khoahọc, GiảiTrí, TinHọc, thuộc tính ngonNgu có thể có hoặc không.
- Khai báo 2 Entity xuất hiện thường xuyên trong XML cho giá trị “Nhà Xuất Bản Trẻ” và “Nhà Xuất Bản Giáo dục”

[IMG]

- Để kiểm tra tính đúng đắng của dữ liệu trong XML bằng DTD chúng ta có thể R.C vào XML chọn Validation XML, nếu dữ liệu là hợp lệ chúng ta sẽ thấy thông báo:
- Ngược lại sẽ có thông báo:

[IMG]

Tham khảo từ nguồn: Aptech Course i7: XML By Example

Tags: