Jak na dokonalé XHTML

2006-03-27 23:24 napsal Lukáš Havrlant

Chcete-li úspěšně přejít ze staršího jazyka HTML na novější verzi XHTML se všemi náležitostmi, které se s tímto přechodem pojí, určitě čtěte dál. XHTML definuje zcela nový jazyk pro tvorbu webových stránek na bázi XML (XHTML je reformulace HTML do XML). S tím se váže několik pravidel a různých strastí. Takže nejprve základní rozdíly oproti HTML 4.

  • všechny značky musí být uzavřené. V HTML jste nemuseli psát do kódu značky jako třeba </li>, protože si to prohlížeč sám snadno domyslel. V XHTML si prohlížeč nic nedomýšlí, tudíž všechny značky, které byly v HTML 4.01 nepovinné jsou v XHTML povinné (vyjma značky <tbody>)
  • všechny značky a atributy jsou definovány malými písmeny a protože XHTML je case-sensitive, musíte tedy všechny značky a atributy psát malými písmeny. <HTML> => toto je v XHTML špatně, <html> => toto je správně. Samozřejmě si to můžete sami předefinovat.
  • všechny hodnoty atributů musí být bezpodmínečně v uvozovkách nebo apostrofech
  • v XHTML není povolena minimalizace atributů, tento zápis je špatně: <dl compact>. Tento je správně: <dl compact="compact">
  • všechny prázdné elementy musí být ukončeny – místo <br> tedy patří zápis <br></br> nebo zkráceně <br/>
  • bílé znaky na začátku a na konci hodnoty atributu se vymazávají a pokud se (někde uprostřed – ne na kraji) v hodnotě atributu vyskytuje více než jedna mezera, smrskne se právě na jednu
  • pokud se v elementu <script> vyskytuje znak „&“ nebo závorky „<“ či „>“, musí být obsah elementu ještě obalen v <![CDATA[…obsah elementu… ]]>
  • v HTML se částečné identifikátory dělaly za pomocí atributu name, v XHTML k tomu slouží atribut id
  • pokud má atribut nějaké pevné hodnoty (například center u atributu align), musí být tato hodnota psána malými písmeny. Stejně tak musíte psát malými písmeny, pokud odkazujete na entity hexadecimální hodnotou (např. &#xnn;)

Rozdíly máme za sebou, ale to pochopitelně není všechno. Ještě se podíváme co musí obsahovat striktně shodný XHTML dokument.

  • v prvé řadě musí dokument odpovídat jednomu z daných DTD
  • zdrojový kód musí obsahovat povinnou značku <html>, která musí obalovat celý obsah stránky (tj. musí být kořenovým elementem)
  • kořenový element (tedy <html>) musí odkazovat na jmenný prostor pomocí atributu xmlns. Odkaz musí být směřován na http://www.w3.org/1999/xhtml
  • v každém dokumentu musí být ještě před značkou <html> jedna ze tří daných deklarací <!DOCTYPE> a není povolené přepisovat parametrické entity

XHTML dokument by také měl obsahovat XML deklarace určující kódování a verzi XML. Avšak není to nutnost, pokud píšete v UTF nebo určujete kódování například http hlavičkou.

Hurá, v tuto chvíli je náš XHTML dokument shodným XHTML dokumentem a zároveň jsme opravili všechny nesrovnalosti vzhledem k HTML. To ovšem stále není všechno. Pokud byste v tuto chvíli vypustili stránku do světa, všechny prohlížeče by ji vykreslovali jako obyčejné HTML, nikoli jako XHTML. Což samozřejmě nechceme, nedělali jsme toliko změn, aby prohlížeč nakonec stránku parsoval jako ono staromódní HTML. A to kouzlo, které prohlížeči poví, aby se stránkou nakládal jako s XHTML dokumentem je MIME typ. Takže jenom stručně. HTML stránky se standardně posílají jako text/html, XHTML běžně jako application/xhtml+xml (jsou povolené i jiné hodnoty). V tuto chvíli tedy i přes veškeré úpravy, které jste provedli, pracujete s HTML stránkou. Stačí ovšem uložit stránku s příponou .xhtml a server by ji měl odeslat s požadovanou hlavičkou a hopla – XHTML je na světě (samozřejmě si hlavičky můžete poslat sami).

V tuto chvíli byste měli být připraveni na některé nemilé věci, které se ovšem dají velice snadno překousnout. Takže hlavně – váš dokument musí být bezpodmínečně bezchybný, musí být well-formed (ale nemusí být přitom validní). V zásadě to znamená mít správně zanořené všechny elementy, všechny také musí být uzavřené, všechny hodnoty atributů musí být v uvozovkách, nemíte mít na stránce nedefinované entity, stránka musí obsahovat kořenový element a znaky „&“ a „<“ musíte zapisovat příslušnými entitami. Splňovat těchto pár bodů je opravdu povinnost, není to pro dobrý pocit webmastera, protože pokud prohlížeč narazí na byť jen jedinou chybu, vyhodí dračí chybu a stránku nevykreslí a uživatel si může přečíst hlášení, že se na stránce vyskytl neukončený element <br>, což ho dozajista potěší. S tímto souvisí ještě jedna taková drobnost a sice, že se stránka začne načítat, až když prohlížeč stáhne a zkontroluje XHTML kód, protože nemůže vědět, jestli se někde na stránce nevyskytuje chyba.

Pokud vám tedy tyto drobnosti nevadí, můžete směle poslat stránku jako application/xhtml+xml a kochat se svou první skutečnou XHTML stránkou. Samozřejmě můžete okamžitě začít využívat nepřeberné množství výhod XHTML jako třeba rozšíření o další jazyky. Jistě budete prahnout po moderním SVG – popis vektorové grafiky pomocí XML. Nuže směle do toho! XHTML je přímo stavěné na to, abyste ho mohli takto snadno rozšířit. Stejně tak pokud byste potřebovali dostat do kódu nějaký ten matematický zápis, můžete si oddechnout, protože zde máme jazyk MathML, který je určen právě pro matematikou posedlé webmastery.

Doufám, že jste si užili nově uvolněné euforie, ale je čas vrátit se zpět do reality. Nenápadně si zkuste stránku prohlédnout v prohlížeči Internet Explorer a nelekněte se, jestli vám nabídne stránku ke stáhnutí. Nic se neděje, všechno je v pořádku, MSIE prostě MIME typ apllication/xhtml+xml nezná. Tak co teď? Nebojte, konsorcium i na tuto možnost myslelo, a tak letmým náhledem do specifikace zjistíte, že pokud splníte směrnici kompatibility, můžete XHTML stránku posílat s MIME typem text/html jako staré neučesané HTML. Ovšem budete se muset smířit s tím, že již nebudete moci využívat technologie jako SVG či MathML. I když šance tady je stále – můžete application/xhtml+xml poslat pouze prohlížečům, které ho znají a ostatním poslat text/html. Návod najdete u Hulána. Takže hromádka z karet se prozatím nezbortila celá, ještě pár karet drží pohromadě.

Ovšem pokud alespoň jednomu prohlížeči pošlete XHTML dokument jako text/html, musí splňovat již výše zmiňovanou směrnici kompatibility. Nuže pusťte se do ni a neberte to, prosím, jako další zbytečnou práci, kterou nám konsorcium staví do cesty, není to legrace nechávat vykreslovat XHTML jako HTML. Takže vezměmě to bod po bodu:

  • nevkládejte do stránek žádné XML deklarace, některé prohlížeče je mohou interpretovat jako běžný text (povšimněte si prosím, že v tuto chvíli musíte mít stránku v kódování UTF nebo určovat jiné kódování zasláním příslušné http hlavičky).
  • v XHTML musí být všechny elementy ukončené, tedy elementy, které byly v HTML brány jako nepárové, třeba <br>.V XHTML je tedy správný zápis <br></br>. Ovšem tento zápis není zrovna šetrný vůči HTML prohlížečům, tudíž musíte používat zkrácený zápis <br/> a ještě ke všemu musíte před lomítko vrazit mezeru. Tedy konečný správný zápis prázdných elementů je takovýto – <br />.
  • pokud vaše styly nebo skripty obsahují < nebo & nebo ]]> nebo --, přesuňte je do externího souboru
  • v hodnotě atributů nesmí být více mezer nebo řádkový zlom
  • nevkládejte do stránek více než jeden element <isindex> do sekce head
  • častá chyba – pokud určujete jazyk dokumentu, musíte použít jak atribut xml:lang tak atribut lang
  • v HTML se odkazy v rámci jedné stránky dělaly za pomocí elementu <a> a atributu name nebo použitím atributu id. Pro zajištění zpětné komptability tedy musíte částečné identifikátory dělat jak s použitím atributu name tak s atributem id. Oba musí být pochopitelně v elementu <a>. Konečný zápis identifikátoru by vypadal takto: <a name="pravidla" id="pravidla></a>.
  • někteří uživatelští agenti nedokáží zpracovat logické atributy ve své plně formě (myslím tedy například zápis disabled="disabled") jak to vyžaduje XHTML. Konsorcium nepřichází s žádným způsobem, jak docílit celkové kompatiblity, pouze upozorňuje na fakt, že se to netýká uživatelských agentů, kompatibilních s HTML 4.
  • používáte-li kaskádové styly, zapisujte v nich elementy a atributy malými písmeny
  • HTML si některé značky „domýšlelo“, avšak XHTML nikoli. Proto pokud jste stylovali například element <tbody> aniž byste ho měli v kódu, připište ho tam, XML parser si tento element nedomyslí.
  • Pokud ve svém dokumentu používáte element <style> měli byste k němu přidat identifikátor a potom na něj odkazovat přes XML deklaraci. Tedy nějak takto:
