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>