Dotazovací jazyk RDF (SPARQL)
Simple Protocol and RDF Query Language (SPARQL) je jazyk podobný SQL určený pro dotazování nad daty RDF. K vyjádření grafů RDF v části dotazu určující shodu se používá syntaxe TURTLE.
Následuje příklad dotazu SELECT.
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?mbox
WHERE { ?x foaf:name ?name .
?x foaf:mbox ?mbox . }
První řádek definuje prefix jmenného prostoru, poslední dva řádky používají tento prefix k vyjádření grafu RDF, který má být nalezen. Identifikátory začínající otazníkem
? označují proměnné. V tomto dotazu hledáme zdroj
?x, který se účastní trojic s predikáty foaf:name
a foaf:mbox, a chceme subjekty těchto trojic. V části určující shodu lze používat syntaktické zkratky TURTLE.
Kromě určení grafu, který má být nalezen, lze přidávat i omezení na hodnoty pomocí konstruktu FILTER. Příkladem omezení na řetězcovou hodnotu je FILTER regex(?mbox, "company"), které specifikuje dotaz pomocí regulárního výrazu. Příkladem omezení na číselnou hodnotu je
FILTER (?price < 20), které stanoví, že ?price
musí být menší než 20. Pro konstrukt
FILTER je definováno několik speciálních operátorů. Patří mezi ně isIRI pro test, zda je proměnná IRI/URI, isLiteral pro test, zda je proměnná literál, bound pro test, zda byla proměnná navázána, a další - viz specifikace.
Část dotazu určující shodu může zahrnovat trojice
OPTIONAL. Je-li trojice volitelná, vyhodnotí se, když je přítomna, ale neshoda nenastane, pokud přítomna není. Volitelné části mohou být vnořené. Je možné vytvořit UNION více grafů určujících shodu - pokud se shoduje kterýkoli z grafů, vrátí se tato shoda jako výsledek. Část
FROM je volitelná a může určovat datovou sadu RDF, nad níž je dotaz prováděn.
Pořadí výsledků lze upravovat pomocí následujících klíčových slov s významem podobným SQL:
ORDER BY- řazení podle hodnoty proměnnéDISTINCT- pouze jedinečné výsledkyOFFSET- posun, od kterého se mají výsledky zobrazitLIMIT- maximální počet výsledků
Existují čtyři formy výsledků dotazu. Kromě možnosti získat seznam nalezených hodnot je také možné sestavit graf RDF nebo potvrdit, zda byla shoda nalezena, či nikoli.
SELECT- vrací seznam hodnot proměnných navázaných ve vzoru dotazuCONSTRUCT- vrací graf RDF sestavený dosazením proměnných do vzoru dotazuDESCRIBE- vrací graf RDF popisující nalezené zdrojeASK- vrací booleovskou hodnotu udávající, zda se vzor dotazu shoduje, nebo ne
Forma CONSTRUCT určuje graf, který má být vrácen, s proměnnými, které se dosadí ze vzoru dotazu, jako v následujícím příkladu. Ten vrátí graf říkající, že Alice zná poslední dvě osoby při seřazení podle abecedy ze zadaného URI (výsledek v grafu RDF není seřazený, protože jde o graf, a pořadí trojic tedy není důležité).
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
CONSTRUCT { <http://example.org/person#Alice> foaf:knows ?x }
FROM <http://example.org/foaf/people>
WHERE { ?x foaf:name ?name }
ORDER BY desc(?name)
LIMIT 2
Forma DESCRIBE vrací informace o nalezených zdrojích ve formě grafu RDF. Přesná podoba těchto informací zatím není standardizována, ale obvykle se očekává uzávěr přes prázdné uzly, například Concise Bounded
Description (CBD). Stručně řečeno se vracejí všechny trojice, které mají nalezený zdroj v objektu; pokud je v subjektu prázdný uzel, rekurzivně se přidávají i trojice, v nichž tento uzel vystupuje jako objekt.
Forma ASK je určena pro otázky typu ano/ne ohledně shody - nevrací se žádná informace o nalezených proměnných, výsledkem je pouze údaj o tom, zda shoda existuje, nebo ne.
Specifikace SPARQL je ve stavu pracovního návrhu (stav ke konci roku 2006), ale už je implementována v některých softwarových balících a zdá se, že se stane hlavním dotazovacím jazykem RDF pro sémantický web. K dispozici je i specifikace protokolu pro webovou službu SPARQL - SPARQL tak slouží také jako protokol pro přístup k datům RDF.