<?xml-stylesheet href="http://www.w3.org/StyleSheets/TR/W3C-REC.css" type="text/css"?>
<?xml-stylesheet href="#internalStyle" type="text/css"?>
<!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="en" lang="en">
<head>
<title>An internal stylesheet example</title>
<style type="text/css" id="internalStyle">
  code {
    color: green;
    font-family: monospace;
    font-weight: bold;
  }
</style>
</head>
<body>
<p>
  This is text that uses our
  <code>internal stylesheet</code>.
</p>
</body>
</html>

(kód vypůjčen přímo ze specifikace).

Konfliktu tohoto bodu s prvním, který naopak říká, abychom takovéto XML deklarace do kódu nevkládali si prosím nevšímejte.

  • namísto entity &apos; používejte entitu &#39;

Tohle by byly ty nejdůležitější body, ostatní už jsem většinou jmenoval někde jinde. V tuto chvíli tedy máte po ruce XHTML dokument, který posíláte jako application/xhtml+xml a pouze prohlížečům, které tento MIME typ neznají, posíláte text/html. Pokud nechcete posílat application/xhtml+xml žádnému prohlížeči, není to žádný problém, váš XHTML dokument je kompatibilní s HTML, tudíž si MIME typ text/html můžete dovolit, avšak už se nejedná ani tak o XHTML dokument komptabiliní s HTML dokumentem, ale spíš bych to nazval přesně naopak – HTML dokument kompatibilní s XHTML dokumentem.

