Sieć jest, ujmijmy to litościwie, raczej wyrozumiałym miejscem. Możesz karmić przeglądarki internetowe prawie każdym rodzajem kodu HTML czy JavaScript, a one dzielnie postarają się zrobić z tym coś sensownego i wyrenderować to w najlepszy możliwy sposób. Dla porównania, większość języków programowania jest niemal srodze bezlitosna. Jeśli choć jeden znak nie jest na swoim miejscu, Twój program prawdopodobnie się nie skompiluje, a tym bardziej nie uruchomi. W rezultacie, środowisko HTML + JavaScript jest raczej unikalną -- a często frustrującą -- platformą do tworzenia oprogramowania.
Ale tak nie musi być. Istnieją mechanizmy dające możliwość walidowania Twojego kodu HTML poprzez oficjalny Walidator W3C. Zabawa z walidatorem podkreśla tylko, jak głeboko polityka standardowej wyrozumiałości przenikneła do sieci. Dennis Forbes przepuścił ostatnio parę stron internetowych przez walidator, łącznie z tą, z przewidywalnie złym rezultatem:
FAIL - http://www.reddit.com - 36 błędów jako XHTML 1.0 Transitional. EDIT: Ponownie sprawdziłem Reddit i teraz jest PASS
FAIL - http://www.slashdot.org - 167 błędów jako HTML 4.01 Strict
FAIL - http://www.digg.com - 32 błędów jako XHTML 1.0 Transitional
FAIL - http://www.cnn.com - 40 błędów jako HTML 4.01 Transitional (wywnioskowane, iż nie było wyspecifikowanego doctype)
FAIL - http://www.microsoft.com - 193 błędów jako XHTML 1.0 Transitional
FAIL - http://www.google.com - 58 błędów jako HTML 4.01 Transitional
FAIL - http://www.flickr.com - 34 błędów jako HTML 4.01 Transitional
FAIL - http://ca.yahoo.com - 276 błędów jako HTML 4.01 Strict
FAIL - http://www.sourceforge.net - 65 błędów jako XHTML 1.0 Transitional
FAIL - http://www.joelonsoftware.com - 33 błędów jako XHTML 1.0 Strict
FAIL - http://www.stackoverflow.com - 58 błędów jako HTML 4.01 Strict
FAIL - http://www.dzone.com - 165 błędów jako XHTML 1.0 Transitional
FAIL - http://www.codinghorror.com/blog/ - 51 błędów jako HTML 4.01 Transitional
PASS - http://www.w3c.org - bez błędów jako XHTML 1.0 Strict
PASS - http://www.linux.com - bez błędów jako XHTML 1.0 Strict
PASS - http://www.wordpress.com - bez błędów jako XHTML 1.0 Transitional
W skrócie, żyjemy w zdeformowanym świecie. Tak bardzo, że zaczynasz wątpić w to, czy walidatory w ogóle mają rację bytu. Kiedy widzisz takie logo na stronie, co ono dla Ciebie znaczy? Jak bardzo wpłynie na Twoje odczucia związane z daną stroną? Z punktu widzenia programisty? Z punktu widzenia użytkownika?
Właśnie zrobiliśmy ćwiczenie polegające na zwalidowaniu kodu HTML strony Stack Overflow. Prawie od razu odrzuciłem pomysł walidowania jako XHTML, ponieważ jak najbardziej zgadzam się z Jamesem Bennettem
Prostym i słodkim powodem jest po prostu to: XHTML nie oferuje korzyści nie do odparcia -- jak dla mnie -- w porównaniu do HTMLa , ale nawet jeśli, to oferowałby również większą złożoność i niepewność, co według mnie nie byłoby atrakcyjne.
Całe to walidowanie HTMLa jest wątpliwe, ale walidowanie jako XHTML jest masochizmem pełną parą. Rekomendowane tylko tym, którzy lubią ból. Albo programistom. Nigdy ich nie rozróżniam.
Mimo wszystko zwalidowaliśmy stronę jako bardziej rozsądny HTML 4.01 strict, ale nawet teraz nie jestem pewien, czy warto było na to poświęcać czas. Wiele zasad walidacji wydaje się być dowolnymi i bez znaczenia. A co gorsza, niektóre z nich są najnormalniej szkodliwe. Na przykład poniższe nie jest dozwolone w HTML strict:
<a href="http://www.example.com/" target="_blank">foo</a>
Tak jest, target, całkowicie bezpieczny atrybut dla odnośników, które chcesz, aby się otwierały w osobnej zakładce bądź oknie przeglądarki, jest z jakiegoś powodu zabroniony w HTML 4.01 strict. Jest na to oficjalnie wspierane obejście, ale jest zaimplementowane jedynie przez Operę, więc w efekcie.. nie ma obejścia.
Aby dostosować się do walidatora HTML 4.01 strict, musisz pousuwać atrybuty target i w zamian wstawić JavaScript, który robi dokładnie to samo. Tak więc, natychmiast zacząłem się zastanawiać: Czy ktokolwiek waliduje nasz JavaScript? A co z CSS? Czy ktokolwiek waliduje nasze manipulacje na DOM'ie, które JavaScript uskutecznia na kodzie HTML? Kto waliduje walidator? Dlaczego nie mogę przestać myśleć o zebrach?
Czy naprawdę ma znaczenie to, czy wyrenderujemy coś w ten sposób..
<td width="80">
<br/>
.. czy w ten?
<td style="width:80px">
<br>
Znaczy się, kto wymyśla te zasady? I z jakiego powodu?
Nie mogłem się powstrzymać od uczucia, iż walidowanie jako HTML 4.01 sctrict, przynajmniej w naszym przypadku, było jednym wielkim ćwiczeniem na znajdowanie nic nieznaczących różnic, przerywanym denerwującymi zmianami, które byliśmy zmuszeni zrobić bez praktycznego zysku. (Co więcej, jeśli posiadasz masę zawartości wygenerowanej przez użytkowników, tak jak my, od razu możesz wyrzucić przez okno swoje marzenia o 100% zgodności.)
Po tym wszystkim, walidacja ma swoje uroki. Było parę rzeczy w naszym kodzie HTML, które proces walidacji uwydatnił, a które były wyraźnie źle - osamotniony tag tutaj, parę niekonsekwencji podczas aplikowania tagów tam. Mark Pilgrim przedstawia argumenty za walidacją:
Nie twierdzę, że Twoja strona raz zwalidowana, będzie się się bezbłędnie wyświetlać w każdej przeglądarce; może tak nie być. Nie twierdzę również, że nie ma utalentowanych twórców, którzy piszą strony w starym stylu, ze źle sformatowanym kodem HTML, które wyświetlają się bezbłędnie w każdej przeglądarce; z pewnością tacy są. Ale walidator to automatyczne narzędzie, które potrafi wyłapać małe, ale ważne błędy, które są trudne do ręcznego wytropienia. Jeśli w większości tworzysz walidujący się kod, możesz skorzystać z tej automatyzacji do wyłapywania sporadycznych błędów. Ale jeśli Twój kod nie przypomina nawet poprawnego, będziesz działał na oślep, jeśli coś pójdzie źle. Walidator wypluje dziesiątki, jak nie setki, błędów na Twojej stronie i znalezienie jednego, który w rzeczywistości powoduje Twój problem, będzie jak szukanie igły w stogu siana.
Jest w tym trochę prawdy. Przyswajanie zasad walidatora, nawet jak się z nimi nie zgadzasz, uczy Cię definicji "poprawności". Osadza Twój kod w rzeczywistości. To jest jak przepuszczenie swojego kodu przez bardzo restrykcyjny program walidujący typu lint bądź ustawienie opcji kompilatora na najbardziej rygorystyczny poziom. Wiedza na temat zasad i ograniczeń pomaga Ci zdefiniować to, co robisz i daje Ci uzasadnione argumenty na zgodzenie się z tym bądź nie. Możesz dokonać świadomego wyboru zamiast takiego w stylu "po prostu tak robię i to działa".
Po naszych przejściach związanych z walidacją HTML, oto moja rada:
-
Waliduj swój kod HTML. Wiedz co to znaczy mieć walidujący się kod HTML. Zrozum narzędzia. Więcej informacji to zawsze lepiej niż mniej informacji. Po co błądzić po omacku?
-
Nikogo nie obchodzi to, czy Twój kod HTML jest poprawny. Oprócz Ciebie. Jeśli tego chcesz. Nie pomyśl sobie, że wyprodukowanie idealnie walidującego się kodu HTML jest ważniejsze od uruchomienia swojej strony, dostarczania funkcjonalności, które cieszą użytkowników albo od skończenia swojej pracy.
Ale pytanie pozostaje: czy walidacja HTML faktycznie ma znaczenie? Tak. Nie. Może. To zależy. Powiem Wam to samo, co mi powiedział mój ojciec: to jest moja rada, a zrobisz z tym co chcesz.
Data publikacji oryginału: 5 marca, 2009