RDF a SPARQL

BI-WI.21-23
  • Grafový datový model RDF a jeho serializace (N-Tripples, RDF-Turtle).
  • Dotazování nad daty v RDF - jazyk SPARQL.

Předpoklady

  • URL: Typ URI, který navíc obsahuje návod k lokalizaci (síťovou adresu). Pouze ASCII.
  • URI: Obecný identifikátor (obsahuje URL i URN). Pouze ASCII.
  • IRI: Moderní verze URI, která kromě ASCII podporuje kompletní Unicode (češtinu, azbuku, čínštinu atd.). Every URI is an IRI.

1. URL – Uniform Resource Locator (Jednotný lokátor zdrojů)

URL je to, co běžný člověk označuje jako „webová adresa“.

  • Co to dělá: Nejenže identifikuje nějaký zdroj na webu, ale zároveň nám říká, jak se k němu dostat (lokace). Popisuje primární přístupový mechanismus (např. protokol http nebo ftp) a síťové umístění.
  • Omezení: Je přísně omezeno pouze na základní znakovou sadu ASCII (anglická abeceda, čísla, pár symbolů). Pokud chcete v URL použít diakritiku, musíte ji zakódovat (tzv. Percent-encoding, např. á se změní na %C3%A1).
  • Příklad: https://fit.cvut.cz/cs/studium/rozvrh

2. URI – Uniform Resource Identifier (Jednotný identifikátor zdrojů)

URI je nadmnožinou URL. Každé URL je URI, ale ne každé URI musí být URL.

  • Co to dělá: Identifikuje nějaký zdroj (webovou stránku, knihu, člověka, koncept), ale nemusí říkat, jak se k němu dostat. Jde čistě o jedinečné jméno.
  • Pod URI spadají dvě věci:
    1. URL (říká co to je a kde to najdu).
    2. URN (Uniform Resource Name – říká co to je, ale neříká kde to najdu). Například ISBN kód knihy jednoznačně identifikuje knihu po celém světě, ale z kódu samotného se nedozvíte, v jaké knihovně nebo na jakém serveru ta kniha leží.
  • Omezení: Stejně jako URL je i URI historicky omezeno pouze na ASCII znaky.
  • Příklad URN (které je URI, ale není URL): urn:isbn:978-80-01-06841-0 (identifikátor knihy).

3. IRI – Internationalized Resource Identifier (Mezinárodní identifikátor zdrojů)

