Hlavní navigace

WHATWG - budoucnost webu?

30. 3. 2007
Doba čtení: 9 minut

Sdílet

 Autor: 29
V poslední době se začíná znovu živě diskutovat nad budoucím vývojem (X)HTML a webu jako takového. Jedním z hráčů na tomto poli je i skupina WHATWG, sdružující výrobce internetových prohlížečů (Mozilla Foundation, Opera Software a Apple Computer) a zájemce o vývoj webu obecně. Jak tato skupina vznikla, co vytvořila, a do jaké míry je její existence pro budoucnost webu relevantní?

Trocha historie

Přesuňme se nyní cca do roku 2004. Konsorcium W3C, zodpovědné za vydání specifikací týkajících se webu, se posledních několik let snaží prosadit web postavený na XML, výsledkem čehož je řada specifikací určených pro práci s tímto jazykem. W3C také dospělo k názoru, že jazyk HTML (potažmo XHTML 1.x) by šel navrhnout lépe, a připravuje návrh specifikace XHTML 2.0, která je s „klasickým“ (X)HTML zpětně nekompatibilní.

Weboví vývojáři tou dobou ale řeší úplně jiné problémy – omezení jazyka HTML, na kterém je postaven celý web, a ještě dlouho bude. (Většina z věcí, co platí pro HTML, platí i pro XHTML 1.x. Dále budu pro jednoduchost mluvit jen o HTML.) Řadě z nich vize W3C připadají jako z jiného světa – navržené od stolu bez přihlédnutí k realitě. A přesně tak to také je. Lidé, pro které je HTML denním chlebem, by více ocenili „drobnosti“ jako vylepšení velmi omezených formulářů v HTML nebo standardizaci některých proprietárních funkcí prohlížečů, aby mohly být implementovány bez nutnosti reverse-engineeringu. K tomu se přidává právě se vzdouvající vlna webových aplikací – je jasné, že web budoucnosti bude především o nich. I na to W3C ale zapomíná a ve svých specifikacích se zaměřuje spíše na dokumenty než na aplikace.

Několik lidí, převážně z kruhů implementátorů webových prohlížečů, je touto situací frustrováno. Po snaze o změnu zevnitř W3C jim dochází, že konsorcium je už příliš odtržené od reality, a pokud budou chtít prosadit další rozvoj HTML, budou to muset udělat sami. V čele s Ianem Hicksonem (toho času zaměstnancem Opery, dnes Google) tak zakládají Web Hypertext Application Technology Working Group – WHATWG.

Cíle WHATWG

WHATWG si vytknulo dva poměrně ambiciózní cíle:

  1. Zdokumentovat existující chování prohlížečů.
  2. Navrhnout rozšíření HTML především s ohledem na webové aplikace.

Dokumentace existujícího chování prohlížečů znamená popsat znovu HTML (jeho syntaxi, sémantiku a objektový model) tak, jak ho prohlížeče doopravdy implementují, včetně případů jako zpracování chybných dokumentů a včetně běžně implementovaných rozšíření (objekt window, drag & drop API, atribut contenteditable apod.). Tato část je komplikována tím, že mezi implementacemi jednotlivých prohlížečů jsou zejména v různých okrajových případech značné rozdíly (viz několik příkladů) a jejich chování není obvykle nikde popsáno – je tedy nutný reverse-engineering.

V případě rozšíření HTML je kladen důraz na inkrementálnost řešení (základem všeho je HTML, nikoliv nějaký nový jazyk) a zpětnou kompatibilitu (rozšíření jsou navrhována tak, aby byl ve starších prohlížečích možný fallback ke klasickému HTML).

Výsledkem dvou a půl let práce na naplnění uvedených cílů jsou dvě specifikace: Web Forms 2.0 a Web Applications 1.0. Obě jsou stále ve stádiu pracovního návrhu (working draft), nicméně specifikace Web Forms 2.0 je téměř kompletní. Web Applications 1.0 obsahuje ještě mnoho „bílých míst“, ale hrubá práce na této specifikaci je už také dokončena. Plánována je ještě specifikace Web Controls 1.0, definující nástroje pro tvorbu nových prvků uživatelského rozhraní, ale práce na ní zatím nezačaly.

Za zmínku stojí vývojový proces specifikací. Veškerou editační práci provádí Ian Hickson osobně, na základě vlastních rozhodnutí, která jsou obvykle předem široce diskutována v mailing listu WHATWG. To zaručuje konzistenci specifikací a zároveň širokou zpětnou vazbu. Pro každou novou funkci je potřeba mít specifický use-case – tvrzení, že by se „někdy někomu mohla hodit“, k začlenění do specifikace nestačí. Celkově je vývojový proces velmi otevřený a přitom efektivní.

Zajímavá je otázka stabilizace specifikací. Obvyklý problém spočívá v tom, že pokud je specifikace prohlášena za hotovou příliš brzy, při její implementaci se může narazit na neočekávané problémy a některé její části se můžou ukázat v praxi neužitečné. Na druhou stranu lze u velké specifikace těžko očekávat, že ji někdo kompletně implementuje před jejím vydáním. Ian Hickson to chce u Web Applications 1.0 řešit tak, že specifikace WHATWG bude prohlášena za hotovou po částech – tak, jak budou získávány implementační zkušenosti. Zda tento proces bude opravdu fungovat, ukáže čas.

Pojďme se nyní podívat, co přináší specifikace Web Forms 2.0 (specifikaci Web Applications 1.0 si schováme do příštího článku). Pro pořádek dodávám, že do finálních verzí specifikací se samozřejmě obsažené funkce mohou změnit a nebo být úplně vyškrtnuty. Výrazné změny zejména u Web Forms 2.0 v tuto chvíli už ale nepovažuji za pravděpodobné.

Web Forms 2.0

Specifikace Web Forms 2.0 je zaměřena poměrně úzce – na formuláře v HTML. Jejich poměrně omezené možnosti se snaží rozšířit především doplněním nových formulářových prvků, rozšířením těch stávajících, novým modelem pro opakování prvků a možností odesílání formulářů v XML. Specifikace je psána jako seznam rozdílů vůči HTML 4.01/XHTML 1.0, což usnadňuje její čtení i implementaci. Po svém dokončení bude zahrnuta do specifikace Web Applications 1.0.

Nové formulářové prvky

Web Forms 2.0 rozšiřuje množinu možných hodnot atributu type u elementu <input>, a tak definuje nové formulářové prvky. Jedná se především o různé prvky pro zadání časových údajů (čas (UTC i lokální), datum, datum a čas, měsíc, týden), zadávání čísel, e-mailů a URL. Prohlížeč může v těchto případech uživateli zobrazit pomocné prvky v rozhraní (kalendář, šipky u čísel, historii prohlížeče apod.) a také zajistit, aby nešlo zadat nesprávné hodnoty.

Validace na straně klienta

Validace na straně klienta dnes bývá obvykle řešena JavaScriptem. Není ale JavaScript zbytečně silný nástroj na takovou jednoduchou věc? Ukazuje se, že ano: většinu podmínek platnosti jednotlivých polí formuláře lze specifikovat deklarativně. Web Forms 1.0 tedy přidává k vybraným formulářovým elementům atribut required , určující, zda je vyplnění odpovídajícího pole povinné, a atribut pattern , obsahující regulární výraz, jemuž musí hodnota pole odpovídat. U hodnot s jasně definovaným pořadím (čísla, čas, …) lze navíc použít atributymin a max , které definují mezní hodnoty, a atribut step , určující krok, po kterém může být hodnota měněna. JavaScriptovou validaci je stále možno používat na složitější případy.

Model opakování

Webové aplikace v praxi obsahují množství formulářů s opakujícími se prvky se stejnou strukturou. Nejčastěji jde o různé krátké seznamy (např. seznam objednávek, uživatelů apod.). Typicky je třeba editovat údaje v jednotlivých položkách seznamu, přidávat nové položky, mazat existující položky a někdy též měnit jejich pořadí.

Jak se tato situace řeší v HTML? Buď se po každé drobné úpravě data odešlou na server, což je nepohodlné pro uživatele (vždy je znovu načtena celá stránka), nebo je použit JavaScript, který formulář dynamicky upravuje, což je zas spousta programování navíc (nemluvě o tom, že aplikace se stane závislou na JavaScriptu, což omezuje přístupnost).

Web Forms 2.0 opět přichází s deklarativním řešením. U libovolného elementu je možné pomocí atributu repeat="template" specifikovat, že je šablonou pro další opakované prvky formuláře. Instance této šablony pak mohou být zapsány přímo v kódu (pak by měly odkazovat na ID své šablony pomocí atributu repeat-template) a nebo je lze vytvořit dynamicky. Dynamické vytváření instancí šablon je realizováno pomocí elementů <input type="add">, resp. <button type="add">, podobně je to i s mazáním instancí ( type="remove") a posuny ( type="move-up" a type="move-down"). Jinak řečeno, klikáním na speciální tlačítka formuláře uživatel přidává, odebírá a přesouvá položky, aniž by bylo nutno psát jakýkoliv kód.

