维基数据 SPARQL:有子 classes 但也有 return 父 class
Wikidata SPARQL : get subclasses but also return parent class
我在维基数据实体上编写 SPARQL 查询,我想获取所有匹配“是实体 Q3 或其子类之一”的实体。
我知道如何仅通过以下查询获取子类:
SELECT DISTINCT ?item
WHERE {
{ ?item wdt:P279 wd:Q3 . }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
但我还想在响应中包含原始父实体(此处 Q3
)。我应该如何修改我的查询以便 Q3
也返回?
为了获得匹配某物的实体,您将需要使用 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". }
}
我最终自己找到了解决方案:
我需要在查询中的 属性 之后添加一个 ?
(意思是“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". }
}
现在这个 returns Q3 及其所有子类。
我在维基数据实体上编写 SPARQL 查询,我想获取所有匹配“是实体 Q3 或其子类之一”的实体。
我知道如何仅通过以下查询获取子类:
SELECT DISTINCT ?item
WHERE {
{ ?item wdt:P279 wd:Q3 . }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
但我还想在响应中包含原始父实体(此处 Q3
)。我应该如何修改我的查询以便 Q3
也返回?
为了获得匹配某物的实体,您将需要使用 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". }
}
我最终自己找到了解决方案:
我需要在查询中的 属性 之后添加一个 ?
(意思是“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". }
}
现在这个 returns Q3 及其所有子类。