XHTML a HTML parsované jako XML

XHTML používá pravidla XML pro značkování HTML. Rozhoduje i MIME typ: text/html spouští HTML parser, application/xhtml+xml XML parser.

Autor: Aktualizováno

Dobře utvořený dokument

Ukázka má namespace XHTML, uzavřené elementy a uvozované atributy. Je to jednoduchý dokument HTML v XML syntaxi, nikoli ukázka validace proti historické DTD XHTML 1.0.

Dobře utvořený dokument
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
 <head><title>Ukázka</title></head>
 <body><p>Ahoj<br/>světe</p></body>
</html>

Parser podle MIME typu

Přípona xhtml ani lomítko v br samo nezapne XML parser. Server musí poslat odpovídající Content-Type. V XML nejsou automaticky dostupné všechny pojmenované HTML entity; použij znak nebo číselný odkaz. Chyba utvoření dokumentu se neopravuje jako v HTML parseru.

Historie a dnešní použití

XHTML 1.0 je historické doporučení z roku 2002. Dnešní pravidla HTML a jeho XML syntaxe najdeš v HTML Living Standard. U běžného webu vybírej syntaxi podle skutečné potřeby XML zpracování, ne kvůli domnělé přísnosti SEO.

XPath nad XHTML

XPath 1.0 potřebuje prefix pro XHTML namespace. Výraz //p nenajde element p v tomto prostoru. Při transformaci také zvol odpovídající způsob serializace; XML a HTML mají jiné zacházení s prázdnými elementy.

Stejný zdroj, jiný parser a XPath

Minimalistické XHTML s namespace
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>XML.cz</title></head><body><p>A &amp; B</p><br/></body></html>
Kontrola XML syntaxe lokálně
xmllint --noout stranka.xhtml

Při doručení s application/xhtml+xml je dokument parsován jako XML. S text/html se uplatní HTML parser se svými pravidly oprav a namespace. Samouzavírací zápis br není důkaz režimu parseru. Záměrně odeber uzavírací značku p: XML kontrola selže, HTML parser může strom opravit. Takto opravený strom není záruka stejného původního dokumentu.

Pro XPath 1.0 navaž prefix h na http://www.w3.org/1999/xhtml a použij /h:html/h:body/h:p. Serializaci HTML a XML vybírej podle typu výstupu; některé prázdné HTML elementy mají jiné pravidlo zápisu. XHTML není důvod ručně přidávat lomítko ke všem značkám běžného HTML.