📄 BI-MDF – Moderní datové formáty

Státnicové poznámky · Bakalářské státní zkoušky · FIT ČVUT

Okruh 1 — RDF & Linked Data Okruh 2 — XML, JSON, JSON-LD
Okruh 1

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

Sémantický web = rozšíření stávajícího webu, ve kterém je informacím přiřazen dobře definovaný význam, který umožňuje počítačům a lidem lépe spolupracovat (Tim Berners-Lee, 2001).

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
🔑 Klíčový princip
Cílem sémantického webu je přejít od webu dokumentů (HTML stránky pro lidi) k webu dat (strukturovaná, propojená, strojově čitelná data).

🔗 Identifikace zdrojů: IRI, URI, URL, URN

Pro jednoznačnou identifikaci zdrojů na webu se používá hierarchický systém identifikátorů:

PojemVýznamPříklad
IRIInternationalized Resource Identifier — nadmnožina URI, podporuje Unicode znakyhttp://příklad.cz/kniha
URIUniform Resource Identifier — obecný identifikátor zdrojehttp://example.org/book
URLUniform Resource Locator — URI, které říká kde zdroj najít (lokátor)https://fit.cvut.cz
URNUniform Resource Name — URI, které zdroj pojmenovává (neříká kde je)urn:isbn:978-3-16-148410-0
Vztah mezi identifikátory

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

RDF = standardní model pro výměnu dat na webu. Základní jednotkou je trojice (triple): subjekt – predikát – objekt. Množina trojic tvoří orientovaný graf.

Složky RDF trojice

SložkaCo to jePovolené typy
SubjektZdroj, o kterém něco říkámeIRI nebo Blank Node
PredikátVlastnost/vztahPouze IRI
ObjektHodnota vlastnosti nebo jiný zdrojIRI, 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
⚠️ Důležité pravidlo

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ČitelnostKlíč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ý objekt
  • a — zkratka pro rdf:type
  • @prefix ex: <http://example.org/> . — definice prefixu
  • [] — anonymní blank node

🏗️ RDF Schema (RDFS)

RDFS = rozšíření RDF, které umožňuje definovat třídy a vlastnosti (slovník/schéma). RDFS popisuje strukturu dat — jaké třídy existují, jaké mají vlastnosti a v jakých vztazích jsou.

Klíčové třídy a vlastnosti RDFS

RDFS prvekVýznam
rdfs:ClassDefinuje třídu (kategorii zdrojů)
rdfs:subClassOfHierarchie tříd (dědičnost): A je podtřída B
rdfs:subPropertyOfHierarchie vlastností: P1 je podvlastnost P2
rdfs:domainSubjekt vlastnosti patří do dané třídy
rdfs:rangeObjekt vlastnosti patří do dané třídy/datového typu
rdf:typeInstance třídy — „tento zdroj je typu X"
rdfs:labelLidsky čitelný popisek zdroje
rdfs:commentLidsky čitelný popis/komentář
Domain a Range — pozor na sémantiku!

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 :Personodvodí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)

Linked Data = sada principů pro publikování a propojování strukturovaných dat na webu pomocí standardních Web technologií (HTTP, URI, RDF).

4 principy Linked Data (Tim Berners-Lee)

  1. Používejte URI k pojmenování věcí (nejen dokumentů, ale i konceptů, lidí, míst…)
  2. Používejte HTTP URI, aby šlo tyto identifikátory vyhledat (dereferencovat)
  3. Při vyhledání URI poskytněte užitečné informace pomocí standardů (RDF, SPARQL)
  4. Odkazujte na jiné URI, aby bylo možné data propojovat a objevovat další data

5-Star Linked Open Data

ÚroveňPopis
Open LicenseData dostupná na webu s otevřenou licencí (jakýkoliv formát, třeba PDF)
⭐⭐StructuredData ve strojově čitelném strukturovaném formátu (např. Excel místo skenovaného PDF)
⭐⭐⭐Non-proprietaryOtevřený formát (CSV místo Excelu)
⭐⭐⭐⭐URIsPoužití URI pro identifikaci věcí → data lze odkazovat
⭐⭐⭐⭐⭐LinkedData propojena s jinými daty → vzniká web dat
DBpedia & Wikidata

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

