Přejít k navigační liště

Zdroják » Webdesign » RDFa – sémantika pro fajnšmekry

RDFa – sémantika pro fajnšmekry

Články Webdesign

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:

  1. Vložit odkaz na RDFa slovník, který popisuje osoby a vztahy mezi nimi (FOAF).
  2. 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ů:

Pokud byste si na Zdrojáku rádi přečetli o RDFa více, dejte to prosím najevo v komentářích.

Komentáře

Subscribe
Upozornit na
guest
18 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
BoneFlute

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.

Aleš Roubíček

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áší. :)

Aleš Roubíček

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ší.

Aleš Roubíček

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.

peter

„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í ;-)“

Martin Kravec

.. 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 :)

Martin Michálek

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.

Martin Michálek

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.

Aleš Roubíček

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.

PeterKahoun

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)

V.Novák

A nebral bych to tady jako souboj mikroformáty vs. RDFa – obé má použití, RDFa širší.

MazeGen

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?

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.