IRI je nejnovější standard (definovaný v roce 2005) a je to přímé rozšíření URI.

  • Co to dělá: Řeší největší slabinu URI – omezení na anglickou abecedu (ASCII). IRI umožňuje v identifikátorech používat univerzální znakovou sadu Unicode (UTF-8).
  • Proč vzniklo: Web je globální. Lidé v Česku chtějí v adresách háčky a čárky, lidé v Řecku alfabetu, lidé v Číně rozsypaný čaj a Arabové arabské písmo. Abychom nemuseli adresy ošklivě kódovat do procentuálních řetězců (%C3%A1...), vzniklo IRI.
  • To, co vidíš v adresním řádku moderního prohlížeče (např. https://cs.wikipedia.org/wiki/Hlavní_strana), je IRI. Prohlížeč to teprve při posílání na síť potichu převede na URI (ASCII s procenty), protože staré internetové servery s Unicode neumí pracovat.
  • Příklad: https://cs.wikipedia.org/wiki/Hlavní_strana (obsahuje í a á), nebo arabské http://مثال.إختبار/.

Klíčové koncepty

  • Reprezentace dat formou grafu, který se skládá z jednoduchých tvrzení, známých jako trojice (triples).
  • Flexibilní reprezentace informací a jejich propojení (pro Semantic web a Linked Data)
  • Literály v RDF reprezentují konkrétní hodnoty jako řetězce nebo data.

RDF trojice

  • Subjekt - zdroj o kterém je tvrzení (uzel v grafu)

  • Predikát - vlastnost subjektu nebo typ vztahu mezi subjektem a objektem (orientovaná hrana). Rovněž zdroj s identifikátorem IRI (rozšíření URI s unicode znaky).

  • Objekt - jiný zdroj nebo literál, který reprezentuju hodnotu daného vztahu (uzel v grafu)

  • Například uzel "Praha" (subjekt) je spojen hranou "máPočetObyvatel" (predikát) s uzlem "1300000" (objekt).

../../Attachments/Pasted image 20260619195541.png

Zdroje

  • Zdroj může být cokoliv, co je relevantní popsat - fyzický objekt, dokument, osoba, abstraktní koncept atd.
  • Každý zdroj je reprezentován globálně unikátním IRI (Zobecnění URI s unicode).
  • Např. IRI <http://dbpedia.org/resource/Prague> identifikuje zdroj reprezentující město Praha v rámci projektu DBpedia.

Vlastnosti

  • Vlastnosti definují charakteristiky zdrojů nebo typy vztahů mezi nimi.
  • Také zdroje a jsou identifikovány pomocí IRI.
  • Například: foaf:name (jméno osoby z ontologie FOAF - Friend of a Friend) nebo dcterms:creator (Tvůrce dokumentů z Dublic Core Terms)

Literály

  • Jsou to datové hodnoty, které nejsou IRI.

  • Mohou být

    • prosté (plain literals, např. "123"),
    • s jazykovou značkou (např. "Prague"@en)
    • nebo typované pomocí datového typu (např. "2024-05-15"^^xsd:date) (datové typy nejčastěji pocházejí z XML Schema)

Anonymní uzly (Blank Nodes)

  • Reprezentují zdroje bez explicitního IRI.

  • Jsou užitečné, když chceme tvrdit existenci nějakého zdroje a popsat jeho vlastnosti, aniž bychom mu museli přidělit globální identifikátor.

  • Například, pokud chceme popsat adresu osoby jako strukturovanou entitu (ulice, město, PSČ), ale tato adresa sama o sobě nepotřebuje být globálně identifikovatelná, můžeme ji reprezentovat jako anonymní uzel.

  • Umožňují vytvářet komplexní struktury bez nutnosti "zašpinit" globální jmenný prostor množstvím IRI pro podružné entity.

  • Často je značíme podtržítkem, například adresu jako _:a1 (N-Triples) nebo do hranatých závorek (Turtle)

../../Attachments/Pasted image 20260619195521.png

RDF graf

Sada RDF trojic tvoří orientovaný graf s pojmenovanými hranami

../../Attachments/Pasted image 20260619195113.png

Serializace RDF

  • Serializace je způsob, jak grafovou strukturu RDF zapsat do textového souboru pro přenos nebo uložení. Otázka vyžaduje znalost dvou konkrétních formátů:
  • Představme si modelový příklad: Jan Novák (identifikovaný jako ex:jan) má jméno "Jan" a zná Petra Horáka (ex:petr).

N-Triples

Jedná se o nejjednodušší, velmi rigidní formát.

  • Každá trojice je zapsána na jednom samostatném řádku.

  • Všechna IRI musí být zapsána v plném tvaru v lomených závorkách < >.

  • Řádek vždy končí tečkou .

  • Literály v uvozovkách " "

  • Anonymní uzly jsou reprezentovány pomocí syntaxe _:label, kde label je lokální identifikátor anonymního uzlu v rámci dokumentu.

  • Výhoda: Extrémně snadné a rychlé parsování strojem.

  • Nevýhoda: Soubory jsou obrovské a pro člověka téměř nečitelné kvůli neustálému opakování plných IRI.

Ukázky v N-Triples:

<http://example.org/jan> <http://xmlns.com/foaf/0.1/name> "Jan" .
<http://example.org/jan> <http://xmlns.com/foaf/0.1/knows> <http://example.org/petr> .
<http://example.org/jan> <http://xmlns.com/foaf/0.1/name> "Jan Novák"@cs.
<http://example.org/jan> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>.
<http://example.org/jan> <http://xmlns.com/foaf/0.1/knows> _:b1.
_:b1 <http://xmlns.com/foaf/0.1/name> "Petra Svobodová".
_:b1 <http://xmlns.com/foaf/0.1/mbox> <mailto:[email protected]>.
<http://example.org/jan> <http://example.org/ontology#age> "42"^^<http://www.w3.org/2001/XMLSchema#integer>.

RDF-Turtle

Turtle je dnes nejpopulárnější textový formát pro RDF. Přináší "syntaktický cukr", který odstraňuje upovídanost N-Triples.
Snadnější čtení a psaní RDF lidmi a je plně kompatibilní s N-Triples.

Klíčové vlastnosti a zkratky:

  1. Prefixy (@prefix, @base): Umožňují definovat zkratky pro dlouhá IRI. Místo <http://example.org/jan> pak píšeme ex:jan. @base <IRI_reference>. definuje základní IRI, vůči kterému se vyhodnocují relativní IRI v dokumentu.
  2. Středníková zkratka (;): Pokud sdílí více trojic stejný subjekt, nemusíme ho opakovat. Oddělíme predikáty středníkem.
  3. Čárková zkratka (,): Pokud sdílí více trojic stejný subjekt i predikát, objekty oddělíme čárkou, např. ex:jan foaf:nick "Jenda", "Honza".
  4. Zkratka pro anonymní uzly []: Umožňuje zapsat vlastnosti anonymního uzlu přímo do hranatých závorek bez vymýšlení identifikátoru _:b1.
  5. Zkratka a: Klíčové slovo a nahrazuje predikát rdf:type (definice třídy/typu objektu).
  6. Datové typy literálů: Turtle podporuje stejný zápis literálů jako N-Triples, ale navíc umožňuje zkratky pro některé běžné XSD datové typy.
    • Celá čísla (např. 42) jsou automaticky interpretována jako xsd:integer
    • Desetinná čísla (např. 3.14) jako xsd:decimal
    • Hodnoty true a false jako xsd:boolean.
  7. Kolekce ( ): Zkrácená syntaxe pro RDF kolekce (uspořádané seznamy)
    • Prázdný seznam se zapisuje jako (), což je ekvivalent rdf:nil
    • ex:nakup ex:polozky ( ex:mleko ex:chleb ex:maslo ).

Stejná ukázka v RDF-Turtle:

@prefix ex:   <http://example.org/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

# Použití středníku pro opakující se subjekt ex:jan
ex:jan foaf:name "Jan" ;
       foaf:knows ex:petr .

SPARQL - Dotazování nad RDF

  • Deklarativní dotazovací jazyk pro RDF grafy (analogie k SQL v relačních databázích).

  • Princip: Graph Pattern Matching

    • Dotaz definuje šablonu grafu, která obsahuje proměnné (proměnné začínají znakem ?)
    • SPARQL stroj se pak pokusí tuto šablonu "přiložit" na reálný RDF graf a najít všechny kombinace uzlů, které šabloně odpovídají.
  • SPARQL endpoint (web HTTP služba), která přijímá SPARQL dotazy, vykonává je nad RDF databází (nazývány triplestore/RDF store) a vrací výsledky v požadovaném formátu (napr. XML, JSON, CSV, TSV).

Struktura dotazu

Typický SPARQL dotaz se skládá z několika klauzulí:

  1. PREFIX: Definice jmenných prostorů (stejně jako v Turtle), aby dotaz nebyl upovídaný.
  2. SELECT: Určuje, které proměnné se mají objevit ve výsledné tabulce.
  3. WHERE: Obsahuje samotný grafový vzor (množinu trojic s proměnnými), který se v datech hledá.
    1. OPTIONAL: Definuje část grafového vzoru, která v datech může, ale nemusí být
    2. UNION: Umožňuje vyhledat alternativní grafové vzory (logické OR).
    3. FILTER: Omezuje výsledky na základě logické podmínky
  4. CONSTRUCT: Sestrojení grafu, vytvoření vztahů
  5. ASK: Vrací true/false, pokud vzor grafu ve WHERE najde shodu
  6. DESCRIBE: Vrací RDF graf, který popisuje zdroje.
  7. Modifikátory řešení: Např. ORDER BY, LIMIT, OFFSET.

PREFIX

  • Podobně jako v Turtle, direktiva PREFIX umožňuje definovat zkratky (prefixy) pro dlouhé IRI.
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT

  • Pokud je použita, specifikuje, které proměnné (jejichž názvy začínají otazníkem ? nebo znakem dolaru $) mají být zahrnuty ve výsledné tabulce.
  • SELECT * vrátí všechny proměnné definované v klauzuli WHERE
SELECT ?jmenoOsoby ?vekOsoby

WHERE

  • Obsahuje tzv. vzor grafu (graph pattern), který se má porovnat s daty v RDF úložišti.

  • Vzor grafu se skládá z jedné nebo více triple patterns, které jsou syntakticky podobné RDF trojicím, ale mohou obsahovat proměnné na pozici subjektu, predikátu a/nebo objektu.

  • Příklad trojicového vzoru: ?osoba foaf:name?jmenoOsoby.

WHERE {
 ?osoba rdf:type foaf:Person.
 ?osoba foaf:name?jmenoOsoby.
 ?osoba foaf:age?vekOsoby.
}

Vrací zdroje pro které platí, že mají vztah rdf:type se zdrojem foaf:Person a mají specifikované foaf:name jméno a foaf:age věk.

OPTIONAL

  • Klauzule umožňuje specifikovat části vzoru grafu, které jsou volitelné
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?email
WHERE {
  ?person foaf:name ?name.
  OPTIONAL {?person foaf:mbox ?email. }
}

UNION

  • Klauzule UNION spojuje výsledky dvou nebo více alternativních vzorů grafu.
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT?label
WHERE {
  {?thing skos:prefLabel ?label. }
  UNION
  {?thing rdfs:label ?label. }
}

FILTER

  • Klauzule FILTER omezuje sadu řešení na základě vyhodnocení logické podmínky.
  • Podmínka se aplikuje na každé potenciální řešení (kombinaci navázaných proměnných) a pouze ta řešení, pro která je podmínka vyhodnocena jako pravdivá, jsou zahrnuta do konečného výsledku.
  • Podmínky mohou zahrnovat aritmetické operace, porovnávání řetězců a čísel, testování existence navázané proměnné (BOUND(?var)), testování typu termu (isIRI(?var), isLiteral(?var), isBlank(?var)), funkce pro práci s řetězci (např. REGEX(?text,?pattern) pro regulární výrazy, CONTAINS(?text,?substring)), a další.
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/ontology#>
SELECT ?name ?age
WHERE {
  ?person foaf:name ?name.
  ?person ex:age ?age.
  FILTER(?age > 30)
}

CONSTRUCT

  • Tato forma dotazu vrací nový RDF graf.

  • Graf je sestrojen na základě šablony (template) definované v CONSTRUCT bloku.

  • Šablona obsahuje trojicové vzory, kde proměnné jsou nahrazeny hodnotami navázanými v WHERE klauzuli.

  • CONSTRUCT je užitečný pro transformaci RDF dat, extrakci specifických podgrafů nebo generování RDF dat v jiném schématu/slovníku.

PREFIX ex: <http://example.org/ontology#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
CONSTRUCT {
 ?person1 foaf:knows?person2.
 ?person2 foaf:knows?person1.  # Symetrický vztah
}
WHERE {
 ?person1 ex:colleagueOf?person2.
}

Vytvoření foaf:knows vztahů na základě existujících dat.

ASK

  • Tato forma dotazu vrací jednoduchou booleovskou hodnotu (true nebo false).
  • true je vráceno, pokud vzor grafu v WHERE klauzuli najde alespoň jednu shodu v datech; jinak je vráceno false.
  • ASK dotazy jsou užitečné pro ověření existence určitých dat nebo podmínek.
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
ASK WHERE {
 ?person foaf:name "Jan Novák"@cs.
}

Existuje v databázi osoba jménem "Jan Novák"?

DESCRIBE

  • Tato forma dotazu vrací RDF graf, který popisuje zdroje identifikované pomocí IRI nebo proměnných uvedených za klíčovým slovem DESCRIBE.
  • Přesný obsah a rozsah vráceného grafu (tj. jak "hluboko" a jaké související informace jsou zahrnuty) není striktně definován standardem SPARQL a může se lišit mezi jednotlivými implementacemi triplestore.
  • Cílem je poskytnout "užitečný" popis daného zdroje.
DESCRIBE <http://example.org/jan>

Vytvořeno: 18. 6. 2026, 16:35
Poslední aktualizace: 19. 6. 2026, 22:08