Kto pod kim dołki kopie, ten się zmęczy.
XHTML

Co to jest XHTML

XHTML (ang. Extensible HyperText Markup Language, rozszerzalny język znaczników hipertekstowych) to język służący do tworzenia stron WWW. Specyfikacje XHTML przygotowuje organizacja W3C.

XHTML/1.0 nie jest następcą HTML, a jedynie przedstawieniem HTML 4.01 w postaci XML. XHTML/2.0 miał być następcą HTML, niekompatybilnym wstecz, ale ze względu na niekompatybilność Internet Explorera, a co za tym idzie niechęć użytkowników, W3C zadecydowało o kontynuowaniu linii XHTML/1.0 i HTML 4 jako XHTML 1.1 i HTML 5.

W odróżnieniu od HTML-a, dokumenty pisane w XHTML są zgodne z oficjalną specyfikacją XML (to znaczy, że dokumenty w XHTML są poprawnymi dokumentami XML) i dzięki temu można je łatwo generować z innych dokumentów XML, a także automatycznie przekształcać w inne formy XML-a. Dzięki temu dokumenty te posiadają większe możliwości, jak choćby wstawianie innych dokumentów za pomocą jednej metody (element <object/>), zagnieżdżanie wzorów matematycznych (język MathML), czy grafik o nieograniczonej jakości (język SVG).

Obecnie nowe przeglądarki, takie jak Firefox czy Opera, praktycznie w pełni obsługują XHTML, lecz program mający ciągle największy udział w rynku - Internet Explorer - w ogóle nie obsługuje XHTML-owego typu zawartości. W praktyce zmusza to webmasterów do stosowania dla dokumentów XHTML starego HTML-owego typu zawartości - dzięki temu, że XHTML w wersji 1.0 "symuluje" HTML 4 (tzn. posiada praktycznie taki sam zestaw elementów i atrybutów), wyświetlanie XHTML jako HTML nie sprawia większych problemów w żadnej przeglądarce, o ile dokument nie wykorzystuje dodatkowych możliwości XHTML, których nie ma w HTML (przedrostków nazw elementów, innych przestrzeni nazw, XML DOM), zachowanie to uznawane jest za nieprawidłowe, choć dopuszczalne, ze względu na niezgodność Internet Explorer.

Podstawowe reguły XHTML:

  • Jeśli strona XHTML zawiera błędy, nie może zostać wyświetlona
     
  • Strony XHTML muszą mieć typ zawartości application/xhtml+xml (lub inny XML)
     
  • Dzięki użyciu XHTML można stosować inne aplikacje XML (jak MathML czy SVG) bezpośrednio w dokumencie, czego nie da się w HTML
     
  • Dokument powinien rozpoczynać się od deklaracji XML (np. <?xml version="1.0" encoding="utf-8"?>); nie jest ona wymagana, gdy dokument ma kodowanie znaków UTF-8 lub UTF-16, albo gdy odpowiednie kodowanie zostało określone w nagłówkach HTTP (jednak nawet wtedy warto dołączać deklarację XML, gdyż pozwala ona ustalić kodowanie np. w przypadku zapisania strony na dysku)
     
  • Element główny (html) musi zawierać atrybut xmlns określający przestrzeń nazw XHTML:
    http://www.w3.org/1999/xhtml
     
  • Znacznikowi otwierającemu każdego niepustego elementu powinien odpowiadać znacznik zamykający
    (np. <li> ... </li>)
     
  • Puste elementy muszą także być zamykane (np. zamiast <br> musi być <br/>, albo <br></br>)
     
  • Elementy muszą być zagnieżdżane w odpowiedni sposób (np. zamiast <p>Tekst z <em>wyróżnieniem</p></em> - <p>Tekst z <em>wyróżnieniem</em></p>); wprawdzie w HTML także istniał taki wymóg, lecz nie był egzekwowany przez przeglądarki
     
  • Nazwy elementów i atrybutów XHTML muszą być pisane małymi literami
     
  • Wszystkie wartości atrybutów muszą być ujęte w cudzysłów (podwójny, np. <td rowspan="3"> albo apostrof, np. <td rowspan='3'>)
     
  • Niedozwolona jest minimalizacja atrybutów (np. zamiast <textarea readonly> musi być <textarea readonly="readonly">)
     
  • Wewnątrz elementów script i style komentarze XML (<!-- -->) zamiast ukrywać przed starszymi przeglądarkami (które i tak nie obsługują XHTML), powoduje ignorowanie stylów lub skryptów. W sekcji CDATA zaś komentarze są traktowane jako element stylów/skryptu
     
  • Jeśli zawarte wewnątrz dokumentu arkusze stylów lub skrypty zawierają znaki & lub <, zawartość elementów style i script należy umieścić w sekcji CDATA (np.: <style type="text/css"><![CDATA[ arkusz stylów ]]></style>); alternatywnie można użyć encji lub zewnętrznego arkusza stylów/skryptu
     
  • Ze względu na trudności z parsowaniem, nie powinno się używać w XHTML-u javascriptowej metody document.write() i właściwości innerHTML; jednak niektóre przeglądarki już obsługują te konstrukcje także w dokumentach XML. Zamiast nich należy używać metod DOM.
     