SPARQL (SPARQL Protocol and RDF Query Language) = W3C standard pro dotazování nad RDF daty. Podobný SQL, ale pracuje s grafovým modelem (trojicemi) místo tabulek.

Typy SPARQL dotazů

TypVýznam
SELECTVrací tabulku výsledků (vazby proměnných)
CONSTRUCTVrací nový RDF graf (trojice)
ASKVrací boolean (true/false) — existuje výsledek?
DESCRIBEVrací 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.

SPARQL Endpoint

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

Co je sémantický web a proč vznikl?

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.

Jaký je rozdíl mezi IRI, URI, URL a URN?

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}.

Vysvětli základní model RDF. Co je trojice a jaké typy uzlů existují?

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.

Jaké jsou hlavní RDF serializační formáty a čím se liší?

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ý.

Co je RDFS a jak funguje inference (odvozování)?

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!

Jaké jsou 4 principy Linked Data?

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

Co je SPARQL a jaké typy dotazů podporuje?

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.

Okruh 2

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

XML = značkovací jazyk pro strukturování dat. Na rozdíl od HTML je rozšiřitelný — uživatel definuje vlastní tagy. Důraz je na popis dat, nikoliv vzhled.

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
Proč namespaces?

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

XSD = jazyk pro definici schématu XML dokumentu. Určuje, jaké elementy a atributy jsou povoleny, v jakém pořadí a počtu, a jaké mají datové typy.

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

XPath = jazyk pro adresování částí XML dokumentu. XML dokument je modelován jako strom uzlů a XPath umožňuje navigovat po tomto stromu a vybírat uzly.

Hlavní osy navigace

OsaVýznamZkratka
childPřímé potomkyvýchozí (ohne specifikace)
parentRodičovský uzel..
selfAktuální uzel.
descendantVšichni potomci (rekurzivně)//
ancestorVšichni předci
attributeAtributy elementu@
following-siblingNásledující sourozenci
preceding-siblingPř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

JSON = odlehčený datový formát pro výměnu dat. Lehčí alternativa k XML, snadno čitelný i generovatelný pro lidi i stroje.

6 datových typů JSON

TypPopisPříklad
stringText v uvozovkách"hello"
numberČíslo (dekadické, tečka jako oddělovač)42, 3.14
booleanPravdivostní hodnotatrue, false
nullPrázdná hodnota (absence hodnoty)null
arrayUspořádaná kolekce hodnot[1, "a", true]
objectNeuspořádaná množina klíč:hodnota{"name": "Jan"}
Array vs. Object

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

JSON Schema = navržený IETF standard pro validaci a anotaci JSON dokumentů. Definuje pravidla, která musí JSON data splňovat.

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: false zakáž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

JSON-LD = rozšíření JSON o sémantiku Linked Data. Pomocí @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é slovoVýznam
@contextMapování JSON klíčů na IRI — „slovník" dokumentu
@idIdentifikátor subjektu (IRI)
@typeTřída entity (rdf:type) nebo datový typ literálu
@languageVýchozí jazyk pro string literály
@valueExplicitní hodnota literálu v objektu s typem
@listUspořádaný seznam (rdf:List)
@container: @languageLanguage map — klíče jsou jazykové tagy
@reverseInverzní 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ý @context přepíše rodičovský
🔑 Proč JSON-LD?

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

Jaký je rozdíl mezi well-formed a valid XML?

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

Proč XML namespaces? Jak fungují?

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.

Popiš XSD simpleType vs. complexType. Kdy který?

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.

Co jsou 6 JSON datových typů? Jaký je rozdíl mezi Array a Object?

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č.

Co je JSON Schema a jak validuje?

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

Co je JSON-LD a jakou roli hraje @context?

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

Vysvětli @reverse v JSON-LD. K čemu slouží?

@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.

Jaký je rozdíl mezi list validation a tuple validation v JSON Schema?

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.