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:

  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.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 18

Přehled komentářů

BoneFlute Kombinace RDF a Microformátů
Aleš Roubíček Re: Kombinace RDF a Microformátů
Jan Sládek Re: Kombinace RDF a Microformátů
Aleš Roubíček RDFa je příliš robustí
Jan Sládek Re: RDFa je příliš robustí
Aleš Roubíček Re: RDFa je příliš robustí
Jan Sládek Re: RDFa je příliš robustí
peter na root.cz jeden kolega povedal podla mna dost vystizne o com je RDF
Martin Kravec Áno, máme záujem o RDFa
Martin Michálek RDFa pro uživatele?
Jan Sládek Re: RDFa pro uživatele?
Martin Michálek Re: RDFa pro uživatele?
Aleš Roubíček Re: RDFa pro uživatele?
Jan Sládek Re: RDFa pro uživatele?
PeterKahoun Re: RDFa pro uživatele?
Jan Sládek Re: RDFa pro uživatele?
V.Novák Taky se přimlouvám za pokračování
MazeGen jmenný prostor atributů?
Zdroj: https://www.zdrojak.cz/?p=3143