Найдите, какое прямое свойство применяется в запросе SPARQL - PullRequest
0 голосов
/ 29 июня 2018

У меня есть список свойств, которые я хочу применить к определенной сущности 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)
}

Как я могу узнать, какое свойство применяется для заполнения нужного столбца? (например, рядом с учебной дисциплиной я хотел бы, чтобы оно появилось в качестве примера) enter image description here

Я попробовал это, но это выглядит странно, и результаты повторяются.

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". }
}

enter image description here

1 Ответ

0 голосов
/ 29 июня 2018

Использование 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". }
}

Попробуйте!

...