MIME typ u XHTML a XHTML 2.0? Někteří z vás ani neví, že něco takového existuje. A právě těm to zkusím trochu přiblížit.
o je to MIME typ, to si můžete v kapku zjednodušené míře přečíst v článku Přechod na XHTML – 3. díl – dokončení. Kdyby tomu někdo nerozuměl, popíšu to znova.
MIME typ jsou v doslovném překladu „Mnohoúčelová Rozšíření Elektronické Pošty“. Základ tomu dala situace z dob, kdy se elektronickou poštou šířily pouze texty. Někoho napadlo, že by se mohly posílat i obrázky a zvuky. Norma RFC 1341 tedy umožnila posílat i jiná než textová data. Ovšem v cestě šíření multimediálních dat ještě stojí jedno – klientská stanice nebude vědět, co že jí to vlastně přichází. A právě tady přichází na řadu MIME typ.
Tato informace předchází každým přijímaným datům. V e-mailu říká, že jde o text, pokud zašleme na vzdálený server požadavek na obrázek, přijde informace o tom, že jde o obrázek a v jakém je formátu. Až potom se začne odesílat samotný obrázek.
A proč je zrovna tohle důležité v XHTML? Myšlenka XHTML je totiž taková, že dokument už má blíže k XML než k HTML, a už tedy máme tu čest s aplikací, nikoliv s textem.
Toto však W3C neaplikuje od začátku. Ze všeho nejdříve si musíme tedy říci, jaké druhy XHTML vlastně máme, a do toho začlením i popis XHTML 2.0:
- XHTML 1.0
- Dnes se používá asi nejčastěji. Rozlišují se tři verze:
- Strict (striktní)
- Transitional (přechodové)
- Frameset (pro práci s rámci)
- XHTML 1.1
- Není tak rozšířené jako XHTML 1.0 a je ještě o něco přísnější.
- XHTML Basic
- Jelikož ne všechna zařízení (např. PDA) jsou schopna interpretovat vše, co XHTML nabízí, bylo vytvořeno právě XHTML Basic obsahující pouze ty moduly, u kterých má autor jistotu, že je zobrazí všechna zařízení podporující tento standard. Osobně jsem však ještě neviděl jedinou stránku v tomto napsanou.
- XHTML Print
- Zatím nevydaný standard, měl by se zaměřit na tiskový výstup.
- XHTML 2.0
Dnes je ještě ve stádiu návrhu. Podle W3C nebude zpětně kompatibilní. Přídomek 2.0 si plně zaslouží, novinek je celá řada:
Byl úplně vypuštěn tag
img
, je nahrazen tagemobject
. Místo zápisu<img src="./obrazky/foto1.png" alt="Moje fotka z Egypta" />
budeme muset použít
<object data="./obrazky/foto1.png" type="image/png">Moje fotka z Egypta</object>
V XHTML 2.0 by měl sloužit každý element zároveň jako odkaz, přičemž tag
a
je stále zachován. V praxi je tedy validní (a funkční) zápis<dfn href="http://jakpsatweb.cz/css/">Kaskádové styly</dfn> jsou silným nástrojem nejednoho webmastera.
Byly zavedeny nové tagy, kterými by se mělo deklarovat menu. Jsou to
nl
(od „navigation list“) aname
. Menu by potom v XHTML mělo vypadat takto:<nl>
<name>Menu</name>
<li href="/index.php">Úvod</li> <!-- odkazovat muze uz i polozka v seznamu /-->
<li href="/navody.php">Návody</li>
<nl>
<name>Skripty</name>
<li href="/skripty/php.php">PHP</li>
<li href="/skripty/asp.php">ASP</li>
</nl>
</nl>Je to v podstatě náhrada již dříve vypuštěného tagu
menu
, místo kterého se měl kvůli sémantice užívat obyčejný seznam (ul
).Vypustily se některé nesémantické značky (
b
,i
), některé „polo-sémantické“ značky (big
,small
) a značkatt
. Na jednu stranu je to dobře, protože klesne počet webmasterů, kteří si pletoub
astrong
, na druhou stranu už není žádná značka pro zeslabení důrazu.Místo značky
q
se bude používatquote
(neplést sblockquote
) a značkabr
byla označena jako překonaná. Nahradí ji značkaline
. Tento zápis<p>
Tento text je vhodné<br />
odřádkovat.
</p>vymizí a objeví se něco jako tohle:
<p>
<line>Tento text je vhodné</line>
odřádkovat.
</p>Sice se ponechávají současné nadpisy o šesti úrovních, byly ale zavedeny tagy
h
asection
, které by je měly simulovat. Stránka se prostě rozdělí do sekcí a úroveň nadpisů bude odvozena z počtu sekcí, v nichž jsou obsaženy:<h>Nejvyšší nadpis</h>
<p>Text, který mu náleží</p>
<section>
<h>Nadpis druhé úrovně</h>
<p>Text</p>
<h>Další nadpis</p>
<p>Další text</p>
<section>
<h>Nadpis třetí úrovně</h>
<p>Text</p>
</section>
</section>
To byly asi ty nejzajímavější změny, můžete si prohlédnout celý návrh.
Doporučený MIME typ se u jednotlivých verzí liší. V případě HTML je situace jednoduchá, to by mělo být zasíláno jako text/html
. Tak to dělají všichni, to je v pořádku. U XHTML už nastává problém.
XHTML 1.0 může být zasíláno jako text/html
, ale mělo by být zasíláno jako application/xhtml+xml
. XHTML 1.1 by nemělo být zasíláno jako text/html
, mělo by se servírovat jako application/xhtml+xml
. Proč se to nemůže striktně nařídit, proberu níže.
Přestože XHTML 2.0 zatím nebylo schváleno, všechno naznačuje tomu, že nebude moci být zasíláno jako text/html
.
Všude tam, kde se může nebo musí použít application/xhtml+xml
, je také dovoleným typem application/xml
, a dokonce i text/xml
, v praxi se to však téměř nepoužívá, ale možnost to je.
MIME typ | Jazyk |
---|---|
text/html |
HTML |
XHTML 1.0 při dodržení kompatibility s HTML | |
application/xhtml+xml |
XHTML všeho druhu |
text/xml |
XHTML všeho druhu |
application/xml |
XHTML všeho druhu |
Ne všechny MIME typy však mají plnou podporu. Tradičně zaostává Internet Explorer a pár dalších podřadných prohlížečů. V tabulce níže popisuji podporu jednotlivých typů nejdůležitějšími prohlížeči (text/html
podporují všechny vyjma Exploreru 5.0, který nastavuje směr textu na rtl).
Testovaný prohlížeč | Testovací platforma | application/ xhtml+xml |
text/xml |
application/ xml |
---|---|---|---|---|
Chimera 0.6 | Mac OS X (10.2.1) | rozpoznáno jako XHTML | rozpoznáno jako XHTML | rozpoznáno jako XHTML |
Internet Explorer 7.0 Beta 2, 6.0 | Windows XP SP2 | nepodporováno | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla |
Internet Explorer 5.5 | Windows 98SE/2000 | nepodporováno | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla |
Internet Explorer 5.0 | Windows 2000 | nepodporováno | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla a směr textu byl chybně nastaven na rtl | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla a směr textu byl chybně nastaven na rtl |
Internet Explorer 5.2.x/Mac | Mac OS X | nepodporováno | aplikace si vyžádala moc paměti a/nebo „spadla“ | aplikace si vyžádala moc paměti a/nebo „spadla“ |
Mozilla (všechny druhy a verze) | Windows XP | rozpoznáno jako XHTML | rozpoznáno jako XHTML | rozpoznáno jako XHTML |
Netscape (jádro Gecko) | Windows XP | rozpoznáno jako XHTML | rozpoznáno jako XHTML | rozpoznáno jako XHTML |
Netscape 8.0, 8.0.1 (jádro IE) | Windows XP | rozpoznáno jako XHTML | zobrazena prázdná stránka | zobrazena prázdná stránka |
Netscape 8.0.2 (jádro IE) | Windows XP | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla | rozpoznáno jako XML, sémantika typická pro XHTML však rozpoznána nebyla |
Opera 6.0 a vyšší | Windows XP | rozpoznáno jako XHTML | rozpoznáno jako XHTML | rozpoznáno jako XHTML |
Opera 5.x | Windows XP | zobrazen zdrojový kód | rozpoznáno jako XHTML, nebyly rozpoznány odkazované styly | rozpoznáno jako XHTML, nebyly rozpoznány odkazované styly |
Safari 1.2 a vyšší | Mac OS X | rozpoznáno jako XHTML | rozpoznáno jako XHTML | rozpoznáno jako XHTML |
Safari 1.0 | Mac OS X | rozpoznáno jako XHTML, text za tabulkami se nezobrazuje | rozpoznáno jako XHTML, text za tabulkami se nezobrazuje | rozpoznáno jako XHTML, text za tabulkami se nezobrazuje |
SeaMonkey 1.0 | Windows XP | rozpoznáno jako XHTML | rozpoznáno jako XHTML | rozpoznáno jako XHTML |
nezobrazují nebo pokud se zobrazují špatně.
Co tedy dělat, když chceme, aby se stránky zobrazily všude korektně? Doporuřený postup je používat vhodný MIME typ, pokud prohlížeč (vzdálený server) nepodporuje „vhodný“, naservírujeme mu aspoň ten, který funguje. Docílíme toho například pomocí PHP skriptu:
<?php
if (isset ($_SERVER["HTTP_ACCEPT"]) AND stristr ($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")):
//kontrola, zda server podporuje to, co chceme
//application/xhtml+xml se samozrejme da nahradit pozadovanym typem
header ("Content-type: application/xhtml+xml; charset=utf-8");
//nastaveni odesilane HTTP hlavicky
//Tady samozrejme uvedte znakovou sadu, kterou pouzivate vy. Pro UTF-8, kterou pouzivam ja, to vypada takto, upravte si to.
$mimetyp = "application/xhtml+xml";
//definice hlavicky v META tagu
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?" . ">\n";
//XML prolog, ktery musi byt v kazdem XHTML dokumentu. Timto zapisem zamezime tomu, ze si PHP parser bude myslet, ze ten zapis patri jemu.
else:
header ("Content-type: text/html; charset=utf-8");
//odesilanou HTTP hlavicku nastavime na text/html
$mimetyp = "text/html";
//nadefinujeme hlavicku pro META tag
endif;
?>
Ovšem pozor, informace o HTTP hlavičkách musí předcházet jakémukoliv dalšímu výstupu, tento skript tedy musíte mít úplně na začátku kódu.
Tímto skriptem zajistíme zasílání HTTP hlaviček, teď už musíme jen nastavit MIME typ v META tagu:
<meta http-equiv="content-type" content="<?php echo $mimetyp; ?>; charset=UTF-8" />
<!-- tady samozrejme zase nastavte svou znakovou sadu /-->
Teď bychom měli mít zařízeno správné (v rámci možností prohlížeče) zobrazení stránek při použití nejvhodnějšího MIME typu. Zdánlivě by neměl být problém, ale až tak jednoduché to není – pokud odešlete application/…
a budete mít v syntaxi chybu, dokument nebude zobrazen vůbec! Vypíše se pouze hláška podobná této (tady jsem neukončil nepárový tag):
Další háček spočívá v tom, že pokud máte nastylovanou značku body
, musíte si to změnit na html
. Rozdíl je dosti patrný – přikládám obrázky stránek W3C i se stylopisem, v tom žlutém rámečku máte nahoře název elementu:
Teď bychom měli být schopni vhodně nastavit MIME typ naší XHTML stránky a čelit nástrahám, které přináší. Kdyby s tím měl přece jenom někdo problém, klidně mu poradím, pokud budu moci.