RDFa intro

Jindrich Mynarz edited this page Apr 17, 2013 · 8 revisions

Úvod k zápisu stukturovaných dat do webových stránek pomocí RDFa

Tento dokument představuje způsob zápisu strukturovaných dat do HTML pomocí RDFa (RDF v atributech). Úvodní informace o RDFa lze najít také v RDFa Primer nebo ve specifikaci zápisu RDFa v HTML.

Obsah

  1. Datový formát RDF
  2. RDF slovníky
  3. Syntaxe RDFa
  4. Validace

Datový formát RDF

Resource Description Framework (RDF) je standardizovaný grafový formát pro výměnu dat na webu. Jakákoli data v RDF lze reprezentovat jako graf s orientovanými hranami, který je možné zapsat jako množinu trojic. Každá trojice se skládá ze subjektu, predikátu a objektu. Subjekt reprezentuje popisovanou entitu, predikát vlastnost entity a objekt je hodnotou vlastnosti. Hrany RDF grafu, které jsou popsány predikáty, jsou orientovány od subjektu k objektu, které tvoří vrcholy grafu.

Například trojice, kde http://damepraci.cz/resource/job-posting/1 je subjektem, rdf:type predikátem a schema:JobPosting objektem by mohla být zobrazena takto:

RDF graf

Pokud bychom k této trojici přidali další příklad trojice, získali bychom RDF graf, který se skládá z následující množiny 2 trojic:

http://damepraci.cz/resource/job-posting/1 rdf:type schema:JobPosting
http://damepraci.cz/resource/job-posting/1 schema:title "Skladník"

Tento RDF graf může být zobrazen takto:

RDF graf

RDF popisuje zdroje, které jsou identifikovány pomocí URI. Například, subjektem je v předcházejících příkladech zdroj identifikovaný URI http://damepraci.cz/resource/job-posting/1. URI lze pomocí prefixů jmenných prostorů zkracovat na tzv. kompaktní URI (např. rdf:type). Zatímco subjekty a predikáty jsou vyjádřeny pomocí URI, objektem trojice může být i literál (textová hodnota); např. "Skladník".

RDF je samo o sobě pouze datovým formátem. Jde o formalismus pro zápis dat, který neříká nic o obsahu dat. Sémantika obsahu dat popsaných v RDF vychází z použití sdílených slovníků.

RDF slovníky

RDF slovníky nabízejí prostředky pro popis dat v RDF, které určují, jak mají být popsaná data čtena a interpretována. Dvěma základními prostředky, které RDF slovníky poskytují, jsou třídy a vlastnosti. Třídy jsou množiny zdrojů sdílejících podobné vlastnosti. Zdroje se stávají členy třídy instanciací pomocí predikátu http://www.w3.org/1999/02/22-rdf-syntax-ns#type (lze zkrátit na rdf:type):

http://damepraci.cz/resource/job-posting/1 rdf:type schema:JobPosting

Tato trojice přisuzuje zdroji http://damepraci.cz/resource/job-posting/1 roli instance třídy schema:JobPosting. Třída JobPosting ze slovníku Schema.org (pod prefixem schema) je definována jako soubor nabídek práce, které popisují pracovní příležitosti.

Druhou hlavní složkou RDF slovníků jsou vlastnosti, které mohou být použity při tvorbě trojic v roli predikátů. Vlastnosti mají obvykle určeny třídy, s jejichž instancemi v roli subjektů je lze použít, a zároveň datové typy literálů nebo třídy, jejichž instance je přípustné použít jako hodnoty vlastnosti. Například vlastnost schema:title ze slovníku Schema.org lze použít s instancemi třídy schema:JobPosting v roli subjektu a jejich hodnotou jsou textové řetězce:

http://damepraci.cz/resource/job-posting/1 schema:title "Skladník"