Kompatybilność z HTML

Ponieważ nadal są używane nieobsługujące XHTML przeglądarki internetowe, jeżeli chcemy wysyłać dokument zarówno jako XHTML, jak i HTML (dla starszych przeglądarek), możemy się zastosować do kilku reguł. Jednak niektórzy uważają, że XHTML zgodny z HTML pozbawia całkowicie sensu ideę HTML-a jako XML (patrz: http://www.hixie.ch/advocacy/xhtml).

  • Znaczniki pustych elementów powinny zawierać dodatkową spację przed ukośnikiem,
    np. zamiast <br/> powinno być <br />
     
  • Należy unikać używania zminimalizowanej formy (np. <p/>) w przypadku pustych elementów, które mogą mieć zawartość; np. stosowanie znacznika <script type="text/javascript" src="skrypt.js"/> w dokumencie przesyłanym jako HTML prowadzi zwykle do niewyświetlenia reszty dokumentu; należy w tym wypadku używać <script type="..." src="..."></script>
     
  • Obok lub zamiast instrukcji xml-stylesheet należy odwoływać się do zewnętrznych arkuszy stylów przy pomocy obsługiwanego w HTML-u znacznika <link rel="stylesheet" ... />
     
  • Objęcie wewnętrznych skryptów i stylów sekcją CDATA może powodować ich błędne działanie; należy w związku z tym zakomentować znaczniki początku i końca sekcji CDATA,
    np.: <style type="text/css">/* <![CDATA[ */ arkusz stylów /* ]]> */</style>
     
  • Oprócz typowej dla XML deklaracji języka za pomocą atrybutu xml:lang, należy też używać zgodnego z HTML atrybutu lang.
     
  • Dla kompatybilności z IE6 należy pomijać deklarację XML - powoduje to w nim przejście w tryb wstecznej zgodności.
     
  • Nie ma sensu jednak dodawać jej dla innych przeglądarek (skryptami po stronie serwera), gdyż i tak jest ona nieobowiązkowa.
     
  • Strona musi być zakodowana jako UTF-8/USC-*, a jeżeli jest zakodowana inaczej, musimy odpowiednią informację dodać do nagłówka Content-Type (np. kodem PHP: header('Content-Type: '.$mime.'; charset=iso-8859-2');, gdzie $mime to ustalony w wyniku negocjacji zawartości typ pliku).
     
  • W DOM należy używać createElementNS zamiast createElement i trzeba uważać na wielkość liter (DOM HTML podaje nazwy elementów wielkimi literami, DOM XML zachowuje wielkość liter i w XHTML dopuszcza tylko małe litery).
     

Wersje XHTML

  • XHTML 1.0 Strict - odmiana ścisła, zalecana przez W3C, przeznaczona do tworzenia dokumentów z oddzieloną warstwą semantyki od prezentacji; nie zawiera prawie żadnych elementów prezentacyjnych.
     
  • XHTML 1.0 Transitional - odmiana przejściowa, obok elementów odmiany ścisłej zawiera wiele elementów prezentacyjnych.
     
  • XHTML 1.0 Frameset - zawiera wszystkie elementy wersji przejściowej, a dodatkowo także elementy przeznaczone do wyświetlania ramek.
     
  • XHTML 1.1. W3C zaleca jej używanie do wszystkich nowo powstających stron WWW, jednak ze względu na niemożliwość obsłużenia typu application/xhtml+xml w Internet Explorerze, standard ten nie jest jak dotąd powszechnie stosowany.
     

Struktura dokumentów XHTML

XHTML 1.1
	<?xml version="1.0" encoding="utf-8"?>
	<?xml-stylesheet type="text/css" href="style.css"?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
			"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">    
	<head>
	  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/>
	</head>
	<body>
	  <p>Treść dokumentu...</p>
	</body>
	</html>
	
XHTML 1.0 Strict kompatybilny z HTML
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
			"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
	<head>
	  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	  <link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body>
	  <p>Treść dokumentu...</p>
	</body>
	</html>
	
XHTML 1.0 Transitional kompatybilny z HTML
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
			"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
	<head>
	  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	  <link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body>
	  <p>Treść dokumentu...</p>
	</body>
	</html>
	
XHTML 1.0 Frameset kompatybilny z HTML
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
			"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
	<head>
	  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	  <link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body>
	  <p>Treść dokumentu...</p>
	</body>
	</html>
	
« wstecz   dalej »