Avšak pokud ono XHTML nerozšiřujete o další jazyky jako třeba SVG, není vlastně nutné používat application/xhtml+xml a vystavovat se tak zbytečnému riziku, že se stránka nezobrazí. De facto i při použití text/html (tudíž i v samotném HTML, stránka nemusí mít XHTML syntaxi) můžete na stránku dostat úplně jednoduše SVG či MathML. Stačí použít element <object> a externí .svg soubor. Zajímavé pak je, že například Amaya vykreslí MathML i při použití text/html bez toho, aniž bych to MathML připojil přes <object>. Což mi přijde poměrně zvláštní, protože samo W3C říká, že výhodou XHTML je, že si ho můžete snadno rošířit od další jazyky, což bychom pochopitelně v HTML nemohli. Jak nám Amaya názorně předvedla – mohli ;-).

Ještě bych se zmínil o filosofii XHTML aneb další rozdíl mezi HTML a XHTML. Pokud něco v XHTML vyznačíte tak a tak, bude to prohlížeč chápat přesně tak a tak. Tuto trochu krkolomnou větu vysvětlím na příkladu. Pokud jste se v HTML pokoušeli nesmyslně zanořit nadpis do odstavce, nemohlo se vám to povést. Odstavec má nepovinnou ukončovací značku a proto prohlížeč, ve chvíli kdy narazí na nadpis, ukončí odstavec a začne vykreslovat nadpis. Snadno si to můžete vyzkoušet tím, že přes se přes styly pokusíte přebarvit nadpis v odstavci:

p h1{color:red;}

Neprojde vám to, nadpis červený nebude. Ale v XHTML žádné takové domýšlení značek nefunguje, proto pokud z toho uděláte XHTML a pošlete ho jako application/xhtml+xml, bude tento CSS zápis fungovat a prohlížeč bude skutečně vnímat předchozí kód jako nadpis v odstavci. Bude to sice nevalidní zápis, ale protože validita není podmínkou pro zobrazení XHTML dokumentu, prohlížeč to musí interpretovat, nevyhodí dračí chybu jako v případě neuzavřeného elementu.

