XML: Bài 3.1. Định nghĩa loại tài liệu

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Tổng quan về Bài học số 3

Chào mừng bạn đến với Bài học số 3, Định nghĩa Loại Tài liệu (DTD). Bài học này tập trung vào cách tạo DTD cho các tệp XML. Các chủ đề như khai báo DOCTYPE, các loại DTD, tính tốt và tính hợp lệ của tệp XML, khai báo các phần tử, thuộc tính và thực thể trong DTD cũng được đề cập.

Trong bài học này, bạn sẽ tìm hiểu về:

  • Định nghĩa loại tài liệu
  • Làm việc với DTD
  • Tài liệu XML hợp lệ
  • Các khai báo

3.1. Định nghĩa loại tài liệu

Trong bài học đầu tiên này, Định nghĩa Loại Tài liệu, ta sẽ tìm hiểu:

  • Y nghĩa của một DTD.
  • Sự cần thiết của một DTD.

3.1.1. Định nghĩa về DTD

Định nghĩa Loại Tài liệu (DTD) là một tài liệu không phải XML được tạo thành từ các khai báo phần tử, thuộc tính và thực thể. Các phần tử, thuộc tính và thực thể được xác định thuộc về (các) tài liệu XML mà DTD được định nghĩa.

DTD giúp trình phân tích cú pháp XML xác thực tài liệu XML. Nó cũng giúp tác giả đặt giá trị mặc định cho các thuộc tính phần tử. Cấu trúc cây của tài liệu có thể được xác định dựa trên DTD.

Lưu ý:

Cấu trúc cây

Biểu diễn phân cấp của tài liệu XML, phần tử gốc của nó, các phần tử, thực thể khác, v.v.  được hiểu về mặt khái niệm là cấu trúc cây của tài liệu.

Bộ phân tích cú pháp XML

Bộ phân tích cú pháp XML là một chương trình phần mềm hoặc một tập hợp các chương trình phân tích cú pháp các tài liệu XML theo cấu trúc của nó.  Các trình phân tích cú pháp XML cũng có khả năng xác thực các tệp XML tùy thuộc vào các DTD.

3.1.2. Sự cần thiết của DTD

Thực tế là XML cho phép người dùng xác định thẻ của riêng mình là một trong những lợi thế lớn nhất của nó. Tuy nhiên, nó cũng dẫn đến một vấn đề chính đó là những người làm việc trên các phần của cùng một tài liệu XML đôi khi sử dụng các thẻ cùng tên cho các mục đích khác nhau và đôi khi, sử dụng các thẻ khác tên nhau cho cùng một mục đích. Đồng thời, cùng một sở hữu duy nhất hoặc thể hiện các thuộc tính khác nhau. Chính vì thế mà cần thiết phải có một số loại tiêu chuẩn hóa các phần tử và thuộc tính.

Đây là lý do chính để sử dụng DTD. Một DTD có thể xác định tất cả các tổ hợp và trình tự có thể có cho các phần tử được sử dụng trong tài liệu XML cùng với các thuộc tính và giá trị chấp nhận được của chúng.

3.1.3. DTD so với DOCTYPE

Sự khác biệt giữa Định nghĩa Loại Tài liệu (DTD) và Khai báo Loại tài liệu (DOCTYPE) có thể được rút ra từ bảng 3.1:

Tính chất

Định nghĩa Loại Tài Liệu

Khai báo Loại tài liệu

Định nghĩa

Danh sách các khai báo phần tử pháp lý, thuộc tính và thực thể cho một tài liệu XML.

Tuyên bố về DTD mà tài liệu XML tuân theo.

Viết tắt

DTD

DOCTYPE

Vị trí

Trong phần khai báo DOCTYPE hoặc tệp bên ngoài

Trong phần mở đầu của tài liệu XML

Cú pháp

<! ELEMENT element-name (element- content)>

...

<! ENTITY entity-name "entity-value">

...

<! DOCTYPE name_of_root_element SYSTEM "URL của tập hợp con DTD bên ngoài">

<! ATTLIST element-name thuộc tính-name thuộc tính-type default- value>

 

Hoặc là

 

<! DOCTYPE name_of_root_element [tập hợp con DTD nội bộ]>

Loại ngôn ngữ

Không phải XML

XML

Các biến thể Trình bày trong một DOCTYPE (DTD nội bộ) hoặc trong một tài liệu bên ngoài (DTD bên ngoài) Khai báo DTD nội bộ hoặc bên ngoài
Sự phụ thuộc Chỉ hữu ích nếu được khai báo bằng khai báo DOCTYPE Chỉ hữu ích nếu nó có một DTD để xác định

