查找SPARQL查询中应用的直接属性

PMT*_*PMT 5 wikipedia sparql wikidata wikidata-api

我有一个我想要应用于特定实体的属性列表mathematics: wd:Q395.在这种情况下:

instanceOf: 'wdt:P31'
subclassOf: 'wdt:P279'
Run Code Online (Sandbox Code Playgroud)

结果是:

数学是学科的实例,数学是精确科学和形式科学的子类

我不想做两个不同的查询,而是一次性完成它们:

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)
}
Run Code Online (Sandbox Code Playgroud)

如何知道应用哪个属性填充右栏?(例如,在学术学科旁边,我希望它出现的例子) 在此输入图像描述

我试过这个,但看起来很奇怪,结果重复了一遍.

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". }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Sta*_*lin 5

使用VALUESUNION:

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". }
}
Run Code Online (Sandbox Code Playgroud)

试试吧!

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". }
}
Run Code Online (Sandbox Code Playgroud)

试试吧!