Wikidata:SPARQL query service/Building a query/Buildings in Polish city
English: This is a short, annotated guide on how to build a simple SPARQL query. Queries below are universal, but the explanation will be in Polish, as this is intended for Polish viewers. For a similar example in English see: Wikidata:SPARQL query service/Building a query/Museums on Instagram.
Polski: To jest krótki samouczek z informacją, jak budować zapytania do Wikidanych. Niestety zapytania w SPARQL mają dosyć specyficzną składnię, ale można budować własne zapytania na przykładach. Mam nadzieję, że poniższy przykład, a właściwie przykłady Ci w tym pomogą. Zauważ, że nie musisz rozumieć wszystkie. Śmiało wypróbuj przykłady i stwórz własne zapytania.
Krok 1 : Lista linkujących do Iławy (prosta lista)[edit]
Zacznijmy od listy elementów linkujących do Iławy (Iława (Q8194)). Najłatwiej będzie zacząć od czegoś, o czym wiemy, że jest w Iławie. Weźmy np. Q83606280. We właściwościach widać tam located in the administrative territorial entity (P131) z przypisanym Iława (Q8194).
- Try it!
# wyświetlamy element czyli numer Q z linkiem SELECT ?item WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . }
No i OK. Mamy coś w rodzaju linkujących. Konkretnie mamy wszystko, co znajduje się w jednostce administracyjnej Iława.
- Hint
- Zauważ, że komentarze są poprzedzone "#". To znaczy, że po "#" możesz napisać cokolwiek i nie będzie to powodować błędów.
Krok 2 : Etykiety po polsku[edit]
Dostaliśmy listę Q, ale nie jest to zbyt czytelne. Przyda się etykieta i może od razu opis.
- Try it!
# wyświetlamy element, etykietę i opis SELECT ?item ?itemLabel ?itemDescription WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . }
Dodaliśmy etykietę (itemLabel) i opis (itemDescription), ale są one puste. Dlaczego? Bo nie powiedzieliśmy, w jakim języku chcemy dane. Wikidane są wielojęzyczne.
- Try it!
# wyświetlamy element, etykietę i opis SELECT ?item ?itemLabel ?itemDescription WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } }
Super! Teraz wszystko jest czytelne w wynikach 🙂.
- Hint
- Dobrze jest nie wpisywać tego ręcznie. Wypróbuj to zapytanie i dostosuj do swoich potrzeb.
Krok 3 : Budynki w Iławie (dodatkowe warunki)[edit]
Dobrze. Otrzymaliśmy listę wszystkiego, co jest w Iławie. Ale jak ją przefiltrować?
Filtrować można dodając kolejne warunki. Kolejne warunki dodajemy podobnie jak pierwszy. Czyli ?item wdt:<właściwość> wd:<wartość> .
(pamiętaj o kropce na końcu).
Dodajmy warunek z numerem właściwości: instance of (P31) oraz wartością: building (Q41176).
- Try it!
# wyświetlamy element, etykietę i opis SELECT ?item ?itemLabel ?itemDescription WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # wszystko co ma klasę (jest to=p31) budynku (Q41176) ?item wdt:P31 wd:Q41176 . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } }
No i działa. Prawie... Zniknęło nam z listy Q83606280. Zajmiemy się tym w następnym kroku.
- Hint
- Klasy i podklasy w Wikidanych działają prawie tak samo jako kategorie na Wikipedii. To znaczy jeśli coś jest "centrum kultury", to jest tak jakby w kategorii wszystkich centrów kultury. Jednocześnie klasa cultural center (Q1329623) ma podklasę building (Q41176). Taka hierarchia.
Krok 4 : Więcej budynków w Iławie (rozszerzanie warunków)[edit]
W naszym przypadku cultural center (Q1329623) ma podklasę building (Q41176). Czyli chcemy wylistować wszystko, co jest lub jest podklasą budynku. Zapisuje się to z ukośnikiem.
- Try it!
# wyświetlamy element, etykietę i opis SELECT ?item ?itemLabel ?itemDescription WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # wszystko co ma klasę (jest to=p31) lub podklasę (P279) budynku (Q41176) ?item wdt:P31/wdt:P279 wd:Q41176 . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } }
Niby mamy już Q83606280, ale co z ratuszem (Town hall of Iława (Q9304400)). Czy ratusz nie jest budynkiem? 🤷♀️... Ale nie martw się, został już tylko ostatni krok i znajdziemy wszystko 🙂.
Krok 5 : Wszystkie budynki w Iławie (szukanie w głąb)[edit]
A zatem Town hall of Iława (Q9304400) jest to rathaus (Q543654), ale klasa rathaus (Q543654) nie jest bezpośrednio podklasą budynków. Gdzieś tam jednak od ratusza dojdziemy w końcu do klasy: public building (Q294422). I ta klasa jest podklasą budynku.
Zanim jednak zaczniesz panikować -- nie, nie musisz znać całej hierarchii. Język zapytań Wikidanych umożliwia przeszukanie całej hierarchii z użyciem "*" przy właściwości subclass of (P279).
- Try it!
# wyświetlamy element, etykietę i opis SELECT ?item ?itemLabel ?itemDescription WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # wszystko co ma klasę (jest to=p31) lub dowolnie głęboko podklasę (P279) budynku (Q41176) ?item wdt:P31/wdt:P279* wd:Q41176 . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } }
Bonus 1: Współrzędne geograficzne (dodatkowe właściwości)[edit]
Zasadniczo mamy już pełną listę, ale może chcesz mieć dodatkowe właściwości. Budynki powinny mieć jakąś lokalizację (coordinate location (P625)). Możemy o nią zapytać i wyświetlić ją w tabelce.
- Try it!
# wyświetlamy element, etykietę, opis i współrzędne SELECT ?item ?itemLabel ?itemDescription ?coordinates WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # wszystko co ma klasę (jest to=p31) lub dowolnie głęboko podklasę (P279) budynku ?item wdt:P31/wdt:P279* wd:Q41176 . # dodaj kryterium współrzędnych ?item wdt:P625 ?coordinates . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } }
Bonus 2: Mapa budynków w Iławie (zmiana widoku)[edit]
Mamy współrzędne, to może da się wyświetlić mapę? Da się! Można zmienić widok z tabelki na mapę ręcznie (nad tabelką).
Ale można też wymusić, żeby mapa była domyślnym widokiem dopisując magiczny komentarz #defaultView:Map
.
- Try it!
#defaultView:Map # wyświetlamy element, etykietę, opis i współrzędne SELECT ?item ?itemLabel ?itemDescription ?coordinates WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # wszystko co ma klasę (jest to=p31) lub dowolnie głęboko podklasę (P279) budynku ?item wdt:P31/wdt:P279* wd:Q41176 . # dodaj kryterium współrzędnych ?item wdt:P625 ?coordinates . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } }
- Hint
- Formalnie zamiast "?coordinates" mogliśmy wpisać "?kopytko" (na liście kolumn i w kryterium). Problem jedynie w tym, że żeby działał widok mapy, to musimy użyć nazwy "?coordinates". W widoku tabeli można używać dowolnych nazw.
Bonus 3: Budynki w Iławie bez współrzędnych (bez właściwości)[edit]
Wszystko fajnie, ale jak sprawdzić, które budynki nie mają współrzędnych?
Nie ma problemu! Użyjemy FILTER NOT EXISTS
.
- Try it!
# wyświetlamy element, etykietę i opis SELECT ?item ?itemLabel ?itemDescription WHERE { # P131 -- znajduje się w jednostce administracyjnej # Q8194 -- Iława ?item wdt:P131 wd:Q8194 . # wszystko co ma klasę (jest to=p31) lub dwolnie głęboko podklasę (P279) budynku ?item wdt:P31/wdt:P279* wd:Q41176 . # umożliwia wyświetlanie etykiety i innych danych w języku polskim (?itemLabel) SERVICE wikibase:label { bd:serviceParam wikibase:language "pl". } # bez wpisanej właściwości współrzędne geograficzne (P625) FILTER NOT EXISTS { ?item wdt:P625 ?coordinates . } }
Dodatkowe informacje (hints)[edit]
- Pod każdym przykładem jest link, w którym jest to zapytanie. Nie musisz go kopiować.
- Możesz swobodnie zmieniać zapytania. Zmieniasz tylko to, co widzisz (nie zmieniasz przykładów). Śmiało eksperymentuj 👩🏫🧪.
- Proste zapytania możesz budować kreatorem -- naciśnij (i) w pasku narzędziowym obok zapytania (przycisk "Show query explantion", otwiera panel "Pomocnik zapytania").
- Możesz zapisać sobie link do swojego zapytania -- skopiuj URL z paska adresowego lub uzyskaj skróconą wersję z lewej strony.
- Wykonując zapytanie zawsze dostajesz świeże dane. Link zawiera tylko zapytanie, a nie jego wyniki.