čtvrtek 21. srpna 2008

Komu patří data atributy v HTML?

HTML5 přináší data atributy. Jakékoliv značce můžete přidat libovolný počet různých atributů
  data-cokoliv="vaše data",
ke kterým můžete přistupovat přes jednoduché API
  element.dataset["cokoliv"].

HTML5 se tak snaží specifikovat (sjednotit), co někteří kodéři dělají již dávno (přidávají si vlastní datové atributy pro potřeby svých skriptů).

Pokud by se totiž nešvar vlastních atributů rozmohl, tak nejenže časem ubude validních stránek (to by až tolik nevadilo), ale objeví se počet konfliktů, kdy atribut používaný uživatelem A je v konfliktu s atributem frameworku B a obojí je v konfliktu s připravovaným atributem další verze značkovacího jazyka.

HTML5 tedy vymezuje hranice a říká: "S data-* si dělejte co chcete, ale nikam jinam už nesahejte." Z data-* atributů se tak stává místo s cedulí "Zde jsou lvi", kterému se validátory budou vyhýbat jako čert kříži.

Otázkou je, komu toto nově uvolněné místo vlastně patří. Specifikace k tomu říká:
Data atributy jsou určeny k ukládání dat patřících stránce nebo aplikaci, pro které neexistují vhodnější značky a atributy.
Vzpomínám si, že ta formulace měla uchovat data atributy čisté a nezaplevelené pro koncového vývojáře a měla být odvedena pozornost např. komunity okolo mikroformátů, aby je nevzala útokem. Toť idea.

Nebude asi překvapením, že se v diskusním listu mikroformátů objevily reakce "hurá, to se nám hodí" vedle reakcí "ne, to není pro nás".

Specifikace jen těžko určí, kdo má nebo nemá které atributy používat. Teprve čas ukáže, zda si nově objevenou zemi nějaký dobyvatel nezabere pro sebe. Při dnešním počtu JavaScriptových frameworků není problém, "zaplevelit" data atributy desítkami předdefinovaných názvů (a vemte v úvahu, že na jednom webu se často používá frameworků několik nebo alespoň jeden framework s několika pluginy) . Podobně, pokud by data atributy nakonec použily mikroformáty.

Je to trochu podobné se zavedením značky object (embed). Otevřela bránu do nové země, nikdo netušil, k čemu všemu může začít sloužit a dnes se zpožděním se zavádí značky video a audio, ačkoliv mohly být zavedené už dávno, pokud by se média od začátku necpala do nejsnazšího místa, kam to šlo, čili do objectu.

Data atributy jsou snadné místo pro rozšíření HTML, že snazší už být nemůže, ale to není jejich účel. Mají sloužit pro uchovávání dat, která mají význam pro kód koncové webové aplikace, nikoliv pro data, která budou mít význam napříč celým Webem.

A komu patří data atributy v HTML podle vás? Koncovým vývojářům nebo autorům frameworků?

Další čtení: John Resig: HTML 5 data- Attributes

3 komentáře:

  1. Rozumnou cestou frameworků by bylo "zabrání" vždy svého "id" a zasahování vždy jen do atributů data-[frmID]-*
    Stejnou cestou se ale může ubírat i vývojář, kterému framework "bere" atributy

    OdpovědětVymazat
  2. Kazdy framework muze mit unikantni ID jako napriklad data-com-zend-framework-*. V konfiguraci potom budete mit moznost nastavit alias, treba na data-z, takze by se Vam nic poprat nemelo a nemusite mit nejakou centralni repository framework ID.

    OdpovědětVymazat
  3. Myslím, že by každý framework měl používat namespace v nějaké podobě. Atributy bez namespace by měl používat jedině přímo autor stránky, nikdy framework.
    Právě Javascriptové frameworky se mi před časem zhnusily kvůli naprosté ignoraci jmenných prostorů. Tehdy to z mé strany vyústilo v naprostou ignoraci ajaxu, ze které se začínám dostávat až teď. Nevím, co se od té doby změnilo, možná je už dnes situace lepší. V každém případě doufám, že využití data-* to bude lepší.
    Možnost nastavení namespace mi přijde jako zbytečnost, navíc bych to jako zastánce Dependency Injection viděl tako zbytečně složité. Ale dobrá praktika by byla použít nějakou (třeba soukromou) konstantu.
    v6ak

    OdpovědětVymazat

Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.