Nội dung chính
DTD trong XML
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 DTD trong XML
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à
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 Internal DTD trong XML
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ụ Internal DTD trong XML
Sau đây là ví dụ đơn giản của DTD nội tại.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!DOCTYPE address [ <!ELEMENT address (name,company,phone)> <!ELEMENT name (#PCDATA)> <!ELEMENT company (#PCDATA)> <!ELEMENT phone (#PCDATA)> ]> <address> <name>Vinh Phan</name> <company>VietTuts</company> <phone>(84) 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:
<!DOCTYPE address [
Khai báo DOCTYPE có một dấu chấm than (!) tại phần đầu của tên phần tử. DOCTYPE thông báo cho Parser rằng một DTD được liên kết với tài liệu XML này.
Phần thân DTD - Khai báo DOCTYPE được theo sau bởi phần thân của DTD đó, ở đó bạn khai báo các phần tử, thuộc tính, thực thể.
<!ELEMENT address (name,company,phone)> <!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
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 External DTD trong XML
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ụ External DTD trong XML
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" ?> <!DOCTYPE address SYSTEM "address.dtd"> <address> <name>Vinh Phan</name> <company>VietTuts</company> <phone>(84) 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.