Xhtml là gì?
XHTML (Ngôn ngữ đánh dấu siêu văn bản có thể mở rộng – EXtensible Hypertext Markup Language) là một ngôn ngữ đánh dấu có cùng các khả năng như HTML, nhưng có cú pháp chặt chẽ hơn. Nói chung, W3C định nghĩa XHTML là phiên bản HTML mới nhất, sẽ dần thay thế nó. XHTML như một bước trung gian giữa hai ngôn ngữ, đã được phát triển để thu hẹp khoảng cách giữa HTML và XML.
XHTML 1.0 trở thành Khuyến nghị của Hiệp hội mạng toàn cầu (W3C) vào ngày 26 tháng 1 năm 2000. XHTML 1.1 trở thành Khuyến nghị của W3C vào ngày 31 tháng 5 năm 2001. Tiêu chuẩn được gọi là XHTML5 đang được phát triển dưới dạng thích ứng XML của HTML5.
HTML và XHTML giống và khác nhau những gì?
Có nhiều sự khác biệt giữa XHTML và HTML. Các Document Object Model (DOM) là một cấu trúc cây đại diện cho trang nội bộ trong các ứng dụng, và XHTML và HTML hai cách khác nhau để trình bày rằng trong đánh dấu. Cả hai đều ít biểu cảm hơn DOM – ví dụ: “-” có thể được đặt trong các nhận xét trong DOM, nhưng không thể được trình bày trong một nhận xét bằng XHTML hoặc HTML – và nói chung cú pháp XML của XHTML biểu cảm hơn HTML (ví dụ: không gian tên tùy ý không được phép trong HTML). XHTML sử dụng cú pháp XML, trong khi HTML sử dụng SG- SGMLcú pháp (chính thức là SGML cho HTML 4 trở xuống, nhưng không bao giờ trong thực tế và được chuẩn hóa từ SGML trong HTML5). Do nội dung có thể biểu thị của DOM theo cú pháp hơi khác nhau, nên có một số thay đổi trong hành vi thực tế giữa hai mô hình.
Đầu tiên, có một số khác biệt về cú pháp:
- Nói chung, các quy tắc XML yêu cầu tất cả các phần tử phải được đóng, bằng một thẻ đóng riêng hoặc sử dụng cú pháp tự đóng (ví dụ <br/>), trong khi cú pháp HTML cho phép một số phần tử không được tiết lộ vì chúng luôn trống (ví dụ <input>) hoặc phần cuối của chúng có thể được xác định ngầm (“omissility”, vd <p>).
- XML phân biệt chữ hoa chữ thường cho tên thành phần và thuộc tính, trong khi HTML thì không.
- Một số tính năng tốc ký trong HTML bị bỏ qua trong XML, chẳng hạn như tối thiểu hóa thuộc tính (1) , trong đó các giá trị thuộc tính hoặc dấu ngoặc kép của chúng có thể bị bỏ qua (ví dụ <option selected>, hoặc <option selected=selected>trong XML phải được thể hiện dưới dạng ); (2) tối thiểu hóa phần tử có thể được sử dụng để loại bỏ hoàn toàn các phần tử (chẳng hạn như được suy ra trong bảng nếu không được đưa ra); và (3) cú pháp SGML hiếm khi được sử dụng để giảm thiểu phần tử (“shorttag”), mà hầu hết các trình duyệt không thực hiện. <option selected=”selected”><tbody>
- Có rất nhiều yêu cầu kỹ thuật khác xung quanh không gian tên và phân tích chính xác khoảng trắng và các ký tự và thành phần nhất định.
Ngoài những khác biệt về cú pháp, có một số khác biệt về hành vi, chủ yếu phát sinh từ những khác biệt cơ bản trong việc trình tự hóa. Ví dụ:
- Hành vi về lỗi phân tích khác nhau. Lỗi phân tích cú pháp nghiêm trọng trong XML (chẳng hạn như cấu trúc thẻ không chính xác) khiến việc xử lý tài liệu bị hủy bỏ.
- Hầu hết nội dung yêu cầu không gian tên sẽ không hoạt động trong HTML, ngoại trừ hỗ trợ tích hợp cho SVG và MathML trong trình phân tích cú pháp HTML5 cùng với các tiền tố nhất định như xlink.
- Xử lý JavaScript khác với XHTML, với các thay đổi nhỏ về độ nhạy trường hợp đối với một số chức năng và các biện pháp phòng ngừa khác để hạn chế xử lý đối với nội dung được định dạng tốt. Các kịch bản không được sử dụng phương thức; nó không có sẵn cho XHTML. Tài sản có sẵn, nhưng sẽ không chèn nội dung không được hình thành. Mặt khác, nó có thể được sử dụng để chèn nội dung có tên được định dạng tốt vào XHTML.document.write()innerHTML
- Cascading Style Sheets (CSS) cũng được áp dụng khác nhau. Do phân biệt chữ hoa chữ thường của XHTML, tất cả các bộ chọn CSS trở nên phân biệt chữ hoa chữ thường cho các tài liệu XHTML. Một số thuộc tính CSS, chẳng hạn như nền, được đặt trên thành <body>phần trong HTML được ‘kế thừa lên trên’ vào thành <html>phần; điều này xuất hiện không phải là trường hợp của XHTML.
Các phần tử phải được lồng nhau đúng cách:
- Trong HTML một số phần tử có thể được lồng vào nhau không đúng cách như thế này.
<b><i>This text is bold and italic</b></i>
- Trong XHTML tất cả các phần tử phải được lồng vào nhau đúng cách như thế này:
<b><i>This text is bold and italic</i></b>
Chú ý: Một lỗi thường thấy ở các danh sách gạch đầu dòng lồng vào nhau mà quên mất rằng danh sách bên trong phải được đặt trong phần tử li. Ví dụ:
<ul> <li>Coffee</li> <li>Tea <ul> <li>Black tea</li> <li>Green tea</li> </ul> <li>Milk</li> </ul>
Đây mới là đúng:
<ul> <li>Coffee</li> <li>Tea <ul> <li>Black tea</li> <li>Green tea</li> </ul> </li> <li>Milk</li> </ul>
Phải có đặt ở dạng chuẩn (well-formed)
Tất cả các phần tử XHTML phải được đặt lồng bên trong phần tử gốc <html>. Tất cả các phần tử khác có thể có các phần tử con. Các phần tử con phải đi theo cặp và phải được đặt lồng nhau đúng cách bên trong phần tử mẹ. Cấu trúc tài liệu cơ bản là:
<html> <head>... </head> <body>... </body> </html>
Tên gọi của thẻ đều phải viết thường
Do XHTML kế thừa cú pháp của XML và mỗi trang XHTML đều là các ứng dụng XML cho nên XHTML có phân biệt chữ hoa chữ thường, điều không có ở HTML. Với HTML thì các thẻ như <br> và <BR> là hiểu là giống nhau nhưng một khi bạn đã xác định trang web của bạn là XHTML thì trình duyệt sẽ dịch hai thẻ này là khác nhau.
HTML chấp nhận cách viết dưới:
<BODY> <P>This is a paragraph</P> </BODY>
XHTML đòi hỏi phải viết lại phần trên thành:
<body> <p>This is a paragraph</p> </body>
Tất cả các phần tử XHTML phải được đóng lại
Phần tử không rỗng phải có một thẻ đóng. HTML chấp nhận cách viết dưới:
<p>This is a paragraph <p>This is another paragraph
XHTML đòi hỏi phải viết lại phần trên thành:
<p>This is a paragraph</p> <p>This is another paragraph</p>
Các phần tử rỗng cũng phải được đóng lại
Các phần tử rỗng hoặc là phải có thể đóng hoặc là thẻ khởi đầu phải được kết thúc bằng />. HTML chấp nhận cách viết dưới:
This is a break<br> Here comes a horizontal rule:<hr> Here's an image <img src="happy.gif" alt="Happy face">
XHTML đòi hỏi phải viết lại phần trên thành:
This is a break<br /> Here comes a horizontal rule:<hr /> Here's an image <img src="happy.gif" alt="Happy face" />
Chú ý quan trọng
Để làm cho trang XHTML tương thích với các trình duyệt hiện nay thì nên đặt một khoảng trắng thêm vào trước ký tự / kiểu như <br />, và:
<hr />
Các giá trị của thuộc tính phải được đặt trong dấu nháy kép
HTML chấp nhận cách viết dưới:
<table width=100%>
XHTML đòi hỏi phải viết lại phần trên thành:
<table width="100%">
Việc tối giản thuộc tính là bị nghiêm cấm
HTML chấp nhận cách viết dưới:
- <dl compact>
- <input checked>
- <input readonly>
- <input disabled>
- <option selected>
- <frame noresize>
XHTML đòi hỏi phải viết lại phần trên thành:
- <dl compact=”compact”>
- <input checked=”checked” />
- <input readonly=”readonly” />
- <input disabled=”disabled” />
- <option selected=”selected” />
- <frame noresize=”noresize” />