W języku XHTML zapisano fragment kodu, który zawiera błąd walidacji. Na czym polega ten błąd?
<h6>tekst</h6> <p>pierwsza <b>linia</b> <br> Druga linia</p>
A. Znacznik <b> nie może być zagnieżdżany w znaczniku <p>.
B. Znacznik <br> powinien być zamknięty.
C. Nie istnieje nagłówek szóstego stopnia.
D. Znaczniki należy pisać wielkimi literami.
W XHTML element br jest elementem pustym, czyli nie ma treści między znacznikiem otwierającym i zamykającym. Ponieważ XHTML opiera się na składni XML, każdy element musi być poprawnie zamknięty. Zapis <br> jest typowy dla luźniejszego HTML-a, ale w XHTML powoduje błąd walidacji. Poprawny zapis to najczęściej <br />, ewentualnie formalnie można spotkać <br></br>, choć w praktyce prawie zawsze używa się wersji samozamykającej. To jest właśnie sedno błędu w podanym fragmencie. Reszta kodu nie łamie zasad XHTML: nagłówek h6 istnieje, element b może znajdować się wewnątrz akapitu p, a znaczniki w XHTML zapisuje się małymi literami, nie wielkimi. Z mojego doświadczenia warto zapamiętać prostą zasadę: w XHTML trzeba pilnować domykania wszystkiego, nawet elementów pustych takich jak img, meta, link, input czy właśnie br. Walidator W3C od razu takie rzeczy wychwyci, a poprawny kod jest potem łatwiejszy do utrzymania i mniej zaskakuje w różnych parserach.
W tym pytaniu łatwo pomylić zasady klasycznego HTML-a z bardziej rygorystycznym XHTML-em. Element b może być zagnieżdżony w elemencie p, bo jest elementem liniowym używanym wewnątrz treści tekstowej. Oczywiście obecnie, ze względów semantycznych, często lepiej używać strong, gdy chodzi o ważność tekstu, a nie tylko pogrubienie, ale sam zapis z b w akapicie nie jest błędem walidacji. Nagłówek h6 również jak najbardziej istnieje. HTML i XHTML definiują poziomy nagłówków od h1 do h6, gdzie h1 jest zwykle najważniejszy, a h6 najmniej istotny w strukturze dokumentu. Myślenie, że szósty poziom nie istnieje, wynika czasem z tego, że rzadko się go używa w prostych stronach, ale standard go przewiduje. Niepoprawne jest też przekonanie, że znaczniki należy pisać wielkimi literami. W dawnym HTML-u wielkość liter bywała tolerowana, natomiast XHTML jest oparty na XML, więc nazwy elementów są rozróżniane pod względem wielkości liter i standardowo zapisuje się je małymi literami. Prawdziwy problem dotyczy elementu br. Przeglądarka może łaskawie wyświetlić stronę mimo zapisu <br>, ale walidator XHTML potraktuje to jako błąd, bo element nie został zamknięty. Poprawnie powinno być <br />. To dobry przykład, że działanie w przeglądarce nie zawsze oznacza poprawność według standardu.