2013-05-17 17 views
9

Tôi đã là người dùng lâu năm của XHTML 1.0 Strict và hiện tôi đang cố gắng chuyển sang XHTML5 trong các dự án mới của mình.nhầm lẫn về xhtml5: không còn `<?xml?>` và bây giờ bắt buộc `meta`?

Tôi bị nhầm lẫn rằng <?xml version='1.0' encoding='utf-8'?> không còn được coi là hợp lệ, cho HTML5, bởi http://validator.w3.org/. Tại sao vậy? Đó không phải là những gì tất cả các tài liệu xml có nghĩa vụ phải bắt đầu với?

Và khi tôi xóa tiêu chuẩn <?xml & hellip ;, tài liệu của tôi vẫn không xác thực: giờ thiếu mã hóa. Tôi không thích những thẻ meta, nhưng bây giờ chúng có hiệu quả bắt buộc không, để chỉ định mã hóa, để có giá trị (X) HTML5?

Trả lời

8

Tuyên bố XML hợp lệ và xác thực trong tuần tự hóa XHTML của HTML5. Tài liệu dưới đây khá tối thiểu xác nhận:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title></title></head> 
<body></body> 
</html> 

Tuy nhiên, điều này chỉ áp dụng cho xHTML serialization (cú pháp XHTML) của HTML5. Trong tuần tự hóa HTML, nó không được phép. Nếu bạn viết các tài liệu nêu trên trong một tập tin và lưu trữ nó trong một máy chủ sẽ gửi nó với Content-Type: text/html (mà thường xảy ra nếu tên tập tin kết thúc với “.html”), sau đó bạn nhận được một thông báo lỗi:

Saw <?. Probable cause: Attempt to use an XML processing instruction in HTML. 
(XML processing instructions are not supported in HTML.) 

Ở đây "HTML" có nghĩa là tuần tự HTML.

Trình duyệt không quan tâm đến khai báo XML theo một trong hai cú pháp. Trong cú pháp HTML, nó chỉ bị bỏ qua, như một lỗi cú pháp có thể phục hồi. Trong cú pháp XHTML, nó không quan trọng, ngoại trừ phần encoding.

Mặc dù đặc tả XML 1.0 đề xuất (nhưng không yêu cầu) XML declaration, nó sẽ có vấn đề thực tế (ngoài tầm quan trọng của encoding) chỉ cho phần mềm có khả năng xử lý các phiên bản XML khác nhau. Trình duyệt không phải là. Và ngoài XML 1.0, chỉ có XML 1.1, không được sử dụng nhiều. Bên cạnh đó, HTML5 được định nghĩa sao cho phiên bản XML được sử dụng trong cú pháp XHTML là XML 1.0.

Phần encoding có thể quan trọng, nhưng utf-8 là giá trị mặc định cho XML. Nếu bạn sử dụng một mã hóa khác vì một lý do nào đó, thì một khai báo XML có thể hữu ích để ngăn chặn bất kỳ xung đột nào. HTML5 CR nói điều này trong đó discussion of encodings: “Trong XHTML, khai báo XML nên được sử dụng cho thông tin mã hóa ký tự nội tuyến, nếu cần.” Thẻ meta không thực sự hữu ích trong XHTML khi được cung cấp với loại nội dung XML, vì mã hóa đã được quyết định (theo mặc định là UTF-8 hoặc cách khác) khi thẻ được nhìn thấy.

Đối với cú pháp HTML, <meta charset=...> thẻ thể được sử dụng, nhưng nó không phải là cần thiết cho tính hợp lệ, và mã hóa có thể được quy định tại tiêu đề HTTP (trong đó ghi đè lên bất kỳ meta thẻ). Tuy nhiên, việc sử dụng thẻ meta có thể hữu ích vì một trang có thể được lưu cục bộ và sau đó sẽ không có bất kỳ tiêu đề HTTP nào khả dụng khi mở.