Найдите, какое прямое свойство применяется в запросе SPARQL
У меня есть список свойств, которые я хочу применить к конкретной сущности mathematics: wd:Q395
. В этом случае:
instanceOf: 'wdt:P31'
subclassOf: 'wdt:P279'
Результаты таковы:
математика является примером академической дисциплины и Математика-это подкласс точных наук и формальных наук
Вместо того, чтобы делать два разных запроса, я хотел бы сделать их все сразу:
SELECT ?field ?fieldLabel ?propertyApplied
WHERE {
wd:Q395 wdt:P31 | wdt:P279 ?field.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
BIND("" AS ?propertyApplied)
}
Как узнать, какое свойство применяется для заполнения правой колонки? ( например, рядом с академической дисциплиной я бы вот так и появляется экземпляр)
Я пробовал это, но это выглядит странно, и результаты повторяются.
SELECT ?instanceOf ?subclassOf ?instanceOfLabel ?subclassOfLabel
WHERE {
OPTIONAL { wd:Q395 wdt:P31 ?instanceOf. }
OPTIONAL { wd:Q395 wdt:P279 ?subclassOf. }
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
1 ответ:
Использование
VALUES
илиUNION
:SELECT ?field ?fieldLabel ?propertyLabel WHERE { VALUES (?predicate) {(wdt:P31) (wdt:P279)} wd:Q395 ?predicate ?field . ?property wikibase:directClaim ?predicate . SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }
SELECT ?field ?fieldLabel ?propertyLabel { { wd:Q395 wdt:P31 ?field . BIND (wd:P31 AS ?property) } UNION { wd:Q395 wdt:P279 ?field . BIND (wd:P279 AS ?property) } SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }