Reklama

Stat4u

Stat4u

Walidator - narzędzie każdego twórcy stron WWW

Prawie każdy, kto tworzy jakąś stronę, zawsze przed publikacją sprawdza czy nie zrobił literówek, błędów ortograficznych itp. Mało osób jednak sprawdza strony pod kątem występowania w nich błędów składniowych.

Ale po co?

Komputer nie jest zupełnie niezależny, wszystko co robi zostało w jakiś sposób zaprogramowane przez człowieka. Jeśli człowiek czegoś nie przewidział to dla komputera powstaje problem. Nieprzewidziane sytuacje pociągają za sobą nieprzewidziane reakcje.

Języki hipertekstowe są bardzo dobrze udokumentowane. Ich tworzeniem i wytyczaniem standardów zajmuje się World Wide Web Consortium, czyli w skrócie W3C. W językach hipertekstowych istnieje dowolność jeśli chodzi o zawartość opisywaną tymi językami, ale jeśli chodzi o składnię to sprawa już jest bardziej skomplikowana. Istnieją różne języki hipertekstowe, jedne bardziej restrykcyjne, inne mniej, ale wszystkie wymagają pewnych stałych elementów i poprawnej budowy. Na ustalonych zasadach tworzenia dokumentów hipertekstowych bazują programiści tworząc przeglądarki stron WWW i roboty przeczesujące zasoby sieci.

Każdy z nas wie, że do umieszczenia obrazka na stronie służy znacznik <img />, tak samo wiemy, że do tworzenia hiperłączy używamy znacznika <a />. Ale czy wszyscy wiemy jakie są zasady używania tych znaczników? Przecież nie każdy z nas czytał specyfikację używanego języka hipertekstowego.Popełniamy masę błędów, programiści muszą przewidzieć nasze błędy i zaprogramować przeglądarki tak, żeby interpretowały te błędne zapisy tak jak my, tworzący strony, chcielibyśmy, żeby było interpretowane.

Swego czasu, w drugiej połowie lat dziewięćdziesiątych, w okresie bardzo dynamicznego rozwoju Internetu (a w tym stron WWW) coraz mniejsza znajomość specyfikacji wśród tworzących strony spowodowała, że programiści tak rozbudowywali swoje przeglądarki, aby "rozumiały błędne strony", że przeglądarki stały się powolne i ociężałe. Po kilku latach wielu producentów zupełnie zapomniało o standardach i przystosowało swoje produkty do błędnych stron, w skutek czego wiele stron napisanych poprawnie było błędnie interpretowanych.

Ten zły tok wydarzeń przerwała grupa programistów Netscape tworząc silnik Gecko, będący teraz podstawą przeglądarek takich jak Mozilla, Mozilla Firefox czy Camino. W silniku tym położono nacisk na zgodność ze standardami, a "obsługę błędów" potraktowano jako zło konieczne - jest, ale lepiej żeby jej nie było.

Walidując stronę szukasz błędów, eliminując te błędy przyczyniasz się do zamknięcia błędnego koła, które wciąż, niestety, się toczy. Oprócz tego, poprawnie zbudowana strona ma większe szanse w rankingach wyszukiwarek, jest bardziej przystępna dla osób korzystajacych z przeglądarek tekstowych czy czytaczy ekranowych i jest dumą każdego webmastera :-)

O walidatorze W3.org krótko

Walidator jest dostępny pod adresem: http://validator.w3.org. Po załadowaniu tej strony mamy do dyspozycji dwa formularze. Jeden służy do sprawdzania stron już dostępnych w sieci, drugi do sprawdzania stron poprzez załadowanie ich do walidatora.

Każdy z tych dwóch formularzy ma swój rozszerzony odpowiednik, które oferują różne opcje. Najważniejsze z nich to:

Encoding
Kodowanie, wybór kodowania dokumentu (jeśli nie zostało określone). Domyślnie kodowanie jest rozpoznawane automatycznie
Doctype
Typ dokumentu. Standardowo jest rozpoznawany automatycznie, jednak jeśli typ nie został zdefiniowany w dokumencie należy wybrać jeden z listy.
Use Fallback instead of Override
Zamienia typ dokumentu lub kodowanie dla dokumentów, które nie mają określonego typu lub kodowania.
Show source
Pokazuje źródło walidowanego dokumentu.
Show parse tree
Pokazuje sposób w jaki walidator sprawdzał dokument.
...exclude attributes
Nie pokazuje atrybutów w drzewie stworzonym przy użyciu opcji Show parse tree.
Show outline
Pokazuje i sprawdza drzewo logiczne dokumentu. Dzięki tej opcji można zobaczyć między innymi czy prawidłowo zostały zastosowane nagłówki z odpowiednimi poziomami.
Validate error pages
Jeśli walidator napotka na błąd to zasygnalizuje to i nie będzie przeprowadzał sprawdzania. Jednak jeśli to właśnie strona z błędem (na przykład 404) ma zostać sprawdzona to właśnie ta opcja powinna zostać zaznaczona.
Verbose output
Powoduje, że wyniki pracy walidatora będą opisane obszerniej.

Walidacja i interpretacja jej wyników

Walidacja jest procesem, którego wynik może być dwojaki: strona waliduje się (nie zawiera błędów) lub strona nie waliduje się. Nie można wyróżnić żadnych wartości pośrednich typu "strona prawie waliduje się". Dlatego należy zawsze doprowadzać do stanu, w którym strona się waliduje - liczba błędów musi być równa zero. Co prawda, są sytuacje, w których walidator, jak każdy program, zawodzi, ale zdarzają się one niezmiernie rzadko.

W przypadku, gdy dokument jest skonstruowany poprawnie walidator bardzo jasno nam o tym mówi proponujac umieszczenie na stronie specjalnego znaczka, który informuje odwiedzających, że autor przyłożył się do swojej pracy i oferuje im produkt najwyższej jakości ;-)

Ale jeśli coś nie jest po myśli walidatora, to wtedy wszystkie błędy są autorowi wytykane. Walidator dokładnie opisuje co jest przyczyną problemu, a nawet mówi jak można się pozbyć tego błędu.

Jeśli wystąpią błędy, walidator wyświetla dodatkowe informacje na temat walidowanego dokumentu. Są wśród nich: nazwa serwera HTTP, który serwuje dokument, typ MIME dokumentu, jego rozmiar, rozpoznany typ języka hipertekstowego, kodowanie oraz ilość błędów.

Najczęściej spotykane błędy

Błędów człowiek może popełnić masę, jednak wśród twórców stron, jest kilkanaście błędów na tyle popularnych, że można je uznać za plagę. Oto one:

No document type declaration; implying "<!DOCTYPE HTML SYSTEM>"
Walidator nie znalazł w dokumencie definicji jego typu, czyli tak zwanego Doctype. Linijka ta jest wymagana i służy między innymi do poinformowania przeglądarki z jakim typem dokumentu ma styczność i jak powinna go interpretować. W przypadku nie odnalezienia tej linijki walidator stosuje własną definicję (system).
Required attribute "TYPE" not specified
Required attribute "ALT" not specified
Nie został określony atrybut, który jest wymagany w znaczniku. W znaczniku <script /> należy określić typ MIME skryptu właśnie stosując atrybut type. W znaczniku <img /> należy wpisać tekst alternatywny (taki, który pojawi się zamiast obrazka, jeśli on się nie załaduje). Tekst ten powinien być w atrybucie alt.
Document type does not allow element "LINK" here
Znacznik, w tym wypadku <link /> został umieszczony w nieodpowiednim miejscu w dokumencie. Najczęściej bywa tak, jeśli (tak jak tutaj) używamy tego znacznika poza sekcją head dokumentu lub wstawiamy element obiektowy do elementu inline.
There is no attribute "BORDERCOLOR"
W definicji typu dokumentu nie wymieniono takiego atrybuty w opcjach znacznika. Czasami jest to literówka, a czasami, tak jak tutaj, niestandardowe rozszerzenie jednego z producentów przeglądarek.
End tag for "HEAD" which is not finished
Walidator nie spodziewał się zakończenia sekcji head. Najczęstszym powodem wygenerowania takiego komunikatu jest brak tagu <title /> lub jego umiejscowienie poza tą sekcją. Walidator niestety nie mówi tego wprost, ale można wywnioskować to z definicji typu dokumentu, w której jest napisane, że sekcja head wymaga, aby był w niej umieszczony znacznik <title />. Analogiczna sytuacja jest z innymi znacznikami, które wymagają obecności innych znaczników jak na przykład <html />, który wymaga w sobie znaczników <head /> i <body />.
Element "ZNACZNIK" undefined
W definicji typu dokumentu nie ma znacznika o takiej nazwie.
End tag for "br" omitted, but OMITTAG NO was specified
End tag for "img" omitted, but OMITTAG NO was specified
End tag for "DIV" omitted, but its declaration does not permit this
Nie znaleziono znacznika kończącego otwarty znacznik. W definicji typu dokumentu określono, że ten znacznik nie może pozostać otwarty.
Start tag was here
W połączeniu z poprzednim błędem, komunikat ten sygnalizuje krzyżowanie znaczników (czyli <a><b></a></b>).
End tag for element "TD" which is not open
Walidator znalazł znacznik zamykający, ale nie znalazł odpowiadającego znacznika otwierającego. Nie zawsze oznacza to, że znacznik nie został otwarty. Po prostu znacznik otwierający mógł zostać zamknięty przez inny znacznik (odpowiadający, w założeniu autora innemu, ale w drzewie dokumentu odpowiadający innemu znacznikowi). Pojawienie się takiego komunikatu informuje, że w kodzie czegoś zapomniano, a jak wiadomo jeden błąd może lawinowo wygenerować inne. Taka sytuacja szczególnie często zdarza się podczas tworzenia tabel.
ID "IDENTYFIKATOR" first defined here
ID "IDENTYFIKATOR" already defined
Identyfikator, z założenia unikalny w dokumencie, został przypisany więcej niż jednemu obiektowi.Może warto skorzystać z klas?
An attribute value must be a literal unless it contains only name characters
An attribute value specification must be an attribute value literal unless SHORTTAG YES is specified
Pod tym, jakże skomplikowanym opisem błędu, kryje się informacja o tym, że wartość atrybutu powinna być ujęta w cudzysłowy (a właściwie symbole cala) - "
Reference to entity "opcja" for which no system identifier could be generated
Entity was defined here
Nie istnieje encja &opcja;, która została użyta. Problem ten najczęściej występuje podczas zapisu skomplikowanych linków. Wiele linków ma postać: http://www.serwer.pl/index.php?a=b&opcja=c. Występujący w nich znak ampersand należy zapisać przy pomocy encji: http://www.serwer.pl/index.php?a=b&amp;opcja=c. Walidator napotykając na ten znak w linku zaczyna szukać encji o nazwie takiej jak występujące po tym znaku litery.
Value of attribute "ID" invalid: "1" cannot start a name
Nazwa identyfikatora nie może zaczynać się cyfrą, musi to być litera.

Warunkowo poprawny

Kiedy w dokumencie nie określono typu dokumentu lub kodowania walidator przyjmuje wartości domyślne dla niego. Oczywiście można je zmienić, ale to nie jest sednem sprawy. Jeśli dokument nie zawiera innych błędów poza tymi dwoma brakami to jest on poprawny warunkowo (ang. Tentatively Valid). Oczywiście nie można na tym poprzestać. Należy uzupełnić braki by móc cieszyć się pełną zgodnością.

Błędy w działaniu walidatora

Walidator, jak każdy program nie jest pozbawiony błędów i niedoskonałości. Nigdy nie można być w stu procentach pewnym jego decyzji. Dość często walidatorowi zdarza się informować o błędzie, którego tak naprawdę nie ma w tym miejscu, w którym walidator go upatruje. Jest on spowodowany innym błędem, który oddziaływuje na tę część kodu, na którą zwrócił uwagę walidator.

Również walidowanie dokumentów XML nie jest idealne. Przykładem może być tutaj walidowanie dokumentu stworzonego przy użyciu XHTML 1.1, który wymaga, aby dokumenty były serwowane jako application/xhtml+xml. Walidator nie sprawdza typu, więc, jeśli dokument jest poprawny składniowo, to walidator uzna go za walidujący się, mimo niespełnienia tego jednego, ważnego szczegółu.

Znany jest również sposób na oszukanie walidatora wpisując nieistniejące tagi na stronę przy pomocy JavaScriptu. Taki trick jest stosowany między innymi przez Wirtualną Polskę, która szczyci się walidującą się stroną główną. Moim zdaniem jednak, stosując takie oszustwo nie powinno się mówić o poprawności dokumentu.

Logo

Jeśli strona jest poprawna składniowo, walidator proponuje wklejenie kodu na swoją stronę. Kod ten wyświetla logo z informacją o zgodności oraz stanowi odnośnik do wyników walidacji tego dokumentu.

© Krzysztof Sawicki