RDF & Linked Data
Sémantický web, RDF model (trojice, graf), identifikace zdrojů (IRI/URI/URL/URN), RDF serializace (Turtle, N-Triples, JSON-LD, RDF/XML), RDF Schema (RDFS), Linked Data principy, SPARQL.
🌐 Sémantický web
Současný web je určen primárně pro lidi — HTML stránky vypadají hezky, ale počítač nedokáže porozumět jejich obsahu (nerozlišuje jméno autora od názvu knihy). Sémantický web přidává strojově čitelnou vrstvu nad stávající dokumenty.
Vrstvy sémantického webu
- IRI / URI — identifikace zdrojů na webu
- XML / JSON — syntaxe pro přenos dat
- RDF — model dat (trojice: subjekt–predikát–objekt)
- RDFS / OWL — ontologie, slovníky, schémata
- SPARQL — dotazovací jazyk pro RDF data
- Pravidla a důvěra — logické odvozování, ověření původu
🔗 Identifikace zdrojů: IRI, URI, URL, URN
Pro jednoznačnou identifikaci zdrojů na webu se používá hierarchický systém identifikátorů:
| Pojem | Význam | Příklad |
|---|---|---|
| IRI | Internationalized Resource Identifier — nadmnožina URI, podporuje Unicode znaky | http://příklad.cz/kniha |
| URI | Uniform Resource Identifier — obecný identifikátor zdroje | http://example.org/book |
| URL | Uniform Resource Locator — URI, které říká kde zdroj najít (lokátor) | https://fit.cvut.cz |
| URN | Uniform Resource Name — URI, které zdroj pojmenovává (neříká kde je) | urn:isbn:978-3-16-148410-0 |
IRI ⊃ URI ⊃ { URL, URN }. Každé URL je URI, každé URI je IRI. URL říká kde zdroj je, URN říká co to je. IRI rozšiřuje URI o podporu mezinárodních znaků.
🔺 RDF – Resource Description Framework
Složky RDF trojice
| Složka | Co to je | Povolené typy |
|---|---|---|
| Subjekt | Zdroj, o kterém něco říkáme | IRI nebo Blank Node |
| Predikát | Vlastnost/vztah | Pouze IRI |
| Objekt | Hodnota vlastnosti nebo jiný zdroj | IRI, Blank Node nebo Literál |
Typy uzlů v RDF grafu
- IRI — globálně unikátní identifikátor zdroje
- Literál — konkrétní hodnota (text, číslo, datum); skládá se z lexikální formy, datového typu (IRI) a volitelně jazykového tagu (
"Ahoj"@cs) - Blank Node — anonymní uzel bez IRI, existuje pouze v kontextu jednoho grafu; označuje se
_:nazev
Literál nemůže být subjektem trojice — to je omezení RDF modelu. Literál může být pouze objektem. Blank node nemůže být predikátem.
Named Graphs
RDF trojice lze seskupit do pojmenovaných grafů — každý graf má svůj IRI identifikátor. Trojice se tak stává čtveřicí (quad): subjekt, predikát, objekt + graf. Umožňuje to sledovat provenienci (odkud data pocházejí) a spravovat více datových zdrojů v jednom úložišti.
📝 Serializace RDF
RDF je abstraktní model — pro uložení a přenos potřebuje konkrétní syntaxi (serializaci). Existuje několik formátů, každý s jinými vlastnostmi:
| Formát | Čitelnost | Klíčové vlastnosti |
|---|---|---|
| Turtle | Vysoká | Kompaktní, prefixy (@prefix), zkracování subjektu (;) a predikátu (,), a jako zkratka pro rdf:type |
| N-Triples | Nízká | Jedna trojice = jeden řádek, plné IRI v <>, žádné prefixy, snadné strojové zpracování (line-based) |
| N-Quads | Nízká | Rozšíření N-Triples o čtvrtý prvek — pojmenovaný graf |
| TriG | Střední | Rozšíření Turtle o named graphs: GRAPH <iri> { … } |
| JSON-LD | Vysoká | RDF v JSON syntaxi, @context mapuje klíče na IRI (viz Okruh 2) |
| RDF/XML | Nízká | Historicky první serializace, obtížně čitelná pro lidi, dnes méně používaná |
Turtle – klíčové zkratky
;— stejný subjekt, nový predikát+objekt (multi-valued subject),— stejný subjekt i predikát, nový objekta— zkratka prordf:type@prefix ex: <http://example.org/> .— definice prefixu[]— anonymní blank node
🏗️ RDF Schema (RDFS)
Klíčové třídy a vlastnosti RDFS
| RDFS prvek | Význam |
|---|---|
| rdfs:Class | Definuje třídu (kategorii zdrojů) |
| rdfs:subClassOf | Hierarchie tříd (dědičnost): A je podtřída B |
| rdfs:subPropertyOf | Hierarchie vlastností: P1 je podvlastnost P2 |
| rdfs:domain | Subjekt vlastnosti patří do dané třídy |
| rdfs:range | Objekt vlastnosti patří do dané třídy/datového typu |
| rdf:type | Instance třídy — „tento zdroj je typu X" |
| rdfs:label | Lidsky čitelný popisek zdroje |
| rdfs:comment | Lidsky čitelný popis/komentář |
V RDFS má rdfs:domain a rdfs:range odvozovací význam, ne validační! Pokud řekneme ex:hasAuthor rdfs:domain ex:Book, pak každý subjekt, u kterého se ex:hasAuthor použije, se automaticky stane instancí ex:Book — i když to nedává smysl. RDFS nedělá validaci, ale odvozování (inference).
RDFS Inference (odvozování)
RDFS umožňuje z existujících trojic odvodit nové trojice:
- Z
:Bob rdf:type :Student+:Student rdfs:subClassOf :Person→ odvodíme::Bob rdf:type :Person - Z
:email rdfs:subPropertyOf :contact+:Bob :email "bob@example.com"→ odvodíme::Bob :contact "bob@example.com"
🔗 Linked Data (Propojená data)
4 principy Linked Data (Tim Berners-Lee)
- Používejte URI k pojmenování věcí (nejen dokumentů, ale i konceptů, lidí, míst…)
- Používejte HTTP URI, aby šlo tyto identifikátory vyhledat (dereferencovat)
- Při vyhledání URI poskytněte užitečné informace pomocí standardů (RDF, SPARQL)
- Odkazujte na jiné URI, aby bylo možné data propojovat a objevovat další data
5-Star Linked Open Data
| ⭐ | Úroveň | Popis |
|---|---|---|
| ⭐ | Open License | Data dostupná na webu s otevřenou licencí (jakýkoliv formát, třeba PDF) |
| ⭐⭐ | Structured | Data ve strojově čitelném strukturovaném formátu (např. Excel místo skenovaného PDF) |
| ⭐⭐⭐ | Non-proprietary | Otevřený formát (CSV místo Excelu) |
| ⭐⭐⭐⭐ | URIs | Použití URI pro identifikaci věcí → data lze odkazovat |
| ⭐⭐⭐⭐⭐ | Linked | Data propojena s jinými daty → vzniká web dat |
DBpedia extrahuje strukturovaná RDF data z Wikipedie a propojuje je s dalšími Linked Data zdroji. Wikidata je otevřená znalostní báze spravovaná komunitou. Obě jsou klíčovými uzly v grafu Linked Open Data Cloud.
🔍 SPARQL – dotazovací jazyk pro RDF
Typy SPARQL dotazů
| Typ | Význam |
|---|---|
| SELECT | Vrací tabulku výsledků (vazby proměnných) |
| CONSTRUCT | Vrací nový RDF graf (trojice) |
| ASK | Vrací boolean (true/false) — existuje výsledek? |
| DESCRIBE | Vrací RDF popis zadaného zdroje |
Klíčové prvky SPARQL
- Triple Patterns — vzory trojic s proměnnými (
?x):?person foaf:name ?name . - Graph Patterns — kombinace triple patterns tvoří vzor, který se matchuje proti RDF grafu
- OPTIONAL — levý vnější join (left outer join) — zahrne i výsledky bez matchujícího vzoru
- FILTER — omezení výsledků podmínkou (regex, porovnání, logické operátory)
- UNION — sjednocení výsledků dvou vzorů (alternativa)
- ORDER BY, LIMIT, OFFSET — řazení a stránkování resultado
- DISTINCT — odstranění duplicitních výsledků
Federated Queries (vzdálené dotazy)
SPARQL umožňuje dotazovat se na vzdálené SPARQL endpointy přímo z dotazu pomocí klauzule SERVICE. To umožňuje kombinovat data z více Linked Data zdrojů v jednom dotazu — klíčový princip propojeného webu.
Webový server, který přijímá SPARQL dotazy přes HTTP a vrací výsledky. Příklady: DBpedia SPARQL endpoint, Wikidata Query Service. Přístup přes HTTP GET/POST s parametrem query.
📌 Shrnutí Okruhu 1 – RDF & Linked Data
- Sémantický web přidává strojově čitelný význam nad stávající web dokumentů → web dat.
- IRI/URI/URL/URN: IRI ⊃ URI ⊃ {URL, URN}. URL = lokátor (kde), URN = jméno (co).
- RDF trojice: subjekt (IRI/blank) – predikát (IRI) – objekt (IRI/blank/literál). Literál NIKDY není subjekt.
- Blank Node = anonymní uzel bez IRI, existuje pouze lokálně v grafu.
- Serializace: Turtle (kompaktní, čitelný), N-Triples (jednoduchý, line-based), JSON-LD, RDF/XML.
- RDFS: třídy, vlastnosti, hierarchie (subClassOf, subPropertyOf), domain/range = inference, ne validace.
- Linked Data: 4 principy (URI → HTTP URI → RDF data → propojuj). 5-Star model kvality otevřených dat.
- SPARQL: SELECT, CONSTRUCT, ASK, DESCRIBE. Triple patterns, OPTIONAL, FILTER, UNION, SERVICE (federated queries).
🎓 Kontrolní otázky k Okruhu 1
Sémantický web rozšiřuje stávající web o strojově čitelnou vrstvu — data mají přiřazený jasný význam. Vznikl proto, že současný web je primárně pro lidi (HTML), ale počítače nedokáží obsahu porozumět. Cílem je přejít od webu dokumentů k webu dat.
IRI je nejobecnější (podporuje Unicode), URI je podmnožina IRI (jen ASCII). URL je URI, které říká kde se zdroj nachází (lokátor). URN je URI, které zdroj pojmenovává (neříká kde je). Vztah: IRI ⊃ URI ⊃ {URL, URN}.
Základní jednotkou RDF je trojice: subjekt – predikát – objekt. Subjekt může být IRI nebo Blank Node. Predikát je vždy IRI. Objekt může být IRI, Blank Node nebo Literál. Literál NIKDY nemůže být subjektem. Blank Node je anonymní uzel existující pouze lokálně. Množina trojic tvoří orientovaný graf.
Turtle: kompaktní, lidsky čitelný, prefixy, zkratky (; a ,). N-Triples: jedna trojice = jeden řádek, plná IRI, snadné strojové zpracování. TriG: Turtle + named graphs. N-Quads: N-Triples + named graphs. JSON-LD: RDF v JSON syntaxi, @context pro mapování. RDF/XML: historicky první, dnes méně používaný, obtížně čitelný.
RDFS definuje třídy a vlastnosti pro RDF data. Klíčové prvky: rdfs:Class, rdfs:subClassOf, rdfs:subPropertyOf, rdfs:domain, rdfs:range. Inference = odvozování nových trojic z existujících. Např. pokud Bob je Student a Student je podtřída Person → Bob je Person. Pozor: domain/range v RDFS slouží k odvozování, ne k validaci!
1) Používej URI pro pojmenování věcí. 2) Používej HTTP URI, aby šlo identifikátory vyhledat. 3) Při vyhledání URI poskytni užitečné informace (RDF, SPARQL). 4) Odkazuj na jiné URI pro propojení dat. Kvalita se měří 5-Star modelem: od 1⭐ (data na webu s otevřenou licencí) po 5⭐ (propojena s jinými daty).
SPARQL je W3C dotazovací jazyk pro RDF. Typy: SELECT (tabulka), CONSTRUCT (nový graf), ASK (boolean), DESCRIBE (popis zdroje). Podporuje triple patterns s proměnnými, OPTIONAL (left join), FILTER, UNION, ORDER BY/LIMIT. Federated queries (SERVICE) umožňují dotazovat vzdálené SPARQL endpointy.
XML, JSON, JSON-LD
Well-formed vs. valid XML, XML namespaces, XSD (XML Schema), XPath, JSON a jeho datové typy, JSON Schema, JSON-LD a @context.
📋 XML – Extensible Markup Language
Well-formed vs. Valid XML
Well-formed
- Splňuje syntaktická pravidla XML
- Jeden kořenový (root) element
- Správné vnořování a uzavření tagů
- Atributy v uvozovkách
- Case-sensitive názvy
- Nutná podmínka pro jakékoliv zpracování
Valid
- Well-formed + splňuje schéma
- Validuje se proti XSD (XML Schema) nebo DTD
- Každý validní dokument je well-formed
- Ne každý well-formed je validní!
🏷️ XML Namespaces (Jmenné prostory)
Řeší problém nejednoznačnosti názvů elementů z různých kontextů. Například <table> v HTML znamená tabulku, ale v jiném kontextu nábytek.
Princip
- Namespace se definuje jako IRI:
xmlns:prefix="URI" - QName (Qualified Name) =
prefix:localname - Lze definovat výchozí namespace:
xmlns="URI"— bez prefixu - Namespace se dědí na vnořené elementy
Umožňují kombinovat elementy z různých slovníků v jednom dokumentu bez kolizí názvů. Klíčové pro XML technologie jako XSLT, XSD nebo webové služby (SOAP).
✅ XSD – XML Schema Definition
Dva hlavní typy
simpleType
- Element obsahuje pouze text
- Bez atributů, bez subelementů
- Restrikce: restriction, enumeration, list, union
- Příklad: omezení čísla na rozsah (
minInclusive,maxInclusive)
complexType
- Element má atributy a/nebo subelementy
- simpleContent = text + atributy
- complexContent = subelementy + volitelně atributy
- Indikátory:
sequence(pořadí),choice(alternativa),all
Důležité XSD koncepty
- minOccurs / maxOccurs — minimální a maximální počet výskytů elementu (
unbounded= neomezeno) - use="required" — povinný atribut
- mixed="true" — element může obsahovat text i subelementy
🧭 XPath – adresace uzlů v XML
Hlavní osy navigace
| Osa | Význam | Zkratka |
|---|---|---|
| child | Přímé potomky | výchozí (ohne specifikace) |
| parent | Rodičovský uzel | .. |
| self | Aktuální uzel | . |
| descendant | Všichni potomci (rekurzivně) | // |
| ancestor | Všichni předci | — |
| attribute | Atributy elementu | @ |
| following-sibling | Následující sourozenci | — |
| preceding-sibling | Předcházející sourozenci | — |
Predikáty (filtry)
Predikáty v hranatých závorkách filtrují uzly: //kniha[@cena>300] — vybere všechny knihy s cenou vyšší než 300. Predikáty lze kombinovat a vnořovat.
📦 JSON – JavaScript Object Notation
6 datových typů JSON
| Typ | Popis | Příklad |
|---|---|---|
| string | Text v uvozovkách | "hello" |
| number | Číslo (dekadické, tečka jako oddělovač) | 42, 3.14 |
| boolean | Pravdivostní hodnota | true, false |
| null | Prázdná hodnota (absence hodnoty) | null |
| array | Uspořádaná kolekce hodnot | [1, "a", true] |
| object | Neuspořádaná množina klíč:hodnota | {"name": "Jan"} |
Array = uspořádaná kolekce [ ], hodnoty mohou být různých typů. Object = neuspořádaná množina párů klíč:hodnota { }, klíče musí být stringy. V JSONu existuje pouze dekadická soustava, jsou zakázána uvozovky kolem klíčů jen v JS (v JSONu jsou povinné).
🔒 JSON Schema
Základní klíčová slova
- type — datový typ (
string,integer,number,boolean,null,array,object) - properties — definice vlastností objektu
- required — pole povinných vlastností
- minimum, maximum — numerická omezení
- minLength, maxLength, pattern, format — omezení řetězců
- items — schéma pro prvky pole
- $ref — odkaz na jiné schéma (znovupoužitelnost)
List vs. Tuple validace
List validation
- Všechny prvky splňují stejné schéma
- Klíč:
items - Pole je homogenní
Tuple validation
- Každá pozice má jiné schéma
- Klíč:
prefixItems - Pozice jsou smysluplné
items: falsezakáže extra prvky
Kompoziční klíčová slova
- anyOf — splňuje alespoň jedno ze schémat (OR)
- allOf — splňuje všechna schémata (AND)
- oneOf — splňuje právě jedno schéma (XOR)
- not — nesmí splňovat dané schéma (negace)
🌐 JSON-LD – JSON for Linking Data
@context mapuje běžné JSON klíče na plná IRI, čímž se JSON stává interpretovatelným jako RDF model.
Klíčová slova JSON-LD
| Klíčové slovo | Význam |
|---|---|
| @context | Mapování JSON klíčů na IRI — „slovník" dokumentu |
| @id | Identifikátor subjektu (IRI) |
| @type | Třída entity (rdf:type) nebo datový typ literálu |
| @language | Výchozí jazyk pro string literály |
| @value | Explicitní hodnota literálu v objektu s typem |
| @list | Uspořádaný seznam (rdf:List) |
| @container: @language | Language map — klíče jsou jazykové tagy |
| @reverse | Inverzní vlastnost — obrátí směr hrany v RDF grafu |
Hlavní principy JSON-LD
- @context definuje mapování klíčů — může být inline nebo odkazem na URL
- Compact IRIs (prefixy) — umožňují zkrácený zápis:
"foaf:name"místo plného IRI - Embedding (vnoření) — objekty v objektech odpovídají propojeným uzlům v RDF grafu
- @reverse — obrátí směr hrany; rodič Homer může uvést děti přes @reverse místo toho, aby každé dítě uvádělo rodiče
- Scoped Contexts — kontext lze přepsat lokálně pro konkrétní vlastnost: vnořený
@contextpřepíše rodičovský
JSON-LD umožňuje přidat sémantiku existujícímu JSONu pouhým přidáním @context. Vývojáři pracují s běžným JSON, ale data jsou zároveň validní RDF. Využívá se pro SEO (Schema.org), knowledge graphs a propojená data.
📌 Shrnutí Okruhu 2 – XML, JSON, JSON-LD
- XML: well-formed = syntaktická správnost; valid = well-formed + splňuje schéma (XSD).
- Well-formed pravidla: správné vnořování, jeden root, uzavřené tagy, atributy v uvozovkách, case-sensitive.
- XML namespaces = IRI jako disambiguace;
xmlns:prefix="URI"; QName = prefix:localname. - XSD: simpleType (jen text) vs. complexType (subelementy/atributy); sequence vs. choice.
- XPath: adresace uzlů v XML; osy (child, descendant, parent, attribute…); predikáty.
- JSON: 6 typů (string, number, boolean, null, array, object); array = ordered, object = unordered.
- JSON Schema: type, properties, required, constraints, $ref; list vs. tuple validation; anyOf/allOf/oneOf/not.
- JSON-LD: @context mapuje JSON klíče na IRI; @id = subjekt; @type = třída; @language, @list, @reverse.
🎓 Kontrolní otázky k Okruhu 2
Well-formed = splňuje syntaxi XML (správné vnořování, jeden root, uzavřené tagy, case-sensitive, atributy v uvozovkách). Valid = well-formed + splňuje konkrétní schéma (XSD/DTD). Každý validní dokument je well-formed, ale ne každý well-formed je validní.
Namespaces odstraňují nejednoznačnost názvů elementů z různých kontextů (např. <table> v HTML vs. nábytek). Namespace se definuje atributem xmlns:prefix="URI". QName = prefix:localname. Lze definovat i default namespace (xmlns="URI") bez prefixu.
simpleType = element obsahuje POUZE text (bez atributů a bez subelementů). Lze omezit: restriction, enumeration, list, union. complexType = element má atributy nebo subelementy (nebo obojí). simpleContent = text + atributy. complexContent = subelementy + volitelně atributy. Indikátory: sequence, choice, all.
string, number, boolean (true/false), null, array, object. Array = uspořádaná kolekce hodnot [ ], hodnoty mohou být různých typů. Object = neuspořádaná množina párů klíč:hodnota { }, klíče musí být stringy. Čísla v JSONu: pouze dekadická soustava, tečka jako oddělovač.
JSON Schema = navržený IETF standard pro validaci a anotaci JSON dokumentů. Definuje: type, properties, required, numerická/stringová omezení, validaci polí (list vs. tuple), vnořené objekty, $ref pro reuse. Kompozice: anyOf (OR), allOf (AND), oneOf (XOR), not. List validation = všechny prvky stejné schéma (items). Tuple validation = každá pozice jiné schéma (prefixItems).
JSON-LD = JSON rozšířený o @context, který mapuje JSON klíče na plná IRI. Výsledný JSON je interpretovatelný jako RDF model. @context definuje: mapování klíčů na predikáty (IRI), @id = identifikátor subjektu, @type = třída (rdf:type), typování literálů, výchozí jazyk (@language), language maps (@container: @language).
@reverse obrátí směr hrany v RDF grafu. Umožňuje vyjádřit vztah z pohledu objektu místo subjektu. Příklad: místo každého dítěte uvádějícího svého rodiče, může rodič Homer uvést seznam dětí pomocí @reverse. Výsledný RDF je identický — Bart a Lisa mají vocab:parent = Homer.
List validation: všechny prvky pole musí splňovat stejné schéma (klíčové slovo items). Pole je homogenní. Tuple validation: každá pozice v poli má jiné schéma (klíčové slovo prefixItems). Pozice jsou smysluplné. items: false zakáže extra prvky. items: {type: string} povolí extra prvky, ale musí být string.