HTML5: !DOCTYPE
Tổng quan
DOCTYPE (document type declaration) là một chỉ dẫn liên quan đến một SGML (Standard Generalized Markup Language) cụ thể hoặc một tài liệu XML (ví dụ như một trang web) với một định nghĩa kiểu tài liệu (document type definition - DTD) (ví dụ, định nghĩa chính thức phiên bản cụ thể của HTML). Tuân theo cú pháp của trang web, DOCTYPE thể hiện là phần viết ngắn gọn như sau: <!DOCTYPE>.
Vì vậy, <!DOCTYPE> không phải là một thẻ HTML, nó là một lệnh khai báo, dùng để khai báo kiểu của tài liệu HTML.
Trong tài liệu HTML, <!DOCTYPE> phải được đặt trước thẻ <HTML>.
Theo cách thức bố cục các trang HTML mà không theo chuẩn HTML5 của các trình duyệt hiện nay thì DOCTYPE sẽ có nhiệm vụ "đánh hơi" hoặc "chuyển đổi", cụ thể DOCTYPE sẽ xác định cách thức bố trí các trang tài liệu dạng text/html theo cách thức nào, chẳng hạn như cách thức "quirks mode" hay "standards mode". Còn đối với HTML5 là chuẩn HTML không dựa trên SGML thì việc sử dụng DOCTYPE chỉ mang tính hình thức.
Vì nhiệm vụ chủ yếu của các trình duyệt là thực thi các trang web dựa trên phân tích cú pháp HTML chứ không phải là phân tích cú pháp DTD nên các trình duyệt không sử dụng đến các DTD và cũng không bao giờ truy cập đến chúng. Hơn nữa, các trình duyệt hiện đại đang cạnh tranh nhau rất quyết liệt trong vấn đề hỗ trợ tốt nhất theo chuẩn HTML5, vậy nên DOCTYPE trong các trình duyệt này có thể coi là dư thừa.
Cú pháp
Cú pháp tổng quát của DOCTYPE là như sau:
Giải thích cú pháp:
Trong XML, Phần_tử_gốc là phần tử đầu tiên trong tài liệu, ví dụ trong XHTML phần tử gốc là <html>, các từ khóa PUBLIC hay SYSTEM thể hiện loại DTD (lựa chọn PUBLIC tức là tài liệu cho phép được phổ biến, SYSTEM tức là tài liệu không được phổ biến). Nếu lựa chọn là PUBLIC thì theo sau nó là một Định danh công cộng chính quy (Formal Public Identifier - FPI) được đặt trong cặp nháy kép, và sau đó phải là một định danh hệ thống (system identifier) và cũng được đặt trong cặp nháy kép. Ví dụ, FPI của XHTML 1.1 là "-//W3C//DTD XHTML 1.1//EN" và có thể có 3 định danh hệ thống cho phép đối với XHTML 1.1 tùy thuộc vào nhu cầu, một trong số đó là tham chiếu URI "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd". Còn nếu lựa chọn là SYSTEM thì chỉ cho phép có một định danh hệ thống, tức là bộ phân tích cú pháp XML sẽ phải tìm đến các DTD trong hệ thống, tham chiếu URI sẽ được đặt trong cặp nháy kép. Phần cuối cùng (đặt trong cặp ngoặc vuông []) được gọi là tập con trong (đây là một tùy chọn) được dùng để sửa hoặc thêm các thực thể hoặc được dùng để sửa hoặc thêm các hành vi ứng với lựa chọn PUBLIC.
Một điều nữa cần nói tới, đó là DOCTYPE có điểm khác so với các tài liệu dựa trên SGML như HTML chẳng hạn, đó là bộ định danh công cộng có thể kết hợp với bộ định danh hệ thống, sự kết hợp này có thể được thực hiện bằng cách chuyển FPI tới bộ định danh hệ thống.
Ví dụ
Dòng đầu tiên của các trang World Wide Web thường là như sau:
Giải thích:
Khai báo kiểu tài liệu này là cho XHTML được tích hợp bằng cách tham chiếu tới một DTD, sử dụng bộ định danh public là -//W3C//DTD XHTML 1.0 Transitional//EN và bộ định danh hệ thống là http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd; không có tập con trong; phần tử gốc là html.
Khai báo DOCTYPE với phiên bản HTML 4.01 DTD
Strict DTD
Ví dụ:
Transitional DTD
Ví dụ:
Frameset DTD
Ví dụ:
Khai báo DOCTYPE với phiên bản XHTML 1.0 DTD
XHTML Strict DTD
Ví dụ:
XHTML Transitional DTD
Ví dụ:
XHTML Frameset DTD
Ví dụ:
Khai báo DOCTYPE với phiên bản XHTML 1.1 DTD
XHTML 1.1 là phiên bản XHTML cuối cùng, phiên bản này hỗ trợ cho việc modul hoá XHTML. XHTML 1.1 thừa hưởng tính nghiêm ngặt của XHTML 1.0 Strict.
Ví dụ:
Khai báo DOCTYPE với phiên bản XHTML Basic DTD
XHTML Basic 1.0
XHTML Basic 1.1
Khai báo DOCTYPE với phiên bản XHTML Mobile Profile DTD
XHTML Mobile Profile 1.0
XHTML Mobile Profile 1.1
XHTML Mobile Profile 1.2
Khai báo DOCTYPE với phiên bản HTML5
HTML5 là phiên bản không dựa trên SGML nên khai báo <!DOCTYPE> không cần tham chiếu tới DTD nào cả. Và vì vậy khai báo <!DOCTYPE> trong HTML5 đơn giản như sau: