Ten artykuł jest częścią serii
World Wide Web


Struktura stron WWW

(X)HTML, XML, XSL


Generowanie dynamicznych stron WWW

ASP, ASP.NET, JSP, PHP, Profile MSP


Po stronie użytkownika

CSS, JavaScript, AJAX, Kolory w Internecie


Przesyłanie danych

HTTP(S), HTTP referrer, Serwer WWW, VoiceXML, XMLHttpRequest


Pojęcia

Architektura informacji, Użyteczność (web-usability), Dostępność (WWW)

XHTML (ang. Extensible HyperText Markup Language, rozszerzalny hipertekstowy język znaczników) – język służący do tworzenia stron WWW ogólnego przeznaczenia. 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 słabe przyjęcie XHTML przez przeglądarki i narzędzia, W3C zadecydowało o kontynuowaniu linii XHTML/1.0 i HTML 4 jako XHTML 5 i HTML 5.

W odróżnieniu od HTML-a (który jest aplikacją SGML), 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 przy pomocy np. transformacji XSLT, a także automatycznie przekształcać w inne formy XML-a.

Jedną z największych zalet XHTML jest możliwość łączenia z innymi językami zgodnymi z XML, np. MathML czy SVG. Odbywa się to dzięki wykorzystaniu mechanizmu przestrzeni nazw XML.

Obecnie nowe przeglądarki, takie jak Firefox czy Opera, praktycznie w pełni obsługują XHTML, lecz przeglądarka mająca 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).

Jednak aby prawidłowo wyświetlać strony zarówno w nowoczesnych, jak i starszych przeglądarkach należy wykorzystać metodę negocjowania zawartości.

Spis treści

edytuj Podstawowe reguły XHTML

Zasady konstruowania dokumentów XHTML – najważniejsze różnice w porównaniu z HTML:

  • 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 ewentualnie <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"> lub pojedynczy, 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.

edytuj 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 zamist 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).

edytuj XHTML a PHP

UżywajÄ…c jÄ™zyka PHP w dokumentach XHTML czÄ™sto można siÄ™ spotkać z błędem podczas parsowania deklaracji XML (konstrukcje typu <?xml version="1.0" encoding="UTF-8"?>). PrzyczynÄ… jest włączona opcja używania krótkich znaczników (<? ?>) do oznaczania bloku PHP, co powoduje, że deklaracje XML sÄ… traktowane przez parser jak kod PHP.

Wyłączenie krótkich znaczników PHP można osiągnąć poprzez dokonanie następującego wpisu do pliku php.ini:

short_open_tag = Off

Ten sam efekt można osiągnąć poprzez wpis do pliku .htaccess (serwer Apache):

php_flag short_open_tag Off

Jeśli nie mamy możliwości wyłączenia krótkich znaczników, akceptowalnym obejściem problemu jest używanie PHP-owej konstrukcji print lub echo do wypisywania deklaracji XML:

<?php echo '<?xml version="1.0" encoding="utf-8"?'.">\n"; ?>

lub:

<<?php ?>?xml version="1.0" encoding="utf-8"?<?php ?>>

(Znaki kończące deklarację XML – ?> – muszą być rozdzielone, inaczej zostaną wzięte przez procesor XML za koniec instrukcji przetwarzania).

edytuj Walidacja XHTML

Tak jak każdy dokument XML, dokument XHTML powinien spełniać dwa rodzaje poprawności:

  • poprawność skÅ‚adniowa (well-formedness) – zgodność z podstawowymi reguÅ‚ami XML; można jÄ… sprawdzić wysyÅ‚ajÄ…c dokument z typem treÅ›ci ustawionym na application/xhtml+xml i otwierajÄ…c w obsÅ‚ugujÄ…cej XHTML przeglÄ…darce, w przypadku błędu ma ona obowiÄ…zek nie wyÅ›wietlić dokumentu
  • poprawność strukturalna (validity) – zgodność z reguÅ‚ami okreÅ›lonymi w skojarzonym z danym typem dokumentu schemacie; sprawdzanie tej poprawnoÅ›ci to wÅ‚aÅ›nie walidacja, dokonuje siÄ™ jej przy pomocy walidatorów; walidator wychwytuje także błędy w kodowaniu znaków.

Schematy określające definicję typu dokumentu w przypadku XHTML są zwykle wyrażone w DTD. Aby walidator wiedział wobec jakiej wersji i odmiany języka ma sprawdzać poprawność, konieczne jest umieszczenie w dokumencie deklaracji typu dokumentu (DOCTYPE). Deklaracja ta powinna być umieszczona po deklaracji XML (jeśli jest obecna); obie te deklaracje tworzą razem prolog XML. W XHTML 1.0 istnieją 3 różne DTD, każda z nich definiuje osobną odmianę tej wersji języka. W XHTML 1.1 jest już tylko jedna DTD, ale dzięki modularyzacji XHTML można łatwo na jej bazie tworzyć własne DTD.

DTD (i bazujący na nim walidator W3C) ma jednak sporo ograniczeń i nie potrafi wyrazić wszystkich reguł języka XHTML. Możliwe więc, że dokument, który pozytywnie przeszedł walidację względem DTD wcale nie jest poprawny. Wielu ograniczeń DTD pozbawiony jest inny język schematów – XML Schema. W3C opublikowało specjalną notę zawierającą definicję XHTML 1.0 w XML Schema, przygotowywane jest też drugie wydanie XHTML 1.1, uzupełniające specyfikację o schematy w tym języku. XML Schema w porównaniu z DTD potrafi np. sprawdzić poprawność wartości atrybutu accesskey (powinien to być jeden znak, DTD pozwala na wiele znaków), czy atrybutu tabindex (powinna się zawierać między 0 a 32767, walidator DTD przyjmie dowolny ciąg znaków). Chcąc walidować dokument względem XML Schema można, choć nie jest to konieczne, do elementu głównego (html) dodać atrybut schemaLocation z przestrzeni nazw http://www.w3.org/2001/XMLSchema-instance, określający lokalizację schematu.

Innym językiem schematów mogącym służyć do walidacji XHTML jest RELAX NG. W porównaniu do XML Schema ma on bardziej intuicyjną składnię, lecz podobnie oferuje dużo więcej możliwości niż DTD (choć na tym polu nieco ustępuje językowi XML Schema). RELAX NG ma być kolejnym, obok DTD i XML Schema, językiem, w którym zostanie zdefiniowany schemat XHTML 2.0 (jednak odwoływanie się w dokumencie do tego schematu nie będzie potrzebne, w przeciwieństwie do dwóch pozostałych języków).

edytuj Wersje XHTML

edytuj XHTML 1.0

XHTML 1.0 został zatwierdzony jako rekomendacja W3C 26 stycznia 2000 roku. Rekomendacja ta jest po prostu odpowiednim przeformułowaniem języka HTML 4 – SGML jako język definiowania został zastąpiony przez XML. XHTML 1.0 dysponuje więc praktycznie tym samym zestawem elementów i atrybutów, co HTML 4; analogiczny jest też podział na 3 wersje DTD:

  • 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.

Warto pamiętać, że DTD XHTML 1.0 nie jest w pełni analogiczne do DTD HTML 4.01 (bardziej przypomina DTD HTML 4.0). W związku z tym niektóre atrybuty dozwolone w HTML 4.01 Strict są niedozwolone w XHTML 1.0 Strict (ale można je stosować w odmianach Transitional i Frameset). Na przykład w odmianie ścisłej XHTML 1.0 nie można używać atrybutu name dla elementu form (mimo że jest to możliwe w HTML 4.01 Strict).

edytuj XHTML 1.1

Najnowszą rekomendacją XHTML jest opublikowana 31 maja 2001 r. specyfikacja 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.

XHTML 1.1 został opracowany zgodnie z regułami modularyzacji XHTML. Zawiera elementy i atrybuty takie, jak XHTML 1.0 Strict, usunięto tylko atrybut name dla elementu a oraz atrybut lang. Natomiast nowością w tej wersji XHTML są elementy i atrybuty służące do wyświetlania znaków ruby, używanych w typografii języków Dalekiego Wschodu.

edytuj XHTML 2.0 (projekt)

Obecnie przygotowywana jest specyfikacja XHTML 2.0, która ma wprowadzić wiele znaczących zmian do języka. Pierwsze projekty zakładały poważne ograniczenie kompatybilności w stosunku do poprzednich wersji XHTML, jednak z czasem zdecydowano o pozostawieniu w XHTML 2.0 takich elementów, jak img, czy h1 - h6; prawdopodobnie zamiast nowej przestrzeni nazw będzie też można stosować dotychczasową.

Siódma wersja szkicu roboczego XHTML2 została opublikowana 27 maja 2005 r. Najważniejsze zmiany wprowadzone w projekcie specyfikacji:

  • Prawie każdy element bÄ™dzie mógÅ‚ stanowić hiperłącze, np. bÄ™dzie można pisać: <li href="index.xhtml">Strona główna</li>; element a zostanie jednak zachowany
  • Element obrazka img zostanie uznany za przestarzaÅ‚y na rzecz elementu object, ale atrybut src bÄ™dzie można stosować dla prawie każdego elementu, a zawartość tego elementu bÄ™dzie wyÅ›wietlana tylko przy braku możliwoÅ›ci renderowania obrazka (lub innego medium, np. dźwiÄ™ku): <p src="logo" type="image/png; image/gif;q=0.2">Tekst zamiast obrazka.</p>
  • Stare, odziedziczone po HTML-u formularze zostanÄ… zastÄ…pione przez XForms, które zapewniajÄ… wiÄ™kszÄ… elastyczność i ograniczajÄ… konieczność stosowania skryptów
  • Ograniczony zbiór atrybutów obsÅ‚ugujÄ…cych zdarzenia zostanie zastÄ…piony przez XML Events – możliwe bÄ™dzie odwoÅ‚ywanie siÄ™ do zdarzeÅ„ DOM 2, a nawet definiowanie wÅ‚asnych zdarzeÅ„; jednoczeÅ›nie obsÅ‚ugujÄ…cy zdarzenia element script zostanie przemianowany na handler
  • Elementy nagłówków h1 - h6 zostanÄ… uznane za przestarzaÅ‚e i zastÄ…pione przez jeden element h, zaÅ› stopieÅ„ nagłówka bÄ™dzie można ustalać poprzez ich odpowiednie zagnieżdżenie w elementach section oznaczajÄ…cych rozdziaÅ‚y dokumentu
  • Pozioma linia hr zostanie zastÄ…piona przez element separator, który nie bÄ™dzie musiaÅ‚ mieć ani ksztaÅ‚tu linii, ani ukÅ‚adu poziomego
  • Pusty element koÅ„ca linii br, do którego nie można byÅ‚o siÄ™ odwoÅ‚ywać w arkuszach stylów zostanie zastÄ…piony przez element l obejmujÄ…cy pojedynczy wiersz
  • Element p oznaczajÄ…cy akapit bÄ™dzie mógÅ‚ oprócz tekstu zawierać także m.in. wykazy i tabele
  • UsuniÄ™te bÄ™dÄ… ostatnie elementy prezentacyjne dozwolone w XHTML 1.1, takie jak b, czy i; jako wyjÄ…tek pozostawione zostanÄ… elementy indeksu górnego i dolnego: sup i sub
  • Inne nowe elementy:
    • nl – lista nawigacyjna
    • di – skojarzanie terminu i definicji w liÅ›cie definicyjnej
    • quote – cytat, zastÄ…pi element q
    • blockcode – blok kodu komputerowego
    • summary – dÅ‚ugi opis tabeli, zastÄ…pi atrybut o tej samej nazwie
    • access – skrót (np. klawiaturowy) do innego elementu, zastÄ…pi atrybut accesskey
    • standby – informacja wyÅ›wietlana podczas Å‚adowania obiektu

Aktualna, ósma wersja szkicu roboczego XHTML2 została opublikowana 26 lipca 2006 r.

edytuj HTML5 (projekt)

Alternatywnie wobec XHTML2 jest rozwijany projekt HTML 5, przygotowywany przez W3C na podstawie projektu specyfikacji Web Applications WHATWG. Serializacja HTML 5 dla XML jest określana jako XHTML5.

edytuj Modularyzacja XHTML

W 2001 r. dokonano podziału XHTML na moduły. Zdefiniowano jednocześnie reguły tworzenia nowych modułów, a także reguły, według których moduły mogą być łączone. Umożliwia to tworzenie nowych języków składających się z elementów XHTML, a mogących też zawierać elementy spoza XHTML; nazywa się je językami rodziny XHTML. Niektóre języki rodziny XHTML to:

  • XHTML Basic – okrojona wersja XHTML przeznaczona dla telefonów komórkowych i innych urzÄ…dzeÅ„ przenoÅ›nych; nastÄ™pca WML i C-HTML
  • XHTML Mobile Profile – XHTML Basic wzbogacony o kilka dodatkowych elementów
  • XHTML-Print – przeznaczony do drukowania.

