Wikidata SPARQL: получить подклассы, но также вернуть родительский класс - PullRequest
0 голосов
/ 09 июля 2020

Я пишу запросы SPARQL для сущностей Викиданных, и я хотел бы получить все сущности, соответствующие "это объект Q3 ИЛИ один из его подклассов". query:

SELECT DISTINCT ?item
WHERE {
{ ?item wdt:P279 wd:Q3 . }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

Но я бы также хотел, чтобы в ответе была исходная родительская сущность (здесь Q3). Как мне изменить свой запрос, чтобы также возвращалось Q3?

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Я сам нашел решение: мне нужно было добавить ? (что означает «0 или 1») после свойства в моем запросе.

Таким образом, получается:

SELECT DISTINCT ?item
WHERE {
{ ?item wdt:P279? wd:Q3 . } # here is the extra "?" after "wdt:P279"
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

И теперь это правильно возвращает Q3 И все его подклассы.

1 голос
/ 09 июля 2020

Чтобы получить объекты, соответствующие чему-либо, вам нужно будет использовать wdt: P31, то есть «экземпляр». wdt: P279 - это «подкласс»

С точки зрения вашего запроса, я бы использовал что-то вроде этого:

SELECT DISTINCT ?itemLabel ?superClassLabel
WHERE {
 ?item wdt:P31/wdt:P279* ?superClass 
    VALUES ?superClass {wd:Q3}

SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
...