Ještě zmínka k XHTML 1.1: tento jazyk je v současnosti takřka nepoužitelný, protože u něho konsorcium zakazuje používání text/html, tudíž pokud XHTML 1.1 použijete, musíte se rozloučit s tím, že by si někdo prohlédl vaši stránku v MSIE. Zajímá-li vás, které prohlížeče application/xhtml+xml podporují, koukněte se na menší testík.

Ono to nakonec zakázané není

Jak je vidět, XHTML trpí mnohými problémy, takže si dobře rozmyslete, zda se vám vůbec psaní v XHTML nějakým způsobem vyplatí a zda by nebylo lepší ponechat stránku v HTML.

Linkuj.cz!

Komentáře

# tracy
27. March 2006, 23:37

Nějak mi nesedí ty entity malými písmeny. Jak potom rozliším jmenným zápisem například ω a Ω ?

27. March 2006, 23:46

tracy
Jejda :-). Platilo to jenom pro odkazování na entity hexadecimálními hodnotami (&#xnn;). Díky opraveno.

28. March 2006, 07:34

Super. Vidím reklamu AdFOX, tak jsem oba odkazy proklikal. Dlužíš mi 2 koruny :-D

Jinak paráda, hezký článek, i když většinu jsem již věděl.

Jinak máš tam překlep. U odkazů na stránce jsi u příkladu zapomněl na uvozovky za slovem pravidla

28. March 2006, 07:50

všechny hodnoty atributů musí být bezpodmínečně v uvozovkách

nebo apostrofech

Pro posílání application/xhtml+xml Internet Exploreru existuje trik.

Ohledně současného používání xml:lang a lang: Co se stane, když bude nastaven pouze lang? Můj názor je ten, že vše bude v pořádku a dokud tento atribut z XHTML nezmizí, je xml:lang postradatelný.

Co se xml-stylesheet pro značku style týče – ta je potřeba podle mě pouze v případě, kdy chci dokument formátovat o patro výš (na úrovni XML parseru). Pokud ho chci formátovat až po zpracování XHTML, tak to nepotřebuji.

28. March 2006, 08:02

Zrovna jsem chtěl napsat, že w3c uvádí způsob jak Internet Explorer donutit, aby zobrazil application /xhtml+xml. Sám jsem to však nezkoušel – opravdu to funguje (a bez chyby)?

28. March 2006, 09:27

Podle mého je kontrola validity podle DTD u XHTML nebetyčná blbost, zbytečně se tim brzdí použití XHTML a dalších jazyků v něm. Pokud si někdo chce udělat vlastní rozšíření jazyka, musí sáhnou do DTD. Úplně by stačilo, importovat schémata pro jednotlivé jmenné prostory použitých jazyků – jenže pak zase prohlížeče nerenderují ve strictní režumu (CSS). Je to začarovaný kruh…

28. March 2006, 09:48

Jen tak dál a houšť! Cham… bude mít radost :-)

Zatím jen pár menších poznámek

  • mezera je bílý znak, ale bílým znakem může být i odřádkování (CR LF), tabelátor (TAB)!
  • ve skriptu lze psát entity místo speciálních znaků (jen doplnění)
  • Překlep: przádných
  • br[mezera]/ se píše jen v rámci zpětné kompatibility

PLZ: Povol vkládání html kódu

28. March 2006, 12:43

Všem děkuji za přípomínky.

Jakub Vrána

Co se stane, když bude nastaven pouze lang?

Nestane se patrně vůbec nic. Ostatně polovina věcí ve směrnici kompatiblity je v současné době zbytečná. Ale specifikace praví… Já sám používám HTML, takže se nemusím trápit tím, jestli tu směrnici mám dodržet anebo ne :-).

Martin Hložek
Nevím, nikdy jsem to nezkoušel. Zkusím :-). (ale prý to funguje)

MiSHAK

br[mezera]/ se píše jen v rámci zpětné kompatibility

Však to uvádím pouze v místech, kde popisuji směrnici kompatibility.

Povol vkládání html kódu

Já ho nezakázal :o). Prostě nejde a nevím proč.

# dgx
28. March 2006, 15:29

