Ahoj, v tuto chvíli se mi nepodařilo najít žádné. On ten tvůj požadavek není moc dobře formulovaný, protože po mně chceš dotazovat se po údaji, který v datech chybí (abys ho doplnil).
Mluvíš o celcích, takže pokud bychom na to šli tak, že památka má uvedený nadřazený celek (located in the administrative territorial entity (P131)), o kterém víme, že je v Česku, vypadalo by to takto:
SELECT ?item WHERE {
?item wdt:P31/wdt:P279* wd:Q3370053 .
?item wdt:P131/wdt:P17 wd:Q213 .
FILTER NOT EXISTS { ?item wdt:P17 [] } .
Try it! }
Je víc možností, jak to zapsat:
- Místo
FILTER NOT EXISTS
jde i MINUS
, ale jejich performance se liší (pokud to chápu správně, tak MINUS je množinový rozdíl, zatímco NOT EXISTS se vykonává jako samostatné dotazy).
- Místo
wdt:P131
by šlo wdt:P131+
, ale tyhle rekurzivní dotazy jsou pomalejší a ta první úroveň obvykle stačí (předpokádám, že infrastrukturu ČR už máme na Wikidatech vyplněnou dobře).
- Místo
[]
by šlo wd:Q213
, protože takhle to vybírá položky bez jakéhokoliv státu. Ale případy, kdy je uvedený jiný stát než Česko, je lepší řešit manuálně.
Když pak máš výsledek, tak přijdou na řadu buď QS, nebo ten Pywikibot.
- QS
- je potřeba prostý text, kde řádky jsou ve formátu
QXXX\tP17\tQ213
(QXXX
je položka, co chci upravit, \t
je znak tabulátoru, jde i |
), a na každý řádek je jedna položka
- položky lze získat třeba tak, že si výsledek dotazu stáhnu jako TSV nebo zkopírováním tabulky do schránky, vložím ho do textového editoru (Notepad++/gedit) a pomocí najít a nahradit ho očistím, aby zůstaly jen prosté identifikátory (případně jde použít Excel/Calc)
- pak se to vloží do , pustí a je hotovo
- Pywikibot
- skript
claimit.py -file:"soubor.txt" P17 Q213 -exists:p
, kde soubor.txt
obsahuje výsledek toho "čištění", které se dělá pro QS
- skript
claimit.py -sparql:"SELECT ?item { ... }"
, ale dotaz se musí vložit bez zalomení, což je méně praktické a nepřehledné (na Linuxu nebo v nějakém lepším shellu by šlo něco jako $ cat | tr '\n' ' ' | python3 pwb.py claimit ...
)