• TwitterRSS
  • Domů na Webylon
  • Kritika W3C
  • Kompatibilita, X(HT)ML
  • Tragikomedie o Normě

    3. ledna 2006

    Říká se, že HTML je aplikací SGML. Také se říká, že XHTML je aplikací XML. Toto jasné vymezení zpestřuje tvrzení, že i samo XML je podmnožinou SGML. Lze tedy XHTML považovat za aplikaci SGML? Téměř. Takže nelze.

    Standard ISO 8879:1986, zvaný SGML, je mnohem obecnější než XML. Každá jeho aplikace má kromě svých definic typu dokumentu i SGML deklaraci, v níž je definována gramatika rozebírání dokumentu: povolené znaky názvů, jednotlivé stavební kameny struktury i možnosti zjednodušení zápisu.

    Začátek značky nemusí vždy být menšítko, entitu nemusí uvozovat vždy ampersand, elementy dokonce mohou být odvozovány z určitých kusů textu. Jde o velmi flexibilní nástroj, jímž lze úspěšně popsat i spoustu formátů, které se k SGML vůbec nehlásí (třeba Rich Text Format).

    Proniknout do jeho tajů zdaleka není tak náročné, jak se na první pohled zdá. Všechna pravidla mají svoji sympatickou logiku. Jsou inteligentní a někdy až nestoudně intuitivní.

    Zásah shůry

    Pro konsorcium bylo SGML přespříliš chytré. Stvořilo tedy metajazyk vlastní. Chudý, nabobtnalý, upjatý. Nazvalo ho XML. Proč zrovna tak? Protože X je „cool“.

    Ostatní návrhy názvu prostě nebyly „cool“:

    Se vznikem „Rozšiřitelného značkovacího jazyku“ zahájilo W3C a především technická evangelizace oslavující kampaň na podporu tohoto nového zázraku. Elegance SGML byla zamlžena, jeho velkolepé možnosti posloužily maximálně jako odpudivé strašidlo složitosti.

    „XML je rozšiřitelné, HTML není“
    To není tak úplně pravda, SGML disponuje stejnými prostředky na rozšiřování sortimentu elementů či atributů jako XML. Přidané značky se samozřejmě nemohou opřít o doporučení [X]HTML.
    „XML je obecnější než HTML“
    To je pravda, neboť se srovnává metajazyk s jazykem.
    „XML je formát budoucnosti“
    Říkalo se před osmi lety. Říká se i teď. Bude se říkat i za osm let.
    Doplněno po osmi letech: Tak už se to neříká :-)
    „XML se zaměřuje na sémantiku, HTML na jednoúčelovou prezentaci“
    Metajazykům je úplně jedno, co vyjadřují jazyky na nich postavené. Typickým představitelem XML formátu popisujícího pouze vzhled je SVG.

    Shůry?

    Jakmile si vládce webu vymyslel vlastní metajazyk, povypínal v SGML deklaraci většinu možných zjednodušení zápisu. Tím však neskončil. Zneužil i jistého rysu SGML, takzvaného NET symbolu. Uchopil ho a zcela mu změnil význam. Dřívější užití mohlo vypadat takto:

    <p>Text se <em/zdůrazněním/, případně obrázek: <img src="ňadro1.jpg"/ a tak dále

    V SGML deklaraci pro XML 1.0 byl NET symbol upraven z „/“ na „/>“. Náhle tím pádem šlo zapsat prázdný element známým XML způsobem: <element/>. Avšak vznikl drobný vedlejší efekt:

    <p>Text se <em/>zdůrazněním/>, případně obrázek: <img src="ňadro2.jpg"/> a tak dále

    Pravidla SGML deklarace neumožňovala dát syntaxi do latě s vysněnými pravidly XML. Konsorcium by svým jazykem porušilo uznávaný ISO standard. Praktický dopad by byl ten, že SGML nástroje (pravda, moc jich nebylo) by s XML nedokázaly pracovat.

    Nejde-li Mohamed k hoře, musí hora k Mohamedovi. ISO ustoupilo, standard SGML upravilo. Sepsalo „Dodatek K“, který vybavil SGML deklaraci mnoha novinkami. Vlastně jen proto, aby si je XML mohlo zapnout. Hurá, standardy jsou v souladu, ostuda zažehnána. Nechť si dosavadní SGML nástroje trhnou nohou, ale ať tak činí potichu. Jsou to přeci ony, kdo nedodržují ISO standard.

    Drobný háček

    Dodatek K ovšem vyřešil jen ty do očí bijící syntaktické neshody. Spousta sporů zůstala. Pozitivní vyhodnocení dokumentu SGML parserem tudíž nemusí znamenat, že dokument je správně sestaven. Nakonec stejně musí být použit parser ušitý na míru XML, tj. nevyhovující ISO standardu. Musí totiž selhávat na některých konstrukcích, jež jsou dle SGML správné.

    V jakékoliv SGML aplikaci je kupříkladu možné v DTD zakázat umístění jednoho elementu kdekoliv uvnitř druhého. Doporučení XML něco takového nepřipouští. Nelogické zanořování v něm nejde zakázat. Na to doplácí doporučení XHTML, které zase musí definovat vlastní pravidla nevyjádřitelná v použitém metajazyku, a tedy neověřitelná validátorem. Jenže nepamatuje na vše:

    <!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"> <head> <title>Ať žije sémantika!</title> <object> <h1>Obsah v hlavičce</h1> <p>Plně validní a dokonce vyhovující doporučení.</p> <h2>Co s ním?</h2> <p>Těžko říct. Prohlížeč řeší dilema:</p> <ul> <li>Je povinen tento obsah nějak interpretovat.</li> <li>Neměl by zobrazovat obsah hlavičky.</li> </ul> <p>Tento nesmysl nejde v XML zakázat. V SGML ano.</p> </object> </head> <body> <p>Hledej, Šmudlo, hledej.</p> </body> </html>

    Nutno podotknout, že stejná konstrukce je validní i proti DTD HTML 4.01. Tam jde ovšem o nedostatek konkrétních DTD, nikoliv metajazyka.

    Král je mrtev, ať žije králíček

    Odkopnete-li složitý metajazyk ve prospěch vlastního, narazíte dříve či později na vážný problém: ke složitým úkonům si musíte vytvořit vlastní složité nástroje. Ale žádný strach. Uděláte-li jim dobrou reklamu, užijete-li písmenko „X“ a zamlčíte-li, že jen mrzačíte existující standard, svět vám to sbaští.

    V SGML deklaraci existuje přepínač CONCUR, v HTML je vypnutý. Nastavíte-li ho na YES, může váš SGML dokument vypadat takto:

    <!doctype html public "-//W3C//DTD HTML 4.01//EN"> <!doctype menu system "menu.dtd"> <title>Jídelníček nóbl restaurace</title> <h1><(menu)datum>31. února</(menu)datum></h1> <table> <tr> <th>Položka <th>Cena <tr><(menu)pokrm> <td><(menu)potravina>Uzená žížala s oblohou <td><(menu)cena>9,99 € <tr><(menu)pokrm> <td><(menu)potravina>Jed na krysy <td><(menu)cena>0,99 € <tr><(menu)pokrm> <td><(menu)potravina>Lidožrout <td><(menu)cena>dohodou s pokrmem </table>

    Vidíte, jak jdou krásně spojit dva různé typy SGML dokumentů? Navíc jde u obou spolehlivě ověřit validita proti DTD. Bububu! Vždyť SGML je děsně složité. Ke stejnému účelu vynalezlo W3C vlastní způsob, jmenné prostory:

    <?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:menu="urn:menu"> <title>Jídelníček nóbl restaurace</title> <h1><menu:datum>31. února</menu:datum></h1> <table> <tr> <th>Položka</th> <th>Cena</th> </tr> <tr><menu:pokrm> <td><menu:potravina>Uzená žížala s oblohou</menu:potravina></td> <td><menu:cena>9,99 €</menu:cena></td> </menu:pokrm></tr> <tr><menu:pokrm> <td><menu:potravina>Jed na krysy</menu:potravina></td> <td><menu:cena>0,99 €</menu:cena></td> </menu:pokrm></tr> <tr><menu:pokrm> <td><menu:potravina>Lidožrout</menu:potravina></td> <td><menu:cena>dohodou s pokrmem</menu:cena></td> </menu:pokrm></tr> </table> </html>

    Skvělé! „Revoluční“ XML opět boduje. Bohužel je ověření validity XML souboru užívajícího více jmenných prostorů obecně nemožné. Čímž se dílo W3C znovu výrazně odklání od ISO standardu SGML.

    V SGML deklaraci také existuje rodina přepínačů LINK, opět jsou v HTML vypnuté. Nastavíte-li je na YES, získáte mocný nástroj na převod dokumentu z jednoho typu do druhého. Převod realizuje element <!linktype>: umí přejmenovávat elementy, vyhodnocovat jednoduché podmínky a přizpůsobovat výsledek cílové DTD. Bububu! Vždyť SGML je děsně složité. Ke stejnému účelu vynalezlo W3C vlastní způsob, XSL Transformace.

    Nový zákon

    Když už tedy je vše tak krásně předělané a znekompatibilněné, zbývá poslední SGML relikt: definice typu dokumentu. Má mnoho zřejmých nevýhod, zejména slabou typovou kontrolu. Doporučení XML její možnosti ještě trochu omezilo. Na druhou stranu je DTD zřejmě tou nejsrozumitelnější částí standardu SGML.

    Konsorcium proto započalo práce na vcelku složité technologii XML Schema. Tempem sobě vlastním. O dva roky ho předběhl Microsoft se svým formátem XML Data Reduced. Velkou konkurencí pro XML Schema se stal také schematický jazyk RELAX NG. Konkuruje mu tím, že je právoplatným ISO standardem.

    Roku 2004 přišlo W3C s novou verzí XML, s číslem 1.1. Novinky jsou zanedbatelné, až na jeden detail: specifikace povoluje užití dalších Unicode znaků uvnitř názvů elementů a entit. A právě tento detail způsobuje, že dokumenty psané v XML 1.1 již nejdou spolehlivě validovat proti schématům ISO RELAX NG.

    Úcta ke standardům?

    Vtipné. A smutné zároveň. „Webový standard“ porušuje standard. Ale moment. V čem že je XML vlastně webové? Konsorcium vzniklo za účelem rozvoje webu. Jak se toto poslání slučuje s vývojem dalšího obecného metajazyka? SGML bylo dostačující ke všem účelům, k nimž se užívá věhlasné XML.

    Bohužel má XML lepší reklamu než SGML. Proto má i lepší podporu v mnoha programovacích nástrojích a většinou je nemožné se mu vyhnout. Stále však jsou a budou místa, kde to možné je. Jedním z nich je World Wide Web.