Wikipedista:Pastorius/Jemný úvod do SPARQL

Nikdy nemůžete rozumět všemu, přesto byste se měli snažit porozumět principům.

SPARQL je programovací jazyk pro vytváření dotazů nad grafovými databázemi. Je to sada příkazů, která umožňuje najít přesně ty informace, které potřebujete. Pokud se naučíte základy SPARQL, budete moci vytvářet mocné vyhledávací příkazy ve wikidatech (a nejen v nich).

Grafová databáze

editovat
 

Graf je datová struktura skládající se z vrcholů a hran.




 

Grafové databáze jsou založeny na teorii grafů a používají uzly, hrany a vlastnosti.

Uzly reprezentují entity, jako jsou lidé, firmy, účty nebo jiná položky, která má být sledovány. Jsou zhruba ekvivalentní záznamu, vztahu nebo řádku v relační databázi nebo dokumentu v databázi dokumentů.

Hrany jsou čáry, které spojují uzly s jinými uzly; představují vztah mezi nimi. Hrany jsou klíčovým pojmem v grafových databázích. Představují abstrakci, která není v jiných systémech přímo implementována.

Vlastnosti jsou informace o uzlech. Například pokud by Wikipedia byla jedním z uzlů, mohl by to být spojen s vlastnostmi, jako jsou webové stránky, referenční materiály nebo slova, která začíná písmenem w.

Hlavní myšlenkou RDF je k popisovanému zdroji přiřadit výraz ve tvaru podmět – vlastnost – předmět (též subjekt – predikát – objekt). Pro tento výraz se také používá termín trojice.

Jinak řečeno RDF popisuje zdroj, ten má nějaké vlastnosti a tyto vlastnosti mají odpovídající hodnoty. Přičemž podmět definuje, o jaký zdroj se jedná, vlastnost určuje jeho charakter a zároveň vyjadřuje vzájemný vztah mezi podmětem a předmětem.

Konkrétní příklad lze ukázat například na výroku: Obloha má modrou barvu. Po rozložení do trojice pak obloha je podmětem, má barvu vyjadřuje vlastnost a modrou vyjadřuje předmět. V grafické podobě RDF grafu by pak vlastnosti byly jeho hrany, které by byly orientovány od podmětu k předmětu, a ty by tvořily jeho vrcholy.

Wikidata

editovat
 
  • property/hodnota wdt:P31 wd:Q5153359.
  • entita wd:P31 wd:Q5153359.
# 001 - prvni zamer
# 
# SELECT - jaka data chci

SELECT ?clanek

# podle jakych vlastnosti se vybira
WHERE
{
  clanek instace "obec v Česku"
}
# 002 - seznam měst v česku
# 
# SELECT - jaka data chci

SELECT ?clanek

# podle jakych vlastnosti se vybira
WHERE
{
  ?clanek wdt:P31 wd:Q15978299
}

Query

#003 - obec v Česku včetně názvu
SELECT ?misto ?mistoLabel 
WHERE 
{
  ?misto wdt:P31 wd:Q5153359
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}

Query

#003 - obec v Česku včetně názvu a souřadnic
SELECT ?misto ?mistoLabel ?souradnice 
WHERE {
  ?misto wdt:P31 wd:Q5153359.
  ?misto wdt:P625 ?souradnice
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
}
LIMIT 20

Query

#005 - obec v Česku včetně názvu a souřadnic
# a bez obrazku - jako mapa
#defaultView:Map

SELECT ?misto ?mistoLabel ?souradnice 
WHERE {
  ?misto wdt:P31 wd:Q5153359 .    # obec v Česku
  ?misto wdt:P625 ?souradnice .   # souřadnice
 MINUS {
    ?misto wdt:P18 ?obrazek .
 }
}

Query

#007 - obec v Česku včetně názvu a souřadnic
# a bez obrazku - jako mapa
#defaultView:Map

SELECT ?misto ?mistoLabel ?souradnice 
WHERE {
  ?misto wdt:P31 wd:Q5153359 .    # obec v Česku
  ?misto wdt:P625 ?souradnice .   # souřadnice
 MINUS {
    ?misto wdt:P18 ?obrazek .
 }
}

Query

#008 - obec v Česku včetně názvu a souřadnic
# a bez obrazku - jako mapa
#defaultView:Map

SELECT ?misto ?mistoLabel ?souradnice 
WHERE {
  ?misto wdt:P31 wd:Q5153359 .    # obec v Česku
  ?misto wdt:P625 ?souradnice .   # souřadnice
 MINUS {
    ?misto wdt:P18 ?obrazek .
 }
}
#009 - obec v Česku včetně názvu a souřadnic
# a bez obrazku - jako mapa
# filtrovani podle okresu
#defaultView:Map

SELECT ?misto ?mistoLabel ?souradnice 
WHERE {
  ?misto wdt:P31 wd:Q5153359 .    # obec v Česku
  ?misto wdt:P625 ?souradnice .   # souřadnice
  ?misto wdt:P131 wd:Q838338
  MINUS {
  ?misto wdt:P18 ?obrazek .
  }
}

Query

# 010 -# Mista bez obrazku ve vzdalenosti od 3km od Noveho mesta na Morave
# ktere nemaji obrazek
# nejsou ulici
#defaultView:Map


SELECT ?misto ?mistoLabel ?location ?instanceLabel ?dist
WHERE
{
  wd:Q986075 wdt:P625 ?loc .
  SERVICE wikibase:around {
      ?misto wdt:P625 ?location .
      bd:serviceParam wikibase:center ?loc .
      bd:serviceParam wikibase:radius "3" .
  }
  OPTIONAL { ?misto wdt:P31 ?instance  }
  BIND(geof:distance(?loc, ?location) as ?dist)
  MINUS {
    ?misto wdt:P18 ?image .
  }
  MINUS {
    ?misto wdt:P31 wd:Q79007
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "cs" }

} ORDER BY ?dist

Query

# Cast obce
# v Cesku
# bez obrazku
SELECT ?city ?cityLabel ?souradnice
  WHERE
  {
  ?city wdt:P31 wd:Q123705 .
  ?city wdt:P17 wd:Q213 .  
  ?city wdt:P625 ?souradnice .
  
  MINUS {
    ?city wdt:P18 ?obrazek
  }
    
 
    
   SERVICE wikibase:label {
   bd:serviceParam wikibase:language "cs" .
   }
  }

Query


Prefix

  • položky mají prefix wd:
  • property mají prefix wdt:
  • promenné prefix nemají

Poznámky

editovat

Automatické doplňování CTRL+SPACE

wd:CTRL+SPACE nabídne items
wdt:CTRL+SPACE nabídne property
?misto wdt:P31 wd:Q15284 .
?misto wdt:P625 ?souradnice .
?misto wdt:P734 "AAA".
 
 
 vyřazovací podmínka
 MINUS {
 ...
 }
 
 podminka nebo
 
 {
     podminka 1
 } UNION {
     podminka 2
 }
 
 
 nepoviny udaj datum narozeni do birthplacee
 OPTIONAL {
    ?item wdt: P19 ?birthplace
 }
 
 doplnujici podminka
 
 FILTER (YEAR(?dateofbirth) > 1950)
 
 
 
 
 
Omezeni poctu
 

LIMIT 20