Úroveň zdejších článků sis nastavil hodně vysoko a stále si ji držíš, to se jen tak nevidí.

Jistě budete prahnout po moderním SVG – popis vektorové grafiky pomocí XML. Nuže směle do toho! XHTML je přímo stavěné na to, abyste ho mohli takto snadno rozšířit.

Chápu ten ironický tón. Ale zkusme se na věc podívat vážně. Jaký je váš názor, je XHTML skutečně snadno rozšiřetelné či pro rozšíření přímo stavěné? Nebo je naopak navrženo jako špatně rozšiřitelný, či k rozšíření nevhodný, jazyk?

Zeptám se – kolik práce představuje vložit do XHTML dokumentu nějaký MathML kód? Samozřejmě s tím, že bude vyhověno validitě a W3C.

28. March 2006, 16:08

Relativně moc práce ne.

  • Jednoduše stačí vložit prvek a definovat mu namespace… a pak to začne být nepřehledné (pro lidi).
  • Nebo ještě jednodušeji přes DOCTYPE:

!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN“ „http://www.w3­.org/2002/04/xh­tml-math-svg/xhtml-math-svg-flat.dtd“

A pak jen psát a psát…

Sranda začína až při kombinaci různých DTD resp. typů napřiklad W3C oblíbený důkaz místo slibů XHTML + SVG + MathML, zábavné je pak zkoumat, jestli autor píše v SVG a jako rozšíření používá XHTML a v něm MathML a nebo naopak. http://www.w3­.org/…thMLplus­SVG/

Stejně je zajímavé, proč W3C nevytvořilo jednoduché zkratky (sic zkratky vedou do pekel) pro nejpoužívanější hodnoty namespace jako klíčová slova atributů… třeba MathML, SVG apod.

Např: MathML pro http://www.w3­.org/…/Math/Mat­hML atp.

>7.1.4 Mixing and Linking MathML and HTML

>In order to fully integrate MathML into XHTML, it should be possible not only to embed MathML in XHTML, but also to embed XHTML in MathML. However, the problem of supporting XHTML in MathML presents many difficulties. Therefore, at present, the MathML specification does not permit any XHTML elements within a MathML expression, although this may be subject to change in a future revision of MathML. http://www.w3­.org/…hapter7­.html#…

To dodává W3Cčkovské zmatenosti nádech okultismu. Neměl jsem moc času na kontrolu, snad je to k tématu a k dgx-ové otázce :-)

# dgx
28. March 2006, 17:01

pro MiSHAKa:

Nebo ještě jednodušeji přes DOCTYPE.

Představa, že pro každou kombinaci jazyků musím vytvořit nové DTD, což není zdaleka triviální operace, mi připadá šílená. Nakonec ale tohle je spíš problém rozšiřitelnosti XML. Pokud bych slovíčkařil a bavil se přímo o rozšiřitelnosti XHTML (např 1.0), tedy něčeho s daným DTD, dostávám se k otázce, zda vůbec je proveditelná. Co všechno snese pravidlo, že XHTML dokument musí obsahovat jednu ze tří daných deklarací DOCTYPE?

Stejně je zajímavé, proč W3C nevytvořilo jednoduché zkratky (sic zkratky vedou do pekel) pro nejpoužívanější hodnoty namespace jako klíčová slova atributů… třeba MathML, SVG apod.

Tohle celkem chápu – ozvalo by se milion dalších zájemců, že jejich namespace je také „důležité“ a chtějí přidělit pevný prefix.

28. March 2006, 17:23

Tohle mě na XHTML vadí – je to pěkná idea zprasená tisícem detailních požadavků. Mám rád XML, líbí se mi dotazovací jazyk XPath, XSLT šablony atp. a proto jsem opravdu rád, že se web chce ubírat XML cestou. Ale proč musí prohlížeče XHTML parsovat jako běžné XML? Proč je potřeba nový MIME typ, který navíc začíná nepochopitelným „application/“? Proč musím splnit 1000 požadavků, aby byl dokument XHTML 1.0 valid? Nechápu to.

Pár věcných připomínek k článku:

  • atributy nemusejí být v uvozovkách, anglické „quoted“ znamená „v uvozovkách nebo v apostrofech“
  • v XML k identifikaci neslouží žádný atribut id, pouze pro daný element může existovat jediný atribut typu ID (libovolného jména); v XHTML bylo „shodou okolností“ zvoleno id
  • malá písmena nejsou explicitním požadavkem XHTML, pouze XHTML dokument musí být ve shodě s XHTML specifikací a protože ta je case-sensitive a názvy elementů a atributů jsou v ní malými písmeny, musí být i tagy dokumentu psány malými písmeny
