• TwitterRSS
  • Domů na Webylon
  • Kritika W3C
  • X(HT)ML
  • Za zrcadlem

    10. ledna 2008

    Jsem na cestě do fascinujícího světa na pomezí skutečnosti a dávných snů. Chcete-li, pojďte se mnou. Společně se mrkneme, jak vypadá doopravdy úspěšné XHTML.

    Připraveni? HOP. A jsme tam. Respektive tady.

    Mravy kodérů a prohlížečů

    Autoři stránek jsou v tomto světě spokojení a nadšení přibližně stejně jako v našem. Když udělají v kódu stránky malou chybičku, projde jim to. Když udělají velkou botu, neprojde jim to. Středně velké boty pak v některých prohlížečích fungují skvěle a v některých vůbec, protože výrobci prohlížečů nejsou neomylní a jejich XML procesory jakbysmet.

    Určité vážné prohřešky jsou z ryze praktických důvodů hromadně tolerovány: kupříkladu nekompletní dokument není i přes jasný pokyn XML specifikace zatracován a bez problémů funguje. Jako, kdyby konec dokumentu všechny neuzavřené elementy uzavřel. Návštěvníky to netrápí.

    Lidé mnohem méně validují, protože si myslí, že je na všechny nedostatky kódu upozorní už prohlížeč. Na WWW sice nepotkáte nezaentitovaný ampersand, ale překvapí vás nadpisy a tabulky uvnitř odstavců či odkazů. Doporučení XHTML nedefinuje, jak přesně má cílové zařízení nakládat s nevalidním (ovšem správně sestaveným) kódem, takže se stav příliš neliší od HTML v naší realitě.

    <ul> <br>Za tímto odsazeným textem se zalomí řádek!</br> Nový řádek je pořád odsazený! Pochválen buď UL. </ul>

    I v tomto snovém světě najdete tabulkové layouty, odporné animace a růžovoučké blogísky. Ekvivalentní jazyk přináší ekvivalentní výsledky. Řetěz mravy nenapraví.

    Vektorové obrázky a matematika

    SVG má v populárních prohlížečích vcelku dobrou podporu. Vektorové obrázky vepsané přímo do kódu stránky však neberou ohledy na nevidomé, proto se běžně vkládají skrze <object>. Ani zde doposud neexistuje postup, jak vložit SVG obrázek na pozadí či popředí nějakého jiného elementu pomocí CSS, takže bohužel nemůžeme slintat nad úžasnými plně vektorovými layouty.

    MathML má podporu slabší, přímo úměrnou zájmu širé veřejnosti o matematiku. Jediná drobnost, která jej činí v praxi použitelnějším než v našem světě, je vlastní MIME typ. Lze ho tedy též vkládat přes <object>.

    Mobilní telefony a jiná alternativní zařízení většinou jmenné prostory vůbec neznají. Ač je jejich implementace jednoduchá, konsorcium ji v XHTML doporučení nijak nevyžaduje. Ze slavné modularizace je tudíž v obou světech pouhá teoretická paštika používaná na dochucení nemastných a neslaných tiskových zpráv.

    Zapuštěná metadata

    Znáte mikroformáty? V našem světě stanoví konvenci pro konstrukce HTML elemetů s atributy class, title, rel a dalšími. Zde mají vlastní jmenný prostor. Místo hCalendaru se v XHTML snaží prosadit xCalendar:

    <xc:calendar xmlns:xc="http://microformats.org/xcalendar"> <xc:event> <a xc:url="http://www.web3con.com" href="http://www.web3con.com"> http://www.web3con.com </a> <xc:summary>Web 3.0 konference</xc:summary> <xc:dtstart datetime="2007-10-05">5.</xc:dtstart> - <xc:dtend datetime="2007-10-20">20. října</xc:dtstart>, místo konání: <xc:location>Argent Hotel, San Francisco, Kalifornie, USA</xc:location> </xc:event> </xc:calendar>

    Prosazuje se s podobnými úspěchy jako hCalendar. Zatím mu to moc nejde, protože webové stránky nikdo strojově nezpracovává [K.38], takže dodavatelé obsahu a redakční systémy nemají motivaci. Jeho éra se snad teprve blíží s chystanou implementací do prohlížečů a integrací do poštovních klientů či organizérů.

    Konkurentem mikroformátů je obecný RDF, tedy „Resource Description Framework“, samo jádro pojmu „sémantický web“. Přináší bohatá metadata, ontologie, taxonomie a samozřejmě také absolutní nezájem širé veřejnosti. Jako u nás.

    Chytré formuláře

    O chytrost formulářů se i zde stará JavaScript. Nikoliv XForms, jak by si W3C přálo. Nad složitějšími úkony musí kodér tak či onak zapojit své programátorské myšlení a vyjádřit algoritmus v jazyku založeném na Céčku [K.11] je nakonec jednodušší, než péct křehkou bábovku z elementů a atributů XForms, datových typů z XML Schémat, událostí z XML Events a de facto proměnných vyjádřených XPathem. Můžete se sice naučit všechny potřebné recepty nazpaměť, ale prohlížeče pak vaši komplikovanou delikatesu sežerou jen napůl a každému bude chutnat jinak.

    Existující implementace JavaScriptu jsou navzájem lépe kompatibilní a jelikož se klientské skriptování užívá jako doplněk k XHTML, můžou chytré formuláře elegantně „hloupnout“ tam, kde podpora skriptů chybí. Od mobilního telefonu se nedočkáte korektní interpretace deseti X technologií.

    Integrované RSS

    V oblasti syndikace obsahu alternativní svět boduje. Formát RSS je po vleklém boji převálcován samotným XHTML. Lépe řečeno: je pohodlně integrován. Kromě klasické podoby RSS feedu, jak ho známe u nás, obsahuje jmenný prostor RSS 3.0 i pár speciálních atributů, které se přilepují k elementům z jiných jmenných prostorů (tedy i k XHTML).

    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:rss="http://www.ietf.org/rss3" rss:updated="2007-11-01T00:00:00Z"> <head> <title rss:role="title">Chvalozpěvy na W3C</title> </head> <body> [...] <div id="text"> [...] <menu> [...] <li rss:role="entry"> <a href="♥.39" rss:role="entry-title" rss:link="@href"> [♥.39] Před zrcadlem </a> <p rss:role="entry-description">→ o výhodách HTML</p> </li> </menu> [...] </div> </body> </html>

    Čtečky běžně umí načítat všechny XML formáty a všímají si označených elementů. Není tedy třeba poskytovat identický obsah dvojmo, na téže URI je současně webová stránka i feed (nebo třeba SVG a feed, DocBook a feed). Hloupější čtečky mohou použít jednoduchou XSLT transformaci, která z XHTML+RSS vygeneruje klasický RSS feed.

    Přesné cílení odkazů

    Znáte XPointer? V našem časoprostoru není příliš populární, u MIME typů application/xml a text/xml jej částečně podporuje pouze Mozilla. V utopické realitě je situace lepší a na XPointer se odvolávají už i specifikace jiných MIME typů. Včetně aktualizovaného application/xhtml+xml.

    XPointer se zajímá o text za mřížkou v adrese. U nás můžeme v HTML odkázat jen na kotvy vytvořené pomocí <a name> nebo atributu id. Zdejší domorodci umí odkázat na cokoliv, třeba pomocí XPathu.

    <a href="K.32#xpath1(//text()[contains(.,'W3.org')])"> odkaz na element obsahující „W3.org“ (v Mozille by vám fungoval) </a>

    K odkázání na konkrétní část stránky již není potřeba spolupráce autora kódu. Užvaněná URI je docela nízká cena za to, že lze zakotvit bez kotvy, že?

    Uživatelé si v tomto světě na přesnější cílení odkazů zvykli mnohem lépe než v našem na kotvy. Aby také ne, když jej používají i zdejší vyhledávače při výpisu výsledků hledání. Žádné složité lovení hledané fráze na nalezené stránce, jedno kliknutí pošle uživatele rovnou na místo týkající se dotazu.

    Některé prohlížeče dokonce mají v kontextových nabídkách položku „Kopírovat odkaz na tento odstavec/nadpis/obrázek/tabulku“, která hodí do schránky URI s XPointerem. Samozřejmě tu existují i nástroje, které naopak vůbec XPointer neznají — neškodně jej ignorují.

    Kombinování dokumentů

    Kromě klasických rámů v XHTML tu existují ještě XFrames:

    <frames xmlns="http://www.w3.org/2002/06/xframes/"> <head> <title>Rozpůlená stránka</title> <style type="text/css" xml:id="stylopis"> #menu { width: 5em; border-right: 2px solid orange } </style> </head> <group composite="horizontal"> <frame xml:id="menu" source="menu.xml"/> <frame xml:id="obsah" source="uvod.xml"/> </group> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Nerozpůlená alternativní stránka</title> <style type="text/css"> /* aby se neznalým nezobrazil stylopis :-) */ #stylopis { display: none } </style> </head> <body> <p>This page uses XFrames and your browser suX.</p> </body> </html> </frames>

    Řeší většinu problémů, které trápily klasické rámy od nepaměti. Kupříkladu každá kombinace rámů má unikátní adresu:

    <a target="_top" href="rozpůlená.xml#frames(menu=menu.xml,obsah=uvod.xml)"> Přejít na začátek. </a>

    Spojovat dohromady dokumenty v prohlížeči umí i XInclude. Ten ovšem pracuje na nižší úrovni: vkládá přímo kousky XML dokumentu vyzobnuté pomocí XPointeru do objektového modelu. S jeho pomocí můžeme vylepšit alternativu ve výše uvedené konstrukci z XFrames:

    <frames xmlns="http://www.w3.org/2002/06/xframes/"> <head> <title>Rozpůlená stránka</title> <style type="text/css" xml:id="stylopis"> #menu { width: 5em; border-right: 2px solid orange } </style> </head> <group composite="horizontal"> <frame xml:id="menu" source="menu.xml"/> <frame xml:id="obsah" source="uvod.xml"/> </group> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude"> <head> <title> <xi:include href="uvod.xml" xpointer="xpath1(//title)"/> </title> <style type="text/css"> #stylopis { display: none } </style> </head> <xi:include href="uvod.xml" xpointer="xpath1(//body)"> <xi:fallback> <body> <p>This page uses XFrames and XInclude and your browser really suX.</p> <p>Download Netscape Navigator 5.0 NOW!</p> </body> </xi:fallback> </xi:include> <xi:include href="menu.xml" xpointer="xpath1(//menu)"/> </html> </frames>

    Hezky vymyšlené, že?

    XHTML 2 nebo 5?

    Jak to tady vypadá s druhou verzí XHTML? Žádná sláva. Sice je více na očích, ale málokdo jí odpustí nekompatibilitu s XHTML 1.0. Konsorcium se usilovně snaží staré XHTML nevyvíjet a veškeré nápady cpe pouze do toho nového, aby alespoň trochu vyvážilo onu klíčovou nevýhodu. Důsledek velkolepých plánů nápadně připomíná situaci u nás.

    Zde rovněž působí partyzánské uskupení podporované výrobci prohlížečů, kteří s postupem W3C nesouhlasí a považují vývoj XHTML 2 za krok špatným směrem. Jeho aktivita je však méně viditelná než aktivita WHAT WG u nás, neboť standardizátor stále požívá reputace spasitele.

    Návrat domů

    Nastal čas vrátit se zpět. Do světa, kde se X uctívá, avšak nepoužívá. Do světa bez zázraků, který spolehlivě funguje.

    HOP.

    Líbil se vám výlet? Odnesl jsem si z utopického světa malý suvenýr. Tamní učebnici dějepisu World Wide Webu. Fascinující čtivo. Už patrně vím, kde a hlavně kdy vznikl mezi snem a skutečností rozkol…