Jakub Klímek, Martin Nečaský RDF, RDFa, RDFS
RDF entity reálného světa (konkrétní i abstraktní) nějaká osoba, stát, webová stránka, ... reprezentovány na webu pomocí zdrojů každý zdroj je jednoznačně identifikován svým URI zdroje http://www.necasky.net/#me a mailto:martinnec@gmail.com reprezentující osobu Martin Nečaský zdroj http://dbpedia.org/resource/Czech_Republic reprezentující stát Česká republika Jakub Klímek, Martin Nečaský: RDFa
RDF entity mají různé vlastnosti a jsou ve vztahu k jiným entitám Martin Nečaský je vysoký 178 cm Martin Nečaský zná Alana Eckharta Česká republika má hlavní město Prahu stejně jako entity, i vlastnosti a vztahy jsou reprezentovány pomocí zdrojů zdroj http://www.example.com/personal/#height reprezentující vlastnost je vysoký zdroj foaf:knows reprezentující vlastnost zná Jakub Klímek, Martin Nečaský: RDFa
Subjekt Predikát Objekt RDF takové vlastnosti entit a vztahy mezi nimi lze formálně popisovat jako trojice Subjekt Predikát Objekt subjekt (subject) je zdroj jehož vlastnost je popisována predikát (predicate) je zdroj reprezentující popisovanou vlastnost objekt (object) je hodnotou vlastnosti subjektu (zdroj nebo hodnota) Jakub Klímek, Martin Nečaský: RDFa
Příklad nec:me ex:height “178 cm“ nec:me foaf:knows eck:me eck:me foaf:knows nec:me pro každý zdroj reprezentující vlastnost může být explicitně specifikováno, že reprezentuje vlastnost (opět pomocí trojice), např.: foaf:knows rdf:type rdf:Property Jakub Klímek, Martin Nečaský: RDFa
Co vidí stroj vs. co vidí uživatel Jakub Klímek, Martin Nečaský: RDFa
RDFa – RDF in attributes RDF – Resource Description Framework Trojice. Jednoduchá tvrzení o datech. Subjekt, Predikát, Objekt http://www.example.org/index.html má autora jehož hodnota je John Smith subjekt je URL http://www.example.org/index.html predikát je " má autora" objekt je "John Smith" Před RDFa: XHTML pro lidi, RDF pro stroje RDFa: Speciální XHTML atributy Umožňují využít existující XHTML data jak pro lidi tak pro stroje bez opakování obsahu Jakub Klímek, Martin Nečaský: RDFa
XHTML+RDFa 1.0 document <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" version="XHTML+RDFa 1.1" xml:lang="en" lang="en"> <head> <title>Virtual Library</title> </head> <body> <p> Moved to <a href="http://example.org/">example.org</a>. </p> </body> </html> Jakub Klímek, Martin Nečaský: RDFa
Příklad All content on this site is licensed under <a href="http://creativecommons.org/licenses/by/3.0/"> a Creative Commons License </a> All content on this site is licensed under <a rel="license" href="http://creativecommons.org/licenses/by/3.0/"> a Creative Commons License </a> Jakub Klímek, Martin Nečaský: RDFa
Příklad: slovníky Proč prefix dc? <div> <h2>The trouble with Bob</h2> <h3>Alice</h3> ... </div> <div prefix="dc: http://purl.org/dc/elements/1.1/"> <h2 property="dc:title">The trouble with Bob</h2> <h3 property="dc:creator">Alice</h3> ... </div> Proč prefix dc? Kdybychom použili jen property=„title“ a property=„creator“ pro stroj to jsou stále jen nějaké nové texty Ve slovníku Dublin Core jsou koncepty title a creator definované spolu s jejich sémantikou dc:title je zkratka za http://purl.org/dc/elements/1.1/title a o tom „všichni“ ví co znamená Jakub Klímek, Martin Nečaský: RDFa
Příklad: slovníky <div> <h2>The trouble with Bob</h2> <h3>Alice</h3> ... </div> <div prefix="dc: http://purl.org/dc/elements/1.1/"> <h2 property="dc:title">The trouble with Bob</h2> <h3 property="dc:creator">Alice</h3> ... </div> Jakub Klímek, Martin Nečaský: RDFa
Příklad: více položek na stránce <div prefix="dc: http://purl.org/dc/elements/1.1/"> <div about="/alice/posts/trouble_with_bob"> <h2 property="dc:title">The trouble with Bob</h2> <h3 property="dc:creator">Alice</h3> ... </div> <div about="/alice/posts/jos_barbecue"> <h2 property="dc:title">Jo's Barbecue</h2> <h3 property="dc:creator">Eve</h3> Jakub Klímek, Martin Nečaský: RDFa
Příklad: nejbližší about <div about="/alice/posts/trouble_with_bob"> <h2 property="dc:title">The trouble with Bob</h2> The trouble with Bob is that he takes much better photos than I do: <div about="http://example.com/bob/photos/sunset.jpg"> <img src="http://example.com/bob/photos/sunset.jpg" /> <span property="dc:title">Beautiful Sunset</span> by <span property="dc:creator">Bob</span>. </div> Jakub Klímek, Martin Nečaský: RDFa
Žádné about, tzn. žádné URL => _:blanknode1 Příklad: FOAF, typeof <div typeof="foaf:Person" prefix="foaf: http://xmlns.com/foaf/0.1/"> <p property="foaf:name"> Alice Birpemswick </p> <p> Email: <a rel="foaf:mbox" href="mailto:alice@example.com"> alice@example.com </a> Phone: <a rel="foaf:phone" href="tel:+1-617-555-7332"> +1 617.555.7332 </div> Žádné about, tzn. žádné URL => _:blanknode1 Jakub Klímek, Martin Nečaský: RDFa
Příklad: FOAF <div prefix="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://example.com/bob"> Bob </a> </li> href="http://example.com/eve"> Eve </ul> </div> Jakub Klímek, Martin Nečaský: RDFa
URI vs. CURIE vs. SafeCURIE URI – Uniform Resource Identifier <div about="http://dbpedia.org/resource/Albert_Einstein"> CURIE – Compact URI Expression <div prefix="db: http://dbpedia.org/"> <div about="db:resource/Albert_Einstein"> ... </div> SafeCURIE <div about="[db:resource/Albert_Einstein]"> Jakub Klímek, Martin Nečaský: RDFa
XHTML a RDFa atributy - přehled Typ obsahu Význam @rel Seznam CURIE Predikáty (např. "foaf:name"), objekt je v @href nebo @src @rev Obrácené predikáty, objekt je v @href nebo @src @content Řetězec Strojově čitelná podoba obsahu (např. "2001-08-09T:21:00:00Z") @href URI URI objektu (např. odkaz) @src URI embedded objektu (např. obrázek) RDFa Typ obsahu Význam @about URI/SafeCURIE Subjekt (např. "http://example.org/Alice/#me") @property Seznam CURIE Predikáty, objektem je obsah elementu (text) @resource Objekt (který nemá být "klikací“) @datatype CURIE Datový typ literálu (třeba pokud text (objekt) je jméno) @typeof RDF typy subjektu @prefix Seznam Zavedení prefixů. Formát: NCName+‘:‘+‘ ‘+xs:anyURI (RDFa 1.1) @vocab URI Defaultní prefix pokud není žádný použit (RDFa 1.1)
RDFa – chaining (řetězení) <div about="http://dbpedia.org/resource/Albert_Einstein"> <span property="foaf:name">Albert Einstein</span> <span property="dbp:dateOfBirth" datatype="xsd:date">1879-03-14</span> <div rel="dbp:birthPlace" resource="http://dbpedia.org/resource/Germany"> <span property="dbp:conventionalLongName">Federal Republic of Germany</span> </div> Zde se objekt v resource stal subjektem pro vnořená tvrzení <div about="http://dbpedia.org/resource/Albert_Einstein"> <span rel="dbp:citizenship" resource="http://dbpedia.org/resource/Germany"/> <span rel="dbp:citizenship" resource="http://dbpedia.org/resource/United_States"/> </div> <div about="http://dbpedia.org/resource/Albert_Einstein"> <div rel="dbp:citizenship"> <span about="http://dbpedia.org/resource/Germany"/> <span about="http://dbpedia.org/resource/United_States"/> </div> <div about="http://dbpedia.org/resource/Albert_Einstein" rel="dbp:citizenship"> <span about="http://dbpedia.org/resource/Germany"/> <span about="http://dbpedia.org/resource/United_States"/> </div> Jakub Klímek, Martin Nečaský: RDFa
RDFa 1.1, XHTML+RDFa 1.1 31.3.2011: Second Last Call Working Draft XHTML+RDFa 1.1 je popsáno nejen DTD, ale i XML Schema Zavádí atributy @prefix a @vocab XHTML+RDFa 1.0 prefixy zavádí pomocí XML namespaců: <div xmlns:db="http://dbpedia.org/"> <div about="db:resource/Albert_Einstein"> ... </div> XHTML+RDFa 1.1 prefixy zavádí pomocí atributu prefix: A zavádění pomocí xmlns je deprecated Ale některé nástroje toto ještě neumí, lze zatím psát obojí najednou <div prefix="db: http://dbpedia.org/"> Jakub Klímek, Martin Nečaský: RDFa
Využití mikroformátů v RDFa Microformat: <div class="haudio"> <span class="title">Start Wearing Purple</span> by <span class="contributor">Gogol Bordello</span> </div> RDFa: <div vocab="http://microformats.org/vocab#" typeof="haudio"> <span property="title">Start Wearing Purple</span> by <span property="contributor">Gogol Bordello</span> </div> Jakub Klímek, Martin Nečaský: RDFa
Typické RDF vocabularies - slovníky Dublin Core Např. vlastnosti dokumentů (title, language, creator, date, …) http://www.dublincore.org/ FOAF Friend-of-a-Friend (knows, homepage, …) http://www.foaf-project.org/ Org vocabulary An organization ontology Pro skupiny a organizace (memberOf, hasMember, Site, VCard, …) http://www.epimorphics.com/public/vocabulary/org.html Bio vocabulary BIO: A vocabulary for biographical information Coronation, Death, Dismissal, Divorce, Father, Witness, Retirement, … SKOS Simple Knowledge Organization System http://www.w3.org/2004/02/skos/ DOAP Description of a (Software) Project http://trac.usefulinc.com/doap SIOC Semantically-Interlinked Online Communities http://sioc-project.org/ Jakub Klímek, Martin Nečaský: RDFa
Typické RDF vocabularies - slovníky biblio: http://example.org/biblio/0.1 dcterms: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ sioc: http://rdfs.org/sioc/ns# rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# rdfs: http://www.w3.org/2000/01/rdf-schema# owl: http://www.w3.org/2002/07/owl# taxo: http://purl.org/rss/1.0/modules/taxonomy/ xhv: http://www.w3.org/1999/xhtml/vocab# xsd: http://www.w3.org/2001/XMLSchema# cc: http://creativecommons.org/ns# dbp: http://dbpedia.org/property/ dbr: http://dbpedia.org/resource/ dc: http://purl.org/dc/elements/1.1/ ex: http://example.org/ (Your own vocabulary) Jakub Klímek, Martin Nečaský: RDFa
FOAF Core Agent Person name title img depiction (depicts) familyName givenName knows based_near age made (maker) primaryTopic (primaryTopicOf) Project Organization Group member Document Image Jakub Klímek, Martin Nečaský: RDFa
Org vocabulary Jakub Klímek, Martin Nečaský: RDFa
SIOC Jakub Klímek, Martin Nečaský: RDFa
RDFa tools RDF Detective – doplněk pro Google Chrome Propojení na sindice.com a sig.ma Neumí XHTML+RDFa 1.1 prefix je třeba přidat xmlns The semantic web index http://sindice.com Semantic information mashup http://sig.ma W3C RDFa Distiller: http://www.w3.org/2007/08/pyRdfa/ RDFa Checker http://check.rdfa.info/ Jakub Klímek, Martin Nečaský: RDFa
Podpora RDFa v Drupal 7 XHTML+RDFa 1.0 Automaticky generuje např.: dcterm:title xhv:icon rdf:type=„foaf:Document“ content:encoded Dá se udělat typ obsahu, který se bude vyplňovat jako formulář a výsledná stránka pak bude RDFa anotovaná Jakub Klímek, Martin Nečaský: RDFa
RDFa info Leden 2011 – zprávy dle Yahoo! Nejrychleji rostoucí formát pro popis dat na Webu Používáno na více jak 430 000 000 stránkách tj. 3,6% webových stránek. Poslední rok narostl počet RDFa stránek o 510% Jakub Klímek, Martin Nečaský: RDFa
RDFS – RDF Schema sada pevně definovaných zdrojů s pevně definovanou sémantikou rdfs:Class, rdfs:Resource, rdfs:range, rdfs:domain, … rezervovaný namespace rdfs umožňuje popis tzv. metadat (data o datech) Jakub Klímek, Martin Nečaský: RDFa
RDFS – RDF Schema RDF Schema definuje následující třídy (nejsou všechny): rdfs:Resource (třída všech zdrojů) rdfs:Class (třída všech tříd) rdf:Property (z rdf třída všech vlastností) a následující vlastnosti (nejsou všechny): rdfs:subClassOf (je podtřídou) rdfs:range (obor hodnot vlastnosti) rdfs:domain (definiční obor vlastnosti) Jakub Klímek, Martin Nečaský: RDFa
RDFS – zdroje každý zdroj patří do (je instancí) nějaké třídy pokud není o zdroji známo nic bližšího, potom je vždy alespoň instancí předdefinované RDF Schema třídy rdfs:Resource třída všech zdrojů Jakub Klímek, Martin Nečaský: RDFa
RDFS – třídy každá třída je instancí předdefinované RDF Schema třídy rdfs:Class třída všech tříd, je instancí sama sebe pomocí vlastnosti rdf:type můžeme pro daný zdroj explicitně určit do které třídy patří (říkáme, že zdroj je instancí této třídy nec:me rdf:type foaf:Person tato trojice také implicitně říká, že foaf:Person je třída, čili explicitně vyjádřeno: foaf:Person rdf:type rdfs:Class Jakub Klímek, Martin Nečaský: RDFa
RDFS – podtřídy vlastnost rdfs:subClassOf říká, že množina podtřídy je podmnožinou množiny nadtřídy z hierarchie tříd tedy plyne, že pokud nec:me rdf:type foaf:Person potom také nec:me rdf:type foaf:Agent Jakub Klímek, Martin Nečaský: RDFa
RDFS – vlastnosti každá vlastnost je instancí předdefinované RDF třídy rdf:Property „třída všech vlastností“ vlastnosti jsou charakterizovány pomocí následujících RDF Schema vlastností: rdfs:range rdfs:domain Jakub Klímek, Martin Nečaský: RDFa
RDFS – vlastnosti – obor hodnot pomocí rdfs:range určíme, jakého typu jsou hodnoty popisované vlastnosti objekt z trojice obsahující vlastnost v predikátu je daného typu foaf:knows rdfs:range foaf:Person foaf:firstName rdfs:range rdfs:Literal foaf:weblog rdfs:range foaf:Document z trojice nec:me foaf:weblog nec:weblog plyne, že nec:weblog rdf:type foaf:Document Jakub Klímek, Martin Nečaský: RDFa
RDFS – vlastnosti – definiční obor pomocí rdfs:domain určíme typy zdrojů, které mají hodnotu vlastnosti subjekt z trojice obsahující vlastnost v predikátu je daného typu foaf:knows rdfs:domain foaf:Person foaf:firstName rdfs:domain foaf:Person foaf:weblog rdfs:domain foaf:Agent z trojice nec:me foaf:weblog nec:weblog plyne, že nec:me rdf:type foaf:Agent Jakub Klímek, Martin Nečaský: RDFa
RDFS – podvlastnosti kromě hierarchií tříd umožňuje RDF Schema také vytvářet hierarchie vlastností pomocí rdfs:subPropertyOf býti podvlastností je tedy opět v RDF Schema pouze vlastnost zdroje, který podvlastnost reprezentuje, např. nec:goesForBeer rdfs:subPropertyOf foaf:knows Jakub Klímek, Martin Nečaský: RDFa
RDFS – podvlastnosti – příklad opět to definuje podmnožiny z hierarchie vlastností tedy plyne, že pokud nec:me nec:goesForBeer eck:me potom také nec:me foaf:knows eck:me Jakub Klímek, Martin Nečaský: RDFa
HTML vs. XHTML HTML není rozšiřitelné XHTML ano Standard: XHTML+RDFa 1.0 Blízká budoucnost: XHTML+RDFa 1.1 31.3.2011: Second Last Call Working Draft RDFa v HTML by mělo fungovat taky Jakub Klímek, Martin Nečaský: RDFa
RDFS a klasické modely (1/6) první pohled: vlastně to samé jako UML nebo E-R popisujeme třídy, jejich atributy a vztahy mezi třídami druhý pohled: podstatné a zásadní rozdíly Jakub Klímek, Martin Nečaský: RDFa
RDFS a klasické modely (2/6) uvažujme následující metadata: foaf:Person rdfs:subClassOf foaf:Agent foaf:knows rdfs:domain foaf:Person foaf:knows rdfs:range foaf:Person foaf:firstName rdfs:domain foaf:Person foaf:firstName rdfs:range rdfs:Literal Jakub Klímek, Martin Nečaský: RDFa
RDFS a klasické modely (3/6) v UML bychom metadata reprezentovali takto: Jakub Klímek, Martin Nečaský: RDFa
RDFS a klasické modely (4/6) a následující data nec:me rdf:type foaf:Agent nec:me foaf:firstName „Martin“ nec:me foaf:knows eck:me nec:me foaf:knows ex:john ex:john rdf:type univ:Student Jakub Klímek, Martin Nečaský: RDFa
RDFS a klasické modely (5/6) klasický pohled UML či E-R by narazil: třída univ:Student není definována zdroj eck:me nemá přiřazen typ zdroj nec:me typu foaf:Agent nemůže mít vlastnosti foaf:knows, foaf:firstName netypovaný zdroj eck:me a zdroj ex:john typu univ:Student nemohou být hodnotami vlastnosti foaf:knows data tedy neodpovídají schématu foaf:Person rdfs:subClassOf foaf:Agent foaf:knows rdfs:domain foaf:Person foaf:knows rdfs:range foaf:Person foaf:firstName rdfs:domain foaf:Person foaf:firstName rdfs:range rdfs:Literal nec:me rdf:type foaf:Agent nec:me foaf:firstName „Martin“ nec:me foaf:knows eck:me nec:me foaf:knows ex:john ex:john rdf:type univ:Student Jakub Klímek, Martin Nečaský: RDFa
RDFS a klasické modely (6/6) RDF Schema nechápe metadata jako striktní omezení struktury metadata jsou pouze přídavnou informací, které používáme k dedukci dalších tvrzení (trojic) to co nám v klasických modelech vadí, zde naopak využijeme k odvození chybějících informací univ:Student rdf:type rdfs:Class nec:me rdf:type foaf:Person eck:me rdf:type foaf:Person ex:john rdf:type foaf:Person Jakub Klímek, Martin Nečaský: RDFa
RDF & RDFS – výhody výhody RDF & RDF Schema: zdroj je chápán jako samostatná entita, kterou až dodatečně popisujeme pomocí trojic popis můžeme kdykoliv rozšířit o vlastnosti, se kterými původní autor zdaleka nepočítal i když nemáme kompletní popis zdroje, můžeme spoustu věcí odvodit (viz. předchozí příklad) Jakub Klímek, Martin Nečaský: RDFa
RDF & RDFS – nevýhody (1/2) nevýhody RDF & RDF Schema: při použití musíme být opatrní, jinak může dojít ke zmatkům a dokonce i logickým sporům pro daný zdroj může být na dvou místech zároveň zadána různá hodnota stejné vlastnosti RDF 1: nec:me nec:height „178 cm“ RDF 2: nec:me nec:height „185 c Jakub Klímek, Martin Nečaský: RDFa
RDF & RDFS – nevýhody (2/2) v důsledku nesprávného použití vlastností může dojít k logickým chybám, které však pomocí prostředků RDF Schema neodhalíme RDF 1: foaf:knows rdfs:domain foaf:Person foaf:knows rdfs:range foaf:Person RDF 2: ex:java rdfs:type ex:ProgLang ex:cpp rdfs:type ex:ProgLang RDF 3: nec:me foaf:knows ex:java nec:me foaf:knows ex:cpp výsledek použití: ex:java rdf:type foaf:Person Jakub Klímek, Martin Nečaský: RDFa
OWL – Web Ontology Language Aktuálně OWL2 Sémantické rozšíření RDF a RDFS Pokročilejší konstrukty, logika Průnik, sjednocení, doplněk, datové a objektové vlastnosti Instance Vše je owl:Thing, vše má jako podtřídu owl:Nothing Open world assumption the closed world assumption implies that everything we don’t know is false, while the open world assumption states that everything we don’t know is undefined Jakub Klímek, Martin Nečaský: RDFa
RDF/XML syntaxe <!--Part of the FOAF RDF Schema--> <rdfs:Class rdf:ID="Person"> <rdfs:subClassOf rdf:resource="#Agent"/> </rdfs:Class> <rdf:Property rdf:ID="knows"> <rdfs:domain rdf:resource="#Person"/> <rdfs:range rdf:resource="#Person"/> </rdf:Property> ------------------------------------------- <!--Part of a FOAF document--> <foaf:Person rdf:ID="me"> <foaf:knows rdf:resource="&eck;me"/> </foaf:Person> Jakub Klímek, Martin Nečaský: RDFa
Resources http://rdfa.info/ http://www.w3.org/TR/xhtml-rdfa-primer/ http://www.w3.org/TR/rdfa-syntax/ http://www.w3.org/TR/rdfa-core/ http://www.w3.org/TR/xhtml-rdfa/ http://rdfa.info/wiki/RDFa_Wiki http://xmlns.com/foaf/spec/ Jakub Klímek, Martin Nečaský: RDFa