# dgx
28. March 2006, 18:02

v XML k identifikaci neslouží žádný atribut id, pouze pro daný element může existovat jediný atribut typu ID (libovolného jména); v XHTML bylo „shodou okolností“ zvoleno id

To je pravda a má to nepříjemné důsledky. XML parser neví, který atribut nese ID, dokud dokument nezvaliduje vůči DTD. Takže bez validace nelze používat třeba getElementById(), jak je definuje W3C DOM.

Z praktického hlediska je to problém, protože proces validace je dramaticky časově (a strojově) náročnější, než samotné parsování.

28. March 2006, 18:26

2 dgx: Nepříjemné důsledky to má, ale osobně jsem rád, že XML jméno id atributu nediktuje.

28. March 2006, 19:14

Jednoduše stačí vložit prvek a definovat mu namespace… a pak to začne být nepřehledné (pro lidi). Nebo ještě jednodušeji přes DOCTYPE:

No popravdě řečeno nejlepší je !DOCTYPE v XML (i XHTML) dokumentech neuvádět. Význam elementů je jasný ze jmenného prostoru, a nevznikají problémy s tím, jak nějak složitě skládat DTD. Validace také není problém, stačí mít někde uložena schémata pro jednotlivé jmenné prostory, případně definici toho, jak se mohou navzájem elementy z různých NS kombinovat (třeba v podobě NVDL schématu).

Při chybějícím !DOCTYPE jsou jediným problémem entity jako &nbsp; nebo &copy;, které nejde použít. Ale s dobrým editorem jde tyhle znaky zapisovat lépe a radostněji rovnou v Unicode.

28. March 2006, 19:17

Stejně je zajímavé, proč W3C nevytvořilo jednoduché zkratky (sic zkratky vedou do pekel) pro nejpoužívanější hodnoty namespace jako klíčová slova atributů… třeba MathML, SVG apod.

Zkratka už nezaručí celosvětovou unikátnost jmenného prostoru, a to jde. Každý jmenný prostor stačí v dokumentu deklarovat jednou, takže bych to jako nějaký extra problém neviděl. Navíc je věcí editoru, aby vám tyhle věci usnadnil a zautomatizoval. A nemluvím zde o nějakých drahých vizuálních editorech XML. Stačí si vzít Emacs a nXML – pro běžné typy dokumentů jako XHTML nebo třeba DocBook, vám deklaraci jmenného prostoru sám doplní.

28. March 2006, 19:21

To je pravda a má to nepříjemné důsledky. XML parser neví, který atribut nese ID, dokud dokument nezvaliduje vůči DTD. Takže bez validace nelze používat třeba getElementById(), jak je definuje W3C DOM.

Pro zjištění toho, že nějaký atribut je typu ID se nemusí provádět validace, stačí si projít DTD. DTD se stejně procházet musí, protože může obsahovat deklarace entit, defaultní hodnoty atributů a určení typu pro některé atributy (právě ID). To že se DTD načítá, ještě nemusí znamenat, že se pak proti němu dokument validuje.

Jinak to jde i bez DTD, stačí používat atribut xml:id, ten má automaticky sémantiku jednoznačného identifikátoru.

# dgx
28. March 2006, 22:37

Pro zjištění toho, že nějaký atribut je typu ID se nemusí provádět validace, stačí si projít DTD.

Jistě, použil jsem špatný výraz. Na časové náročnosti se tím vcelku nic menění, zůstává potřeba stáhnout a analyzovat DTD. Problém lze také řešit přes DOCTYPE:

(bohužel ukázku mi blog sežere)

No popravdě řečeno nejlepší je !DOCTYPE v XML (i XHTML) dokumentech neuvádět. Význam elementů je jasný ze jmenného prostoru, a nevznikají problémy s tím, jak nějak složitě skládat DTD.

Popravdě řečeno jsem rád, že tohle slyším od XML guru :-) Mám pocit, že pro DOCTYPE a zároveň namespace není v jednom formátu XML prostor. Díky tomu mi připadá nešťastně navržený.

29. March 2006, 10:32

