Szkielet dokumentu#

Postać ogólna#

Podstawowy szablon dokumentu HTML5 został bardzo uproszczony. Może wyglądać następująco:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Podstawa HTML5</title>
	</head>
	<body>

	<!-- Dowolna treść -->

	</body>
</html>

I to by było na tyle. Prosty DOCTYPE, prosta deklaracja kodowania, można zapamiętać bez problemu w porównaniu z wygibasami HTML4 i pozostałymi odmianami XHTML 1.x.

Jest to bezpieczny szablon o czytelnej strukturze, przeznaczony wprost do stron WWW. Istnieją jednak przypadki, kiedy będzie go można jeszcze bardziej uprościć, a dokumenty HTML5 wciąż pozostaną poprawne składniowo. Przeanalizujmy oddzielnie pewne szczegóły tego szablonu.

Uproszczona wersja#

Prawdę mówiąc najprostsza wersja poprawnego dokumentu HTML5 musi spełniać następujące wymagania w takiej kolejności:

  1. Opcjonalny pojedynczy znak BOM (U+FEFF)
  2. Dowolna liczba komentarzy lub znaków spacji
  3. DOCTYPE
  4. Dowolna liczba komentarzy lub znaków spacji
  5. Element główny (korzeń), w postaci tagu html
  6. Dowolna liczba komentarzy lub znaków spacji

Znaki spacji przed korzeniem html a także znaki spacji na początku elementu html i przed elementem head są usuwane podczas parsowania dokumentu (nie pojawią się jako węzły tekstowe w drzewie DOM). Znaki spacji za korzeniem html będą przetwarzane tak, jakby były umieszczone na końcu elementu body. Czyli można powiedzieć, że znaki spacji wokół głównego elementu nie są traktowane identycznie. Już o tym wspominałem nieco wcześniej, proszę dokładnie zwrócić uwagę na grafikę obrazującą drzewo DOM.

Termin "znaki spacji" został ściśle określony w specyfikacji HTML5.

Sugeruje się żeby wstawiać nową linię po deklaracji DOCTYPE, po każdym komentarzu umieszczonym przed głównym elementem, po znaczniku otwierającym <html> (jeśli nie został pominięty), i po wszelkich komentarzach umieszczonych wewnątrz elementu html, ale przed elementem head.

Czyli możemy napisać tak:

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!-- Początek dokumentu HTML5 -->
<!DOCTYPE html>
<!-- Nasza właściwa struktura -->
<html>

</html>
<!-- Koniec naszego dokumentu HTML5 -->

Takie są wytyczne samej specyfikacji HTML5. W niektórych wypadkach można nawet pominąć element html.

Walidacja uproszczonego zapisu ogólnodostępnymi narzędziami (np. tego z W3C, który dla HTML5 wprowadził eksperymentalny parser Validator.nu) prawdopodobnie zwróci nam wiele błędów. Trzeba pamiętać, że narzędzia takie tworzone są przez osoby trzecie i nie muszą w 100% zgadzać się z każdym punktem specyfikacji. Walidatory mogą niektóre złożenia traktować jako błędy, np. umieszczenie czegokolwiek przed DOCTYPE włącza tryb Quirks w przeglądarce IE - program w tym miejscu odradza taką składnię i zalicza ją do błędów.

DOCTYPE#

Deklaracja DOCTYPE jest obowiązkowa w przypadku składni HTML5. Jest ona wymagana tylko ze względów historycznych. Kiedy zostanie pominięta, przeglądarki stosują inny tryb renderowania strony, który jest niezgodny z obecnymi standardami. Mechanizm wyboru starszego trybu renderowania zostawiono w celu zapewnienia kompatybilności z bardzo starymi stronami.

Przypominam tylko, że DOCTYPE nie wymusza na przeglądarce sposobu parsowania dokumentu (traktowania go jak HTML5 lub XHTML5). Pisałem już o tym wielokrotnie (link1, link2 , link3, link4).

Wersja skrócona#

DOCTYPE musi składać się z elementów w następującej kolejności:

  1. Ciąg znaków ASCII (wielkość bez znaczenia) pasującego do łańcucha "<!DOCTYPE"
  2. Jeden lub więcej znaków spacji
  3. Ciąg znaków ASCII (wielkość bez znaczenia) pasującego do łańcucha "html"
  4. Opcjonalnie stosować DOCTYPE legacy string lub obsolete permitted DOCTYPE string
  5. Zero lub więcej znaków spacji
  6. Znak U+003E GREATER-THAN SIGN (>)

Innymi słowy wszystko co pasuje do ciągu <!DOCTYPE html> (niezależnie od wielkości znaków) będzie prawidłowe dla HTML5. Przykładowo wyszukiwarka firmy Google stosuje taki zapis <!doctype html>. Czyli mamy dużą dowolność co do wielkości znaków umieszczanych w deklaracji DOCTYPE.