Bảng 3.1: Sự khác biệt giữa khai báo DTD và DOCTYPE

Sự khác biệt giữa hai loại này là rõ ràng trong Bảng 3.1 ở trên. Khai báo DOCTYPE rất quan trọng để DTD hoạt động và trong trường hợp không có DTD, khai báo DOCTYPE sẽ trở nên vô hiệu.

Khai báo DOCTYPE có thể khai báo các DTD trong chính chúng hoặc tham chiếu đến các DTD có trong các tài liệu bên ngoài. Tùy thuộc vào một trong hai, DTD có thể được gọi là bên trong hoặc bên ngoài tương ứng. Ví dụ sau đây cho thấy cách khai báo DTD trong khai báo DOCTYPE.

Thí dụ:

File: Mobile.xml
...
<!DOCTYPE Mobile [
  <!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 "Starter's Kit">
]>
...

Ngoài ra, ví dụ sau hiển thị cùng một DTD được hiển thị trong ví dụ trước nhưng ở dạng DTD bên ngoài.

Thí dụ:

File: Mobile.dtd
<!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 "Starter's Kit">

File: Mobile.xml
...
<!DOCTYPE Mobile SYSTEM "Mobile.dtd">
...

DTD được khai báo trong một tệp riêng "Mobile.dtd". Khai báo DOCTYPE trong tệp XML đề cập đến nó bằng cách sử dụng từ khóa SYSTEM.

3.1.4. Hạn chế của DTD

Mục đích của DTD là để tạo điều kiện xác nhận. Thực tế này làm cho DTD vừa phổ biến vừa thiết yếu. Tuy nhiên, DTD có những hạn chế của riêng nó như sau:

  • Các DTD xác thực các tài liệu XML nhưng bản thân chúng là các tài liệu không phải XML. Một trong những ưu điểm lớn nhất của XML là khả năng mở rộng của nó. Tuy nhiên, các DTD không thể tự hào về khả năng mở rộng này.
  • DTD có thể là bên ngoài hoặc bên trong tùy thuộc vào khai báo DOCTYPE của chúng. Tuy vậy, mọi tài liệu XML chỉ có thể có một DTD để tuân thủ. Điều này hạn chế lợi thế của việc có cả DTD bên trong và bên ngoài.
  • DTD không tuân theo các xu hướng mới nhất là hướng đối tượng, kế thừa, v.v. Điều này làm cho DTD không được thân thiện đối với các ngôn ngữ lập trình được sử dụng rộng rãi và sở thích của lập trình viên đối với lập trình hướng đối tượng.
  • Các tài liệu XML có thể sử dụng nhiều không gian tên. Để sử dụng một không gian tên, các tài liệu XML yêu cầu không gian tên phải được khai báo trong DTD của nó. Tuy nhiên, DTD không hỗ trợ nhiều không gian tên. Điều này làm mất đi lợi thế của việc có thể khai báo nhiều không gian tên.
  • DTD chỉ hỗ trợ một kiểu dữ liệu là chuỗi văn bản. Đây là một trong những nhược điểm lớn nhất của nó phụ thuộc vào số lượng ứng dụng mà XML đang được sử dụng ngày nay.
  • Có thể định nghĩa các DTD để chuẩn hóa các tài liệu XML chắc chắn là một trong những nguyên lý lớn nhất của DTD. Tuy nhiên, điều này đang tỏ ra bất lực khi các DTD nội bộ có thể ghi đè các DTD bên ngoài. Việc nỗ lực tạo ra các DTD hiệu quả có thể bị hủy hoại bởi các DTD nội bộ độc hại. Vì vậy, khía cạnh bảo mật của DTD là rất đáng nghi ngờ.

Kiểm tra kiến thức bài 3.1

1. Câu nào về DTDs và mục đích của chúng là đúng và câu nào sai?

(A)

DTD là một tài liệu XML.

(B)

DTD chứa các khai báo cho các phần tử và thực thể.

(C)

DTD được sử dụng để xác thực tài liệu XML.

(D)

Mỗi tài liệu XML có thể được biểu diễn dưới dạng cấu trúc cây.

(E)

Khả năng tạo thẻ của riêng mình là nhược điểm lớn nhất của XML.

 
» Tiếp: Bài 3.2. Làm việc với DTD
« Trước: Bài 2. Namespace
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!