Jistě, použil jsem špatný výraz. Na časové náročnosti se tím vcelku nic menění, zůstává potřeba stáhnout a analyzovat DTD. Problém lze také řešit přes DOCTYPE:

Pokud se omezíme na webové prohlížeče, které nejčastěji zpracovávají dokumenty s předem známými DTD (HTML3.2/4.0/XHTML1­.0/1.1), nenní nic jednoduššího než mít uložené lokální kopie DTD, které navíc mohou být ořezané o definice elementů (zůstanou jen entity, typy atributů a default hodnoty), případně to DTD může být uloženo v nějaké předkompilované podobě. Technicky to vyřešit problém není, problém vidím spíš v tom, že pracovní skupina HTML ve W3C do všech detailů XML zase tak nevidí, stejně tak jako vývojáři prohlížečů.

29. March 2006, 12:35

Myslel jsem přímo DTD pro XHTML MathML a SVG, takové DTD existuje viz. !DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN“ „http://www.w3­.org/2002/04/xh­tml-math-svg/xhtml-math-svg-flat.dtd“

Příklad na: http://www.w3­.org/…sample.xhtml :-)

Ohledně namespace, myslel jsem namespace pro „známé“ DTD od W3C jako právě zmiňované MathML, XHTML, SVG apod.

1. April 2006, 22:07

Gratuluji, napsal jsi nádherný článek, jen tak dál!

Pokud se nepletu, s XHTML je ještě mnohem více legrace, například s JavaScripty, kde se neprovede příkaz document.write(), i když zbytek JS ano. Ten se bohužel často používá pro finální zobrazení jeho výsledku – třeba u Toplist počítadla. Tag noscript se samozřejmě neprovede, takže mě se ještě nepodařilo plně ošetřit tento problém a Toplist mi počítá jen uživatele IE :), kterým posílam MIME text/html… To jsou ale paradoxy,ze?!

Další nepříjemností bylo třeba stylování pozadí v XHTML, kde se muselo definovat tagu html a ne body jako v HTML… Nic strašného, ale obyčejného člověka to zaskočí.

1. April 2006, 23:45

Borek

v XML k identifikaci neslouží žádný atribut id, pouze pro daný element může existovat jediný atribut typu ID (libovolného jména); v XHTML bylo „shodou okolností“ zvoleno id

Opraveno, díky.

malá písmena nejsou explicitním požadavkem XHTML, pouze XHTML dokument musí být ve shodě s XHTML specifikací a protože ta je case-sensitive a názvy elementů a atributů jsou v ní malými písmeny, musí být i tagy dokumentu psány malými písmeny

Ano, nepočítal jsem s tím, že by si někdo dělal vlastní DTD, ale jinak máš samozřejmě pravdu. Opraveno.

atributy nemusejí být v uvozovkách, anglické „quoted“ znamená „v uvozovkách nebo v apostrofech“

Opraveno.

# J
26. April 2006, 18:37

2Jakub Pavlík

Pokud se nepletu, pouzivat document.write() je pekne zavrzenihodna praktika, alebrz tohle svinstvo je M$ vymysl a pro praci je tak jako tak naprosto nepouzitelnej.

21. December 2006, 11:19

Opravdu hezký a především přínosný článek, ale stejně si říkám, jestli je tendence směřovat od HTML k XHTML tak průlomová. XHTML nám přikazuje dělat více sémantické a kódově úhledné stránky, ale bude to mít dlouhého trvání?

Hold jdete do hloubky, jste profíci

29. December 2006, 11:53

24. Mars:

XHTML nám přikazuje dělat více sémantické a kódově úhledné stránky, ale bude to mít dlouhého trvání?

Tos vyčetl z tohoto článku? Znova jsem si ho přečetl a nic o sémantice tam nezaznělo, sémanticky jsou to totožné jazyky.

2. January 2007, 15:16

nic o sémantice tam nezaznělo, sémanticky jsou to totožné jazyky

O tom žádná… já jsem se chtěl pouze zmínit o tom, že xHTML je o psaní kódově naprosto správných zdrojáků. Z článku jsem tedy nic takového nevyčetl, pouze jsem chtěl zmínit, že se s ním nadělá možná příliš humbuku a brzká budoucnost bude o něčem jiném…

Mimochodem chrlič kódu ze mě asi nikdy nebude, takže v téhle debatě jsem „lůzr“. Omlouvám se tedy za nesmyslný zásah do diskuse.

Komentáře jsou uzavřeny