W oparciu o modularyzację powstał również XHTML 1.1. Dzięki temu można bardzo łatwo dostosować ten język do swoich potrzeb. Na przykład rozszerzenie XHTML 1.1 o atrybut target (umożliwiający otwieranie strony w nowym oknie) sprowadza się do użycia trzech encji parametrycznych w DTD: [1]; przykład dokumentu wykorzystującego to DTD: [2].

edytuj Typy zawartości XHTML

  • XHTML 1.0 speÅ‚niajÄ…cy zasady kompatybilnoÅ›ci z HTML powinno siÄ™ wysyÅ‚ać jako text/html tylko dla starszych przeglÄ…darek. W tym typie zawartoÅ›ci dokument jest traktowany jak dokument HTML (aplikacja SGML-a) z błędami skÅ‚adniowymi, a wiÄ™c m.in. nie jest sprawdzana poprawność skÅ‚adniowa, dokument jest traktowany jako tzw. "zupa znaczników", a dokument nie ma żadnych zalet poprawnego XHTML-a (w szczególnoÅ›ci osadzania innych jÄ™zyków).
  • Typ application/xhtml+xml zostaÅ‚ stworzony specjalnie dla XHTML. PrzeglÄ…darki obsÅ‚ugujÄ…ce ten typ automatycznie sprawdzajÄ… zgodność dokumentu z zasadami XML. W application/xhtml+xml nie ma już kilku nietypowych cech charakterystycznych dla HTML, np. element body nie zachowuje siÄ™ już tak, jak gdyby byÅ‚ elementem głównym (bo jest nim html), a przede wszystkim można osadzać inne aplikacje XML bezpoÅ›rednio w kodzie XHTML. Odpowiednikiem wysÅ‚ania pliku z tym typem na dysku lokalnym jest zmiana rozszerzenia pliku z .html (lub .htm) na .xhtml (lub .xht).
  • Typy application/xml i text/xml – sÄ… to natywne typy zawartoÅ›ci XML, a jako że XHTML jest aplikacjÄ… XML-a, można ich używać równoważnie z application/xhtml+xml.

edytuj Negocjacja zawartości

Internet Explorer nie potrafi odczytać stron XHTML podanych jako application/xhtml+xml – w domyślnej konfiguracji będzie wyświetlał okno dialogowe z prośbą o pobranie takiego pliku. Ogranicza to w znacznym stopniu możliwość korzystania z typu XHTML w sieci WWW.

Problem ten można obejść poprzez serwowanie typu application/xhtml+xml przeglądarkom go obsługującym, natomiast pozostałym przesyłanie dokumentu z typem text/html. Można to osiągnąć stosując metodę negocjowania zawartości (content negotiation) po stronie serwera. Można wykorzystać do tego język skryptowy, np. PHP:

$xhtml = preg_match('/application\/xhtml\+xml(?![+a-z])(;q=(0\.\d{1,3}|[01]))?/i', 
$_SERVER'HTTP_ACCEPT', $xhtml) && (isset($xhtml2)?$xhtml2:1) > 0 || 
strpos($_SERVER"HTTP_USER_AGENT", "W3C_Validator")!==false || 
strpos($_SERVER"HTTP_USER_AGENT", "WebKit")!==false;
header('Content-Type: '.($xhtml?'application/xhtml+x':'text/ht').'ml; charset="utf-8"');
// ew. iso-8859-2 lub inne kodowanie

Obejścia dla walidatora W3C i Safari (WebKit) są konieczne, gdyż obsługują one XHTML, ale nie wysyłają odpowiedniego nagłówka HTTP-Accept.

Inne przykłady odpowiednich skryptów można znaleźć na tych stronach: [3], [4], [5].

edytuj Przykłady dokumentów XHTML

XHTML 1.1

Content-Type: application/xhtml+xml; charset="utf-8"
<?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>
  <title>Przykład dokumentu zgodnego z XHTML 1.1</title>
</head>
<body>
  <p>To jest przykład.</p>
</body>
</html>

XHTML5

Content-Type: application/xhtml+xml; charset=utf-8
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="style.css"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">    
<head>
  <title>Przykład dokumentu zgodnego z XHTML5</title>
</head>
<body>
  <p>To jest przykład.</p>
</body>
</html>

XHTML 1.0 Strict kompatybilny z HTML

Content-Type: application/xhtml+xml; charset=iso-8859-2
<!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>
  <title>Przykład dokumentu zgodnego z XHTML 1.0 Strict</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
  <p>To jest przykład.</p>
</body>
</html>

edytuj Zobacz też

edytuj Linki zewnętrzne

edytuj Walidatory