Document Type Declaration trong XML, gọi tắt là DTD, là một cách để miêu tả ngôn ngữ XML. DTD kiểm tra từ vựng và tính hợp lệ của cấu trúc tài liệu XML theo các qui tắc ngữ pháp của ngôn ngữ XML thích hợp.
Một DTD trong XML có thể hoặc được xác định bên trong tài liệu, hoặc có thể được giữ trong một tài liệu riêng biệt.
Cú pháp cơ bản của DTD trong XML là:
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
Trong cú pháp trên:
- DTD bắt đầu với delimiter là <!DOCTYPE.
- Một element (phần tử) nói cho Parser để phân tích cú pháp tài liệu từ phần tử gốc đã cho.
- DTD identifier là một định danh cho Document Type Definition, mà có thể là path tới một file trên hệ thống hoặc URL tới một file trên mạng. Nếu DTD đang trỏ tới path bên ngoài, thì nó được gọi là External Subset.
- Dấu ngoặc móc vuông [ ] bao quanh một danh sách tùy ý các khai báo thực thể, được gọi là Internal Subset.
Internal DTD trong XML
Một DTD được xem như là một DTD nội tại nếu các phần tử được khai báo bên trong XML file. Để xem nó như là DTD nội tại, thuộc tính standalone trong khai báo XML phải được thiết lập là yes. Nghĩa là, khai báo làm việc độc lập với nguồn ngoại vi.
Cú pháp
Cú pháp của DTD nội tại trong XML như sau:
<!DOCTYPE root-element [element-declarations]>
Ở đây, root-element là tên của phần tử gốc và element-declarations là nơi bạn khai báo các phần tử.
Ví dụ
Sau đây là ví dụ đơn giản của DTD nội tại.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Chúng ta cùng phân tích đoạn code trên:
Phần đầu khai báo - Bắt đầu khai báo XML với lệnh sau:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
DTD
Ngay sau phần đầu khai báo là phần khai báo kiểu tài liệu, thường là DOCTYPE:
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
Một số phần tử được khai báo ở đây mà cấu tạo nên từ vựng của tài liệu <name>
document. <!ELEMENT name (#PCDATA)>
định nghĩa phần tử name là kiểu "#PCDATA". Ở đây #PCDATA nghĩa là parse-able text data (dữ liệu text có thể phân tích cú pháp).
Phần cuối khai báo - Cuối cùng, khu vực khai báo DTD được kết thúc bởi sử dụng một dấu ngoặc móc vuông đóng và một dấu lớn hơn (]>). Nó kết thúc khai báo DTD và theo sau là tài liệu XML.
Qui tắc cho DTD trong XML
- DTD phải xuất hiện ở phần bắt đầu của tài liệu (chỉ được đặt trước bởi XML header). Nó không được cho phép xuất hiện ở bất cứ đâu khác bên trong tài liệu.
- Tương tự như khai báo DOCTYPE, khai báo phần tử phải bắt đầu với một dấu chấm than (!).
- Name trong DTD phải kết nối với kiểu phần tử của phần tử gốc.
External DTD trong XML
Một External DTD (DTD ngoại vi) được khai báo bên ngoài XML file. Chúng được truy cập bằng việc xác định các thuộc tính hệ thống mà có thể là .dtd file hoặc một URL hợp lệ. Để xem nó như là DTD ngoại vi, thuộc tính standalone trong khai báo XML phải được thiết lập là no. Nghĩa là, khai báo bao thông tin từ nguồn bên ngoài.
Cú pháp
Sau đây là cú pháp cho DTD ngoại vi:
<!DOCTYPE root-element SYSTEM "file-name">
Ở đây, file-name là file với đuôi .dtd.
Ví dụ
Ví dụ sau minh họa sự sử dụng của DTD ngoại vi:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Nội dung của DTD file là address.dtd như sau:
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Kiểu tham chiếu trong XML
Bạn có thể tham chiếu một DTD ngoại vi bởi sử dụng các định danh hệ thống (System Identifier) hoặc định danh chung (Public Identifier).
Định danh hệ thống (System Identifier)
Một định danh hệ thống cho bạn khả năng xác định vị trí của một file ngoại vi chứa các khai báo DTD. Cú pháp là như sau:
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Bạn có thể thấy rằng, nó chứa từ khóa SYSTEM và một tham chiếu URI trỏ tới vị trí của tài liệu.
Định danh chung (Public Identifier)
Định danh chung cung cấp một kỹ thuật để xác định vị trí DTD resource và được viết như sau:
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Nó bắt đầu với từ khóa PUBLIC, được theo sau bởi một định danh cụ thể. Định danh chung được sử dụng để nhận diện một entry trong một catalog. Định danh chung có thể theo sau bất kỳ định dạng nào, tuy nhiên một định dạng thường được sử dụng nhất là Formal Public Identifiers, hoặc FPIs.