Možná teď přemýšlíte, jak je vyřešena identifikace dat ve formulářových prvcích obsažených v instancích šablon – tj. jak při odeslání položek server pozná, které formulářové pole patří ke které instanci. Odpověď není nijak komplikovaná: každá instance šablony má zaručen unikátní index a při jejím vytváření se projdou všechny atributy všech elementů v ní a každý řetězec „[název_šablony]“ v nich je upraven tak, že místo názvu šablony je substituován index instance. Takže např. z elementu <input type="text" name="item-code[order]"> se stane <input type="text" name="item-code[1]">. Pokud programátor šablonu napíše korektně, stanou se tím názvy všech polí ve formuláři unikátními. (Ve skutečnosti je algoritmus trochu složitější, pro detaily nahlédněte přímo do specifikace.)

Pomocí atributůrepeat-min a repeat-max je možné omezit počet instancí šablony. Atributrepeat-start zase zařídí automatické vytvoření specifikovaného počtu instancí šablony bez nutnosti je vypisovat v HTML kódu. Jde také používat vnořené šablony, což se může hodit např. u editace položek stromové struktury.

Celý model opakování je specifikován úplně obecně – nemusí se tedy opakovat jen prvky formulářů, ale libovolný fragment HTML. Implementace modelu je možná i ve stávajících prohlížečích za pomoci JavaScriptu. Tato implementace už dokonce existuje v podobě projektu repetitionmodel a v době psaní článku vše funguje ve Firefoxu 1–2, IE 6 a 7 a Safari 2.0.4.

Struktura formulářů

Prvky formulářů (tj. elementy <input>, <select> a další) nově nemusí být vnořené v elementu <form>, ale pomocí atributuform se mohou odkázat na ID formulářů, ke kterým přísluší (ano, jeden prvek může příslušet více formulářům zároveň). Elementy <form> mohou být vnořené do sebe s tím, že formulářové prvky bez explicitně určeného formuláře patří do nejbližšího obklopujícího formuláře. Obě nové vlastnosti pomohou s tvorbou složitějších stránek, obsahujících více formulářů.

Odesílání formulářů v XML

Standardní formát dat z formulářů v HTML, odesílaných pomocí POST requestů ( application/x-www-form-urlencoded), nemusí při zpracování na serveru někdy vyhovovat. Protože dnes je standardním formátem pro přenos menších objemů strukturovaných dat XML, přidává specifikace Web Forms 2.0 i tuto novou možnost. Podrobnosti asi nemá smysl rozvádět, funkce je myslím vcelku dobře představitelná. Pro ukázku jen malý příklad (převzatý přímo ze specifikace):

Formulář:
<form action="http://example.com/cgi/handle"
      enctype="application/x-www-form+xml"
      method="post">
 <p>
  <label> What is your name? <input type="text" name="submit-name"/> </label>
  <label> What files are you sending? <input type="file" name="files"/> </label>
  <label> When were they written? <input type="date" name="stamp"/> </label>
  <input type="submit" value="Send"/>
 </p>
</form>
Data odeslaná na server:
<formdata xmlns="http://n.whatwg.org/formdata">
 <field name="submit-name" index="0">Larry</field>
 <file name="files" index="0" filename="file1.txt" type="text/plain;charset=iso-8859-1">
  Y29udGVudHMgb2YgZmlsZTEudHh0
 </file>
 <field name="stamp" index="0">1979-04-13</field>
</formdata>

Další menší funkce

Specifikace Web Forms 1.0 obsahuje ještě několik dalších menších funkcí. Vyjmenujeme si telegraficky ty nejdůležitější:

  • Element <output> , určený pro zobrazování výsledků různých operací (např. celková cena nákupu v nákupním koši, která je součtem cen jednotlivých položek).
  • Element <datalist> , umožňující specifikovat hodnoty, které bude prohlížeč nabízet uživateli zejména u různých textových vstupů.
  • Atribut autocomplete , umožňující zapnout nebo vypnout automatické nabízení dřívějších hodnot prvku formuláře prohlížečem. Tento atribut je už dnes v prohlížečích implementován a používán.
  • Atribut autofocus , zajišťující přepnutí fokusu na daný prvek formuláře.

Implementace

Milým překvapením při psaní tohoto článku pro mě bylo zjištění, že Opera od verze 9 již většinu specifikace Web Forms 2.0 podporuje. Konkrétně jde o nové formulářové prvky, deklarativní validaci na straně klienta a model opakování. Pokud máte Operu, můžete si vše ozkoušet v akci na ukázkové stránce:

BRAND24

Ukázka možností Web Forms 2.0 (pouze Opera 9 či vyšší)

Pokračování

V pokračování tohoto článku, které vyjde na Lupě do týdne, se zaměříme na specifikaci Web Applications 1.0 a zamyslíme se nad tím, zda má WHATWG šanci opravdu ovlivnit vývoj webu.

Oceníte nové vlastnosti stránek, které WHATWG chystá?

Byl pro vás článek přínosný?

Autor článku

Autor studuje a zároveň trochu učí na MFF UK. Zajímají ho především programovací jazyky, problémy programování jako takového a webové aplikace.
Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).