Skrócona wersja została tak dobrana, że nawet najstarsze przeglądarki (pokroju IE6) nie mają żadnych problemów z prawidłową interpretacją - czyli wymuszeniem renderowania zgodnego ze standardami.

DOCTYPE legacy string#

Dla narzędzi generujących kod HTML, które nie mogą wyprowadzić skróconej wersji DOCTYPE udostępniono tzw. DOCTYPE legacy string. Jest to ciąg znaków, który należy ewentualnie wstawić w 4 punkcie algorytmu deklaracji DOCTYPE (wersja skrócona). Składnia takiego łańcucha musi spełniać następujące warunki:

  1. Jeden lub więcej znaków spacji
  2. Ciąg znaków ASCII (wielkość bez znaczenia) pasującego do łańcucha "SYSTEM"
  3. Jeden lub więcej znaków spacji
  4. Znak U+0022 QUOTATION MARK lub U+0027 APOSTROPHE (cudzysłów lub apostrof)
  5. Łańcuch about:legacy-compat (z zachowaniem wielkości znaków)
  6. Odpowiadający znak zamykający U+0022 QUOTATION MARK lub U+0027 APOSTROPHE (tzn. ten sam znak, jak w kroku 4)

Innymi słowy następujące zapisy będą prawidłowe (wielkość znaków w łańcuchach bez znaczenia z wyjątkiem tekstu umieszczonego w apostrofach lub cudzysłowach):

  1. L
  2. K
  3. T'
  4. T
  5. A
  6. O
  7. Z'
  8. Z
  9. #
<!DOCTYPE html SYSTEM "about:legacy-compat">
<!doctype html system 'about:legacy-compat'>

Oczywiście DOCTYPE legacy string nie powinien być generowany w systemach, które są w stanie wyprowadzić wersję skróconą.

Obsolete permitted DOCTYPE string#

Aby ułatwić autorom migrację z HTML4 i XHTML1, można umieszczać tzw. obsolete permitted DOCTYPE. Jest to przestarzały (ale dozwolony) ciąg znaków, który należy ewentualnie wstawić w 4 punkcie algorytmu deklaracji DOCTYPE (wersja skrócona). Składnia takiego łańcucha musi spełniać następujące warunki:

  1. Jeden lub więcej znaków spacji
  2. Ciąg znaków ASCII (wielkość bez znaczenia) pasującego do łańcucha "PUBLIC"
  3. Jeden lub więcej znaków spacji
  4. Znak U+0022 QUOTATION MARK lub U+0027 APOSTROPHE (pierwszy cudzysłów lub apostrof)
  5. Łańcuch znaków z pierwszej komórki poniższej tabeli.
  6. Odpowiadający znak zamykający U+0022 QUOTATION MARK lub U+0027 APOSTROPHE (tzn. ten sam znak, jak w kroku 4)
  7. Jeśli komórka w drugiej kolumnie wybranej opcji (krok 5) nie jest pusta, jeden lub więcej znaków spacji
  8. Jeśli komórka w drugiej kolumnie wybranej opcji (krok 5) nie jest pusta, znak U+0022 QUOTATION MARK lub U+0027 APOSTROPHE (trzeci cudzysłów lub apostrof)
  9. Jeśli komórka w drugiej kolumnie wybranej opcji (krok 5) nie jest pusta, wartość tej komórki
  10. Jeśli komórka w drugiej kolumnie wybranej opcji (krok 5) nie jest pusta, odpowiadający znak zamykający U+0022 QUOTATION MARK lub U+0027 APOSTROPHE (tzn. ten sam znak, jak w kroku 8)

Poniższa tabela zawiera dozwolone wartości dla publicznych i systemowych identyfikatorów w przestarzałej deklaracji DOCTYPE:

Public identifierSystem identifier
-//W3C//DTD HTML 4.0//EN
-//W3C//DTD HTML 4.0//ENhttp://www.w3.org/TR/REC-html40/strict.dtd
-//W3C//DTD HTML 4.01//EN
-//W3C//DTD HTML 4.01//ENhttp://www.w3.org/TR/html4/strict.dtd
-//W3C//DTD XHTML 1.0 Strict//ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
-//W3C//DTD XHTML 1.1//ENhttp://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd

Jak widzimy HTML5 udostępnia tylko część identyfikatorów z poprzednich specyfikacji. Całkowicie pominięto odmiany typu Transitional i Frameset, pozostawiając tylko wersje Strict. Autorzy powinni jak najszybciej przejść na wersję skróconą.

Pasek społecznościowy

SPIS TREŚCI AKTUALNEJ STRONY

Szkielet dokumentu (H1) Postać ogólna (H2) Uproszczona wersja (H3) DOCTYPE (H3) Wersja skrócona (H4) DOCTYPE legacy string (H4) Obsolete permitted DOCTYPE string (H4)