RDFa – sémantika pro fajnšmekry

Na internetu je spousta dat, ale software zatím neumí říci, co znamenají. To se začíná měnit a data dostávají význam. Nedostávají ho sama od sebe – webdesigneři se musí něco nového naučit. Začíná se mluvit o sémantice, Sémantickém Webu a technologiích, které jsou s ním spojené. Představme si tu asi nejmocnější pro popis sémantiky v rámci HTML stránky – RDFa.
Na Zdrojáku jsme se často zmiňovali o mikroformátech (viz seriál Kódujeme sémanticky s mikroformáty). Malém krůčku pro Sémantický Web, ale velkém skoku pro internet. Pomocí mikroformátů snadno řeknete, co na vašich stránkách je jméno, co je akce… Stačí použít pár tříd, na jejichž jménech se lidé dohodli. Samo o sobě to sice moc nedává smysl – proč používat jména tříd, které se líbily nějaké partě za oceánem? – ale když je začne používat hodně lidí, může se to začít brát jako standard a vhodně s tím pracovat. A mikroformáty se chytly. Postupně začaly vznikat pluginy do prohlížečů, které umožní uživatelům s takto označenými daty pracovat. Microsoft dokonce používá mikroformáty v IE8 pro své Web Slices. A Yahoo a Google mikroformáty indexují a rozumí jim.
Jenže mikroformáty jsou ze své podstaty nedokonalé. Umožňují popsat pouze omezené množství různých struktur na webu. Právě tolik, na kolika se dohodli lidé, kteří za mikroformáty stojí. Specifikace přibývají pomalu a všichni tuší, že popisovat význam dat v atributu class není nejlepší ani poslední řešení pro 21. století.
Na konci toho minulého století vzniklo RDF. RDF je model toho, jak popisovat vztahy mezi daty. Popisují je jako trojici podmět – přísudek – objekt, kde přísudek určuje vztah mezi podmětem a objektem. Abychom naši trojici slov mohli použít, musíme jim dát význam. RDF pro to používá slovníky. Použité slovníky nejsou nijak centralizované, můžete si klidně napsat svůj vlastní. Stačí dodržet pár základní pravidel. RDF tedy umí popsat jakýkoli obsah. Pokud by na něj náhodou neexistoval slovník, tak si ho můžete napsat. Hezky o RDF mluvil Josef Holý na WebExpu, případně hodně o RDF mluví i Jiří Procházka ve svém Úvodu do Sémantického Webu.
Nebylo by tedy skvělé používat RDF místo mikroformátů na našich webových stránkách?
RDFa se představuje
Akronym RDFa znamení RDF in Attributes. Jedná se v současnosti o asi nejmocnější způsob sémantického označení dat, který je decentralizovaný a rozšiřitelný. RDFa podporuje Google i Yahoo a používá jej Bílý dům, MySpace, Digg, O’Reilly a další. Pojďme se tedy podívat, co to RDFa vlastně je.
RDFa stojí a padá se slovníky
Z předchozího textu jistě vyplynulo, že RDFa je zcela závislé na slovnících. Pokud je nemá, neví, co věci znamenají. Slovníky se do XHTML vkládají pomocí xmlns:jmeno_slovniku="http://webova_adresa_slovniku/"
. Např. tedy xmlns:foaf="http://xmlns.com/foaf/0.1/"
. Nyní když ve svém kódu použiji nějaký pojem z FOAF (The Friend of a Friend), parser mu bude rozumět.
Jistě jste si všimli, že slovníky jsou do kódu vkládány pomocí XML namespace. A protože namespace jsou dostupné pouze v XHTML, tak také jediná existující schválená specifikace je pro XHTML 1.1. (Nad implementací do HTML5 se nadále diskutuje, RDFa tam svádí tuhý boj s Microdata a zatím nikdo neví, jak to dopadne. V e-mailových archivech W3C je těžké se vyznat a osoba nejpovolanější – Manu Sporny – na moje dotazy neodpovídá. – pozn. aut.)
Naštěstí je návrh HTML zpětně kompatibilní, a nějaké nové atributy, které RDFa používá, prohlížeče prostě ignorují. Takže můžeme používat RDFa i v HTML. Jediné co ztratíme je validita, ale protože ta je dnes už pouze vodítkem, není třeba se tím výrazněji trápit – zisk z RDFa je větší než ztráta z takovýmto způsobem nevalidního dokumentu.
První ukázka RDFa
Je čas ukázat si v praxi, jak RDFa vlastně vypadá:
<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
<ul>
<li typeof="foaf:Person">
<a href="http://martinuvweb.cz/">Martin</a>
</li>
</ul>
</div>
Výše uvedený kód informuje o tom, že tag li popisuje nějakou osobu. Člověku je to hned jasné, ale aby tomu rozuměl i stroj, musíme udělat dvě věci:
- Vložit odkaz na RDFa slovník, který popisuje osoby a vztahy mezi nimi (FOAF).
- Označit, že obsah
li
je typu Person, tedy osoba, a že všechna data uvnitř se týkají té jedné osoby.
Celkem jednoduché, že?
Ještě je potřeba dodat, že řetězec Martin je jméno té osoby a že uvedený odkaz vede na domovskou stránku toho člověka. Pojďme na to:
<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
<ul>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://martinuvweb.cz/“>Martin</a>
</li>
</ul>
</div>
Zase to nebylo těžké. Čtenáři s minimální znalostí angličtiny vědí, že jsme prostě řekli: Martin je jméno, a tento odkaz vede na jeho domovskou stránku.
Pro popis používáme atributy, které specifikuje RDFa a slovníky se jmény jednotlivých položek. Jejich použití není nijak složité, stačí uvést jak se slovník jmenuje a za dvojtečku napsat tu konkrétní položku, kterou chcete použít. Nic složitého, pokud dotyčné slovníky znáte. Nebo se do nich můžete kdykoli podívat.
Atributy RDFa
Atributy definuje specifikace RDFa a slovníky je nijak neovlivňují. Jaké atributy máme k dispozici? RDFa využívá jednak několik atributů z klasického HTML:
@rel
popisuje vztah věci A k věci B, na kterou odkazujeme. Právě třeba to, že cíl odkazu je adresa Martinovy domovské stránky.@rev
popisuje opačný vztah než @rel – popisuje vztah věci B (na kterou odkazujeme) k věci A (na které používáme@rev
).@content
specifikuje strojově čitelný obsah.@href
specifikuje, stejně jako v html, zdroj informací mimo stránku.@src
specifikuje, stejně jako v html, zdroj informací, který se do stránky vkládá odjinud (typicky obrázky).
A dále pak RDFa přidává několik svých atributů:
@about
říká, která data popisujeme.@property
popisuje data, která obaluje. Takže třeba v našich příkladech říká, že obalený obsah je jméno osoby.@resource
obsahuje odkaz na další zdroj dat k popisovanému obsahu, když nechceme, aby byl obsah klikatelný.@datatype
reprezentuje datový typ obsahu, který popisuje.@typeof
je něco jako třída v html. Říká, co je obalený obsah zač. U nás tedy říká, že obalený obsah je osoba.
A to je v zásadě celé RDFa – s ničím víc RDFa nepracuje. Jeho síla se ale skrývá v nekonečném počtu kombinací.
Složitější ukázka RDFa
Představme si následující situaci: Mám blog, někde v patičce mám informace o sobě a napravo ve sloupci mám odkazy na stránky svých známých. A já bych chtěl říci: „Toto jsou moji známí a tohle jsou jejich stránky“. S RDFa mohu velmi snadno:
<div xmlns:foaf="http://xmlns.com/foaf/0.1/">
<ul>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://martinuvweb.cz/“>Martin</a>
</li>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://vitkuvweb.cz/“>Vítek</a>
</li>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://tomasuvweb.cz/“>Tomáš</a>
</li>
</ul>
</div>
Zatím jsem neudělal nic jiného, než jsem řekl, že to jsou tři osoby, jaké jsou jejich domovské stránky a jak se jmenují. Teď už stačí říct, že je znám.
<div xmlns:foaf="http://xmlns.com/foaf/0.1/" about="#me" rel="foaf:knows">
<ul>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://martinuvweb.cz/“>Martin</a>
</li>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://vitkuvweb.cz/“>Vítek</a>
</li>
<li typeof="foaf:Person">
<a property="foaf:name" rel="foaf:homepage" href=“http://tomasuvweb.cz/“>Tomáš</a>
</li>
</ul>
</div>
A je to. about="#me"
je šikovná konvence, která říká, že tyto informace se vztahují ke mně. A až se budu v patičce stránky představovat, jediné, co musím udělat, je, že opět použiji about="#me"
. Např. takto:
<div about="#me" typeof="foaf:Person"> ... </div>
RDFa je mocné, ale jeho budoucnost je nejistá
V příkladech jsme pracovali pouze s jedním slovníkem. Na vysvětlení základů to stačilo, ovšem v RDFa můžete kombinovat libovolný počet slovníků. Můžete popisovat chemické vzorce, licence pod kterými publikujete obsah atd. (A zase pronesu obvyklé klišé – ve chvíli, kdy se Sémantický Web rozběhne naplno, stane se internet zcela jiným místem. – pozn. aut.)
Pokud rozumíte základům RDFa, tak je vám jasné, že jeho síla je ohromná a skutečně dokáže popsat téměř vše. Jeho síla a rozšiřitelnost se ale nakonec mohou stát jeho zabijákem. Mikroformáty mají dneska náskok právě díky tomu, že jsou jednoduché a používají věci, které webdesignéři dobře znají. Stačí použít párkrát “class”, a najednou jsou vaše data čitelná pro stroje. RDFa se ale nikdy příliš nestaralo o pohodlí webdesignérů. Jeho cíl byl dostat RDF na web v plné síle. To se povedlo, problém ale je, jak donutit nás, líné webdesignéry, nastudovat si slovníky a začít RDFa používat. Přinese nám to něco navíc, nebo si vystačíme s mikroformáty? Co myslíte?
Na závěr ještě pár odkazů:
- A List Apart: Introduction to RDFa by Mark Birbeck [EN]
- A List Apart: Introduction to RDFa II by Mark Birbeck [EN]
- RDFa Primer: Bridging the Human and Data Webs by W3C [EN]
Pokud byste si na Zdrojáku rádi přečetli o RDFa více, dejte to prosím najevo v komentářích.
Jde to? Mě by se RDF líbilo, ale je-li jeho podpora u třetích stran (tím myslím indexování googlu a spol) horší, než Microformátů, tak na tom stojí a padá můj zájem o něj.
Samozřejmě to jde, ale proč dělat tutéž práci dvakrát? Nehledě na zvětšení datového toku, které to s sebou přináší. :)
Samozřejmě to jde. Mikroformáty se s RDFa nijak nevylučují a můžeme na stránkách použít oboje najednou. Jestli nám to přinese nějaký užitek je ale otázka jiná.
Jinak podpora indexování u Google a Yahoo! se mi nezdá menší než u Mikroformátů, spíše větší. Musíte se pochopitelně podívat, jaké slovníky umí rozpoznávat, všechny prostě zatím neumí a bůh ví, zda někdy budou.
Když si ovšem vezmete Mikroformáty, tak tam je problém zase jiný. Mikroformáty jsou závislé na svých patternech a kupříkladu nový value-class pattern, který velmi pěkně řeší spoustu problémů mikroformátů s přístupností aj., tak není Googlem rozpoznán a váš Mikroformát je pak nekompletní a Google jej nebere v úvahu.
Myslím si, že hlavním problémem RDFa je jeho největší výhoda – robustnost. Pro to, abyste mohli RDFa používat musíte použít nový XHTML DTD, parser musí znát vámi použité slovníky (ekvivalentů hCard je dnes už několik) a v neposlední řadě je samotný zápis RDFa oproti mikroformátům méně přehledný a datově náročnější.
Nenazval bych RDFa rozbustní. RDFa je rozšiřitelné a platí za to určitou daň v podobě hůře zapamatovatelných (a i čitelných) hodnot atributů. A ano, i to, že se musím podívat, jaké slovníky zná parser. Ale jak píšu v předchozím komentáři, u Mikroformátů je to velmi podobné, takže si prakticky nepomohu. A myslím si, že tento problém nevyřeší ani Microdata. :)
To, že musím použít nový XHTML DTD je pouze nějaká část jedné specifikace, neříká to příliš o RDFa. Kromě toho fakt v reálném světě je takový, že jej použít nemusím (ačkoli můj dokument pak prostě nebude validní).
A co se datové náročnosti týče – i kdyby bylo RDFa datově náročnější než mikroformáty (což mi přijde přinejmenším sporné a rád bych pro to viděl nějaký důkaz), tak rozdíl se bude pohybovat okolo jednotek KB. Přiznejte se upřímně, kdo z vás z toho v noci nebude spát. :)
Co se týče datové úspory, zkuste si ukázky z články přepsat do ekvivalentních mikroformátů. Něco jaloviny z toho osekáme. Koho by štvalo pár KiB na víc? Každého kdo platí za přenesaná data po lince. Pokud má váš web user load, který stojí zato, tak budete šeřit i na kilobajtech.
To že nebudete mít v dokumentu správné DTD je zásadní probém, jak jinak se obecný crawler dozví, že váš dokumet RDFa obsahuje? I rozpoznávání jaké slovníky jsou v dokumentu použity je oproti mikroformátům mnohem náročnější. Zatímco u RDFa, musí parser projít celý dokument a hledat známé xmlns u mikroformátů se prostě podívá do atributu profile elementu head.
Ano, jednoduché příklady zvládnou Mikroformáty za použití o pár desítek znaků „lépe“. Složité modely pak pro jistotu nezvládnou vůbec. Diskusi o přenesených datech bych nechal být, neshodneme se. Podle mě rozdíl Mikroformáty/RDFa se pohybuje okolo 1KB. A to snad neřeší ani uživatelé mobilních telefonů s GPRS.. :)
Jinak teorie o rozpoznávání slovníků je krásná, musím ale upozornit na fakt, že Mikroformáty profil doporučují, není povinný a spousta webů ho nepoužívá. Crawler tedy musí hledat známé patterny.
Obecný crawler tedy skutečně projde web a když najde XMLNS, tak zparsuje RDFa. U Mikroformátů pak parser hledá jména tříd „vcard“, „vcalendar“.. skutečně si chudák parser pomohl?
Vtipné na DTD pro RDFa je, že prakticky nemá s RDFa nic společného. Jak píší autoři specifikace, tak pokud autor dokumentu CHCE svůj dokument zvalidovat, nechť použije jejich DTD. Jinak se na to může klidně vykašlat.
Ale pro větší diskusi o smyslu DTD tu zase není místo..
„Sémantický web je způsob, jak pomocí grantů platit obrovské masy akademických výzkumníků a zabránit tak válce a sociálním nepokojům. Aneb, kdo dělá sémantický web, ten nezlobí ;-)“
.. a ďalšie články tu na zdrojáku.
A zároveň nemyslím si, že my webdesignéri sme lenivý, skôr nás(skutočních webdesignérov) to láka poznať niečo nové.
Ja osobne s tým nemám problém :)
Honzo, nemáš nějaké příklady jak může označování podle konkrétních RDFa slovníků pomoci uživatelům? Mám na mysli podobně praktická použití jako mají Mikroformáty v IE8 a některých dalších aplikacích.
Martine, skvělá otázka. :)
RDFa je rozhodně mnohem méně rozšířené než Mikroformáty, takže nástroje pro běžné uživatele zatím moc nejsou. Pokud tedy chceš něco, co pomůže uživatelům teď, tak to RDFa není. Pokud chceš něco, co pomůže webu, aby se výrazně proměnil a hledání informací na něm bylo výrazně snazší, tak to RDFa (IMHO) je.
Ale přeci jen tu nějaké nástroje jsou. I když převážně využitelné jen RDF(a) šílenci.
Operator má experimentální podporu RDFa (zapni debug mód), W3C má pár hračiček pro RDFa šílence: http://www.w3.org/2007/08/pyRdfa/, http://www.w3.org/…DFa/impl/js/, jsou tu i nějaké další pluginy do Firefoxu, obvykle detekují RDFa, ale zatím nejsou moc schopny s ním nějak více pracovat. Kdyžtak omrkni RDFa wiki. http://rdfa.info/wiki/Tools
Myslím si, že RDFa má smysl hlavně jako budoucí univerzální API. Mikroformáty se slovníky RDFa prostě nemohou měřit. (provedl jsem jednoduchý pokus – svou osobní stránku jsem označil pomocí RDFa i pomocí Mikroformátů a RDFa o mne ví jednoznačně víc :) viz. honzasladek.com).
Se spojením „budoucí univerzální API“ souhlas, celou dobu na to myslím. :)
Pro sebe jako vývojáře si beru ponaučení, že vývoj RDFa musím rozhodně sledovat, ke dnešku budu ale dále pokračovat v podpoře mikroformátů, pro jejich okamžitý užitek pro konečné uživatele.
Otázka vývoje RDFa je zajímavá. RDFa bylo vyvinuto pracovní skupinou pro XHTML a ta, jak víme, byla v rámci W3C zrušena. Takže RDFa se asi už vyvíjet nebude. Tam šlo hlavně o těch pár atributů do XHTML. Zbytek je samotné RDF. HTML5 pro změnu zavádí vlastní atributy. RDFa je IMO slepá ulička.
To, že byl zrušen vývoj XHTML2 neznamená, že skončilo RDFa. Vzniká samostatná skupina (http://www.w3.org/…a-wg-charter), která se RDFa zabývá. Jak se lze dočíst, jedním z cílů této skupiny je integrace RDFa do HTML5.
Manu Sporny (jeden z členů skupiny) mi nedávno psal, že se na integraci RDFa do HTML5 pracuje, více bohužel nevím, ale pokud si Manu najde čas odpovědět na email, tak snad budu a své poznatky rozhodně budu šířit. :)
RDFa jako slepou uličku nevidím a Microdata rozhodně nepovažuji za šťastně navrženou věc.
Není to tak úplně in-browser využití, ale k pomoci uživatelům to (snad) slouží, takto. Více info na Rich Snippets (structured data)
Zrovna tohle je skvělý příklad, proč pro okamžité použití jsou spíše Mikroformáty. Jak je vidět z ukázky, Google je preferuje i když mu nabídnu krásné RDFa, kterému rozumí (jak je vidět níže v ukázce).
Ale každopádně díky moc za ni, uvědomil jsem si teď, že tam v nich mám chybu. A ani nevím, jak ji vyřeším. Další ukázka nedokonalosti Mikroformátů. :)
A nebral bych to tady jako souboj mikroformáty vs. RDFa – obé má použití, RDFa širší.
Možná jsem něco přehlédnul, ale nějak se mi nezdá, že třeba
@about
nepoužívá vlastní jmenný prostor, takže je součástí jmenného prostoru XHTML. To je úmysl?