Jak třídy (např. http://schema.org/JobPosting), tak vlastnosti (např. http://schema.org/title) jsou v RDF slovnících identifikovány pomocí URI.

RDF slovníky obvykle popisují vybranou oblast lidské činnosti, pro kterou nabízejí obecné koncepty, které nejsou závislé na konkrétním způsobu použití; např. webové aplikaci. Mezi známé RDF slovníky můžeme zařadit například:

  • Schema.org: všeobjímající slovník vyvíjený Googlem, Microsoftem a Yahoo!
  • Dublin Core Terms: slovník zaměřený na metadatový popis dokumentů, např. knih
  • Open Graph Protocol: slovník pro popis typických objektů sdílených v sociálních sítích (např. filmy) vytvářený Facebookem

Syntaxe RDFa

RDF je abstraktní datový formát, jehož obsah lze zapsat různými způsoby, například do XML (RDF/XML) nebo JSONu (JSON-LD). Pro vyznačení strukturovaných dat v dokumentech, jako jsou webové stránky v HTML, je určen zápis RDFa. K tomuto účelu RDFa používá páry atribut="hodnota" (např. property="schema:title"). Toto je základní syntaxe RDFa, kterou lze automaticky převést na jiné způsoby zápisu RDF. Druhým vyjadřovacím prostředkem RDFa je umístění v rámci značkovaného dokumentu, kdy je stromová struktura dokumentů použita pro dědičnost. Například HTML elementy dědí vlastnosti definované pro své nadřazené elementy (a vše dědí od kořenového elementu <html>).

RDFa neovlivňuje vizuální podobu dokumentu, takže webová stránka bez RDFa a s přidaným RDFa vypadá v prohlížeči stejně. Specifikace RDFa je standardem W3C, kterému se díky podpoře například ze strany Facebooku nebo Google dostalo širokého užití, takže RDFa lze nalézt již na více než 25 % webových stránek (zdroj).

V tomto úvodu budeme pracovat se zápisem RDFa do HTML5. RDFa využívá existující atributu HTML, například href nebo rel, a rozšiřuje je o další atributy jako prefix nebo property. Atributy používané v RDFa lze rozdělit podle způsobu užití do následujících skupin:

  • Definice použitých RDF slovníků: profile, prefix, vocab
  • Identifikace popisovaného zdroje: about
  • Typ zdroje: typeof
  • Vlastnosti zdroje: property, rel, rev
  • Hodnoty vlastností: href, resource, src, content
  • Anotace hodnot: lang, datatype

Hodnoty atributů používaných v RDFa lze roztřídit do následujících typů:

  • Textový obsah HTML elementu: <p>Skladník</p>
  • URI: <body typeof="http://schema.org/JobPosting">
  • Definice prefixů: <html prefix="dcterms: http://purl.org/dc/terms/
                                    schema: http://schema.org/
    ">
  • Kompaktní URI (CURIE) ve tvaru prefix:lokální_jméno: <p prefix="schema: http://schema.org/" typeof="schema:JobPosting">
  • Bezpečné kompaktní URI (Safe CURIE) ve tvaru [prefix:lokální_jméno] pro atributy about a resource: <p prefix="ex: http://example.com/" rel="ex:type" resource="[ex:concept1]">
  • Lokální jména, pokud je určen atribut vocab: <div vocab="http://schema.org/" typeof="JobPosting">
  • Tagy jazyků: <html lang="cs">

Jmenné prostory

Za účelem zkrácení zápisu URI lze použít kompaktních URI, která se skládají z prefixu jmenného prostoru, dvojtečky a lokálního jména rámci jmenného prostoru. Syntaxe kompaktních URI je tedy {prefix}:{lokální jméno}. Obvyklou praxí je přiřadit jmenný prostor každého z použitých RDF slovníků do samostatného prefixu. Například v kompaktním URI dcterms:issued je dcterms prefixem jmenného prostoru slovníku Dublin Core Terms a issued je lokální jménem. Pokud bychom chtěli kompaktní URI převést na absolutní URI, přidáme k sobě URI jmenného prostoru, které je přiřazeno prefixu, a lokální jméno. V případě, kdy prefixu dcterms je přiřazen jmenný prostor http://purl.org/dc/terms/, pak kompaktní URI dcterms:issued odpovídá absolutnímu URI http://purl.org/dc/terms/issued.

RDFa pro deklaraci jmenných prostorů nabízí 2 základní mechanismy. Jedním je atribut prefix, jehož hodnotou jsou páry ve tvaru {prefix}: {URI jmenného prostoru}, z nichž každý je uveden na samostatném řádku:

<html prefix="dcterms: http://purl.org/dc/terms/
              rdf:     http://www.w3.org/1999/02/22-rdf-syntax-ns#">

Uvnitř elementu, který je opatřen atributem prefix s deklarací jmenných prostorů pak lze používat kompaktní URI (např. dcterms:issued). Druhou možností je použití atributu vocab, jehož hodnotou je URI jmenného prostoru, který bude brán jako výchozí:

<html vocab="http://schema.org/">

Uvnitř elementu, který používá atribut vocab, budou všechna lokální jména bez prefixu automaticky zařazena do jmenného prostoru určeného tímto atributem. Pokud bychom například měli jako hodnotu atributu vocab uvedeno URI http://schema.org/, pak lokální jméno name bude odpovídat absolutnímu URI http://schema.org/name:

<div vocab="http://schema.org/">
  <p>Jméno: <span property="name">Jan Hluchý</span></p>
</div>

Použití atributu vocab je vhodné zejména pro URI jmenný prostor RDF slovníku, které je v popisovaném dokumentu nejvíce zastoupen, protože tak si lze ušetřit psaní prefixu.

Pro zjednodušení dohledávání URI jmenných prostorů populárních RDF slovníků lze použít službu Prefix.cc, která pro zadaný prefix vrací s ním nejčastěji asociované URI jmenného prostoru. Například pro prefix dcterms Prefix.cc vrátí absolutní URI jmenného prostoru slovníku Dublin Core Terms http://purl.org/dc/terms/.

Identifikace popisovaných zdrojů

Prvním krokem při značkování dat v RDFa je pojmenování (identifikace) popisovaných zdrojů pomocí atributu about. Hodnotou tohoto atributu je jakýkoli druh URI, které je přístupné zapsat jak jako absolutní (např. http://example.com/resource1), relativní (např. ../firma) nebo bezpečné kompaktní URI (např. [ex:resource1]). V RDFa jsou často používána relativní URI obsahující identifikátor fragmentu uvedený za znakem # (tzv. "hash URI"), například:

<p about="#nabidka">
  <!-- popis nabídky práce -->
</p>

Pokud není atribut about uveden, je při zpracování RDFa popisovanému zdroji automaticky udělen lokálně platný identifikátor (tzv. blank node), který je pro většinu případů použití dat dostačující.

Nyní se podíváme na dva základní typy údajů, které se v RDFa zapisují. Prvním jsou datové vlastnosti, druhým vlastnosti objektové.

Datové vlastnosti

Hodnotou datových vlastností jsou textové řetězce. Ty mohou být opatřeny datovými typy pomocí atributu datatype (např. datatype="xsd:date") nebo označením jazyka pomocí atributu lang (např. <p lang="cs">Česká republika</p>, <p lang="en">Czech Republic</p>). Datové typy určují pravidla strukturování textových hodnot. Například literál "2013-04-01" odpovídá datovýmu typu xsd:date, který je podobně jako mnoho dalších datových typů používaných v RDF převzatý z XML Schema. Jazyk textových hodnot je obvykle pomocí atributu lang určen na kořenovém elementu <html>, protože tak lze využít dědičnosti jazykové anotace, díky které mají všechny textové hodnoty uvnitř anotovaného elementu automaticky přiřazenu tuto anotaci. Změnit toto výchozí chování lze pomocí uvedení atributu lang s jinou hodnotou na vnořeném elementu nebo pomocí užití atributu datatype, který se s atributem lang vzájemně vylučuje.

Pro vyznačení datových vlastností RDFa používá atribut property.

<h1 property="title">Skladník/ce</h1>

Strojově čitelné hodnoty

V některých případech se data nevyskytují ve značkované webové stránce ve strojově čitelné podobě. Pro poskytnutí strojově čitelných hodnot datových vlastností lze použít atributu content. Tento přístup se hodí pro případy, kdy webová stránka obsahuje namísto strojově čitelné hodnoty text, který se lépe čte lidským uživatelům. Atribut content lze použít například pro data:

<p>Změněno: <span property="dcterms:modified" content="2013-03-07">7. března 2013</span></p>

Objektové vlastnosti

Hodnotou objektových vlastností jsou objekty, které mohou být identfikovány buď URI (např. http://acme.cz) nebo pomocí tzv. prázdného uzlu ("blank node"). Prázdný uzel se v RDFa automaticky vytvoří, pokud je použit atribut rel, rev nebo typeof a popisovanému zdroji není pomocí atributů about, href, resource nebo src přiřazeno URI.

Pro vyznačení objektových vlastností se používají atributy rel nebo rev. Atribut rel značí vztah mezi popisovaným zdrojem a daným objektem, kdežto rev se používá v případě, kdy popisovaný zdroj hraje roli objektu a odkazovaný zdroj je subjektem.

<tr rel="jobLocation">
  <!-- popis odkazovaného objektu -->
</tr>

Zdroje, které jsou hodnotou objektových vlastností, se jsou identifikovány pomocí atributů href, src nebo resource. Obvyklé je také identifikaci zdroje pomocí těchto atributů vynechat, přičemž se při zpracování RDFa takovému zdroji automaticky přiřadí lokálně platná identita (blank node).

Pro často používanou objektovou vlastnost rdf:type, která přiřazuje zdroj do třídy, nabízí RDFa zkrácený zápis pomocí atributu typeof. Zápis <body typeof="schema:JobPosting"> je proto ekvivalentní s <body rel="rdf:type" resource="[schema:JobPosting]">.

Validace

Pokud chcete zkontrolovat své použití RDFa, pak pro ověření jeho syntaktické správnosti je možné použít následující validátory:

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.